mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-04 03:11:43 +00:00
Compare commits
77 Commits
jenkins-be
...
jenkins-re
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8801568325 | ||
|
|
6adf4c48cd | ||
|
|
026c427a2b | ||
|
|
63878d8ab7 | ||
|
|
83f902f2f6 | ||
|
|
f79ed1ab44 | ||
|
|
bf89762e82 | ||
|
|
bd1e091629 | ||
|
|
2662a7ab0d | ||
|
|
713d54fd2f | ||
|
|
75a07fc3e4 | ||
|
|
6b740e87b3 | ||
|
|
ac27f4b644 | ||
|
|
99b6000a65 | ||
|
|
628811ed03 | ||
|
|
c57e749a94 | ||
|
|
3350926d26 | ||
|
|
4dec393c2d | ||
|
|
0e9f07d1c2 | ||
|
|
5765b13976 | ||
|
|
2d43048807 | ||
|
|
e3ce991f18 | ||
|
|
3cd1253977 | ||
|
|
008fb2e382 | ||
|
|
887f220fe7 | ||
|
|
dd19778152 | ||
|
|
7a2be548a7 | ||
|
|
5f93009661 | ||
|
|
d77f5c8019 | ||
|
|
6faa51ff48 | ||
|
|
ce2245110b | ||
|
|
dfba97a540 | ||
|
|
99b2b65148 | ||
|
|
5976baec02 | ||
|
|
932ec8e302 | ||
|
|
1c6fe85a7b | ||
|
|
e15ca5a414 | ||
|
|
70bc630f1f | ||
|
|
6c89f34e44 | ||
|
|
d542fe4293 | ||
|
|
351e8599ac | ||
|
|
31a39b4e59 | ||
|
|
e2ec34090a | ||
|
|
063925e737 | ||
|
|
de4708cbdb | ||
|
|
8bbc1d43bb | ||
|
|
c01146eb02 | ||
|
|
3e71573c51 | ||
|
|
5bc6e1378c | ||
|
|
5cee85f921 | ||
|
|
951c81f5b7 | ||
|
|
75d1891a57 | ||
|
|
376fc6be6f | ||
|
|
91a451f87a | ||
|
|
b0de0b7386 | ||
|
|
5dc5ed83b3 | ||
|
|
fe01096e7a | ||
|
|
acc7fbbf01 | ||
|
|
416a238bed | ||
|
|
3d2b54a1c0 | ||
|
|
ae99eb6761 | ||
|
|
e2fb1c6d46 | ||
|
|
4881795a92 | ||
|
|
17b363f3b4 | ||
|
|
85c3e6a4fd | ||
|
|
2c04cf135b | ||
|
|
dbba4a1036 | ||
|
|
083c90d377 | ||
|
|
729545809e | ||
|
|
842aba97b8 | ||
|
|
d3f4400035 | ||
|
|
20749ed6e9 | ||
|
|
684da8d89f | ||
|
|
13496c75b4 | ||
|
|
d69803804f | ||
|
|
0d062fba3a | ||
|
|
fa903dd9ce |
6
.gitignore
vendored
6
.gitignore
vendored
@@ -175,3 +175,9 @@ __pycache__
|
||||
|
||||
#catkin stuff
|
||||
package.xml
|
||||
|
||||
# Doxygen stuff
|
||||
NO
|
||||
|
||||
# Simulation folder stuff
|
||||
!simulation/install_resources/*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
* Copyright (c) 2009 FIRST
|
||||
* Copyright (c) 2009-2016 FIRST
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -5,27 +5,9 @@ include(CheckCXXCompilerFlag)
|
||||
include (FindPkgConfig)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
#copied from GazeboUtils.cmake
|
||||
macro (APPEND_TO_CACHED_STRING _string _cacheDesc)
|
||||
FOREACH (newItem ${ARGN})
|
||||
SET (${_string} "${${_string}} ${newItem}" CACHE INTERNAL ${_cacheDesc} FORCE)
|
||||
ENDFOREACH (newItem ${ARGN})
|
||||
endmacro (APPEND_TO_CACHED_STRING)
|
||||
|
||||
#check for depenedencies
|
||||
find_package(gazebo REQUIRED)
|
||||
find_package(Boost COMPONENTS system filesystem REQUIRED)
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
if (NOT PROTOBUF_FOUND)
|
||||
MESSAGE ("Missing: Google Protobuf (libprotobuf-dev)")
|
||||
endif()
|
||||
if (NOT PROTOBUF_PROTOC_EXECUTABLE)
|
||||
MESSAGE ( "Missing: Google Protobuf Compiler (protobuf-compiler)")
|
||||
endif()
|
||||
if (NOT PROTOBUF_PROTOC_LIBRARY)
|
||||
MESSAGE ("Missing: Google Protobuf Compiler Library (libprotoc-dev)")
|
||||
endif()
|
||||
|
||||
#on windows we produce .dlls with no prefix
|
||||
if(WIN32)
|
||||
@@ -48,12 +30,10 @@ endif()
|
||||
if (MSVC)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFRC_SIMULATOR /MDd /Zi")
|
||||
else ()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y -DFRC_SIMULATOR -Wno-unused-parameter -pthread -fPIC -fpermissive")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++1y -DFRC_SIMULATOR -Wno-unused-parameter -pthread -fPIC -fpermissive")
|
||||
endif()
|
||||
|
||||
|
||||
include_directories("build")
|
||||
add_subdirectory(simulation/gz_msgs)
|
||||
add_subdirectory(wpilibc/simulation)
|
||||
add_subdirectory(simulation/frc_gazebo_plugins)
|
||||
add_subdirectory(ntcore)
|
||||
|
||||
29
README.md
29
README.md
@@ -22,6 +22,24 @@ To build a specific subproject, such as wpilibc, you must access the subproject
|
||||
./gradlew :wpilibc:build
|
||||
```
|
||||
|
||||
If you also want simulation to be build, add -PmakeSim. This requires gazebo_transport. We have tested on 14.04 and 15.05, but any correct install of gazebo should work, even on windows if you build from source. Correct means cmake needs to be able to find gazebo-config.cmake, which you get for free with ubuntu installs.
|
||||
|
||||
```bash
|
||||
./gradlew build -PmakeSim
|
||||
```
|
||||
|
||||
C++ simulation tasks (including plugins, gz_msgs, and wpilibcSim) all depend on gazebo_transport. In order for this to build you must have installed gazebo. See [The Gazebo website](https://gazebosim.org/) for installation instructions.
|
||||
If you prefer to use CMake directly, the you can still do so.
|
||||
The common cmake tasks are wpilibcSim, frc_gazebo_plugins, and gz_msgs
|
||||
|
||||
```bash
|
||||
mkdir build #run this in the root of allwpilib
|
||||
cd build
|
||||
cmake ..
|
||||
make
|
||||
```
|
||||
|
||||
|
||||
The gradlew wrapper only exists in the root of the main project, so be sure to run all commands from there. All of the subprojects have build tasks that can be run. Gradle automatically determines and rebuilds dependencies, so if you make a change to the HAL and then run `:wpilibc:build`, the HAL will be rebuilt, then wpilibc.
|
||||
|
||||
There are a few tasks other than `build` available. To see them, run the meta-task `tasks`. This will print a list of all available tasks, with a description of each task.
|
||||
@@ -42,3 +60,14 @@ The following maven targets a published by this task:
|
||||
- edu.wpi.first.wpilibj:wpilibJavaSim:0.1.0-SNAPSHOT - Simulation Java
|
||||
- edu.wpi.first.wpilibj.simulation:SimDS:0.1.0-SNAPSHOT - The driverstation for controlling simulation.
|
||||
- org.gazebosim:JavaGazebo:0.1.0-SNAPSHOT - Gazebo protocol for Java.
|
||||
|
||||
## Structure and Organization
|
||||
The main wpilib code you're probably looking for is in wpilibj and wpilibc. Those directories are split into shared, sim, and athena. Athena contains the wpilib code meant to run on your RoboRIO. Sim is wpilib code meant to run on your computer with gazebo, and shared is code shared between the two. Shared code must be platform-independent, since it will be compiled with both the ARM cross-compiler and whatever desktop compiler you are using (g++, msvc, etc...).
|
||||
|
||||
The Simulation directory contains extra simulation tools and libraries, such as gz_msgs and JavaGazebo. See sub-directories for more information.
|
||||
|
||||
The integration test directories for C++ and Java contain test code that runs on our test-system. When you submit code for review, it is tested by those programs. If you add new functionality you should make sure to write tests for it so we don't break it in the future.
|
||||
|
||||
The hal directory contains more C++ code meant to run on the RoboRIO. HAL is an acronym for "Hardware Abstraction Layer", and it interfaces with the NI Libraries. The NI Libraries contain the low-level code for controlling devices on your robot. The NI Libraries are found in the ni-libraries folder.
|
||||
|
||||
The styleguide directory contains the styleguide for C++ and Java code. Anything submitted to the wpilib project needs to follow the code style guides outlined in there.
|
||||
@@ -7,6 +7,8 @@ if (!hasProperty('repo')) {
|
||||
def repoBaseUrl = "http://first.wpi.edu/FRC/roborio/maven/${repo}"
|
||||
def publishUrl = "${System.getProperty('user.home')}/releases/maven/${repo}"
|
||||
|
||||
ext.simulationInstallDir = "$rootDir/build/install/simulation"
|
||||
|
||||
allprojects {
|
||||
ext.enableSimulation = enableSimulation
|
||||
ext.repo = repo
|
||||
@@ -43,4 +45,4 @@ subprojects {
|
||||
}
|
||||
}
|
||||
|
||||
apply from: 'cppSettings.gradle'
|
||||
apply from: 'cppSettings.gradle'
|
||||
|
||||
@@ -19,11 +19,20 @@ niLibraryTree.each { lib ->
|
||||
}
|
||||
}
|
||||
|
||||
def ntDependency =
|
||||
def armNtDependency =
|
||||
project.dependencies.create("edu.wpi.first.wpilib.networktables.cpp:NetworkTables:3.0.0-SNAPSHOT:arm@zip")
|
||||
def config = project.configurations.detachedConfiguration(ntDependency)
|
||||
config.setTransitive(false)
|
||||
def netTables = config.files[0].canonicalFile
|
||||
def armConfig = project.configurations.detachedConfiguration(armNtDependency)
|
||||
armConfig.setTransitive(false)
|
||||
def armNetTables = armConfig.files[0].canonicalFile
|
||||
|
||||
def desktopNetTables
|
||||
if (project.hasProperty('makeSim')){
|
||||
def desktopNtDependency =
|
||||
project.dependencies.create("edu.wpi.first.wpilib.networktables.cpp:NetworkTables:3.0.0-SNAPSHOT:desktop@zip")
|
||||
def desktopConfig = project.configurations.detachedConfiguration(desktopNtDependency)
|
||||
desktopConfig.setTransitive(false)
|
||||
desktopNetTables = desktopConfig.files[0].canonicalFile
|
||||
}
|
||||
|
||||
def netTablesUnzipLocation = "$buildDir/networktables"
|
||||
|
||||
@@ -31,7 +40,10 @@ def netTablesUnzipLocation = "$buildDir/networktables"
|
||||
task unzipNetworkTables(type: Copy) {
|
||||
description = 'Unzips the networktables maven dependency so that the include files and libraries can be used'
|
||||
group = 'WPILib'
|
||||
from zipTree(netTables)
|
||||
if (project.hasProperty('makeSim')){
|
||||
from zipTree(desktopNetTables)
|
||||
}
|
||||
from zipTree(armNetTables)
|
||||
into netTablesUnzipLocation
|
||||
}
|
||||
|
||||
@@ -47,9 +59,12 @@ subprojects {
|
||||
ext.defineNetworkTablesProperties = {
|
||||
ext.netTables = netTablesUnzipLocation
|
||||
ext.netTablesInclude = "$netTablesUnzipLocation/include"
|
||||
ext.netLibLocation = "$netTablesUnzipLocation/Linux/arm"
|
||||
ext.netSharedLib = "$netLibLocation/libntcore.so"
|
||||
ext.netStaticLib = "$netLibLocation/libntcore.a"
|
||||
ext.netLibArmLocation = "$netTablesUnzipLocation/Linux/arm"
|
||||
if (project.hasProperty('makeSim')){
|
||||
ext.netLibDesktopLocation = "$netTablesUnzipLocation/Linux/amd64"
|
||||
}
|
||||
ext.netSharedLib = "$netLibArmLocation/libntcore.so"
|
||||
ext.netStaticLib = "$netLibArmLocation/libntcore.a"
|
||||
|
||||
task addNetworkTablesLibraryLinks() {
|
||||
description = 'Adds the linker flags for the networktables libraries retreived from maven'
|
||||
|
||||
@@ -222,7 +222,7 @@ extern "C"
|
||||
|
||||
uint16_t getFPGAVersion(int32_t *status);
|
||||
uint32_t getFPGARevision(int32_t *status);
|
||||
uint32_t getFPGATime(int32_t *status);
|
||||
uint64_t getFPGATime(int32_t *status);
|
||||
|
||||
bool getFPGAButton(int32_t *status);
|
||||
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
|
||||
extern "C"
|
||||
{
|
||||
void* initializeNotifier(void (*ProcessQueue)(uint32_t, void*), void* param, int32_t *status);
|
||||
void* initializeNotifier(void (*process)(uint64_t, void*), void* param, int32_t *status);
|
||||
void cleanNotifier(void* notifier_pointer, int32_t *status);
|
||||
|
||||
void updateNotifierAlarm(void* notifier_pointer, uint32_t triggerTime, int32_t *status);
|
||||
void* getNotifierParam(void* notifier_pointer, int32_t *status);
|
||||
void updateNotifierAlarm(void* notifier_pointer, uint64_t triggerTime, int32_t *status);
|
||||
void stopNotifierAlarm(void* notifier_pointer, int32_t *status);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
typedef struct port_t
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* std::condition_variable provides the native_handle() method to return its
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Allows usage with std::lock_guard without including <mutex> separately
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Accelerometer.hpp"
|
||||
|
||||
#include "ChipObject.h"
|
||||
@@ -171,6 +178,8 @@ static double unpackAxis(int16_t raw) {
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
/**
|
||||
* Set the accelerometer to active or standby mode. It must be in standby
|
||||
* mode to change any configuration.
|
||||
@@ -232,3 +241,5 @@ double getAccelerometerZ() {
|
||||
int raw = (readRegister(kReg_OutZMSB) << 4) | (readRegister(kReg_OutZLSB) >> 4);
|
||||
return unpackAxis(raw);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Analog.hpp"
|
||||
|
||||
@@ -24,18 +30,20 @@ struct AnalogPort {
|
||||
tAccumulator *accumulator;
|
||||
};
|
||||
|
||||
bool analogSampleRateSet = false;
|
||||
priority_recursive_mutex analogRegisterWindowMutex;
|
||||
tAI* analogInputSystem = NULL;
|
||||
tAO* analogOutputSystem = NULL;
|
||||
uint32_t analogNumChannelsToActivate = 0;
|
||||
static bool analogSampleRateSet = false;
|
||||
static priority_recursive_mutex analogRegisterWindowMutex;
|
||||
static tAI* analogInputSystem = NULL;
|
||||
static tAO* analogOutputSystem = NULL;
|
||||
static uint32_t analogNumChannelsToActivate = 0;
|
||||
|
||||
extern "C" {
|
||||
|
||||
// Utility methods defined below.
|
||||
uint32_t getAnalogNumActiveChannels(int32_t *status);
|
||||
uint32_t getAnalogNumChannelsToActivate(int32_t *status);
|
||||
void setAnalogNumChannelsToActivate(uint32_t channels);
|
||||
static uint32_t getAnalogNumActiveChannels(int32_t *status);
|
||||
static uint32_t getAnalogNumChannelsToActivate(int32_t *status);
|
||||
static void setAnalogNumChannelsToActivate(uint32_t channels);
|
||||
|
||||
bool analogSystemInitialized = false;
|
||||
static bool analogSystemInitialized = false;
|
||||
|
||||
/**
|
||||
* Initialize the analog System.
|
||||
@@ -424,7 +432,7 @@ int32_t getAnalogOffset(void* analog_port_pointer, int32_t *status) {
|
||||
*
|
||||
* @return Active channels.
|
||||
*/
|
||||
uint32_t getAnalogNumActiveChannels(int32_t *status) {
|
||||
static uint32_t getAnalogNumActiveChannels(int32_t *status) {
|
||||
uint32_t scanSize = analogInputSystem->readConfig_ScanSize(status);
|
||||
if (scanSize == 0)
|
||||
return 8;
|
||||
@@ -442,7 +450,7 @@ uint32_t getAnalogNumActiveChannels(int32_t *status) {
|
||||
*
|
||||
* @return Value to write to the active channels field.
|
||||
*/
|
||||
uint32_t getAnalogNumChannelsToActivate(int32_t *status) {
|
||||
static uint32_t getAnalogNumChannelsToActivate(int32_t *status) {
|
||||
if(analogNumChannelsToActivate == 0) return getAnalogNumActiveChannels(status);
|
||||
return analogNumChannelsToActivate;
|
||||
}
|
||||
@@ -455,7 +463,7 @@ uint32_t getAnalogNumChannelsToActivate(int32_t *status) {
|
||||
*
|
||||
* @param channels Number of active channels.
|
||||
*/
|
||||
void setAnalogNumChannelsToActivate(uint32_t channels) {
|
||||
static void setAnalogNumChannelsToActivate(uint32_t channels) {
|
||||
analogNumChannelsToActivate = channels;
|
||||
}
|
||||
|
||||
@@ -744,3 +752,5 @@ int32_t getAnalogVoltsToValueIntHack(void* analog_port_pointer, int voltage, int
|
||||
void setAnalogTriggerLimitsVoltageIntHack(void* analog_trigger_pointer, int lower, int upper, int32_t *status) {
|
||||
setAnalogTriggerLimitsVoltage(analog_trigger_pointer, intToFloat(lower), intToFloat(upper), status);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2008. All Rights Reserved. */
|
||||
/* Copyright (c) FIRST 2008-2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wpedantic"
|
||||
|
||||
@@ -1,15 +1,24 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Compressor.hpp"
|
||||
#include "ctre/PCM.h"
|
||||
#include <iostream>
|
||||
|
||||
static const int NUM_MODULE_NUMBERS = 63;
|
||||
extern PCM *modules[NUM_MODULE_NUMBERS];
|
||||
extern PCM *PCM_modules[NUM_MODULE_NUMBERS];
|
||||
extern void initializePCM(int module);
|
||||
|
||||
extern "C" {
|
||||
|
||||
void *initializeCompressor(uint8_t module) {
|
||||
initializePCM(module);
|
||||
|
||||
return modules[module];
|
||||
return PCM_modules[module];
|
||||
}
|
||||
|
||||
bool checkCompressorModule(uint8_t module) {
|
||||
@@ -114,3 +123,5 @@ void clearAllPCMStickyFaults(void *pcm_pointer, int32_t *status) {
|
||||
|
||||
*status = module->ClearStickyFaults();
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Digital.hpp"
|
||||
|
||||
@@ -53,42 +59,43 @@ struct DigitalPort {
|
||||
uint32_t PWMGeneratorID;
|
||||
};
|
||||
|
||||
// XXX: Set these back to static once we figure out the memory clobbering issue
|
||||
// Create a mutex to protect changes to the digital output values
|
||||
priority_recursive_mutex digitalDIOMutex;
|
||||
static priority_recursive_mutex digitalDIOMutex;
|
||||
// Create a mutex to protect changes to the relay values
|
||||
priority_recursive_mutex digitalRelayMutex;
|
||||
static priority_recursive_mutex digitalRelayMutex;
|
||||
// Create a mutex to protect changes to the DO PWM config
|
||||
priority_recursive_mutex digitalPwmMutex;
|
||||
priority_recursive_mutex digitalI2COnBoardMutex;
|
||||
priority_recursive_mutex digitalI2CMXPMutex;
|
||||
static priority_recursive_mutex digitalPwmMutex;
|
||||
static priority_recursive_mutex digitalI2COnBoardMutex;
|
||||
static priority_recursive_mutex digitalI2CMXPMutex;
|
||||
|
||||
tDIO* digitalSystem = NULL;
|
||||
tRelay* relaySystem = NULL;
|
||||
tPWM* pwmSystem = NULL;
|
||||
hal::Resource *DIOChannels = NULL;
|
||||
hal::Resource *DO_PWMGenerators = NULL;
|
||||
hal::Resource *PWMChannels = NULL;
|
||||
static tDIO* digitalSystem = NULL;
|
||||
static tRelay* relaySystem = NULL;
|
||||
static tPWM* pwmSystem = NULL;
|
||||
static hal::Resource *DIOChannels = NULL;
|
||||
static hal::Resource *DO_PWMGenerators = NULL;
|
||||
static hal::Resource *PWMChannels = NULL;
|
||||
|
||||
bool digitalSystemsInitialized = false;
|
||||
static bool digitalSystemsInitialized = false;
|
||||
|
||||
uint8_t i2COnboardObjCount = 0;
|
||||
uint8_t i2CMXPObjCount = 0;
|
||||
uint8_t i2COnBoardHandle = 0;
|
||||
uint8_t i2CMXPHandle = 0;
|
||||
static uint8_t i2COnboardObjCount = 0;
|
||||
static uint8_t i2CMXPObjCount = 0;
|
||||
static uint8_t i2COnBoardHandle = 0;
|
||||
static uint8_t i2CMXPHandle = 0;
|
||||
|
||||
int32_t m_spiCS0Handle = 0;
|
||||
int32_t m_spiCS1Handle = 0;
|
||||
int32_t m_spiCS2Handle = 0;
|
||||
int32_t m_spiCS3Handle = 0;
|
||||
int32_t m_spiMXPHandle = 0;
|
||||
priority_recursive_mutex spiOnboardSemaphore;
|
||||
priority_recursive_mutex spiMXPSemaphore;
|
||||
tSPI *spiSystem;
|
||||
static int32_t m_spiCS0Handle = 0;
|
||||
static int32_t m_spiCS1Handle = 0;
|
||||
static int32_t m_spiCS2Handle = 0;
|
||||
static int32_t m_spiCS3Handle = 0;
|
||||
static int32_t m_spiMXPHandle = 0;
|
||||
static priority_recursive_mutex spiOnboardSemaphore;
|
||||
static priority_recursive_mutex spiMXPSemaphore;
|
||||
static tSPI *spiSystem;
|
||||
|
||||
extern "C" {
|
||||
|
||||
struct SPIAccumulator {
|
||||
void* notifier = nullptr;
|
||||
uint32_t triggerTime;
|
||||
uint64_t triggerTime;
|
||||
uint32_t period;
|
||||
|
||||
int64_t value = 0;
|
||||
@@ -805,7 +812,7 @@ void setCounterAverageSize(void* counter_pointer, int32_t size, int32_t *status)
|
||||
* If it's an analog trigger, determine the module from the high order routing channel
|
||||
* else do normal digital input remapping based on pin number (MXP)
|
||||
*/
|
||||
void remapDigitalSource(bool analogTrigger, uint32_t &pin, uint8_t &module) {
|
||||
extern "C++" void remapDigitalSource(bool analogTrigger, uint32_t &pin, uint8_t &module) {
|
||||
if (analogTrigger) {
|
||||
module = pin >> 4;
|
||||
} else {
|
||||
@@ -1492,14 +1499,14 @@ void spiSetHandle(uint8_t port, int32_t handle){
|
||||
* @param port The number of the port to use. 0-3 for Onboard CS0-CS2, 4 for MXP
|
||||
* @return The semaphore for the SPI port.
|
||||
*/
|
||||
priority_recursive_mutex& spiGetSemaphore(uint8_t port) {
|
||||
extern "C++" priority_recursive_mutex& spiGetSemaphore(uint8_t port) {
|
||||
if(port < 4)
|
||||
return spiOnboardSemaphore;
|
||||
else
|
||||
return spiMXPSemaphore;
|
||||
}
|
||||
|
||||
static void spiAccumulatorProcess(uint32_t currentTime, void *param) {
|
||||
static void spiAccumulatorProcess(uint64_t currentTime, void *param) {
|
||||
SPIAccumulator* accum = (SPIAccumulator*)param;
|
||||
|
||||
// perform SPI transaction
|
||||
@@ -1872,3 +1879,5 @@ void i2CClose(uint8_t port) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/HAL.hpp"
|
||||
|
||||
#include "HAL/Port.h"
|
||||
@@ -12,6 +19,7 @@
|
||||
#include <cstdlib>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <mutex>
|
||||
#include <unistd.h>
|
||||
#include <sys/prctl.h>
|
||||
#include <signal.h> // linux for kill
|
||||
@@ -23,6 +31,13 @@ const uint32_t kSystemClockTicksPerMicrosecond = 40;
|
||||
static tGlobal *global = nullptr;
|
||||
static tSysWatchdog *watchdog = nullptr;
|
||||
|
||||
static priority_mutex timeMutex;
|
||||
static uint32_t timeEpoch = 0;
|
||||
static uint32_t prevFPGATime = 0;
|
||||
static void* rolloverNotifier = nullptr;
|
||||
|
||||
extern "C" {
|
||||
|
||||
void* getPort(uint8_t pin)
|
||||
{
|
||||
Port* port = new Port();
|
||||
@@ -99,6 +114,8 @@ const char* getHALErrorMessage(int32_t code)
|
||||
return INCOMPATIBLE_STATE_MESSAGE;
|
||||
case NO_AVAILABLE_RESOURCES:
|
||||
return NO_AVAILABLE_RESOURCES_MESSAGE;
|
||||
case RESOURCE_IS_ALLOCATED:
|
||||
return RESOURCE_IS_ALLOCATED_MESSAGE;
|
||||
case NULL_PARAMETER:
|
||||
return NULL_PARAMETER_MESSAGE;
|
||||
case ANALOG_TRIGGER_LIMIT_ORDER_ERROR:
|
||||
@@ -182,13 +199,19 @@ uint32_t getFPGARevision(int32_t *status)
|
||||
*
|
||||
* @return The current time in microseconds according to the FPGA (since FPGA reset).
|
||||
*/
|
||||
uint32_t getFPGATime(int32_t *status)
|
||||
uint64_t getFPGATime(int32_t *status)
|
||||
{
|
||||
if (!global) {
|
||||
*status = NiFpga_Status_ResourceNotInitialized;
|
||||
return 0;
|
||||
}
|
||||
return global->readLocalTime(status);
|
||||
std::lock_guard<priority_mutex> lock(timeMutex);
|
||||
uint32_t fpgaTime = global->readLocalTime(status);
|
||||
if (*status != 0) return 0;
|
||||
// check for rollover
|
||||
if (fpgaTime < prevFPGATime) ++timeEpoch;
|
||||
prevFPGATime = fpgaTime;
|
||||
return (((uint64_t)timeEpoch) << 32) | ((uint64_t)fpgaTime);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -233,6 +256,12 @@ static void HALCleanupAtExit() {
|
||||
watchdog = nullptr;
|
||||
}
|
||||
|
||||
static void timerRollover(uint64_t currentTime, void*) {
|
||||
// reschedule timer for next rollover
|
||||
int32_t status = 0;
|
||||
updateNotifierAlarm(rolloverNotifier, currentTime + 0x80000000ULL, &status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this to start up HAL. This is required for robot programs.
|
||||
*/
|
||||
@@ -254,6 +283,14 @@ int HALInitialize(int mode)
|
||||
|
||||
std::atexit(HALCleanupAtExit);
|
||||
|
||||
if (!rolloverNotifier)
|
||||
rolloverNotifier = initializeNotifier(timerRollover, nullptr, &status);
|
||||
if (status == 0) {
|
||||
uint64_t curTime = getFPGATime(&status);
|
||||
if (status == 0)
|
||||
updateNotifierAlarm(rolloverNotifier, curTime + 0x80000000ULL, &status);
|
||||
}
|
||||
|
||||
// Kill any previous robot programs
|
||||
std::fstream fs;
|
||||
// By making this both in/out, it won't give us an error if it doesnt exist
|
||||
@@ -300,6 +337,7 @@ int HALInitialize(int mode)
|
||||
pid = getpid();
|
||||
fs << pid << std::endl;
|
||||
fs.close();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -337,3 +375,5 @@ void imaqGetLastError()
|
||||
void niTimestamp64()
|
||||
{
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Interrupts.hpp"
|
||||
#include "ChipObject.h"
|
||||
|
||||
@@ -9,6 +16,8 @@ struct Interrupt // FIXME: why is this internal?
|
||||
tInterruptManager *manager;
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
|
||||
void* initializeInterrupts(uint32_t interruptIndex, bool watcher, int32_t *status)
|
||||
{
|
||||
Interrupt* anInterrupt = new Interrupt();
|
||||
@@ -121,3 +130,5 @@ void setInterruptUpSourceEdge(void* interrupt_pointer, bool risingEdge, bool fal
|
||||
anInterrupt->anInterrupt->writeConfig_RisingEdge(risingEdge, status);
|
||||
anInterrupt->anInterrupt->writeConfig_FallingEdge(fallingEdge, status);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Notifier.hpp"
|
||||
#include "ChipObject.h"
|
||||
#include "HAL/HAL.hpp"
|
||||
@@ -12,12 +19,12 @@ static priority_mutex notifierInterruptMutex;
|
||||
static priority_recursive_mutex notifierMutex;
|
||||
static tAlarm *notifierAlarm = nullptr;
|
||||
static tInterruptManager *notifierManager = nullptr;
|
||||
static uint32_t closestTrigger = UINT32_MAX;
|
||||
static uint64_t closestTrigger = UINT64_MAX;
|
||||
struct Notifier {
|
||||
Notifier *prev, *next;
|
||||
void *param;
|
||||
void (*process)(uint32_t, void*);
|
||||
uint32_t triggerTime = UINT32_MAX;
|
||||
void (*process)(uint64_t, void*);
|
||||
uint64_t triggerTime = UINT64_MAX;
|
||||
};
|
||||
static Notifier *notifiers = nullptr;
|
||||
static std::atomic_flag notifierAtexitRegistered = ATOMIC_FLAG_INIT;
|
||||
@@ -28,19 +35,19 @@ static void alarmCallback(uint32_t, void*)
|
||||
std::unique_lock<priority_recursive_mutex> sync(notifierMutex);
|
||||
|
||||
int32_t status = 0;
|
||||
uint32_t currentTime = 0;
|
||||
uint64_t currentTime = 0;
|
||||
|
||||
// the hardware disables itself after each alarm
|
||||
closestTrigger = UINT32_MAX;
|
||||
closestTrigger = UINT64_MAX;
|
||||
|
||||
// process all notifiers
|
||||
Notifier *notifier = notifiers;
|
||||
while (notifier) {
|
||||
if (notifier->triggerTime != UINT32_MAX) {
|
||||
if (notifier->triggerTime != UINT64_MAX) {
|
||||
if (currentTime == 0)
|
||||
currentTime = getFPGATime(&status);
|
||||
if (notifier->triggerTime < currentTime) {
|
||||
notifier->triggerTime = UINT32_MAX;
|
||||
notifier->triggerTime = UINT64_MAX;
|
||||
auto process = notifier->process;
|
||||
auto param = notifier->param;
|
||||
sync.unlock();
|
||||
@@ -59,9 +66,11 @@ static void cleanupNotifierAtExit() {
|
||||
notifierManager = nullptr;
|
||||
}
|
||||
|
||||
void* initializeNotifier(void (*ProcessQueue)(uint32_t, void*), void *param, int32_t *status)
|
||||
extern "C" {
|
||||
|
||||
void* initializeNotifier(void (*process)(uint64_t, void*), void *param, int32_t *status)
|
||||
{
|
||||
if (!ProcessQueue) {
|
||||
if (!process) {
|
||||
*status = NULL_PARAMETER;
|
||||
return nullptr;
|
||||
}
|
||||
@@ -85,7 +94,7 @@ void* initializeNotifier(void (*ProcessQueue)(uint32_t, void*), void *param, int
|
||||
notifier->next = notifiers;
|
||||
if (notifier->next) notifier->next->prev = notifier;
|
||||
notifier->param = param;
|
||||
notifier->process = ProcessQueue;
|
||||
notifier->process = process;
|
||||
notifiers = notifier;
|
||||
return notifier;
|
||||
}
|
||||
@@ -119,25 +128,40 @@ void cleanNotifier(void* notifier_pointer, int32_t *status)
|
||||
}
|
||||
}
|
||||
|
||||
void updateNotifierAlarm(void* notifier_pointer, uint32_t triggerTime, int32_t *status)
|
||||
void* getNotifierParam(void* notifier_pointer, int32_t *status)
|
||||
{
|
||||
return ((Notifier*)notifier_pointer)->param;
|
||||
}
|
||||
|
||||
void updateNotifierAlarm(void* notifier_pointer, uint64_t triggerTime, int32_t *status)
|
||||
{
|
||||
std::lock_guard<priority_recursive_mutex> sync(notifierMutex);
|
||||
|
||||
Notifier* notifier = (Notifier*)notifier_pointer;
|
||||
notifier->triggerTime = triggerTime;
|
||||
bool wasActive = (closestTrigger != UINT32_MAX);
|
||||
bool wasActive = (closestTrigger != UINT64_MAX);
|
||||
|
||||
if (!notifierInterruptMutex.try_lock() || notifierRefCount == 0 ||
|
||||
!notifierAlarm)
|
||||
return;
|
||||
if (!notifierInterruptMutex.try_lock() || notifierRefCount == 0 ||
|
||||
!notifierAlarm)
|
||||
return;
|
||||
|
||||
// Update alarm time if closer than current.
|
||||
// Update alarm time if closer than current.
|
||||
if (triggerTime < closestTrigger) {
|
||||
closestTrigger = triggerTime;
|
||||
notifierAlarm->writeTriggerTime(triggerTime, status);
|
||||
// Simply truncate the hardware trigger time to 32-bit.
|
||||
notifierAlarm->writeTriggerTime((uint32_t)triggerTime, status);
|
||||
}
|
||||
// Enable the alarm. The hardware disables itself after each alarm.
|
||||
if (!wasActive) notifierAlarm->writeEnable(true, status);
|
||||
|
||||
notifierInterruptMutex.unlock();
|
||||
}
|
||||
|
||||
void stopNotifierAlarm(void* notifier_pointer, int32_t *status)
|
||||
{
|
||||
std::lock_guard<priority_recursive_mutex> sync(notifierMutex);
|
||||
Notifier* notifier = (Notifier*)notifier_pointer;
|
||||
notifier->triggerTime = UINT64_MAX;
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/PDP.hpp"
|
||||
#include "ctre/PDP.h"
|
||||
//static PDP pdp;
|
||||
@@ -6,6 +13,8 @@ static const int NUM_MODULE_NUMBERS = 63;
|
||||
|
||||
static PDP *pdp[NUM_MODULE_NUMBERS] = { NULL };
|
||||
|
||||
extern "C" {
|
||||
|
||||
void initializePDP(uint8_t module) {
|
||||
if(!pdp[module]) {
|
||||
pdp[module] = new PDP(module);
|
||||
@@ -68,4 +77,4 @@ void clearPDPStickyFaults(uint8_t module, int32_t *status) {
|
||||
*status = pdp[module]->ClearStickyFaults();
|
||||
}
|
||||
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Power.hpp"
|
||||
#include "ChipObject.h"
|
||||
|
||||
@@ -9,6 +16,8 @@ static void initializePower(int32_t *status) {
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
/**
|
||||
* Get the roboRIO input voltage
|
||||
*/
|
||||
@@ -125,3 +134,5 @@ int getUserCurrentFaults3V3(int32_t *status) {
|
||||
initializePower(status);
|
||||
return (int)power->readFaultCounts_OverCurrentFaultCount3V3(status);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Semaphore.hpp"
|
||||
|
||||
#include "Log.hpp"
|
||||
@@ -9,6 +16,8 @@ TLogLevel semaphoreLogLevel = logDEBUG;
|
||||
if (level > semaphoreLogLevel) ; \
|
||||
else Log().Get(level)
|
||||
|
||||
extern "C" {
|
||||
|
||||
MUTEX_ID initializeMutexNormal() { return new priority_mutex; }
|
||||
|
||||
void deleteMutex(MUTEX_ID sem) { delete sem; }
|
||||
@@ -40,3 +49,5 @@ void takeMultiWait(MULTIWAIT_ID cond, MUTEX_ID m) {
|
||||
}
|
||||
|
||||
void giveMultiWait(MULTIWAIT_ID cond) { cond->notify_all(); }
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/SerialPort.hpp"
|
||||
#include "visa/visa.h"
|
||||
|
||||
|
||||
uint32_t m_resourceManagerHandle;
|
||||
uint32_t m_portHandle[2];
|
||||
static uint32_t m_resourceManagerHandle;
|
||||
static uint32_t m_portHandle[2];
|
||||
|
||||
extern "C" {
|
||||
|
||||
void serialInitializePort(uint8_t port, int32_t *status) {
|
||||
char const * portName;
|
||||
@@ -144,5 +153,5 @@ void serialClose(uint8_t port, int32_t *status) {
|
||||
if(*status > 0)
|
||||
*status = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Solenoid.hpp"
|
||||
|
||||
@@ -9,7 +15,7 @@
|
||||
|
||||
static const int NUM_MODULE_NUMBERS = 63;
|
||||
|
||||
PCM *modules[NUM_MODULE_NUMBERS] = { NULL };
|
||||
PCM *PCM_modules[NUM_MODULE_NUMBERS] = { NULL };
|
||||
|
||||
struct solenoid_port_t {
|
||||
PCM *module;
|
||||
@@ -17,17 +23,19 @@ struct solenoid_port_t {
|
||||
};
|
||||
|
||||
void initializePCM(int module) {
|
||||
if(!modules[module]) {
|
||||
modules[module] = new PCM(module);
|
||||
if(!PCM_modules[module]) {
|
||||
PCM_modules[module] = new PCM(module);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
void* initializeSolenoidPort(void *port_pointer, int32_t *status) {
|
||||
Port* port = (Port*) port_pointer;
|
||||
initializePCM(port->module);
|
||||
|
||||
solenoid_port_t *solenoid_port = new solenoid_port_t;
|
||||
solenoid_port->module = modules[port->module];
|
||||
solenoid_port->module = PCM_modules[port->module];
|
||||
solenoid_port->pin = port->pin;
|
||||
|
||||
return solenoid_port;
|
||||
@@ -95,3 +103,5 @@ void clearAllPCMStickyFaults_sol(void *solenoid_port_pointer, int32_t *status){
|
||||
|
||||
*status = port->module->ClearStickyFaults();
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Task.hpp"
|
||||
|
||||
#ifndef OK
|
||||
@@ -9,6 +16,8 @@
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
extern "C" {
|
||||
|
||||
STATUS verifyTaskID(TASK task) {
|
||||
if (task != nullptr && pthread_kill(*task, 0) == 0) {
|
||||
return OK;
|
||||
@@ -49,3 +58,5 @@ STATUS getTaskPriority(TASK task, int* priority) {
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/Utilities.hpp"
|
||||
#include <time.h>
|
||||
|
||||
const int32_t HAL_NO_WAIT = 0;
|
||||
const int32_t HAL_WAIT_FOREVER = -1;
|
||||
|
||||
extern "C" {
|
||||
|
||||
void delayTicks(int32_t ticks)
|
||||
{
|
||||
struct timespec test, remaining;
|
||||
@@ -42,3 +51,5 @@ void delaySeconds(double s)
|
||||
test = remaining;
|
||||
}
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2008. All Rights Reserved. */
|
||||
/* Copyright (c) FIRST 2008-2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/cpp/Resource.hpp"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2015. All Rights Reserved. */
|
||||
/* Copyright (c) FIRST 2015-2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/cpp/Semaphore.hpp"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "HAL/cpp/priority_mutex.h"
|
||||
|
||||
void priority_recursive_mutex::lock() {
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include "FRC_NetworkCommunication/FRCComm.h"
|
||||
#include <cstring>
|
||||
|
||||
extern "C" {
|
||||
|
||||
int HALGetControlWord(HALControlWord *data)
|
||||
{
|
||||
return FRC_NetworkCommunication_getControlWord((ControlWord_t*) data);
|
||||
@@ -35,6 +37,12 @@ int HALGetJoystickButtons(uint8_t joystickNum, HALJoystickButtons *buttons)
|
||||
|
||||
int HALGetJoystickDescriptor(uint8_t joystickNum, HALJoystickDescriptor *desc)
|
||||
{
|
||||
desc->isXbox = 0;
|
||||
desc->type = -1;
|
||||
desc->name[0] = '\0';
|
||||
desc->axisCount = 0;
|
||||
desc->buttonCount = 0;
|
||||
desc->povCount = 0;
|
||||
return FRC_NetworkCommunication_getJoystickDesc(joystickNum, &desc->isXbox, &desc->type, (char *)(&desc->name),
|
||||
&desc->axisCount, (uint8_t *)&desc->axisTypes, &desc->buttonCount, &desc->povCount);
|
||||
}
|
||||
@@ -126,3 +134,5 @@ void HALNetworkCommunicationObserveUserProgramTest(void)
|
||||
{
|
||||
FRC_NetworkCommunication_observeUserProgramTest();
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
/* GNU ld script */
|
||||
OUTPUT_FORMAT(elf32-littlearm)
|
||||
GROUP ( AS_NEEDED ( -lwpilib_nonshared -lHALAthena -lntcore -lFRC_NetworkCommunication -li2c -lni_emb -lNiFpgaLv -lNiFpga -lnirio_emb_can -lNiRioSrv -lni_rtlog -lRoboRIO_FRC_ChipObject -lspi -lvisa -ldl -lpthread -lrt -lGCBase_gcc-4.4-arm_v2_3 -lGenApi_gcc-4.4-arm_v2_3 -lLog_gcc-4.4-arm_v2_3 -lMathParser_gcc-4.4-arm_v2_3 -llog4cpp_gcc-4.4-arm_v2_3 -lniimaqdx -lnivision -lnivissvc ) )
|
||||
GROUP ( AS_NEEDED ( -lwpilib_nonshared -lHALAthena -lntcore -lFRC_NetworkCommunication -li2c -lni_emb -lNiFpgaLv -lNiFpga -lnirio_emb_can -lNiRioSrv -lni_rtlog -lRoboRIO_FRC_ChipObject -lspi -lvisa -ldl -lpthread -lrt -lGCBase_gcc-4.4-arm_v2_3 -lGenApi_gcc-4.4-arm_v2_3 -lLog_gcc-4.4-arm_v2_3 -lMathParser_gcc-4.4-arm_v2_3 -llog4cpp_gcc-4.4-arm_v2_3 -lniimaqdx -lnivision -lnivissvc -lnipalu) )
|
||||
|
||||
@@ -2,6 +2,10 @@ include 'hal',
|
||||
'wpilibc',
|
||||
'wpilibcIntegrationTests',
|
||||
'wpilibj',
|
||||
'wpilibjIntegrationTests',
|
||||
'wpilibjIntegrationTests'
|
||||
|
||||
if (hasProperty("makeSim")){
|
||||
include 'simulation',
|
||||
'simulation:JavaGazebo',
|
||||
'simulation:SimDS'
|
||||
}
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package org.gazebosim.transport;
|
||||
|
||||
import gazebo.msgs.GzPacket.Packet;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package org.gazebosim.transport;
|
||||
|
||||
import gazebo.msgs.GzBool.Bool;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package org.gazebosim.transport;
|
||||
|
||||
import gazebo.msgs.GzPacket.Packet;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package org.gazebosim.transport;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package org.gazebosim.transport;
|
||||
|
||||
public interface PublisherRecord {
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package org.gazebosim.transport;
|
||||
|
||||
import gazebo.msgs.GzPublish.Publish;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package org.gazebosim.transport;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package org.gazebosim.transport;
|
||||
|
||||
import gazebo.msgs.GzSubscribe.Subscribe;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package org.gazebosim.transport;
|
||||
|
||||
public interface SubscriberCallback<T> {
|
||||
|
||||
@@ -1,29 +1,32 @@
|
||||
## Simulation Directory
|
||||
## Components and Location
|
||||
|
||||
Observe the following directory structure
|
||||
|
||||
.
|
||||
|-- frc_gazebo_plugins (contains Gazebo Plugins)
|
||||
| |-- clock
|
||||
| |-- dc_motor
|
||||
| |-- encoder
|
||||
| |-- gyro
|
||||
| |-- plugins
|
||||
| |-- pneumatic_piston
|
||||
| |-- potentiometer
|
||||
| |-- rangefinder
|
||||
| |-- servo
|
||||
|
|
||||
|-- frcsim.bat (launches gazebo with model/plugin paths on windows)
|
||||
|-- frcsim.sh (launches gazebo with model/plugin paths on linux/mac)
|
||||
|-- install.sh (convenient linux script to install Eclipse, Eclipse Plugins, and Gazebo)
|
||||
|-- JavaGazebo (java library used by java simulation. Equivelant of the C++ gazebo_transport)
|
||||
|-- SimDS (linux driverstation)
|
||||
Simluation is a mix of wpilib and other components.
|
||||
The wpilib components are in their respective locations in the /wpilibc and /wpilibj directories.
|
||||
|
||||
The gazbeo plugins are currently built with CMake.
|
||||
Eventually they will be built with gradle.
|
||||
|
||||
All of this is delivered to students via the eclipse plugins
|
||||
## Simulation delivery and installation
|
||||
|
||||
For 2016 FRCSim is only officially supported on Ubuntu 14.04 or greater.
|
||||
However it is possible on any platform that runs Gazebo.
|
||||
FRCSim is currently delivered via a zip file published by this project,
|
||||
and is available at first.wpi.edu/FRC/roborio/maven/PROMOTION_STATUS/edu/wpi/first/wpilib/simulation/simulation/1.0.0/simulation-1.0.0.zip
|
||||
where PROMOTION_STATUS is one of:
|
||||
- development (the latest commit merged into wpilib)
|
||||
- beta (used periodically before release)
|
||||
- release (used just before kick-off and possibly a few other times)
|
||||
- stable (used for old releases we want to keep around)
|
||||
|
||||
The zip contains most of the contents of ~/wpilib/simulation, such as C++ libraries, jars, and scripts
|
||||
|
||||
The exmple robot model files are seperate, and can be found under "file releases" on collabnet.
|
||||
|
||||
All together you need eclipse, gazebo, those two zips, g++ 4.9, java8, and a few other small packages.
|
||||
See the frcsim-installer script or the screensteps on manual install for all the nitty-gritty details
|
||||
|
||||
The frcsim-installer script is meant for quick and painless setup on Ubuntu 14.04, 15.04, or 15.10
|
||||
A manual install is a more tedious process, so this is an easy option for students.
|
||||
|
||||
## Building
|
||||
see the top level building.md
|
||||
See the top level README.md.
|
||||
|
||||
@@ -51,4 +51,14 @@ task simDsJavadoc(type: Jar, dependsOn: javadoc) {
|
||||
group = 'WPILib'
|
||||
classifier = 'javadoc'
|
||||
from javadoc.destinationDir
|
||||
}
|
||||
}
|
||||
|
||||
//we need to move the simulation jars to the install directory
|
||||
task copyJars(type: Copy) {
|
||||
description = 'copy SimDS-all.jar to make simulation zip'
|
||||
group = 'WPILib Simulation'
|
||||
from shadowJar.archivePath
|
||||
into "$simulationInstallDir/jar"
|
||||
}
|
||||
|
||||
build.dependsOn shadowJar
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import java.awt.Dimension;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import org.gazebosim.transport.Node;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import org.gazebosim.transport.Node;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import gazebo.msgs.GzFloat64.Float64;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
package edu.wpi.first.wpilibj.simulation.ds;
|
||||
|
||||
import gazebo.msgs.GzJoystick.Joystick;
|
||||
|
||||
35
simulation/build.gradle
Normal file
35
simulation/build.gradle
Normal file
@@ -0,0 +1,35 @@
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'maven-publish'
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
simulation(MavenPublication) {
|
||||
artifact zip
|
||||
groupId 'edu.wpi.first.wpilib.simulation'
|
||||
artifactId 'simulation'
|
||||
version '1.0.0'
|
||||
}
|
||||
}
|
||||
|
||||
setupWpilibRepo(it)
|
||||
}
|
||||
|
||||
task copy_resources(type: Copy) {
|
||||
description = 'copy gz_msgs and install_resources to make simulation zip'
|
||||
group = 'WPILib Simulation'
|
||||
into ('gz_msgs') {
|
||||
from 'gz_msgs'
|
||||
}
|
||||
into "$simulationInstallDir"
|
||||
from 'install_resources'
|
||||
}
|
||||
|
||||
task zip(type: Zip, dependsOn: [copy_resources,
|
||||
':wpilibc:wpilibcSimCopy',
|
||||
':simulation:SimDS:copyJars',
|
||||
':wpilibj:copyJars']) {
|
||||
description = 'zip of all the resources for simulation'
|
||||
group = 'WPILib Simulation'
|
||||
baseName = 'simulation-trusty'
|
||||
from "$simulationInstallDir"
|
||||
}
|
||||
@@ -12,8 +12,6 @@ set (PLUGINS
|
||||
rangefinder
|
||||
servo)
|
||||
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/plugins)
|
||||
|
||||
link_directories(${GAZEBO_LIBRARY_DIRS})
|
||||
|
||||
foreach(PLUGIN ${PLUGINS})
|
||||
@@ -29,7 +27,11 @@ foreach(PLUGIN ${PLUGINS})
|
||||
endif()
|
||||
|
||||
target_link_libraries(${PLUGIN} gz_msgs ${GAZEBO_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
install(TARGETS ${PLUGIN} DESTINATION $ENV{HOME}/wpilib/simulation/plugins)
|
||||
set_target_properties(${PLUGIN}
|
||||
PROPERTIES
|
||||
LIBRARY_OUTPUT_DIRECTORY ${SIMULATION_INSTALL_DIR}/plugins)
|
||||
|
||||
endforeach()
|
||||
|
||||
# create a dummy target the depends on all the plugins
|
||||
add_custom_target(${PROJECT_NAME} DEPENDS ${PLUGINS})
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "clock.h"
|
||||
|
||||
GZ_REGISTER_MODEL_PLUGIN(Clock)
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "dc_motor.h"
|
||||
|
||||
GZ_REGISTER_MODEL_PLUGIN(DCMotor)
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "simulation/gz_msgs/msgs.h"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "encoder.h"
|
||||
|
||||
GZ_REGISTER_MODEL_PLUGIN(Encoder)
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "simulation/gz_msgs/msgs.h"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "gyro.h"
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "simulation/gz_msgs/msgs.h"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "external_limit_switch.h"
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "switch.h"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "internal_limit_switch.h"
|
||||
|
||||
InternalLimitSwitch::InternalLimitSwitch(physics::ModelPtr model, sdf::ElementPtr sdf) {
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "switch.h"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "limit_switch.h"
|
||||
|
||||
GZ_REGISTER_MODEL_PLUGIN(LimitSwitch)
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "simulation/gz_msgs/msgs.h"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
class Switch {
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef _WIN32
|
||||
// Ensure that Winsock2.h is included before Windows.h, which can get
|
||||
// pulled in by anybody (e.g., Boost).
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "simulation/gz_msgs/msgs.h"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef _WIN32
|
||||
// Ensure that Winsock2.h is included before Windows.h, which can get
|
||||
// pulled in by anybody (e.g., Boost).
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <simulation/gz_msgs/msgs.h>
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef _WIN32
|
||||
// Ensure that Winsock2.h is included before Windows.h, which can get
|
||||
// pulled in by anybody (e.g., Boost).
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <simulation/gz_msgs/msgs.h>
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef _WIN32
|
||||
// Ensure that Winsock2.h is included before Windows.h, which can get
|
||||
// pulled in by anybody (e.g., Boost).
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "simulation/gz_msgs/msgs.h"
|
||||
|
||||
308
simulation/frcsim-installer.sh
Executable file
308
simulation/frcsim-installer.sh
Executable file
@@ -0,0 +1,308 @@
|
||||
#!/bin/bash
|
||||
|
||||
function check-environment {
|
||||
# Ensure root access
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
echo "*** This script must be run as root!" 1>&2
|
||||
echo "*** Make sure that you followed the instructions properly." 1>&2
|
||||
install-fail
|
||||
fi
|
||||
|
||||
# Make sure that we're on Ubuntu.
|
||||
if [ "$(lsb_release -is)" != "Ubuntu" ]; then
|
||||
if [ "$(lsb_release -is)" = "" ]; then
|
||||
echo "*** Distributions other than Ubuntu (such as yours, probably) are not supported." 1>&2
|
||||
else
|
||||
echo "*** Distributions other than Ubuntu (such as $(lsb_release -is)) are not supported." 1>&2
|
||||
fi
|
||||
echo "*** This means that the install will likely fail." 1>&2
|
||||
echo "*** Continue anyway? (y/n)" 1>&2
|
||||
read CONT
|
||||
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
|
||||
install-fail
|
||||
fi
|
||||
fi
|
||||
|
||||
# Make sure that we have /etc/apt/sources.list.d available.
|
||||
if [ ! -e /etc/apt/sources.list.d ]; then
|
||||
echo "*** Cannot find /etc/apt/sources.list.d - is apt installed?"
|
||||
install-fail
|
||||
fi
|
||||
|
||||
# Make sure that apt-key is installed.
|
||||
if ! which apt-key >/dev/null; then
|
||||
echo "*** You don't appear to have apt-key installed." 1>&2
|
||||
echo "*** Please install apt and run the script again." 1>&2
|
||||
install-fail
|
||||
fi
|
||||
|
||||
# Make sure that apt-get is installed.
|
||||
if ! which apt-get >/dev/null; then
|
||||
echo "*** You don't appear to have apt-get installed." 1>&2
|
||||
echo "*** Please install apt and run the script again." 1>&2
|
||||
install-fail
|
||||
fi
|
||||
|
||||
# Make sure that we have internet access.
|
||||
if ! ping 8.8.8.8 -c 1 >/dev/null; then
|
||||
echo "*** You don't appear to be able to access the internet! (Can't ping 8.8.8.8)" 1>&2
|
||||
install-fail
|
||||
fi
|
||||
|
||||
# Make sure that wget is installed.
|
||||
if ! which wget >/dev/null; then
|
||||
echo "*** You don't appear to have wget installed." 1>&2
|
||||
echo "*** Install? (y/n)" 1>&2
|
||||
read CONT
|
||||
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
|
||||
install-fail
|
||||
fi
|
||||
apt-get install wget -y
|
||||
fi
|
||||
|
||||
# Make sure that python is installed
|
||||
if ! which python >/dev/null; then
|
||||
echo "*** You don't appear to have python installed." 1>&2
|
||||
echo "*** Install? (y/n)" 1>&2
|
||||
read CONT
|
||||
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
|
||||
install-fail
|
||||
fi
|
||||
apt-get install python -y
|
||||
fi
|
||||
|
||||
# Make sure that unzip is installed
|
||||
if ! which unzip >/dev/null; then
|
||||
echo "*** You don't appear to have unzip installed." 1>&2
|
||||
echo "*** Install? (y/n)" 1>&2
|
||||
read CONT
|
||||
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
|
||||
install-fail
|
||||
fi
|
||||
apt-get install unzip -y
|
||||
fi
|
||||
|
||||
# Make sure that app-apt-repository is installed
|
||||
if ! which add-apt-repository >/dev/null; then
|
||||
echo "*** You don't appear to have all apt commands installed." 1>&2
|
||||
echo "*** Install? (y/n)" 1>&2
|
||||
read CONT
|
||||
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
|
||||
install-fail
|
||||
fi
|
||||
apt-get install software-properties-common -y
|
||||
fi
|
||||
}
|
||||
|
||||
function remove-frcsim {
|
||||
echo "*** Remove Gazebo package entry too? (y/n)" 1>&2
|
||||
read CONT
|
||||
if [ "$CONT" == "y" -o "$CONT" == "Y" ]; then
|
||||
rm -f /etc/apt/sources.list.d/gazebo-latest.list
|
||||
fi
|
||||
|
||||
apt-get remove --auto-remove libgazebo6-dev gazebo6 g++-4.9 openjdk-8-jdk
|
||||
rm -rf /opt/eclipse
|
||||
rm -f /usr/share/applications/frcsim.desktop /usr/share/applications/eclipse.desktop /usr/share/applications/sim_ds.desktop
|
||||
rm -f /usr/bin/frcism /usr/bin/sim_ds /usr/bin/eclipse
|
||||
rm -rf ~/wpilib/simulation
|
||||
|
||||
add-apt-repository --remove ppa:openjdk-r/ppa -y
|
||||
add-apt-repository --remove ppa:ubuntu-toolchain-r/test -y
|
||||
}
|
||||
|
||||
function install-eclipse-plugins {
|
||||
#valid URLs can have promotion status of any of the following
|
||||
# - development (used for most recent merge into wpilib)
|
||||
# - beta
|
||||
# - release
|
||||
# - stable
|
||||
|
||||
#this file is published to maven repo by simulation/build.gradle
|
||||
if ! (wget -O /tmp/simulation.zip http://first.wpi.edu/FRC/roborio/maven/$PROMOTION_STATUS/edu/wpi/first/wpilib/simulation/simulation/1.0.0/simulation-1.0.0.zip)
|
||||
then
|
||||
echo "***could not download wpilib simulation plugins, wrong URL probably***"
|
||||
echo "promotion status = $PROMOTION_STATUS"
|
||||
echo "url = http://first.wpi.edu/FRC/roborio/maven/$PROMOTION_STATUS/edu/wpi/first/wpilib/simulation/simulation/1.0.0/simulation-1.0.0.zip"
|
||||
install-fail
|
||||
fi
|
||||
|
||||
mkdir -p ~/wpilib/simulation
|
||||
unzip /tmp/simulation.zip -d ~/wpilib/simulation
|
||||
rm -f /usr/bin/frcsim /usr/bin/sim_ds
|
||||
ln -s ~/wpilib/simulation/frcsim /usr/bin/frcsim
|
||||
ln -s ~/wpilib/simulation/sim_ds /usr/bin/sim_ds
|
||||
}
|
||||
|
||||
function install-eclipse {
|
||||
if ! (wget -O /tmp/eclipse.tar.gz http://eclipse.mirror.rafal.ca/technology/epp/downloads/release/mars/1/eclipse-cpp-mars-1-linux-gtk-x86_64.tar.gz)
|
||||
then
|
||||
echo "***could not download eclipse, wrong URL probably***"
|
||||
install-fail
|
||||
fi
|
||||
|
||||
tar -xf /tmp/eclipse.tar.gz -C /opt
|
||||
rm -f /usr/bin/eclipse
|
||||
ln -s /opt/eclipse/eclipse /usr/bin/eclipse
|
||||
}
|
||||
|
||||
function install-desktops {
|
||||
# desktop files allow ubuntu (unity) users to "search" for their programs in the sidebar
|
||||
mv ~/wpilib/simulation/eclipse.desktop /usr/share/applications/eclipse.desktop
|
||||
mv ~/wpilib/simulation/frcsim.desktop /usr/share/applications/frcsim.desktop
|
||||
mv ~/wpilib/simulation/sim_ds.desktop /usr/share/applications/sim_ds.desktop
|
||||
mkdir -p /usr/share/icons/sim_ds
|
||||
mv ~/wpilib/simulation/sim_ds_logo.png /usr/share/icons/sim_ds/sim_ds_logo.png
|
||||
}
|
||||
|
||||
function install-gz_msgs {
|
||||
# gz_msgs is built on the end-user system
|
||||
# that way the versions of protobuf will match whatever the default for that platform is
|
||||
cd ~/wpilib/simulation/gz_msgs
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make
|
||||
make install
|
||||
chmod u+x ~/wpilib/simulation/lib/libgz_msgs.so
|
||||
}
|
||||
|
||||
function install-toolchain {
|
||||
# older version of ubuntu like 14.04 don't have the versions of g++ and java we need
|
||||
# we can add some very reliable PPAs to get them however
|
||||
if [[ "`lsb_release -rs`" == "14.04" ]]
|
||||
then
|
||||
echo "*** You're using `lsb_release -r`, you will need additional repositories***"
|
||||
echo "*** Install? (y/n)" 1>&2
|
||||
read CONT
|
||||
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
|
||||
install-fail
|
||||
fi
|
||||
add-apt-repository ppa:openjdk-r/ppa -y
|
||||
add-apt-repository ppa:ubuntu-toolchain-r/test -y
|
||||
fi
|
||||
if [[ "`lsb_release -rs`" == "15.04" ]]
|
||||
then
|
||||
echo "*** You're using `lsb_release -r`, you will need additional repositories***"
|
||||
echo "*** Install? (y/n)" 1>&2
|
||||
read CONT
|
||||
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
|
||||
install-fail
|
||||
fi
|
||||
add-apt-repository ppa:openjdk-r/ppa -y
|
||||
fi
|
||||
|
||||
# Update and install dependencies
|
||||
if ! apt-get update
|
||||
then
|
||||
echo "*** Could not resynchronize package index files." 1>&2
|
||||
echo "*** Are you running another update or install?" 1>&2
|
||||
install-fail
|
||||
fi
|
||||
|
||||
apt-get install cmake libprotoc-dev libprotobuf-dev protobuf-compiler g++-4.9 openjdk-8-jdk -y
|
||||
rm -f /usr/bin/g++
|
||||
ln -s /usr/bin/g++-4.9 /usr/bin/g++
|
||||
}
|
||||
|
||||
function install-models {
|
||||
# this zip file is made by hand. A better option to add models is to use the gazebo repository
|
||||
if ! (wget -O /tmp/models.zip https://usfirst.collab.net/sf/frs/do/downloadFile/projects.wpilib/frs.simulation.frcsim_gazebo_models/frs1160?)
|
||||
then
|
||||
echo "*** failed to download models. Check your internet connection! ***"
|
||||
install-fail
|
||||
fi
|
||||
|
||||
unzip /tmp/models.zip -d /tmp
|
||||
mv /tmp/frcsim-gazebo-models/models ~/wpilib/simulation/models
|
||||
mv /tmp/frcsim-gazebo-models/worlds ~/wpilib/simulation/worlds
|
||||
}
|
||||
|
||||
function install-frcsim {
|
||||
check-environment
|
||||
|
||||
# Add Gazebo Repository and Key
|
||||
if ! echo "deb http://packages.osrfoundation.org/gazebo/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-latest.list
|
||||
then
|
||||
echo "*** Cannot add Gazebo repository!" 1>&2
|
||||
install-fail
|
||||
fi
|
||||
if ! (wget http://packages.osrfoundation.org/gazebo.key -O - | apt-key add -)
|
||||
then
|
||||
echo "*** Cannot add Gazebo repository key!" 1>&2
|
||||
if ! ping packages.osrfoundation.org -c 1 >/dev/null; then
|
||||
echo "*** The package host for Gazebo appears to be down. Try again later." 1>&2
|
||||
fi
|
||||
install-fail
|
||||
fi
|
||||
|
||||
install-toolchain
|
||||
|
||||
if ! apt-get install -y libgazebo6-dev gazebo6
|
||||
then
|
||||
echo "*** Could not install frcsim packages. See above output for details." 1>&2
|
||||
echo "*** Are you running another update or install?" 1>&2
|
||||
install-fail
|
||||
fi
|
||||
|
||||
install-eclipse-plugins
|
||||
install-gz_msgs
|
||||
install-eclipse
|
||||
install-desktops
|
||||
install-models
|
||||
|
||||
change-ownership
|
||||
|
||||
# Done
|
||||
echo "Installation Finished!!"
|
||||
}
|
||||
|
||||
function install-fail {
|
||||
echo "***INSTALLATION UNSUCCESSFUL***"
|
||||
echo "***Check the output about for anything that looks like errors***"
|
||||
echo "Please comment on the following to tutorial if you're unable to resolve your problem:"
|
||||
echo "https://wpilib.screenstepslive.com/s/4485/m/23353/l/478421-installing-frcsim-with-a-script-ubuntu"
|
||||
exit 1
|
||||
}
|
||||
|
||||
function change-ownership {
|
||||
chown -R $NON_SUDO_USER:$NON_SUDO_USER ~/wpilib
|
||||
}
|
||||
|
||||
if [ "$1" == "INSTALL-ROOT" ]
|
||||
then
|
||||
|
||||
if [ -z "$2" ]
|
||||
then
|
||||
echo "*** Could not set user ~/wpilib ownership to empty user***"
|
||||
install-fail
|
||||
else
|
||||
NON_SUDO_USER="$2"
|
||||
fi
|
||||
|
||||
if [ -z "$3" ]
|
||||
then
|
||||
PROMOTION_STATUS="release"
|
||||
else
|
||||
PROMOTION_STATUS="$3"
|
||||
fi
|
||||
|
||||
install-frcsim
|
||||
|
||||
elif [ "$1" == "INSTALL" ]
|
||||
then
|
||||
NON_SUDO_USER="$USER"
|
||||
PROMOTION_STATUS="$2"
|
||||
SUDO_ASKPASS=/usr/bin/ssh-askpass sudo bash -c "$0 INSTALL-ROOT $NON_SUDO_USER $PROMOTION_STATUS"
|
||||
elif [ "$1" == "REMOVE-ROOT" ]
|
||||
then
|
||||
remove-frcsim
|
||||
elif [ "$1" == "REMOVE" ]
|
||||
then
|
||||
NON_SUDO_USER="$USER"
|
||||
SUDO_ASKPASS=/usr/bin/ssh-askpass sudo bash -c "$0 REMOVE-ROOT $NON_SUDO_USER $PROMOTION_STATUS"
|
||||
else
|
||||
echo "***This script requires an argument!***"
|
||||
echo "***Run ./frcsim_installer.sh INSTALL to install***"
|
||||
echo "***The other option is REMOVE"
|
||||
fi
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
export GAZEBO_PLUGIN_PATH="${GAZEBO_PLUGIN_PATH}:${HOME}/wpilib/simulation/plugins"
|
||||
export GAZEBO_MODEL_PATH="${GAZEBO_MODEL_PATH}:${HOME}/wpilib/simulation/models"
|
||||
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${HOME}/wpilib/simulation/plugins"
|
||||
gazebo $@
|
||||
@@ -1,6 +1,25 @@
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
Cmake_minimum_required(VERSION 2.8)
|
||||
project(gz_msgs)
|
||||
|
||||
#copied from GazeboUtils.cmake
|
||||
macro (APPEND_TO_CACHED_STRING _string _cacheDesc)
|
||||
FOREACH (newItem ${ARGN})
|
||||
SET (${_string} "${${_string}} ${newItem}" CACHE INTERNAL ${_cacheDesc} FORCE)
|
||||
ENDFOREACH (newItem ${ARGN})
|
||||
endmacro (APPEND_TO_CACHED_STRING)
|
||||
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
if (NOT PROTOBUF_FOUND)
|
||||
MESSAGE ("Missing: Google Protobuf (libprotobuf-dev)")
|
||||
endif()
|
||||
if (NOT PROTOBUF_PROTOC_EXECUTABLE)
|
||||
MESSAGE ( "Missing: Google Protobuf Compiler (protobuf-compiler)")
|
||||
endif()
|
||||
if (NOT PROTOBUF_PROTOC_LIBRARY)
|
||||
MESSAGE ("Missing: Google Protobuf Compiler Library (libprotoc-dev)")
|
||||
endif()
|
||||
|
||||
#list all proto files used
|
||||
get_filename_component(PROTO_DIR src/main/proto ABSOLUTE)
|
||||
set(msgs
|
||||
@@ -62,3 +81,9 @@ else()
|
||||
endif()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} ${PROTOBUF_LIBRARIES})
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "$ENV{HOME}/wpilib/simulation/lib")
|
||||
|
||||
install(TARGETS ${PROJECT_NAME}
|
||||
DESTINATION "$ENV{HOME}/wpilib/simulation/lib")
|
||||
install(DIRECTORY "${GZ_MSGS_INCLUDE_DIR}/simulation"
|
||||
DESTINATION "$ENV{HOME}/wpilib/simulation/include")
|
||||
|
||||
@@ -1,6 +1,19 @@
|
||||
Building gz_msgs
|
||||
================
|
||||
|
||||
Currently uses cmake.
|
||||
This is build as a part of the whole cmake project.
|
||||
see top level building.md for detail
|
||||
gz_msgs currently uses cmake, is built on the end-users computer.
|
||||
This allows us to support various versions of protobuf (2.5 on Ubuntu 14.04, 2.6 on Ubuntu 15.10)
|
||||
|
||||
To build, run the following commands in the ~/wpilib/simulation/gz_msgs directory.
|
||||
If that directory doesn't exist, it means you haven't installed correctly.
|
||||
|
||||
If you're a developer for wpilib, you will need to unzip the simulation.zip file you published into ~/releases.
|
||||
If you are a student using FRCSim, you should have downloaded that zip when you installed frcsim.
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make
|
||||
make install
|
||||
|
||||
If you are installing FRCSim with the script, then this *should* have be done for you.
|
||||
|
||||
7
simulation/install_resources/eclipse.desktop
Normal file
7
simulation/install_resources/eclipse.desktop
Normal file
@@ -0,0 +1,7 @@
|
||||
[Desktop Entry]
|
||||
Name=Eclipse
|
||||
Exec=/usr/bin/eclipse
|
||||
Icon=/opt/eclipse/icon.xpm
|
||||
Type=Application
|
||||
Categories=Development;Education;Science;
|
||||
StartupNotify=true
|
||||
5
simulation/install_resources/frcsim
Executable file
5
simulation/install_resources/frcsim
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
export GAZEBO_PLUGIN_PATH="${HOME}/wpilib/simulation/plugins:${GAZEBO_PLUGIN_PATH}"
|
||||
export GAZEBO_MODEL_PATH="${HOME}/wpilib/simulation/models:${GAZEBO_MODEL_PATH}"
|
||||
export LD_LIBRARY_PATH="${HOME}/wpilib/simulation/plugins:${HOME}/wpilib/simulation/lib:${LD_LIBRARY_PATH}"
|
||||
gazebo --verbose $@
|
||||
9
simulation/install_resources/frcsim.desktop
Normal file
9
simulation/install_resources/frcsim.desktop
Normal file
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Name=FRCSim
|
||||
Keywords=frcsim,gazebo
|
||||
Exec=/usr/bin/frcsim
|
||||
Icon=gazebo
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
Terminal=false
|
||||
Categories=Development;IDE;Java;Education;Science
|
||||
BIN
simulation/install_resources/jar/jinput-2.0.5.jar
Normal file
BIN
simulation/install_resources/jar/jinput-2.0.5.jar
Normal file
Binary file not shown.
Binary file not shown.
BIN
simulation/install_resources/lib/libjinput-linux.so
Executable file
BIN
simulation/install_resources/lib/libjinput-linux.so
Executable file
Binary file not shown.
BIN
simulation/install_resources/lib/libjinput-linux64.so
Executable file
BIN
simulation/install_resources/lib/libjinput-linux64.so
Executable file
Binary file not shown.
1
simulation/install_resources/sim_ds
Executable file
1
simulation/install_resources/sim_ds
Executable file
@@ -0,0 +1 @@
|
||||
java -Djava.library.path=${HOME}/wpilib/simulation/lib -jar ~/wpilib/simulation/jar/SimDS-all.jar
|
||||
9
simulation/install_resources/sim_ds.desktop
Normal file
9
simulation/install_resources/sim_ds.desktop
Normal file
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Name=Sim DS
|
||||
Keywords=frcsim,driverstation
|
||||
Exec=/usr/bin/sim_ds
|
||||
Icon=/usr/share/icons/sim_ds/sim_ds_logo.png
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
Terminal=false
|
||||
Categories=Development;IDE;Java;Education;Science
|
||||
BIN
simulation/install_resources/sim_ds_logo.png
Normal file
BIN
simulation/install_resources/sim_ds_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.0 KiB |
2470
styleguide/cppguide.html
Normal file
2470
styleguide/cppguide.html
Normal file
File diff suppressed because it is too large
Load Diff
167
styleguide/eclipse-cpp-google-style.xml
Normal file
167
styleguide/eclipse-cpp-google-style.xml
Normal file
@@ -0,0 +1,167 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<profiles version="1">
|
||||
<profile kind="CodeFormatterProfile" name="Google C++" version="1">
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.lineSplit" value="80"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_member_access" value="16"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list" value="83"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment" value="2"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.tabulation.size" value="2"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_enumerator_list" value="51"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_declarator_list" value="16"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_empty_lines" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.join_wrapped_lines" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation" value="18"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration" value="18"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.brace_position_for_block" value="end_of_line"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.continuation_indentation" value="2"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_expression_list" value="0"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_conditional_expression" value="34"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces" value="1"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_compact_if" value="0"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_assignment" value="16"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain" value="18"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_statements_compare_to_body" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_binary_expression" value="16"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indent_statements_compare_to_block" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.tabulation.char" value="space"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.compact_else_if" value="true"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain" value="18"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.indentation.size" value="2"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments" value="do not insert"/>
|
||||
</profile>
|
||||
</profiles>
|
||||
337
styleguide/eclipse-java-google-style.xml
Normal file
337
styleguide/eclipse-java-google-style.xml
Normal file
@@ -0,0 +1,337 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<profiles version="12">
|
||||
<profile kind="CodeFormatterProfile" name="GoogleStyle" version="12">
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments.count_dependent" value="16|-1|16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_prefer_two_fragments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_comment_inline_tags" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_local_variable_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="1040"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type.count_dependent" value="1585|-1|1585"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields.count_dependent" value="16|-1|16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression.count_dependent" value="16|4|80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration.count_dependent" value="16|4|48"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration.count_dependent" value="16|4|49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.source" value="1.8"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration.count_dependent" value="16|4|48"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_local_variable_annotation" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants.count_dependent" value="16|5|48"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation.count_dependent" value="16|4|48"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="1585"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_type_annotation" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_field_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment_new_line_at_start_of_html_paragraph" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comment_prefix" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_parameter_annotation" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="1585"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation.count_dependent" value="16|5|80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter.count_dependent" value="1040|-1|1040"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package.count_dependent" value="1585|-1|1585"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.force_if_else_statement_brace" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="3"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_package_annotation" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation.count_dependent" value="16|-1|16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="1585"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.8"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_new_anonymous_class" value="20"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable.count_dependent" value="1585|-1|1585"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent" value="1585|-1|1585"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration.count_dependent" value="16|5|80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant.count_dependent" value="16|-1|16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="100"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="1585"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer.count_dependent" value="16|5|80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.8"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration.count_dependent" value="16|4|48"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method.count_dependent" value="1585|-1|1585"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression.count_dependent" value="16|-1|16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_member_annotation" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="1585"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call.count_dependent" value="16|5|80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments.count_dependent" value="16|-1|16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression.count_dependent" value="16|5|80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration.count_dependent" value="16|5|80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_for_statement" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
|
||||
</profile>
|
||||
</profiles>
|
||||
BIN
styleguide/include/link.png
Normal file
BIN
styleguide/include/link.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 189 B |
261
styleguide/include/styleguide.css
Normal file
261
styleguide/include/styleguide.css
Normal file
@@ -0,0 +1,261 @@
|
||||
/* General CSS */
|
||||
|
||||
body {
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
font-family: sans-serif;
|
||||
font-size: 10pt;
|
||||
margin-right: 100px;
|
||||
margin-left: 100px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
font-size: 18pt;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #06c;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 1em;
|
||||
padding: 25px;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin-top:1.5em;
|
||||
margin-bottom:.75em;
|
||||
}
|
||||
|
||||
h1 {font-size:200%;}
|
||||
h2 {font-size:167%;}
|
||||
h3 {font-size:133%;}
|
||||
h4 {font-size:120%;}
|
||||
h5 {font-size:110%;}
|
||||
|
||||
|
||||
table {
|
||||
border: 1px solid #bbb;
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
margin: 0 0 1.5em;
|
||||
vertical-align: middle;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
td, th {
|
||||
border: 1px solid #ccc;
|
||||
padding: 2px 12px;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
code, samp, var {
|
||||
background-color:#FAFAFA;
|
||||
white-space: nowrap
|
||||
}
|
||||
|
||||
pre {
|
||||
padding:6px 10px;
|
||||
background-color:#FAFAFA;
|
||||
border:1px solid #bbb;
|
||||
overflow:auto;
|
||||
}
|
||||
|
||||
pre.prettyprint {
|
||||
padding:6px 10px !important;
|
||||
border:1px solid #bbb !important;
|
||||
}
|
||||
|
||||
code.bad, code.badcode {
|
||||
color: magenta;
|
||||
}
|
||||
|
||||
pre.bad, pre.badcode {
|
||||
background-color:#ffe6d8;
|
||||
border-top:1px inset #a03;
|
||||
border-left:1px inset #a03;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin-top: 3.5em;
|
||||
border-width: 1px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* TOC CSS */
|
||||
|
||||
table.columns {
|
||||
border: none;
|
||||
}
|
||||
|
||||
td.two_columns {
|
||||
-webkit-column-count: 2;
|
||||
column-count: 2;
|
||||
}
|
||||
|
||||
.toc_category {
|
||||
font-size: 10pt;
|
||||
padding-top: 1em;
|
||||
padding-bottom: 1em;
|
||||
border-left-width: 2px;
|
||||
border-right-width: 2px;
|
||||
border-color: grey;
|
||||
}
|
||||
|
||||
.toc_stylepoint {
|
||||
font-size: 10pt;
|
||||
padding-top: 1em;
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
|
||||
li.toc_entry {
|
||||
padding-right: 1em;
|
||||
display: inline;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* This space is required to trigger the linewrap on the links
|
||||
* at href boundaries
|
||||
*/
|
||||
li.toc_entry::after {
|
||||
content: " ";
|
||||
}
|
||||
|
||||
li.toc_entry a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Horizontal TOC */
|
||||
.toc td, .toc th {
|
||||
border-width: 1px 5px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Vertical TOC */
|
||||
|
||||
.toc td.two_columns {
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
/* Special Sections */
|
||||
|
||||
address {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.revision {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.headerbox {
|
||||
margin-left: 50%;
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
.legend {
|
||||
padding-top: 1em;
|
||||
margin-left: 50%;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
.link_button {
|
||||
float: left;
|
||||
display: none;
|
||||
background-color: #f8f8ff;
|
||||
border-color: #f0f0ff;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
font-size: 75%;
|
||||
margin-top: 0;
|
||||
margin-left: -50px;
|
||||
padding: 24px;
|
||||
border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
}
|
||||
|
||||
.ignoreLink {
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.divider{
|
||||
width:5px;
|
||||
height:auto;
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
/* Style Guide semantic CSS */
|
||||
|
||||
.summary {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.stylebody {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.stylepoint_section {
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
font-family: sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.stylepoint_subsection {
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.stylepoint_subsubsection {
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.definition:before {
|
||||
content: "Definition: ";
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.pros:before {
|
||||
content: "Pros: ";
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.cons:before {
|
||||
content: "Cons: ";
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.decision:before {
|
||||
content: "Decision: ";
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.exception:before {
|
||||
content: "Exception: ";
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.note:before {
|
||||
content: "Note: ";
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
289
styleguide/include/styleguide.js
Normal file
289
styleguide/include/styleguide.js
Normal file
@@ -0,0 +1,289 @@
|
||||
TocTypeEnum = {
|
||||
VERTICAL: 1,
|
||||
HORIZONTAL: 2
|
||||
};
|
||||
|
||||
function CreateTOC(tocElement) {
|
||||
|
||||
// Find the toc element DIV. We'll place our TOC there.
|
||||
var toc = document.getElementById(tocElement);
|
||||
|
||||
var tocTypeClass = toc.className;
|
||||
var tocType;
|
||||
|
||||
switch (tocTypeClass) {
|
||||
case 'horizontal_toc':
|
||||
tocType = TocTypeEnum.HORIZONTAL;
|
||||
break;
|
||||
case 'vertical_toc':
|
||||
tocType = TocTypeEnum.VERTICAL;
|
||||
break;
|
||||
default:
|
||||
tocType = TocTypeEnum.VERTICAL;
|
||||
break;
|
||||
}
|
||||
|
||||
// If toc_levels is defined, set headingLevels to it.
|
||||
// Otherwise, use default value of "h2,h3"
|
||||
var headingLevels;
|
||||
if (typeof toc_levels === 'undefined') {
|
||||
headingLevels = 'h2,h3';
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
// Collect all section heading elements in an array
|
||||
var headings = document.querySelectorAll(headingLevels);
|
||||
|
||||
// Add TOC title elements
|
||||
var tocHeadingDiv = document.createElement('div');
|
||||
toc.appendChild(tocHeadingDiv);
|
||||
tocHeadingDiv.className = 'toc_title';
|
||||
var tocHeading = document.createElement('h3');
|
||||
toc.appendChild(tocHeading);
|
||||
tocHeading.className = 'ignoreLink';
|
||||
tocHeading.id = 'toc';
|
||||
var tocText = document.createTextNode('Table of Contents');
|
||||
tocHeading.appendChild(tocText);
|
||||
|
||||
// Add table and tbody
|
||||
var tocTable = document.createElement('table');
|
||||
if (tocType == TocTypeEnum.VERTICAL) {
|
||||
tocTable.className = 'columns';
|
||||
}
|
||||
toc.appendChild(tocTable);
|
||||
|
||||
var tbody_element = document.createElement('tbody');
|
||||
tbody_element.setAttribute('valign', 'top');
|
||||
tbody_element.className = 'toc';
|
||||
tocTable.appendChild(tbody_element);
|
||||
|
||||
// Get the highest level heading
|
||||
var firstHeading = headings[0];
|
||||
var masterLevel = parseInt(headingLevels.charAt(1));
|
||||
|
||||
// Get the lowest heading level
|
||||
var lowestLevel = parseInt(headingLevels.charAt(headingLevels - 1));
|
||||
|
||||
switch (tocType) {
|
||||
case TocTypeEnum.HORIZONTAL:
|
||||
CreateHorizontalTOC(headings, masterLevel, lowestLevel, tbody_element);
|
||||
break;
|
||||
case TocTypeEnum.VERTICAL:
|
||||
CreateVerticalTOC(headings, masterLevel, lowestLevel, tbody_element);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
function CreateHorizontalTOC(
|
||||
headings, masterLevel, lowestLevel, tbody_element) {
|
||||
|
||||
// Initialize the header counter
|
||||
var h = 0;
|
||||
var ignoreChildren = false;
|
||||
|
||||
while (h < headings.length) {
|
||||
// Get current heading
|
||||
var heading = headings[h];
|
||||
|
||||
// Get the current heading level
|
||||
var level = parseInt(heading.tagName.charAt(1));
|
||||
|
||||
if (isNaN(level) || level < 1 || level > lowestLevel) continue;
|
||||
|
||||
// If level is a masterLevel, make it a TOC parent category
|
||||
if ((level == masterLevel) && (!hasClass(heading, 'ignoreLink'))) {
|
||||
toc_current_row = AddTOCMaster(tbody_element, heading);
|
||||
ignoreChildren = false;
|
||||
}
|
||||
|
||||
if ((level == masterLevel) && (hasClass(heading, 'ignoreLink'))) {
|
||||
ignoreChildren = true;
|
||||
}
|
||||
|
||||
if ((level != masterLevel) && (!ignoreChildren)) {
|
||||
AddTOCElements(toc_current_row, heading);
|
||||
}
|
||||
|
||||
// Advance the header counter
|
||||
h++;
|
||||
}
|
||||
}
|
||||
|
||||
// Adds a master Table of Content heading
|
||||
function AddTOCMaster(tocTable, heading) {
|
||||
|
||||
// Add the table row scaffolding
|
||||
var toc_tr = document.createElement('tr');
|
||||
tocTable.appendChild(toc_tr);
|
||||
toc_tr.setAttribute('valign', 'top');
|
||||
var toc_tr_td = document.createElement('td');
|
||||
toc_tr.appendChild(toc_tr_td);
|
||||
var toc_category = document.createElement('div');
|
||||
toc_tr_td.appendChild(toc_category);
|
||||
toc_category.className = 'toc_category';
|
||||
|
||||
// Create the link to this header
|
||||
var link = document.createElement('a');
|
||||
link.href = '#' + heading.id; // Create the anchor link
|
||||
link.textContent = heading.textContent; // Link text is same as heading
|
||||
toc_category.appendChild(link);
|
||||
|
||||
// Add the container table cell for its children
|
||||
var toc_td = document.createElement('td');
|
||||
toc_tr.appendChild(toc_td);
|
||||
var toc_td_div = document.createElement('div');
|
||||
toc_td_div.className = 'toc_stylepoint';
|
||||
toc_td.appendChild(toc_td_div);
|
||||
|
||||
return (toc_td_div);
|
||||
}
|
||||
|
||||
// Adds Table of Contents element to a master heading as children
|
||||
function AddTOCElements(toc_div, heading) {
|
||||
|
||||
if (heading.offsetParent === null) {
|
||||
// The element is currently hidden, so don't create a TOC entry
|
||||
} else {
|
||||
// Create the list item element
|
||||
var toc_list_element = document.createElement('li');
|
||||
toc_list_element.className = 'toc_entry';
|
||||
toc_div.appendChild(toc_list_element);
|
||||
|
||||
// Create the link to this header
|
||||
var link = document.createElement('a');
|
||||
link.href = '#' + heading.id; // Create the anchor link
|
||||
link.textContent = heading.textContent; // Link text is same as heading
|
||||
toc_list_element.appendChild(link);
|
||||
}
|
||||
}
|
||||
|
||||
function CreateVerticalTOC(headings, masterLevel, lowestLevel, tbody_element) {
|
||||
|
||||
// Create the Column scaffolding
|
||||
var toc_tr = document.createElement('tr');
|
||||
tbody_element.appendChild(toc_tr);
|
||||
var toc_tr_td = document.createElement('td');
|
||||
toc_tr_td.className = 'two_columns';
|
||||
toc_tr.appendChild(toc_tr_td);
|
||||
|
||||
|
||||
// Initialize the header counter and the current row
|
||||
var h = 0;
|
||||
var toc_current_col = null;
|
||||
var ignoreChildren = false;
|
||||
|
||||
while (h < headings.length) {
|
||||
// Get current heading
|
||||
var heading = headings[h];
|
||||
|
||||
// Get the current heading level
|
||||
var level = parseInt(heading.tagName.charAt(1));
|
||||
|
||||
if (isNaN(level) || level < 1 || level > lowestLevel) continue;
|
||||
|
||||
// If level is a masterLevel, make it a TOC parent category
|
||||
if ((level == masterLevel) && (!hasClass(heading, 'ignoreLink'))) {
|
||||
if (heading.offsetParent === null) {
|
||||
// The element is currently hidden, so don't create a TOC entry
|
||||
} else {
|
||||
var td_dl = document.createElement('dl');
|
||||
toc_tr_td.appendChild(td_dl);
|
||||
var td_dt = document.createElement('dt');
|
||||
td_dl.appendChild(td_dt);
|
||||
toc_current_col = td_dl;
|
||||
|
||||
// Create the link to this header
|
||||
var link = document.createElement('a');
|
||||
link.href = '#' + heading.id; // Create the anchor link
|
||||
link.textContent = heading.textContent; // Link text is same as heading
|
||||
td_dt.appendChild(link);
|
||||
ignoreChildren = false;
|
||||
}
|
||||
}
|
||||
|
||||
// If level is a masterLevel but it's specified to ignore links, skip it
|
||||
// and its children.
|
||||
if ((level == masterLevel) && (hasClass(heading, 'ignoreLink'))) {
|
||||
ignoreChildren = true;
|
||||
}
|
||||
|
||||
if ((level != masterLevel) && (!ignoreChildren)) {
|
||||
if (heading.offsetParent === null) {
|
||||
// The element is currently hidden, so don't create a TOC entry
|
||||
} else {
|
||||
var td_dd = document.createElement('dd');
|
||||
toc_current_col.appendChild(td_dd);
|
||||
// Create the link to this header
|
||||
var link = document.createElement('a');
|
||||
link.href = '#' + heading.id; // Create the anchor link
|
||||
link.textContent = heading.textContent; // Link text is same as heading
|
||||
td_dd.appendChild(link);
|
||||
}
|
||||
}
|
||||
|
||||
// Advance the header counter
|
||||
h++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Utility function for finding elements with a given
|
||||
* class.
|
||||
*/
|
||||
function hasClass(element, cls) {
|
||||
return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Linkify all h2 through h4 headers, except for those marked
|
||||
* "ignoreLink"
|
||||
*/
|
||||
|
||||
// Add the link image to the element.
|
||||
function LinkifyHeader(header, fileName, sizePixels) {
|
||||
var link = document.createElement('a');
|
||||
link.href = '#' + header.id;
|
||||
link.alt = 'link to ' + header.id;
|
||||
link.innerHTML =
|
||||
'<img src="include/' + fileName + '"' +
|
||||
' width=' + sizePixels +
|
||||
' height=' + sizePixels +
|
||||
' style="float:left;position:relative;bottom:5px;">';
|
||||
header.appendChild(link);
|
||||
}
|
||||
|
||||
// Find all elements of the given tag and linkify if
|
||||
// they don't have 'ignoreLink' in their class.
|
||||
function LinkifyHeadersForTag(tagName) {
|
||||
var headers = document.getElementsByTagName(tagName);
|
||||
var header;
|
||||
for (var j = 0; j != headers.length; j++) {
|
||||
header = headers[j];
|
||||
if (!hasClass(header, 'ignoreLink') && ('id' in header)) {
|
||||
if (header.id != '') {
|
||||
LinkifyHeader(header, 'link.png', 21);
|
||||
header.style.left = '-46px';
|
||||
header.style.position = 'relative';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Linkify all h2, h3, and h4s. h1s are titles.
|
||||
function LinkifyHeaders() {
|
||||
LinkifyHeadersForTag('h2');
|
||||
LinkifyHeadersForTag('h3');
|
||||
LinkifyHeadersForTag('h4');
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the style guide by showing all internal
|
||||
* elements and then linkifying the headers.
|
||||
*/
|
||||
|
||||
function initStyleGuide() {
|
||||
LinkifyHeaders();
|
||||
CreateTOC('tocDiv');
|
||||
}
|
||||
515
styleguide/javaguide.css
Normal file
515
styleguide/javaguide.css
Normal file
@@ -0,0 +1,515 @@
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
td, th {
|
||||
border: 1px solid #ccc;
|
||||
padding: 2px 12px;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
code, samp, var {
|
||||
color: #060;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 10pt;
|
||||
display: block;
|
||||
color: #060;
|
||||
background-color: #e8fff6;
|
||||
border-color: #f0fff0;
|
||||
border-style: solid;
|
||||
border-top-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-left-width: 5px;
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
pre.badcode {
|
||||
color: #c00;
|
||||
background-color: #ffe6d8;
|
||||
border-color: #fff0f0;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin-top: 3.5em;
|
||||
border-width: 1px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
html {
|
||||
margin-top:2em;
|
||||
margin-left:10%;
|
||||
margin-right:10%;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
.bp-reset-element,
|
||||
body,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary,
|
||||
blockquote,
|
||||
q,
|
||||
th,
|
||||
td,
|
||||
caption,
|
||||
table,
|
||||
div,
|
||||
span,
|
||||
object,
|
||||
iframe,
|
||||
p,
|
||||
pre,
|
||||
a,
|
||||
abbr,
|
||||
acronym,
|
||||
address,
|
||||
code,
|
||||
del,
|
||||
dfn,
|
||||
em,
|
||||
img,
|
||||
dl,
|
||||
dt,
|
||||
dd,
|
||||
ol,
|
||||
ul,
|
||||
li,
|
||||
fieldset,
|
||||
form,
|
||||
label,
|
||||
legend,
|
||||
caption,
|
||||
tbody,
|
||||
tfoot,
|
||||
thead,
|
||||
tr {
|
||||
margin:0;
|
||||
padding:0;
|
||||
border:0;
|
||||
font-weight:inherit;
|
||||
font-style:inherit;
|
||||
font-size:100%;
|
||||
font-family:inherit;
|
||||
vertical-align:baseline;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family:'Arial', sans-serif;
|
||||
font-size:81.25%;
|
||||
color:#222;
|
||||
background-color:#fff;
|
||||
line-height:1.67;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.change {
|
||||
text-align: right;
|
||||
margin-bottom:1em;
|
||||
}
|
||||
|
||||
em {
|
||||
font-style: italic
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-bottom:.50em;
|
||||
text-align: center
|
||||
}
|
||||
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin-top:1.5em;
|
||||
margin-bottom:.75em;
|
||||
}
|
||||
|
||||
h1 {font-size:200%;}
|
||||
h2 {font-size:167%;}
|
||||
h3 {font-size:133%;}
|
||||
h4 {font-size:120%;}
|
||||
h5 {font-size:110%;}
|
||||
|
||||
p {
|
||||
margin:0 0 1.5em;
|
||||
}
|
||||
|
||||
a[href=''] {
|
||||
cursor:default;
|
||||
}
|
||||
|
||||
h1 img,
|
||||
h2 img,
|
||||
h3 img,
|
||||
h4 img,
|
||||
h5 img,
|
||||
h6 img {
|
||||
margin:0;
|
||||
}
|
||||
|
||||
a img {
|
||||
border:none;
|
||||
}
|
||||
|
||||
pre {
|
||||
margin:1.5em 0;
|
||||
white-space:pre;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
tt {
|
||||
font:1em 'Droid Sans Mono', monospace;
|
||||
line-height:1.5;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin:0 0 1.5em 0;
|
||||
}
|
||||
|
||||
dl dt {
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-left:1.5em;
|
||||
}
|
||||
|
||||
dd.toc3 {
|
||||
margin-left:3em;
|
||||
}
|
||||
|
||||
hr {
|
||||
height:0;
|
||||
border:0;
|
||||
border-top:1px solid #ccc;
|
||||
background-color:#ccc;
|
||||
}
|
||||
|
||||
table {
|
||||
border:1px solid #bbb;
|
||||
border-spacing:0;
|
||||
border-collapse:collapse;
|
||||
margin:0 0 1.5em;
|
||||
vertical-align:middle;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
table.unlined,
|
||||
table.unlined th,
|
||||
table.unlined tr,
|
||||
table.unlined td {
|
||||
border:0;
|
||||
}
|
||||
|
||||
th,
|
||||
td,
|
||||
caption {
|
||||
float:none !important;
|
||||
text-align:left;
|
||||
font-weight:normal;
|
||||
vertical-align:middle;
|
||||
padding:4px;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding:0;
|
||||
}
|
||||
|
||||
td {
|
||||
border:1px solid #bbb;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
th {
|
||||
border:0;
|
||||
border-bottom:1px solid black;
|
||||
font-weight:bold;
|
||||
background:rgb(229, 236, 249);
|
||||
}
|
||||
|
||||
table th code {
|
||||
background-color:inherit;
|
||||
color:inherit;
|
||||
}
|
||||
|
||||
table tfoot th {
|
||||
border:1px solid #bbb;
|
||||
}
|
||||
|
||||
tfoot {
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
caption {
|
||||
background:#eee;
|
||||
}
|
||||
|
||||
table[border='0'] {
|
||||
border:none;
|
||||
}
|
||||
|
||||
table[border='0']>tbody>tr>td,
|
||||
table[border='0']>tr>td {
|
||||
border:none;
|
||||
}
|
||||
|
||||
tr.alt td,
|
||||
td.alt {
|
||||
background-color:#efefef;
|
||||
}
|
||||
|
||||
table.striped tr:nth-child(even) td,
|
||||
table tr.even td {
|
||||
background:#efefef;
|
||||
}
|
||||
|
||||
table.columns {
|
||||
border:none;
|
||||
}
|
||||
|
||||
table.columns>tbody>tr>td,
|
||||
table.columns>tr>td {
|
||||
border:none;
|
||||
padding:0 3em 0 0;
|
||||
}
|
||||
|
||||
table.columns>tbody>tr>td:last-child,
|
||||
table.columns>tr>td:last-child {
|
||||
border:none;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
margin:0 1.5em 1.5em 0;
|
||||
padding-left:2em;
|
||||
}
|
||||
|
||||
li ul,
|
||||
li ol {
|
||||
margin:0;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type:disc;
|
||||
}
|
||||
|
||||
ol {
|
||||
list-style-type:decimal;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type:disc;
|
||||
}
|
||||
|
||||
ul ul {
|
||||
list-style-type:circle;
|
||||
}
|
||||
|
||||
ul ul ul {
|
||||
list-style-type:square;
|
||||
}
|
||||
|
||||
ul.disc {
|
||||
list-style-type:disc;
|
||||
}
|
||||
|
||||
ul.circle {
|
||||
list-style-type:circle;
|
||||
}
|
||||
|
||||
ul.square {
|
||||
list-style-type:square;
|
||||
}
|
||||
|
||||
ol {
|
||||
list-style-type:decimal;
|
||||
}
|
||||
|
||||
ol ol {
|
||||
list-style-type:lower-alpha;
|
||||
}
|
||||
|
||||
ol ol ol {
|
||||
list-style-type:lower-roman;
|
||||
}
|
||||
|
||||
ol ul {
|
||||
list-style-type:circle;
|
||||
}
|
||||
|
||||
ol.decimal {
|
||||
list-style-type:decimal;
|
||||
}
|
||||
|
||||
ol.upper-alpha {
|
||||
list-style-type:upper-alpha;
|
||||
}
|
||||
|
||||
ol.lower-alpha {
|
||||
list-style-type:lower-alpha;
|
||||
}
|
||||
|
||||
ol.upper-roman {
|
||||
list-style-type:upper-roman;
|
||||
}
|
||||
|
||||
ol.lower-roman {
|
||||
list-style-type:lower-roman;
|
||||
}
|
||||
|
||||
ol.nolist,
|
||||
ul.nolist {
|
||||
padding-left:0;
|
||||
list-style-image:none;
|
||||
list-style-type:none;
|
||||
margin-left:0;
|
||||
}
|
||||
|
||||
.center {
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre {
|
||||
color:#009900;
|
||||
}
|
||||
|
||||
kbd {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
table.striped code {
|
||||
background-color:inherit;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding:6px 10px;
|
||||
background-color:#FAFAFA;
|
||||
border:1px solid #bbb;
|
||||
overflow:auto;
|
||||
}
|
||||
|
||||
pre.prettyprint {
|
||||
padding:6px 10px !important;
|
||||
border:1px solid #bbb !important;
|
||||
}
|
||||
|
||||
code.bad, code.badcode {
|
||||
color: magenta;
|
||||
}
|
||||
pre.bad, pre.badcode {
|
||||
background-color:#ffe6d8;
|
||||
border-top:1px inset #a03;
|
||||
border-left:1px inset #a03;
|
||||
}
|
||||
|
||||
.tip {
|
||||
background-color:#fffbd9;
|
||||
padding:6px 8px 6px 10px;
|
||||
border-left:6px solid #ffef70;
|
||||
}
|
||||
|
||||
.note {
|
||||
background-color:#e5ecf9;
|
||||
padding:6px 8px 6px 10px;
|
||||
border-left:6px solid #36c;
|
||||
}
|
||||
|
||||
@media print {
|
||||
|
||||
.str {
|
||||
color:#060;
|
||||
}
|
||||
|
||||
.kwd {
|
||||
color:#006;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.com {
|
||||
color:#600;
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
.typ {
|
||||
color:#404;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.lit {
|
||||
color:#044;
|
||||
}
|
||||
|
||||
.pun,
|
||||
.opn,
|
||||
.clo {
|
||||
color:#440;
|
||||
}
|
||||
|
||||
.pln {
|
||||
color:#000;
|
||||
}
|
||||
|
||||
.tag {
|
||||
color:#006;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.atn {
|
||||
color:#404;
|
||||
}
|
||||
|
||||
.atv {
|
||||
color:#060;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-style:italic;
|
||||
}
|
||||
}
|
||||
|
||||
ol.linenums {
|
||||
margin-top:0;
|
||||
margin-bottom:0;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color:#FAFAFA;
|
||||
padding: 0.25em 0.5em;
|
||||
white-space: nowrap
|
||||
}
|
||||
806
styleguide/javaguide.html
Normal file
806
styleguide/javaguide.html
Normal file
@@ -0,0 +1,806 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<link rel="stylesheet" type="text/css" href="javaguide.css"/>
|
||||
<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"
|
||||
type="text/javascript"></script>
|
||||
<link href="http://www.google.com/favicon.ico"
|
||||
type="image/x-icon" rel="shortcut icon" />
|
||||
<title>WPILib Java Style</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>WPILib Java Style (Based on the
|
||||
<a href=http://google-styleguide.googlecode.com/svn/trunk/javaguide.html>Google Java Style Guide</a>)</h1>
|
||||
<div class="change">Last changed: June 19, 2015</div>
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td>
|
||||
<dl>
|
||||
<br>
|
||||
<dt class="toc1">
|
||||
<a href="#s1-introduction">1 Introduction</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<a href="#s1.1-terminology">1.1 Terminology notes</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s1.2-guide-notes">1.2 Guide notes</a>
|
||||
</dd>
|
||||
<br>
|
||||
<dt class="toc1">
|
||||
<a href="#s2-source-file-basics">2 Source file basics</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<a href="#s2.1-file-name">2.1 File name</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s2.2-file-encoding">2.2 File encoding: UTF-8</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s2.3-special-characters">2.3 Special characters</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s2.3.1-whitespace-characters">2.3.1 Whitespace characters</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s2.3.2-special-escape-sequences">2.3.2 Special escape sequences</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s2.3.3-non-ascii-characters">2.3.3 Non-ASCII characters</a>
|
||||
</dd>
|
||||
<br>
|
||||
<dt class="toc1">
|
||||
<a href="#s3-source-file-structure">3 Source file structure</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<a href="#s3.1-copyright-statement">3.1 License or copyright information, if present</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s3.2-package-statement">3.2 Package statement</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s3.3-import-statements">3.3 Import statements</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s3.3.1-wildcard-imports">3.3.1 No wildcard imports</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s3.3.2-import-line-wrapping">3.3.2 No line-wrapping</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s3.3.3-import-ordering-and-spacing">3.3.3 Ordering and spacing</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s3.4-class-declaration">3.4 Class declaration</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s3.4.1-one-top-level-class">3.4.1 Exactly one top-level class declaration</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s3.4.2-class-member-ordering">3.4.2 Class member ordering</a>
|
||||
</dd>
|
||||
</dl>
|
||||
</td><td>
|
||||
<dl>
|
||||
<br>
|
||||
<dt class="toc1">
|
||||
<a href="#s4-formatting">4 Formatting</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<a href="#s4.1-braces">4.1 Braces</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.1.1-braces-always-used">4.1.1 Braces are used where optional</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.1.2-blocks-k-r-style">4.1.2 Nonempty blocks: K & R style</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.1.3-braces-empty-blocks">4.1.3 Empty blocks: may be concise</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s4.2-block-indentation">4.2 Block indentation: +2 spaces</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s4.3-one-statement-per-line">4.3 One statement per line</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s4.4-column-limit">4.4 Column limit: 80 or 100</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s4.5-line-wrapping">4.5 Line-wrapping</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.5.1-line-wrapping-where-to-break">4.5.1 Where to break</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.5.2-line-wrapping-indent">4.5.2 Indent continuation lines at least +4 spaces</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s4.6-whitespace">4.6 Whitespace</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.6.1-vertical-whitespace">4.6.1 Vertical Whitespace</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.6.2-horizontal-whitespace">4.6.2 Horizontal whitespace</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.6.3-horizontal-alignment">4.6.3 Horizontal alignment: never required</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s4.7-grouping-parentheses">4.7 Grouping parentheses: recommended</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s4.8-specific-constructs">4.8 Specific constructs</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.8.1-enum-classes">4.8.1 Enum classes</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.8.2-variable-declarations">4.8.2 Variable declarations</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.8.3-arrays">4.8.3 Arrays</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.8.4-switch">4.8.4 Switch statements</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.8.5-annotations">4.8.5 Annotations</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.8.6-comments">4.8.6 Comments</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.8.7-modifiers">4.8.7 Modifiers</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s4.8.8-numeric-literals">4.8.8 Numeric Literals</a>
|
||||
</dd>
|
||||
</dl>
|
||||
</td><td>
|
||||
<dl>
|
||||
<br>
|
||||
<dt class="toc1">
|
||||
<a href="#s5-naming">5 Naming</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<a href="#s5.1-identifier-names">5.1 Rules common to all identifiers</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s5.2-specific-identifier-names">5.2 Rules by identifier type</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s5.2.1-package-names">5.2.1 Package names</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s5.2.2-class-names">5.2.2 Class names</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s5.2.3-method-names">5.2.3 Method names</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s5.2.4-constant-names">5.2.4 Constant names</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s5.2.5-non-constant-field-names">5.2.5 Non-constant field names</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s5.2.6-parameter-names">5.2.6 Parameter names</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s5.2.7-local-variable-names">5.2.7 Local variable names</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s5.2.8-type-variable-names">5.2.8 Type variable names</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s5.3-camel-case">5.3 Camel case: defined</a>
|
||||
</dd>
|
||||
<br>
|
||||
<dt class="toc1">
|
||||
<a href="#s6-programming-practices">6 Programming Practices</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<a href="#s6.1-override-annotation">6.1 @Override: always used</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s6.2-caught-exceptions">6.2 Caught exceptions: not ignored</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s6.3-static-members">6.3 Static members: qualified using class</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s6.4-finalizers">6.4 Finalizers: not used</a>
|
||||
</dd>
|
||||
<br>
|
||||
<dt class="toc1">
|
||||
<a href="#s7-javadoc">7 Javadoc</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<a href="#s7.1-javadoc-formatting">7.1 Formatting</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s7.1.1-javadoc-multi-line">7.1.1 General form</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s7.1.2-javadoc-paragraphs">7.1.2 Paragraphs</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s7.1.3-javadoc-at-clauses">7.1.3 At-clauses</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s7.2-summary-fragment">7.2 The summary fragment</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="#s7.3-javadoc-where-required">7.3 Where Javadoc is used</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s7.3.1-javadoc-exception-self-explanatory">7.3.1 Exception: self-explanatory methods</a>
|
||||
</dd>
|
||||
<dd class="toc3">
|
||||
<a href="#s7.3.2-javadoc-exception-overrides">7.3.2 Exception: overrides</a>
|
||||
</dd>
|
||||
</dl>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div><a name="s1-introduction"/>
|
||||
<h2>1 Introduction <a href="#s1-introduction"><img height="21" width="21" src="javaguidelink.png"/></a></h2>
|
||||
|
||||
<p><strong>This guide is a work in progress.</strong>
|
||||
We are currently working on getting this guide updated to
|
||||
a point where it is useful for WPILib developers to use.</p>
|
||||
|
||||
<p>This document serves as the style guide for WPILib. It is <em>heavily</em>
|
||||
based on the Google Java Style Guide and copies pretty much word-for-word
|
||||
the formatting/style components of the guide while cutting a couple
|
||||
of the programming practices. As this guide evolves, we will likely
|
||||
introduce more suggested/mandated programming practices specific
|
||||
to WPILib.</p>
|
||||
<p>It is encouraged that anyone working on the Java WPILib also
|
||||
read the corresponding C++ guide, as we generally try to develop
|
||||
the C++ and Java components of the library in parallel and many
|
||||
programming practices true in one language will be true in the other
|
||||
(although this is not universally true).</p>
|
||||
</p><a name="s1.1-terminology"/>
|
||||
<h3>1.1 Terminology notes <a href="#s1.1-terminology"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>In this document, unless otherwise clarified:</p><ol><li>The term <em>class</em> is used inclusively to mean an "ordinary" class, enum class,
|
||||
interface or annotation type (<code class="prettyprint lang-java">@interface</code>).</li><li>The term <em>comment</em> always refers to <em>implementation</em> comments. We do not
|
||||
use the phrase "documentation comments", instead using the common term "Javadoc."</li></ol><p>Other "terminology notes" will appear occasionally throughout the document.</p><a name="s1.2-guide-notes"/>
|
||||
<h3>1.2 Guide notes <a href="#s1.2-guide-notes"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>Example code in this document is <strong>non-normative</strong>. That is, while the examples
|
||||
are in Google Style, they may not illustrate the <em>only</em> stylish way to represent the
|
||||
code. Optional formatting choices made in examples should not be enforced as rules.</p><a name="s2-source-file-basics"/>
|
||||
<h2>2 Source file basics <a href="#s2-source-file-basics"><img height="21" width="21" src="javaguidelink.png"/></a></h2>
|
||||
<a name="s2.1-file-name"/>
|
||||
<h3>2.1 File name <a href="#s2.1-file-name"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>The source file name consists of the case-sensitive name of the top-level class it contains,
|
||||
plus the <code>.java</code> extension.</p><a name="s2.2-file-encoding"/>
|
||||
<h3>2.2 File encoding: UTF-8 <a href="#s2.2-file-encoding"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>Source files are encoded in <strong>UTF-8</strong>.</p><a name="s2.3-special-characters"/>
|
||||
<h3>2.3 Special characters <a href="#s2.3-special-characters"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<a name="s2.3.1-whitespace-characters"/>
|
||||
<h4>2.3.1 Whitespace characters <a href="#s2.3.1-whitespace-characters"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Aside from the line terminator sequence, the <strong>ASCII horizontal space
|
||||
character</strong> (<strong>0x20</strong>) is the only whitespace character that appears
|
||||
anywhere in a source file. This implies that:</p><ol><li>All other whitespace characters in string and character literals are escaped.</li><li>Tab characters are <strong>not</strong> used for indentation.</li></ol><a name="s2.3.2-special-escape-sequences"/>
|
||||
<h4>2.3.2 Special escape sequences <a href="#s2.3.2-special-escape-sequences"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>For any character that has a special escape sequence
|
||||
(<code class="prettyprint lang-java">\b</code>,
|
||||
<code class="prettyprint lang-java">\t</code>,
|
||||
<code class="prettyprint lang-java">\n</code>,
|
||||
<code class="prettyprint lang-java">\f</code>,
|
||||
<code class="prettyprint lang-java">\r</code>,
|
||||
<code class="prettyprint lang-java">\"</code>,
|
||||
<code class="prettyprint lang-java">\'</code> and
|
||||
<code class="prettyprint lang-java">\\</code>), that sequence
|
||||
is used rather than the corresponding octal
|
||||
(e.g. <code class="badcode">\012</code>) or Unicode
|
||||
(e.g. <code class="badcode">\u000a</code>) escape.</p><a name="s2.3.3-non-ascii-characters"/>
|
||||
<h4>2.3.3 Non-ASCII characters <a href="#s2.3.3-non-ascii-characters"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>For the remaining non-ASCII characters, either the actual Unicode character
|
||||
(e.g. <code class="prettyprint lang-java">∞</code>) or the equivalent Unicode escape
|
||||
(e.g. <code class="prettyprint lang-java">\u221e</code>) is used, depending only on which
|
||||
makes the code <strong>easier to read and understand</strong>.</p><p class="tip"><strong>Tip:</strong> In the Unicode escape case, and occasionally even when actual
|
||||
Unicode characters are used, an explanatory comment can be very helpful.</p><p>Examples:</p><table><tr><th>Example</th><th>Discussion</th></tr><tr><td><code class="prettyprint lang-java">String unitAbbrev = "μs";</code></td><td>Best: perfectly clear even without a comment.</td></tr><tr><td><code class="prettyprint lang-java">String unitAbbrev = "\u03bcs"; // "μs"</code></td><td>Allowed, but there's no reason to do this.</td></tr><tr><td><code class="prettyprint lang-java">String unitAbbrev = "\u03bcs";
|
||||
// Greek letter mu, "s"</code></td><td>Allowed, but awkward and prone to mistakes.</td></tr><tr><td><code class="badcode">String unitAbbrev = "\u03bcs";</code></td><td>Poor: the reader has no idea what this is.</td></tr><tr><td><code class="prettyprint lang-java">return '\ufeff' + content;
|
||||
// byte order mark</code></td><td>Good: use escapes for non-printable characters, and comment if necessary.</td></tr></table><p class="tip"><strong>Tip:</strong> Never make your code less readable simply out of fear that
|
||||
some programs might not handle non-ASCII characters properly. If that should happen, those
|
||||
programs are <strong>broken</strong> and they must be <strong>fixed</strong>.</p><a name="filestructure"/><a name="s3-source-file-structure"/>
|
||||
<h2>3 Source file structure <a href="#s3-source-file-structure"><img height="21" width="21" src="javaguidelink.png"/></a></h2>
|
||||
<div><p>A source file consists of, <strong>in order</strong>:</p><ol><li>License or copyright information, if present</li><li>Package statement</li><li>Import statements</li><li>Exactly one top-level class</li></ol></div><p><strong>Exactly one blank line</strong> separates each section that is present.</p><a name="s3.1-copyright-statement"/>
|
||||
<h3>3.1 License or copyright information, if present <a href="#s3.1-copyright-statement"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>If license or copyright information belongs in a file, it belongs here.</p><a name="s3.2-package-statement"/>
|
||||
<h3>3.2 Package statement <a href="#s3.2-package-statement"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>The package statement is <strong>not line-wrapped</strong>. The column limit (Section 4.4,
|
||||
<a href="#s4.4-column-limit">Column limit: 80</a>) does not apply to package statements.</p><a name="imports"/><a name="s3.3-import-statements"/>
|
||||
<h3>3.3 Import statements <a href="#s3.3-import-statements"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<a name="s3.3.1-wildcard-imports"/>
|
||||
<h4>3.3.1 No wildcard imports <a href="#s3.3.1-wildcard-imports"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p><strong>Wildcard imports</strong>, static or otherwise, <strong>are not used</strong>.</p><a name="s3.3.2-import-line-wrapping"/>
|
||||
<h4>3.3.2 No line-wrapping <a href="#s3.3.2-import-line-wrapping"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Import statements are <strong>not line-wrapped</strong>. The column limit (Section 4.4,
|
||||
<a href="#s4.4-column-limit">Column limit: 80</a>) does not apply to import
|
||||
statements.</p><a name="s3.3.3-import-ordering-and-spacing"/>
|
||||
<h4>3.3.3 Ordering and spacing <a href="#s3.3.3-import-ordering-and-spacing"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Import statements are divided into the following groups, in this order, with each group
|
||||
separated by a single blank line:</p><ol><li>All static imports in a single group</li><li><code>com.google</code> imports
|
||||
(only if this source file is in the <code>com.google</code> package
|
||||
space)</li><li>Third-party imports, one group per top-level package, in ASCII sort order
|
||||
<ul><li>for example: <code>android</code>, <code>com</code>, <code>junit</code>, <code>org</code>,
|
||||
<code>sun</code></li></ul></li><li><code>java</code> imports</li><li><code>javax</code> imports</li></ol><p>Within a group there are no blank lines, and the imported names appear in ASCII sort
|
||||
order. (<strong>Note:</strong> this is not the same as the import <em>statements</em> being in
|
||||
ASCII sort order; the presence of semicolons warps the result.)</p><a name="s3.4-class-declaration"/>
|
||||
<h3>3.4 Class declaration <a href="#s3.4-class-declaration"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<a name="oneclassperfile"/><a name="s3.4.1-one-top-level-class"/>
|
||||
<h4>3.4.1 Exactly one top-level class declaration <a href="#s3.4.1-one-top-level-class"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Each top-level class resides in a source file of its own.</p><a name="s3.4.2-class-member-ordering"/>
|
||||
<h4>3.4.2 Class member ordering <a href="#s3.4.2-class-member-ordering"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>The ordering of the members of a class can have a great effect on learnability, but there is
|
||||
no single correct recipe for how to do it. Different classes may order their members
|
||||
differently.</p><p>What is important is that each class order its members in <strong><em>some</em> logical
|
||||
order</strong>, which its maintainer could explain if asked. For example, new methods are not
|
||||
just habitually added to the end of the class, as that would yield "chronological by date
|
||||
added" ordering, which is not a logical ordering.</p><a name="overloads"/><a name="s3.4.2.1-overloads-never-split"/>
|
||||
<h5>3.4.2.1 Overloads: never split <a href="#s3.4.2.1-overloads-never-split"><img height="21" width="21" src="javaguidelink.png"/></a></h5>
|
||||
<p>When a class has multiple constructors, or multiple methods with the same name, these appear
|
||||
sequentially, with no intervening members.</p><a name="s4-formatting"/>
|
||||
<h2>4 Formatting <a href="#s4-formatting"><img height="21" width="21" src="javaguidelink.png"/></a></h2>
|
||||
<p class="terminology"><strong>Terminology Note:</strong> <em>block-like construct</em> refers to
|
||||
the body of a class, method or constructor. Note that, by Section 4.8.3.1 on
|
||||
<a href="#s4.8.3.1-array-initializers">array initializers</a>, any array initializer
|
||||
<em>may</em> optionally be treated as if it were a block-like construct.</p><a name="braces"/><a name="s4.1-braces"/>
|
||||
<h3>4.1 Braces <a href="#s4.1-braces"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<a name="s4.1.1-braces-always-used"/>
|
||||
<h4>4.1.1 Braces are used where optional <a href="#s4.1.1-braces-always-used"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Braces are used with
|
||||
<code class="prettyprint lang-java">if</code>,
|
||||
<code class="prettyprint lang-java">else</code>,
|
||||
<code class="prettyprint lang-java">for</code>,
|
||||
<code class="prettyprint lang-java">do</code> and
|
||||
<code class="prettyprint lang-java">while</code> statements, even when the
|
||||
body is empty or contains only a single statement.</p><a name="s4.1.2-blocks-k-r-style"/>
|
||||
<h4>4.1.2 Nonempty blocks: K & R style <a href="#s4.1.2-blocks-k-r-style"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Braces follow the Kernighan and Ritchie style
|
||||
("<a href="http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html">Egyptian brackets</a>")
|
||||
for <em>nonempty</em> blocks and block-like constructs:</p><ul><li>No line break before the opening brace.</li><li>Line break after the opening brace.</li><li>Line break before the closing brace.</li><li>Line break after the closing brace <em>if</em> that brace terminates a statement or the body
|
||||
of a method, constructor or <em>named</em> class. For example, there is <em>no</em> line break
|
||||
after the brace if it is followed by <code class="prettyprint lang-java">else</code> or a
|
||||
comma.</li></ul><p>Example:</p><pre class="prettyprint lang-java">
|
||||
return new MyClass() {
|
||||
@Override public void method() {
|
||||
if (condition()) {
|
||||
try {
|
||||
something();
|
||||
} catch (ProblemException e) {
|
||||
recover();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</pre><p>A few exceptions for enum classes are given in Section 4.8.1,
|
||||
<a href="#s4.8.1-enum-classes">Enum classes</a>.</p><a name="emptyblocks"/><a name="s4.1.3-braces-empty-blocks"/>
|
||||
<h4>4.1.3 Empty blocks: may be concise <a href="#s4.1.3-braces-empty-blocks"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>An empty block or block-like construct <em>may</em> be closed immediately after it is
|
||||
opened, with no characters or line break in between
|
||||
(<code class="prettyprint lang-java">{}</code>), <strong>unless</strong> it is part of a
|
||||
<em>multi-block statement</em> (one that directly contains multiple blocks:
|
||||
<code class="prettyprint lang-java">if/else-if/else</code> or
|
||||
<code class="prettyprint lang-java">try/catch/finally</code>).</p><p>Example:</p><pre class="prettyprint lang-java">
|
||||
void doNothing() {}
|
||||
</pre><a name="s4.2-block-indentation"/>
|
||||
<h3>4.2 Block indentation: +2 spaces <a href="#s4.2-block-indentation"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>Each time a new block or block-like construct is opened, the indent increases by two
|
||||
spaces. When the block ends, the indent returns to the previous indent level. The indent level
|
||||
applies to both code and comments throughout the block. (See the example in Section 4.1.2,
|
||||
<a href="#s4.1.2-blocks-k-r-style">Nonempty blocks: K & R Style</a>.)</p><a name="s4.3-one-statement-per-line"/>
|
||||
<h3>4.3 One statement per line <a href="#s4.3-one-statement-per-line"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>Each statement is followed by a line-break.</p><a name="columnlimit"/><a name="s4.4-column-limit"/>
|
||||
<h3>4.4 Column limit: 80 <a href="#s4.4-column-limit"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>
|
||||
Projects should have a column limit of 80 characters.
|
||||
|
||||
Except as noted below, any line that would exceed this limit must be line-wrapped, as explained in
|
||||
Section 4.5, <a href="#s4.5-line-wrapping">Line-wrapping</a>.
|
||||
</p><p><strong>Exceptions:</strong></p><ol><li>Lines where obeying the column limit is not possible (for example, a long URL in Javadoc,
|
||||
or a long JSNI method reference).</li><li><code class="prettyprint lang-java">package</code> and
|
||||
<code class="prettyprint lang-java">import</code> statements (see Sections
|
||||
3.2 <a href="#s3.2-package-statement">Package statement</a> and
|
||||
3.3 <a href="#s3.3-import-statements">Import statements</a>).</li><li>Command lines in a comment that may be cut-and-pasted into a shell.</li></ol><a name="s4.5-line-wrapping"/>
|
||||
<h3>4.5 Line-wrapping <a href="#s4.5-line-wrapping"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p class="terminology"><strong>Terminology Note:</strong> When code that might otherwise legally
|
||||
occupy a single line is divided into multiple lines, typically to avoid overflowing the column
|
||||
limit, this activity is called
|
||||
<em>line-wrapping</em>.</p><p>There is no comprehensive, deterministic formula showing <em>exactly</em> how to line-wrap in
|
||||
every situation. Very often there are several valid ways to line-wrap the same piece of code.</p><p class="tip"><strong>Tip:</strong> Extracting a method or local variable may solve the problem
|
||||
without the need to line-wrap.</p><a name="s4.5.1-line-wrapping-where-to-break"/>
|
||||
<h4>4.5.1 Where to break <a href="#s4.5.1-line-wrapping-where-to-break"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>The prime directive of line-wrapping is: prefer to break at a
|
||||
<strong>higher syntactic level</strong>. Also:</p><ol><li>When a line is broken at a <em>non-assignment</em> operator the break comes <em>before</em>
|
||||
the symbol. (Note that this is not the same practice used in Google style for other languages,
|
||||
such as C++ and JavaScript.)
|
||||
<ul><li>This also applies to the following "operator-like" symbols: the dot separator
|
||||
(<code class="prettyprint lang-java">.</code>), the ampersand in type bounds
|
||||
(<code class="prettyprint lang-java"><T extends Foo & Bar></code>), and the pipe in
|
||||
catch blocks
|
||||
(<code class="prettyprint lang-java">catch (FooException | BarException e)</code>).</li></ul></li><li>When a line is broken at an <em>assignment</em> operator the break typically comes
|
||||
<em>after</em> the symbol, but either way is acceptable.
|
||||
<ul><li>This also applies to the "assignment-operator-like" colon in an enhanced
|
||||
<code class="prettyprint lang-java">for</code> ("foreach") statement.</li></ul></li><li>A method or constructor name stays attached to the open parenthesis
|
||||
(<code class="prettyprint lang-java">(</code>) that follows it.</li><li>A comma (<code class="prettyprint lang-java">,</code>) stays attached to the token that
|
||||
precedes it.</li></ol><a name="indentation"/><a name="s4.5.2-line-wrapping-indent"/>
|
||||
<h4>4.5.2 Indent continuation lines at least +4 spaces <a href="#s4.5.2-line-wrapping-indent"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>When line-wrapping, each line after the first (each <em>continuation line</em>) is indented
|
||||
at least +4 from the original line.</p><p>When there are multiple continuation lines, indentation may be varied beyond +4 as
|
||||
desired. In general, two continuation lines use the same indentation level if and only if they
|
||||
begin with syntactically parallel elements.</p><p>Section 4.6.3 on <a href="#s4.6.3-horizontal-alignment">Horizontal alignment</a> addresses
|
||||
the discouraged practice of using a variable number of spaces to align certain tokens with
|
||||
previous lines.</p><a name="s4.6-whitespace"/>
|
||||
<h3>4.6 Whitespace <a href="#s4.6-whitespace"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<a name="s4.6.1-vertical-whitespace"/>
|
||||
<h4>4.6.1 Vertical Whitespace <a href="#s4.6.1-vertical-whitespace"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>A single blank line appears:</p><ol><li><em>Between</em> consecutive members (or initializers) of a class: fields, constructors,
|
||||
methods, nested classes, static initializers, instance initializers.
|
||||
<ul><li><span class="exception"><strong>Exception:</strong> A blank line between two consecutive
|
||||
fields (having no other code between them) is optional. Such blank lines are used as needed to
|
||||
create <em>logical groupings</em> of fields.</span></li></ul></li><li>Within method bodies, as needed to create <em>logical groupings</em> of statements.</li><li><em>Optionally</em> before the first member or after the last member of the class (neither
|
||||
encouraged nor discouraged).</li><li>As required by other sections of this document (such as Section 3.3,
|
||||
<a href="#s3.3-import-statements">Import statements</a>).</li></ol><p><em>Multiple</em> consecutive blank lines are permitted, but never required (or encouraged).</p><a name="s4.6.2-horizontal-whitespace"/>
|
||||
<h4>4.6.2 Horizontal whitespace <a href="#s4.6.2-horizontal-whitespace"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Beyond where required by the language or other style rules, and apart from literals, comments and
|
||||
Javadoc, a single ASCII space also appears in the following places <strong>only</strong>.</p><ol><li>Separating any reserved word, such as
|
||||
<code class="prettyprint lang-java">if</code>,
|
||||
<code class="prettyprint lang-java">for</code> or
|
||||
<code class="prettyprint lang-java">catch</code>, from an open parenthesis
|
||||
(<code class="prettyprint lang-java">(</code>)
|
||||
that follows it on that line</li><li>Separating any reserved word, such as
|
||||
<code class="prettyprint lang-java">else</code> or
|
||||
<code class="prettyprint lang-java">catch</code>, from a closing curly brace
|
||||
(<code class="prettyprint lang-java">}</code>) that precedes it on that line</li><li>Before any open curly brace
|
||||
(<code class="prettyprint lang-java">{</code>), with two exceptions:
|
||||
<ul><li><code class="prettyprint lang-java">@SomeAnnotation({a, b})</code> (no space is used)</li><li><code class="prettyprint lang-java">String[][] x = {{"foo"}};</code> (no space is required
|
||||
between <code class="prettyprint lang-java">{{</code>, by item 8 below)</li></ul></li><li>On both sides of any binary or ternary operator. This also applies to the following
|
||||
"operator-like" symbols:
|
||||
<ul><li>the ampersand in a conjunctive type bound:
|
||||
<code class="prettyprint lang-java"><T extends Foo & Bar></code></li><li>the pipe for a catch block that handles multiple exceptions:
|
||||
<code class="prettyprint lang-java">catch (FooException | BarException e)</code></li><li>the colon (<code class="prettyprint lang-java">:</code>) in an enhanced
|
||||
<code class="prettyprint lang-java">for</code> ("foreach") statement</li></ul></li><li>After <code class="prettyprint lang-java">,:;</code> or the closing parenthesis
|
||||
(<code class="prettyprint lang-java">)</code>) of a cast</li><li>On both sides of the double slash (<code class="prettyprint lang-java">//</code>) that
|
||||
begins an end-of-line comment. Here, multiple spaces are allowed, but not required.</li><li>Between the type and variable of a declaration:
|
||||
<code class="prettyprint lang-java">List<String> list</code></li><li><em>Optional</em> just inside both braces of an array initializer
|
||||
<ul><li><code class="prettyprint lang-java">new int[] {5, 6}</code> and
|
||||
<code class="prettyprint lang-java">new int[] { 5, 6 }</code> are both valid</li></ul></li></ol><p class="note"><strong>Note:</strong> This rule never requires or forbids additional space at the
|
||||
start or end of a line, only <em>interior</em> space.</p><a name="s4.6.3-horizontal-alignment"/>
|
||||
<h4>4.6.3 Horizontal alignment: never required <a href="#s4.6.3-horizontal-alignment"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p class="terminology"><strong>Terminology Note:</strong> <em>Horizontal alignment</em> is the
|
||||
practice of adding a variable number of additional spaces in your code with the goal of making
|
||||
certain tokens appear directly below certain other tokens on previous lines.</p><p>This practice is permitted, but is <strong>never required</strong> by Google Style. It is not
|
||||
even required to <em>maintain</em> horizontal alignment in places where it was already used.</p><p>Here is an example without alignment, then using alignment:</p><pre class="prettyprint lang-java">
|
||||
private int x; // this is fine
|
||||
private Color color; // this too
|
||||
|
||||
private int x; // permitted, but future edits
|
||||
private Color color; // may leave it unaligned
|
||||
</pre><p class="tip"><strong>Tip:</strong> Alignment can aid readability, but it creates problems for
|
||||
future maintenance. Consider a future change that needs to touch just one line. This change may
|
||||
leave the formerly-pleasing formatting mangled, and that is <strong>allowed</strong>. More often
|
||||
it prompts the coder (perhaps you) to adjust whitespace on nearby lines as well, possibly
|
||||
triggering a cascading series of reformattings. That one-line change now has a "blast radius."
|
||||
This can at worst result in pointless busywork, but at best it still corrupts version history
|
||||
information, slows down reviewers and exacerbates merge conflicts.</p><a name="parentheses"/><a name="s4.7-grouping-parentheses"/>
|
||||
<h3>4.7 Grouping parentheses: recommended <a href="#s4.7-grouping-parentheses"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>Optional grouping parentheses are omitted only when author and reviewer agree that there is no
|
||||
reasonable chance the code will be misinterpreted without them, nor would they have made the code
|
||||
easier to read. It is <em>not</em> reasonable to assume that every reader has the entire Java
|
||||
operator precedence table memorized.</p><a name="s4.8-specific-constructs"/>
|
||||
<h3>4.8 Specific constructs <a href="#s4.8-specific-constructs"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<a name="s4.8.1-enum-classes"/>
|
||||
<h4>4.8.1 Enum classes <a href="#s4.8.1-enum-classes"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>After each comma that follows an enum constant, a line-break is optional.</p><p>An enum class with no methods and no documentation on its constants may optionally be formatted
|
||||
as if it were an array initializer (see Section 4.8.3.1 on
|
||||
<a href="#s4.8.3.1-array-initializers">array initializers</a>).</p><pre class="prettyprint lang-java">
|
||||
private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }
|
||||
</pre><p>Since enum classes <em>are classes</em>, all other rules for formatting classes apply.</p><a name="localvariables"/><a name="s4.8.2-variable-declarations"/>
|
||||
<h4>4.8.2 Variable declarations <a href="#s4.8.2-variable-declarations"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<a name="s4.8.2.1-variables-per-declaration"/>
|
||||
<h5>4.8.2.1 One variable per declaration <a href="#s4.8.2.1-variables-per-declaration"><img height="21" width="21" src="javaguidelink.png"/></a></h5>
|
||||
<p>Every variable declaration (field or local) declares only one variable: declarations such as
|
||||
<code class="badcode">int a, b;</code> are not used.</p><a name="s4.8.2.2-variables-limited-scope"/>
|
||||
<h5>4.8.2.2 Declared when needed, initialized as soon as
|
||||
possible <a href="#s4.8.2.2-variables-limited-scope"><img height="21" width="21" src="javaguidelink.png"/></a></h5>
|
||||
<p>Local variables are <strong>not</strong> habitually declared at the start of their containing
|
||||
block or block-like construct. Instead, local variables are declared close to the point they are
|
||||
first used (within reason), to minimize their scope. Local variable declarations typically have
|
||||
initializers, or are initialized immediately after declaration.</p><a name="s4.8.3-arrays"/>
|
||||
<h4>4.8.3 Arrays <a href="#s4.8.3-arrays"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<a name="s4.8.3.1-array-initializers"/>
|
||||
<h5>4.8.3.1 Array initializers: can be "block-like" <a href="#s4.8.3.1-array-initializers"><img height="21" width="21" src="javaguidelink.png"/></a></h5>
|
||||
<p>Any array initializer may <em>optionally</em> be formatted as if it were a "block-like
|
||||
construct." For example, the following are all valid (<strong>not</strong> an exhaustive
|
||||
list):</p><pre class="prettyprint lang-java">
|
||||
new int[] { new int[] {
|
||||
0, 1, 2, 3 0,
|
||||
} 1,
|
||||
2,
|
||||
new int[] { 3,
|
||||
0, 1, }
|
||||
2, 3
|
||||
} new int[]
|
||||
{0, 1, 2, 3}
|
||||
</pre><a name="s4.8.3.2-array-declarations"/>
|
||||
<h5>4.8.3.2 No C-style array declarations <a href="#s4.8.3.2-array-declarations"><img height="21" width="21" src="javaguidelink.png"/></a></h5>
|
||||
<p>The square brackets form a part of the <em>type</em>, not the variable:
|
||||
<code class="prettyprint lang-java">String[] args</code>, not
|
||||
<code class="badcode">String args[]</code>.</p><a name="s4.8.4-switch"/>
|
||||
<h4>4.8.4 Switch statements <a href="#s4.8.4-switch"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p class="terminology"><strong>Terminology Note:</strong> Inside the braces of a
|
||||
<em>switch block</em> are one or more <em>statement groups</em>. Each statement group consists of
|
||||
one or more <em>switch labels</em> (either <code class="prettyprint lang-java">case FOO:</code> or
|
||||
<code class="prettyprint lang-java">default:</code>), followed by one or more statements.</p><a name="s4.8.4.1-switch-indentation"/>
|
||||
<h5>4.8.4.1 Indentation <a href="#s4.8.4.1-switch-indentation"><img height="21" width="21" src="javaguidelink.png"/></a></h5>
|
||||
<p>As with any other block, the contents of a switch block are indented +2.</p><p>After a switch label, a newline appears, and the indentation level is increased +2, exactly as
|
||||
if a block were being opened. The following switch label returns to the previous indentation
|
||||
level, as if a block had been closed.</p><a name="fallthrough"/><a name="s4.8.4.2-switch-fall-through"/>
|
||||
<h5>4.8.4.2 Fall-through: commented <a href="#s4.8.4.2-switch-fall-through"><img height="21" width="21" src="javaguidelink.png"/></a></h5>
|
||||
<p>Within a switch block, each statement group either terminates abruptly (with a
|
||||
<code class="prettyprint lang-java">break</code>,
|
||||
<code class="prettyprint lang-java">continue</code>,
|
||||
<code class="prettyprint lang-java">return</code> or thrown exception), or is marked with a comment
|
||||
to indicate that execution will or <em>might</em> continue into the next statement group. Any
|
||||
comment that communicates the idea of fall-through is sufficient (typically
|
||||
<code class="prettyprint lang-java">// fall through</code>). This special comment is not required in
|
||||
the last statement group of the switch block. Example:</p><pre class="prettyprint lang-java">
|
||||
switch (input) {
|
||||
case 1:
|
||||
case 2:
|
||||
prepareOneOrTwo();
|
||||
// fall through
|
||||
case 3:
|
||||
handleOneTwoOrThree();
|
||||
break;
|
||||
default:
|
||||
handleLargeNumber(input);
|
||||
}
|
||||
</pre><a name="s4.8.4.3-switch-default"/>
|
||||
<h5>4.8.4.3 The default case is present <a href="#s4.8.4.3-switch-default"><img height="21" width="21" src="javaguidelink.png"/></a></h5>
|
||||
<p>Each switch statement includes a <code class="prettyprint lang-java">default</code> statement
|
||||
group, even if it contains no code.</p><a name="annotations"/><a name="s4.8.5-annotations"/>
|
||||
<h4>4.8.5 Annotations <a href="#s4.8.5-annotations"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Annotations applying to a class, method or constructor appear immediately after the
|
||||
documentation block, and each annotation is listed on a line of its own (that is, one annotation
|
||||
per line). These line breaks do not constitute line-wrapping (Section
|
||||
4.5, <a href="#s4.5-line-wrapping">Line-wrapping</a>), so the indentation level is not
|
||||
increased. Example:</p><pre class="prettyprint lang-java">
|
||||
@Override
|
||||
@Nullable
|
||||
public String getNameIfPresent() { ... }
|
||||
</pre><p class="exception"><strong>Exception:</strong> A <em>single</em> parameterless annotation
|
||||
<em>may</em> instead appear together with the first line of the signature, for example:</p><pre class="prettyprint lang-java">
|
||||
@Override public int hashCode() { ... }
|
||||
</pre><p>Annotations applying to a field also appear immediately after the documentation block, but in
|
||||
this case, <em>multiple</em> annotations (possibly parameterized) may be listed on the same line;
|
||||
for example:</p><pre class="prettyprint lang-java">
|
||||
@Partial @Mock DataLoader loader;
|
||||
</pre><p>There are no specific rules for formatting parameter and local variable annotations.</p><a name="comments"/><a name="s4.8.6-comments"/>
|
||||
<h4>4.8.6 Comments <a href="#s4.8.6-comments"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<a name="s4.8.6.1-block-comment-style"/>
|
||||
<h5>4.8.6.1 Block comment style <a href="#s4.8.6.1-block-comment-style"><img height="21" width="21" src="javaguidelink.png"/></a></h5>
|
||||
<p>Block comments are indented at the same level as the surrounding code. They may be in
|
||||
<code class="prettyprint lang-java">/* ... */</code> style or
|
||||
<code class="prettyprint lang-java">// ...</code> style. For multi-line
|
||||
<code class="prettyprint lang-java">/* ... */</code> comments, subsequent lines must start with
|
||||
<code>*</code> aligned with the <code>*</code> on the previous line.</p><pre class="prettyprint lang-java">
|
||||
/*
|
||||
* This is // And so /* Or you can
|
||||
* okay. // is this. * even do this. */
|
||||
*/
|
||||
</pre><p>Comments are not enclosed in boxes drawn with asterisks or other characters.</p><p class="tip"><strong>Tip:</strong> When writing multi-line comments, use the
|
||||
<code class="prettyprint lang-java">/* ... */</code> style if you want automatic code formatters to
|
||||
re-wrap the lines when necessary (paragraph-style). Most formatters don't re-wrap lines in
|
||||
<code class="prettyprint lang-java">// ...</code> style comment blocks.</p><a name="modifiers"/><a name="s4.8.7-modifiers"/>
|
||||
<h4>4.8.7 Modifiers <a href="#s4.8.7-modifiers"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Class and member modifiers, when present, appear in the order
|
||||
recommended by the Java Language Specification:
|
||||
</p><pre>
|
||||
public protected private abstract static final transient volatile synchronized native strictfp
|
||||
</pre><a name="s4.8.8-numeric-literals"/>
|
||||
<h4>4.8.8 Numeric Literals <a href="#s4.8.8-numeric-literals"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p><code>long</code>-valued integer literals use an uppercase <code>L</code> suffix, never
|
||||
lowercase (to avoid confusion with the digit <code>1</code>). For example, <code>3000000000L</code>
|
||||
rather than <code class="badcode">3000000000l</code>.</p><a name="naming"/><a name="s5-naming"/>
|
||||
<h2>5 Naming <a href="#s5-naming"><img height="21" width="21" src="javaguidelink.png"/></a></h2>
|
||||
<a name="s5.1-identifier-names"/>
|
||||
<h3>5.1 Rules common to all identifiers <a href="#s5.1-identifier-names"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>Identifiers use only ASCII letters and digits, and in two cases noted below, underscores. Thus
|
||||
each valid identifier name is matched by the regular expression <code>\w+</code> .</p><p> In Google Style special prefixes or
|
||||
suffixes, like those seen in the examples <code class="badcode">name_</code>,
|
||||
<code class="badcode">mName</code>, <code class="badcode">s_name</code> and
|
||||
<code class="badcode">kName</code>, are <strong>not</strong> used.
|
||||
For WPILib, we do make one exception to this rule for non-constant field name.</p><a name="s5.2-specific-identifier-names"/>
|
||||
<h3>5.2 Rules by identifier type <a href="#s5.2-specific-identifier-names"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<a name="s5.2.1-package-names"/>
|
||||
<h4>5.2.1 Package names <a href="#s5.2.1-package-names"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Package names are all lowercase, with consecutive words simply concatenated together (no
|
||||
underscores). For example, <code>com.example.deepspace</code>, not
|
||||
<code class="badcode">com.example.deepSpace</code> or
|
||||
<code class="badcode">com.example.deep_space</code>.</p><a name="s5.2.2-class-names"/>
|
||||
<h4>5.2.2 Class names <a href="#s5.2.2-class-names"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Class names are written in <a href="#s5.3-camel-case">UpperCamelCase</a>.</p><p>Class names are typically nouns or noun phrases. For example,
|
||||
<code class="prettyprint lang-java">Character</code> or
|
||||
<code class="prettyprint lang-java">ImmutableList</code>. Interface names may also be nouns or
|
||||
noun phrases (for example, <code class="prettyprint lang-java">List</code>), but may sometimes be
|
||||
adjectives or adjective phrases instead (for example,
|
||||
<code class="prettyprint lang-java">Readable</code>).</p><p>There are no specific rules or even well-established conventions for naming annotation types.</p><p><em>Test</em> classes are named starting with the name of the class they are testing, and ending
|
||||
with <code class="prettyprint lang-java">Test</code>. For example,
|
||||
<code class="prettyprint lang-java">HashTest</code> or
|
||||
<code class="prettyprint lang-java">HashIntegrationTest</code>.</p><a name="s5.2.3-method-names"/>
|
||||
<h4>5.2.3 Method names <a href="#s5.2.3-method-names"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Method names are written in <a href="#s5.3-camel-case">lowerCamelCase</a>.</p><p>Method names are typically verbs or verb phrases. For example,
|
||||
<code class="prettyprint lang-java">sendMessage</code> or
|
||||
<code class="prettyprint lang-java">stop</code>.</p><p>Underscores may appear in JUnit <em>test</em> method names to separate logical components of the
|
||||
name. One typical pattern is <code>test<i><MethodUnderTest></i>_<i><state></i></code>,
|
||||
for example <code class="prettyprint lang-java">testPop_emptyStack</code>. There is no One Correct
|
||||
Way to name test methods.</p><a name="constants"/><a name="s5.2.4-constant-names"/>
|
||||
<h4>5.2.4 Constant names <a href="#s5.2.4-constant-names"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Constant names use <code class="prettyprint lang-java">CONSTANT_CASE</code>: all uppercase
|
||||
letters, with words separated by underscores. But what <em>is</em> a constant, exactly?</p><p>Every constant is a static final field, but not all static final fields are constants. Before
|
||||
choosing constant case, consider whether the field really <em>feels like</em> a constant. For
|
||||
example, if any of that instance's observable state can change, it is almost certainly not a
|
||||
constant. Merely <em>intending</em> to never mutate the object is generally not
|
||||
enough. Examples:</p><pre class="prettyprint lang-java">
|
||||
// Constants
|
||||
static final int NUMBER = 5;
|
||||
static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");
|
||||
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
|
||||
static final SomeMutableType[] EMPTY_ARRAY = {};
|
||||
enum SomeEnum { ENUM_CONSTANT }
|
||||
|
||||
// Not constants
|
||||
static String nonFinal = "non-final";
|
||||
final String nonStatic = "non-static";
|
||||
static final Set<String> mutableCollection = new HashSet<String>();
|
||||
static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);
|
||||
static final Logger logger = Logger.getLogger(MyClass.getName());
|
||||
static final String[] nonEmptyArray = {"these", "can", "change"};
|
||||
</pre><p>These names are typically nouns or noun phrases.</p><a name="s5.2.5-non-constant-field-names"/>
|
||||
<h4>5.2.5 Non-constant field names <a href="#s5.2.5-non-constant-field-names"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Non-constant field names (static or otherwise) are written
|
||||
in <a href="#s5.3-camel-case">lowerCamelCase</a> with a preceding <code class="prettyprint lang-java">m_</code>.</p>
|
||||
<p>These names are typically nouns or noun phrases. For example,
|
||||
<code class="prettyprint lang-java">m_computedValues</code> or
|
||||
<code class="prettyprint lang-java">m_index</code>.</p><a name="s5.2.6-parameter-names"/>
|
||||
<h4>5.2.6 Parameter names <a href="#s5.2.6-parameter-names"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Parameter names are written in <a href="#s5.3-camel-case">lowerCamelCase</a>.</p><p>One-character parameter names should be avoided.</p><a name="s5.2.7-local-variable-names"/>
|
||||
<h4>5.2.7 Local variable names <a href="#s5.2.7-local-variable-names"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Local variable names are written in <a href="#s5.3-camel-case">lowerCamelCase</a>, and can be
|
||||
abbreviated more liberally than other types of names.</p><p>However, one-character names should be avoided, except for temporary and looping variables.</p><p>Even when final and immutable, local variables are not considered to be constants, and should not
|
||||
be styled as constants.</p><a name="s5.2.8-type-variable-names"/>
|
||||
<h4>5.2.8 Type variable names <a href="#s5.2.8-type-variable-names"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Each type variable is named in one of two styles:</p><ul><li>A single capital letter, optionally followed by a single numeral (such as
|
||||
<code class="prettyprint lang-java">E</code>, <code class="prettyprint lang-java">T</code>,
|
||||
<code class="prettyprint lang-java">X</code>, <code class="prettyprint lang-java">T2</code>)
|
||||
</li><li>A name in the form used for classes (see Section 5.2.2,
|
||||
<a href="#s5.2.2-class-names">Class names</a>), followed by the capital letter
|
||||
<code class="prettyprint lang-java">T</code> (examples:
|
||||
<code class="prettyprint lang-java">RequestT</code>,
|
||||
<code class="prettyprint lang-java">FooBarT</code>).</li></ul><a name="acronyms"/><a name="camelcase"/><a name="s5.3-camel-case"/>
|
||||
<h3>5.3 Camel case: defined <a href="#s5.3-camel-case"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>Sometimes there is more than one reasonable way to convert an English phrase into camel case,
|
||||
such as when acronyms or unusual constructs like "IPv6" or "iOS" are present. To improve
|
||||
predictability, Google Style specifies the following (nearly) deterministic scheme.</p><p>Beginning with the prose form of the name:</p><ol><li>Convert the phrase to plain ASCII and remove any apostrophes. For example, "Müller's
|
||||
algorithm" might become "Muellers algorithm".</li><li>Divide this result into words, splitting on spaces and any remaining punctuation (typically
|
||||
hyphens).
|
||||
|
||||
<ul><li><em>Recommended:</em> if any word already has a conventional camel-case appearance in common
|
||||
usage, split this into its constituent parts (e.g., "AdWords" becomes "ad words"). Note
|
||||
that a word such as "iOS" is not really in camel case <em>per se</em>; it defies <em>any</em>
|
||||
convention, so this recommendation does not apply.</li></ul></li><li>Now lowercase <em>everything</em> (including acronyms), then uppercase only the first
|
||||
character of:
|
||||
<ul><li>... each word, to yield <em>upper camel case</em>, or</li><li>... each word except the first, to yield <em>lower camel case</em></li></ul></li><li>Finally, join all the words into a single identifier.</li></ol><p>Note that the casing of the original words is almost entirely disregarded. Examples:</p><table><tr><th>Prose form</th><th>Correct</th><th>Incorrect</th></tr><tr><td>"XML HTTP request"</td><td><code class="prettyprint lang-java">XmlHttpRequest</code></td><td><code class="badcode">XMLHTTPRequest</code></td></tr><tr><td>"new customer ID"</td><td><code class="prettyprint lang-java">newCustomerId</code></td><td><code class="badcode">newCustomerID</code></td></tr><tr><td>"inner stopwatch"</td><td><code class="prettyprint lang-java">innerStopwatch</code></td><td><code class="badcode">innerStopWatch</code></td></tr><tr><td>"supports IPv6 on iOS?"</td><td><code class="prettyprint lang-java">supportsIpv6OnIos</code></td><td><code class="badcode">supportsIPv6OnIOS</code></td></tr><tr><td>"YouTube importer"</td><td><code class="prettyprint lang-java">YouTubeImporter</code><br/><code class="prettyprint lang-java">YoutubeImporter</code>*</td><td/></tr></table><p>*Acceptable, but not recommended.</p><p class="note"><strong>Note:</strong> Some words are ambiguously hyphenated in the English
|
||||
language: for example "nonempty" and "non-empty" are both correct, so the method names
|
||||
<code class="prettyprint lang-java">checkNonempty</code> and
|
||||
<code class="prettyprint lang-java">checkNonEmpty</code> are likewise both correct.</p><a name="s6-programming-practices"/>
|
||||
<h2>6 Programming Practices <a href="#s6-programming-practices"><img height="21" width="21" src="javaguidelink.png"/></a></h2>
|
||||
<a name="s6.1-override-annotation"/>
|
||||
<h3>6.1 @Override: always used <a href="#s6.1-override-annotation"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>A method is marked with the <code class="prettyprint lang-java">@Override</code> annotation
|
||||
whenever it is legal. This includes a class method overriding a superclass method, a class method
|
||||
implementing an interface method, and an interface method respecifying a superinterface
|
||||
method.</p><p class="exception"><strong>Exception:</strong><code class="prettyprint lang-java">@Override</code> may be omitted when the parent method is
|
||||
<code class="prettyprint lang-java">@Deprecated</code>.</p><a name="caughtexceptions"/><a name="s6.2-caught-exceptions"/>
|
||||
<h3>6.2 Caught exceptions: not ignored <a href="#s6.2-caught-exceptions"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>Except as noted below, it is very rarely correct to do nothing in response to a caught
|
||||
exception. (Typical responses are to log it, or if it is considered "impossible", rethrow it as an
|
||||
<code class="prettyprint lang-java">AssertionError</code>.)</p><p>When it truly is appropriate to take no action whatsoever in a catch block, the reason this is
|
||||
justified is explained in a comment.</p><pre class="prettyprint lang-java">
|
||||
try {
|
||||
int i = Integer.parseInt(response);
|
||||
return handleNumericResponse(i);
|
||||
} catch (NumberFormatException ok) {
|
||||
// it's not numeric; that's fine, just continue
|
||||
}
|
||||
return handleTextResponse(response);
|
||||
</pre><p class="exception"><strong>Exception:</strong> In tests, a caught exception may be ignored
|
||||
without comment <em>if</em> it is named <code class="prettyprint lang-java">expected</code>. The
|
||||
following is a very common idiom for ensuring that the method under test <em>does</em> throw an
|
||||
exception of the expected type, so a comment is unnecessary here.</p><pre class="prettyprint lang-java">
|
||||
try {
|
||||
emptyStack.pop();
|
||||
fail();
|
||||
} catch (NoSuchElementException expected) {
|
||||
}
|
||||
</pre><a name="s6.3-static-members"/>
|
||||
<h3>6.3 Static members: qualified using class <a href="#s6.3-static-members"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>When a reference to a static class member must be qualified, it is qualified with that class's
|
||||
name, not with a reference or expression of that class's type.</p><pre class="prettyprint lang-java">
|
||||
Foo aFoo = ...;
|
||||
Foo.aStaticMethod(); // good
|
||||
<span class="badcode">aFoo.aStaticMethod();</span> // bad
|
||||
<span class="badcode">somethingThatYieldsAFoo().aStaticMethod();</span> // very bad
|
||||
</pre><a name="finalizers"/><a name="s6.4-finalizers"/>
|
||||
<h3>6.4 Finalizers: not used <a href="#s6.4-finalizers"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>It is <strong>extremely rare</strong> to override <code class="prettyprint lang-java">Object.finalize</code>.</p><p class="tip"><strong>Tip:</strong> Don't do it. If you absolutely must, first read and understand
|
||||
<a href="http://books.google.com/books?isbn=8131726592"><em>Effective Java</em></a>
|
||||
Item 7, "Avoid Finalizers," very carefully, and <em>then</em> don't do it.</p><a name="javadoc"/><a name="s7-javadoc"/>
|
||||
<h2>7 Javadoc <a href="#s7-javadoc"><img height="21" width="21" src="javaguidelink.png"/></a></h2>
|
||||
<a name="s7.1-javadoc-formatting"/>
|
||||
<h3>7.1 Formatting <a href="#s7.1-javadoc-formatting"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<a name="s7.1.1-javadoc-multi-line"/>
|
||||
<h4>7.1.1 General form <a href="#s7.1.1-javadoc-multi-line"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>The <em>basic</em> formatting of Javadoc blocks is as seen in this example:</p><pre class="prettyprint lang-java">
|
||||
/**
|
||||
* Multiple lines of Javadoc text are written here,
|
||||
* wrapped normally...
|
||||
*/
|
||||
public int method(String p1) { ... }
|
||||
</pre><p>... or in this single-line example:</p><pre class="prettyprint lang-java">
|
||||
/** An especially short bit of Javadoc. */
|
||||
</pre><p>The basic form is always acceptable. The single-line form may be substituted when there are no
|
||||
at-clauses present, and the entirety of the Javadoc block (including comment markers) can fit on a
|
||||
single line.</p><a name="s7.1.2-javadoc-paragraphs"/>
|
||||
<h4>7.1.2 Paragraphs <a href="#s7.1.2-javadoc-paragraphs"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>One blank line—that is, a line containing only the aligned leading asterisk
|
||||
(<code>*</code>)—appears between paragraphs, and before the group of "at-clauses" if
|
||||
present. Each paragraph but the first has <code><p></code> immediately before the first word,
|
||||
with no space after.</p><a name="s7.1.3-javadoc-at-clauses"/>
|
||||
<h4>7.1.3 At-clauses <a href="#s7.1.3-javadoc-at-clauses"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Any of the standard "at-clauses" that are used appear in the order <code>@param</code>,
|
||||
<code>@return</code>, <code>@throws</code>, <code>@deprecated</code>, and these four types never
|
||||
appear with an empty description. When an at-clause doesn't fit on a single line, continuation lines
|
||||
are indented four (or more) spaces from the position of the <code>@</code>.
|
||||
</p><a name="s7.2-summary-fragment"/>
|
||||
<h3>7.2 The summary fragment <a href="#s7.2-summary-fragment"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>The Javadoc for each class and member begins with a brief <strong>summary fragment</strong>. This
|
||||
fragment is very important: it is the only part of the text that appears in certain contexts such as
|
||||
class and method indexes.</p><p>This is a fragment—a noun phrase or verb phrase, not a complete sentence. It does
|
||||
<strong>not</strong> begin with <code class="badcode">A {@code Foo} is a...</code>, or
|
||||
<code class="badcode">This method returns...</code>, nor does it form a complete imperative sentence
|
||||
like <code class="badcode">Save the record.</code>. However, the fragment is capitalized and
|
||||
punctuated as if it were a complete sentence.</p><p class="tip"><strong>Tip:</strong> A common mistake is to write simple Javadoc in the form
|
||||
<code class="badcode">/** @return the customer ID */</code>. This is incorrect, and should be
|
||||
changed to <code class="prettyprint lang-java">/** Returns the customer ID. */</code>.</p><a name="s7.3.3-javadoc-optional"/><a name="s7.3-javadoc-where-required"/>
|
||||
<h3>7.3 Where Javadoc is used <a href="#s7.3-javadoc-where-required"><img height="21" width="21" src="javaguidelink.png"/></a></h3>
|
||||
<p>At the <em>minimum</em>, Javadoc is present for every
|
||||
<code class="prettyprint lang-java">public</code> class, and every
|
||||
<code class="prettyprint lang-java">public</code> or
|
||||
<code class="prettyprint lang-java">protected</code> member of such a class, with a few exceptions
|
||||
noted below.</p><p>Other classes and members still have Javadoc <em>as needed</em>. Whenever an implementation
|
||||
comment would be used to define the overall purpose or behavior of a class, method or field, that
|
||||
comment is written as Javadoc instead. (It's more uniform, and more tool-friendly.)</p><a name="s7.3.1-javadoc-exception-self-explanatory"/>
|
||||
<h4>7.3.1 Exception: self-explanatory methods <a href="#s7.3.1-javadoc-exception-self-explanatory"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Javadoc is optional for "simple, obvious" methods like
|
||||
<code class="prettyprint lang-java">getFoo</code>, in cases where there <em>really and truly</em> is
|
||||
nothing else worthwhile to say but "Returns the foo".</p><p class="note"><strong>Important:</strong> it is not appropriate to cite this exception to justify
|
||||
omitting relevant information that a typical reader might need to know. For example, for a method
|
||||
named <code class="prettyprint lang-java">getCanonicalName</code>, don't omit its documentation
|
||||
(with the rationale that it would say only
|
||||
<code class="badcode">/** Returns the canonical name. */</code>) if a typical reader may have no idea
|
||||
what the term "canonical name" means!</p><a name="s7.3.2-javadoc-exception-overrides"/>
|
||||
<h4>7.3.2 Exception: overrides <a href="#s7.3.2-javadoc-exception-overrides"><img height="21" width="21" src="javaguidelink.png"/></a></h4>
|
||||
<p>Javadoc is not always present on a method that overrides a supertype method.
|
||||
</p></div> <hr/>
|
||||
<div class="change">Last changed: March 21, 2014</div>
|
||||
</body>
|
||||
</html>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user