xref: /aosp_15_r20/external/opencensus-java/CONTRIBUTING.md (revision a24ffb47c3166327784aa05b149974e82e8f71b8)
1*a24ffb47SSadaf Ebrahimi# How to submit a bug report
2*a24ffb47SSadaf Ebrahimi
3*a24ffb47SSadaf EbrahimiIf you received an error message, please include it and any exceptions.
4*a24ffb47SSadaf Ebrahimi
5*a24ffb47SSadaf EbrahimiWe commonly need to know what platform you are on:
6*a24ffb47SSadaf Ebrahimi
7*a24ffb47SSadaf Ebrahimi*   JDK/JRE version (i.e., `java -version`)
8*a24ffb47SSadaf Ebrahimi*   Operating system (i.e., `uname -a`)
9*a24ffb47SSadaf Ebrahimi
10*a24ffb47SSadaf Ebrahimi# How to contribute
11*a24ffb47SSadaf Ebrahimi
12*a24ffb47SSadaf EbrahimiWe definitely welcome patches and contributions to OpenCensus! Here are
13*a24ffb47SSadaf Ebrahimisome guidelines and information about how to do so.
14*a24ffb47SSadaf Ebrahimi
15*a24ffb47SSadaf Ebrahimi## Before getting started
16*a24ffb47SSadaf Ebrahimi
17*a24ffb47SSadaf EbrahimiIn order to protect both you and ourselves, you will need to sign the
18*a24ffb47SSadaf Ebrahimi[Contributor License Agreement](https://cla.developers.google.com/clas).
19*a24ffb47SSadaf Ebrahimi
20*a24ffb47SSadaf Ebrahimi[Eclipse](https://google-styleguide.googlecode.com/svn/trunk/eclipse-java-google-style.xml)
21*a24ffb47SSadaf Ebrahimiand
22*a24ffb47SSadaf Ebrahimi[IntelliJ](https://google-styleguide.googlecode.com/svn/trunk/intellij-java-google-style.xml)
23*a24ffb47SSadaf Ebrahimistyle configurations are commonly useful. For IntelliJ 14, copy the style to
24*a24ffb47SSadaf Ebrahimi`~/.IdeaIC14/config/codestyles/`, start IntelliJ, go to File > Settings > Code
25*a24ffb47SSadaf EbrahimiStyle, and set the Scheme to `GoogleStyle`.
26*a24ffb47SSadaf Ebrahimi
27*a24ffb47SSadaf Ebrahimi## Style
28*a24ffb47SSadaf EbrahimiWe follow the [Google Java Style
29*a24ffb47SSadaf EbrahimiGuide](https://google.github.io/styleguide/javaguide.html). Our
30*a24ffb47SSadaf Ebrahimibuild automatically will provide warnings for simple style issues.
31*a24ffb47SSadaf Ebrahimi
32*a24ffb47SSadaf EbrahimiRun the following command to format all files. This formatter uses
33*a24ffb47SSadaf Ebrahimi[google-java-format](https://github.com/google/google-java-format):
34*a24ffb47SSadaf Ebrahimi
35*a24ffb47SSadaf Ebrahimi### OS X or Linux
36*a24ffb47SSadaf Ebrahimi
37*a24ffb47SSadaf Ebrahimi`./gradlew goJF`
38*a24ffb47SSadaf Ebrahimi
39*a24ffb47SSadaf Ebrahimi### Windows
40*a24ffb47SSadaf Ebrahimi
41*a24ffb47SSadaf Ebrahimi`gradlew.bat goJF`
42*a24ffb47SSadaf Ebrahimi
43*a24ffb47SSadaf EbrahimiWe also follow these project-specific guidelines:
44*a24ffb47SSadaf Ebrahimi
45*a24ffb47SSadaf Ebrahimi### Javadoc
46*a24ffb47SSadaf Ebrahimi
47*a24ffb47SSadaf Ebrahimi* All public classes and their public and protected methods MUST have javadoc.
48*a24ffb47SSadaf Ebrahimi  It MUST be complete (all params documented etc.) Everything else
49*a24ffb47SSadaf Ebrahimi  (package-protected classes, private) MAY have javadoc, at the code writer's
50*a24ffb47SSadaf Ebrahimi  whim. It does not have to be complete, and reviewers are not allowed to
51*a24ffb47SSadaf Ebrahimi  require or disallow it.
52*a24ffb47SSadaf Ebrahimi* Each API element should have a `@since` tag specifying the minor version when
53*a24ffb47SSadaf Ebrahimi  it was released (or the next minor version).
54*a24ffb47SSadaf Ebrahimi* There MUST be NO javadoc errors.
55*a24ffb47SSadaf Ebrahimi* See
56*a24ffb47SSadaf Ebrahimi  [section 7.3.1](https://google.github.io/styleguide/javaguide.html#s7.3.1-javadoc-exception-self-explanatory)
57*a24ffb47SSadaf Ebrahimi  in the guide for exceptions to the Javadoc requirement.
58*a24ffb47SSadaf Ebrahimi* Reviewers may request documentation for any element that doesn't require
59*a24ffb47SSadaf Ebrahimi  Javadoc, though the style of documentation is up to the author.
60*a24ffb47SSadaf Ebrahimi* Try to do the least amount of change when modifying existing documentation.
61*a24ffb47SSadaf Ebrahimi  Don't change the style unless you have a good reason.
62*a24ffb47SSadaf Ebrahimi
63*a24ffb47SSadaf Ebrahimi### AutoValue
64*a24ffb47SSadaf Ebrahimi
65*a24ffb47SSadaf Ebrahimi* Use [AutoValue](https://github.com/google/auto/tree/master/value), when
66*a24ffb47SSadaf Ebrahimi  possible, for any new value classes. Remember to add package-private
67*a24ffb47SSadaf Ebrahimi  constructors to all AutoValue classes to prevent classes in other packages
68*a24ffb47SSadaf Ebrahimi  from extending them.
69*a24ffb47SSadaf Ebrahimi
70*a24ffb47SSadaf Ebrahimi## Building opencensus-java
71*a24ffb47SSadaf Ebrahimi
72*a24ffb47SSadaf EbrahimiContinuous integration builds the project, runs the tests, and runs multiple
73*a24ffb47SSadaf Ebrahimitypes of static analysis.
74*a24ffb47SSadaf Ebrahimi
75*a24ffb47SSadaf EbrahimiRun the following commands to build, run tests and most static analysis, and
76*a24ffb47SSadaf Ebrahimicheck formatting:
77*a24ffb47SSadaf Ebrahimi
78*a24ffb47SSadaf Ebrahimi### OS X or Linux
79*a24ffb47SSadaf Ebrahimi
80*a24ffb47SSadaf Ebrahimi`./gradlew clean assemble check verGJF`
81*a24ffb47SSadaf Ebrahimi
82*a24ffb47SSadaf Ebrahimi### Windows
83*a24ffb47SSadaf Ebrahimi
84*a24ffb47SSadaf Ebrahimi`gradlew.bat clean assemble check verGJF`
85*a24ffb47SSadaf Ebrahimi
86*a24ffb47SSadaf EbrahimiUse these commands to run Checker Framework null analysis:
87*a24ffb47SSadaf Ebrahimi
88*a24ffb47SSadaf Ebrahimi### OS X or Linux
89*a24ffb47SSadaf Ebrahimi
90*a24ffb47SSadaf Ebrahimi`./gradlew clean assemble -PcheckerFramework`
91*a24ffb47SSadaf Ebrahimi
92*a24ffb47SSadaf Ebrahimi### Windows
93*a24ffb47SSadaf Ebrahimi
94*a24ffb47SSadaf Ebrahimi`gradlew.bat clean assemble -PcheckerFramework`
95*a24ffb47SSadaf Ebrahimi
96*a24ffb47SSadaf EbrahimiRun the following command to install a local snapshot of OpenCensus. This
97*a24ffb47SSadaf Ebrahimican be a very useful tool for testing changes locally against another
98*a24ffb47SSadaf Ebrahimiproject that uses OpenCensus.
99*a24ffb47SSadaf Ebrahimi
100*a24ffb47SSadaf Ebrahimi### OS X or Linux
101*a24ffb47SSadaf Ebrahimi
102*a24ffb47SSadaf Ebrahimi`./gradlew install`
103*a24ffb47SSadaf Ebrahimi
104*a24ffb47SSadaf Ebrahimi### Windows
105*a24ffb47SSadaf Ebrahimi
106*a24ffb47SSadaf Ebrahimi`gradlew.bat install`
107*a24ffb47SSadaf Ebrahimi
108*a24ffb47SSadaf Ebrahimi### Checker Framework null analysis
109*a24ffb47SSadaf Ebrahimi
110*a24ffb47SSadaf EbrahimiOpenCensus uses the [Checker Framework](https://checkerframework.org/) to
111*a24ffb47SSadaf Ebrahimiprevent NullPointerExceptions. Since the project uses Java 6, and Java 6 doesn't
112*a24ffb47SSadaf Ebrahimiallow annotations on types, all Checker Framework type annotations must be
113*a24ffb47SSadaf Ebrahimi[put in comments](https://checkerframework.org/manual/#backward-compatibility).
114*a24ffb47SSadaf EbrahimiPutting all Checker Framework annotations and imports in comments also avoids a
115*a24ffb47SSadaf Ebrahimidependency on the Checker Framework library.
116*a24ffb47SSadaf Ebrahimi
117*a24ffb47SSadaf EbrahimiOpenCensus uses `org.checkerframework.checker.nullness.qual.Nullable` for all
118*a24ffb47SSadaf Ebrahiminullable annotations on types, since `javax.annotation.Nullable` cannot be
119*a24ffb47SSadaf Ebrahimiapplied to types. However, it uses `javax.annotation.Nullable` in API method
120*a24ffb47SSadaf Ebrahimisignatures whenever possible, so that the annotations can be uncommented and
121*a24ffb47SSadaf Ebrahimibe included in .class files and Javadocs.
122*a24ffb47SSadaf Ebrahimi
123*a24ffb47SSadaf Ebrahimi### Checkstyle import control
124*a24ffb47SSadaf Ebrahimi
125*a24ffb47SSadaf EbrahimiThis project uses Checkstyle to specify the allowed dependencies between
126*a24ffb47SSadaf Ebrahimipackages, using its ImportControl feature
127*a24ffb47SSadaf Ebrahimi(http://checkstyle.sourceforge.net/config_imports.html#ImportControl).
128*a24ffb47SSadaf Ebrahimi`buildscripts/import-control.xml` specifies the allowed imports and contains
129*a24ffb47SSadaf Ebrahimisome guidelines on OpenCensus' inter-package dependencies. An error messsage
130*a24ffb47SSadaf Ebrahimisuch as
131*a24ffb47SSadaf Ebrahimi`Disallowed import - edu.umd.cs.findbugs.annotations.SuppressFBWarnings. [ImportControl]`
132*a24ffb47SSadaf Ebrahimicould mean that `import-control.xml` needs to be updated.
133*a24ffb47SSadaf Ebrahimi
134*a24ffb47SSadaf Ebrahimi## Benchmarks
135*a24ffb47SSadaf Ebrahimi
136*a24ffb47SSadaf Ebrahimi### Invoke all benchmarks on a sub-project
137*a24ffb47SSadaf Ebrahimi
138*a24ffb47SSadaf Ebrahimi```bash
139*a24ffb47SSadaf Ebrahimi$ ./gradlew clean :opencensus-impl-core:jmh
140*a24ffb47SSadaf Ebrahimi```
141*a24ffb47SSadaf Ebrahimi
142*a24ffb47SSadaf Ebrahimi### Invoke on a single benchmark class
143*a24ffb47SSadaf Ebrahimi
144*a24ffb47SSadaf Ebrahimi```bash
145*a24ffb47SSadaf Ebrahimi./gradlew -PjmhIncludeSingleClass=BinaryFormatImplBenchmark clean :opencensus-impl-core:jmh
146*a24ffb47SSadaf Ebrahimi```
147*a24ffb47SSadaf Ebrahimi
148*a24ffb47SSadaf Ebrahimi### Debug compilation errors
149*a24ffb47SSadaf EbrahimiWhen you make incompatible changes in the Benchmarks classes you may get compilation errors which
150*a24ffb47SSadaf Ebrahimiare related to the old code not being compatible with the new code. Some of the reasons are:
151*a24ffb47SSadaf Ebrahimi* Any plugin cannot delete the generated code (jmh generates code) because if the user configured
152*a24ffb47SSadaf Ebrahimithe directory as the same as source code the plugin will delete users source code.
153*a24ffb47SSadaf Ebrahimi* After you run jmh, a gradle daemon will stay alive which may cache the generated code in memory
154*a24ffb47SSadaf Ebrahimiand use use that generated code even if the files were changed. This is an issue for classes
155*a24ffb47SSadaf Ebrahimigenerated with auto-value.
156*a24ffb47SSadaf Ebrahimi
157*a24ffb47SSadaf EbrahimiRun this commands to clean the Gradle's cache:
158*a24ffb47SSadaf Ebrahimi```bash
159*a24ffb47SSadaf Ebrahimi./gradlew --stop
160*a24ffb47SSadaf Ebrahimirm -fr .gradle/
161*a24ffb47SSadaf Ebrahimirm -fr benchmarks/build
162*a24ffb47SSadaf Ebrahimi```
163*a24ffb47SSadaf Ebrahimi
164*a24ffb47SSadaf Ebrahimi## Proposing changes
165*a24ffb47SSadaf Ebrahimi
166*a24ffb47SSadaf EbrahimiCreate a Pull Request with your changes. Please add any user-visible changes to
167*a24ffb47SSadaf EbrahimiCHANGELOG.md. The continuous integration build will run the tests and static
168*a24ffb47SSadaf Ebrahimianalysis. It will also check that the pull request branch has no merge commits.
169*a24ffb47SSadaf EbrahimiWhen the changes are accepted, they will be merged or cherry-picked by an
170*a24ffb47SSadaf EbrahimiOpenCensus core developer.
171