Skip to content

Commit 62ea013

Browse files
authored
Enable Javadoc doclint errors (#2831)
1 parent 032a493 commit 62ea013

26 files changed

Lines changed: 81 additions & 49 deletions

File tree

.github/workflows/main.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,29 @@ jobs:
107107
path: |
108108
**/build/reports/spotbugs/**
109109
110+
JavadocDoclint:
111+
name: Run Javadoc Doclint
112+
runs-on: ubuntu-latest
113+
continue-on-error: true
114+
permissions:
115+
contents: read
116+
steps:
117+
- uses: actions/checkout@v6
118+
- name: Setup the java environment
119+
uses: actions/setup-java@v5
120+
with:
121+
distribution: 'temurin'
122+
java-version: '25'
123+
- name: Validate the Gradle wrapper
124+
uses: gradle/actions/wrapper-validation@v6.1.0
125+
- name: Run Javadoc doclint
126+
run: |
127+
./gradlew -PenableJavadocError=true javadoc mergedJavadoc --console=plain --stacktrace
128+
- name: Report Javadoc doclint failure
129+
if: failure()
130+
run: |
131+
echo "::notice title=Javadoc doclint failed::Javadoc warnings were found. Run ./gradlew -PenableJavadocError=true javadoc mergedJavadoc locally to reproduce."
132+
110133
ScreenshotTests:
111134
name: Run Screenshot Tests
112135
runs-on: ubuntu-latest

build.gradle

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,15 @@ tasks.register('mergedJavadoc', Javadoc) {
198198
title = 'jMonkeyEngine3'
199199
destinationDir = file("dist/javadoc")
200200

201+
def javadocErrorsEnabled = findProperty('enableJavadocError') == 'true'
202+
failOnError = javadocErrorsEnabled
201203
options.encoding = 'UTF-8'
202-
options.addStringOption('Xdoclint:none', '-quiet')
204+
if (javadocErrorsEnabled) {
205+
options.addBooleanOption('Werror', true)
206+
options.addBooleanOption('Xdoclint:all,-missing', true)
207+
} else {
208+
options.addStringOption('Xdoclint:none', '-quiet')
209+
}
203210

204211
options.overview = file("javadoc-overview.html")
205212
source = mergedJavadocSubprojects.collect { project(it).sourceSets.main.allJava }

common.gradle

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,14 @@ jar {
7070
}
7171

7272
javadoc {
73-
failOnError = false
73+
def javadocErrorsEnabled = rootProject.findProperty('enableJavadocError') == 'true'
74+
failOnError = javadocErrorsEnabled
75+
if (javadocErrorsEnabled) {
76+
options.addBooleanOption('Werror', true)
77+
options.addBooleanOption('Xdoclint:all,-missing', true)
78+
} else {
79+
options.addStringOption('Xdoclint:none', '-quiet')
80+
}
7481
options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
7582
options.docTitle = "jMonkeyEngine ${jmeFullVersion} ${project.name} Javadoc"
7683
options.windowTitle = "jMonkeyEngine ${jmeFullVersion} ${project.name} Javadoc"
@@ -79,7 +86,6 @@ javadoc {
7986
options.use = "true"
8087
options.charSet = "UTF-8"
8188
options.encoding = "UTF-8"
82-
options.addStringOption('Xdoclint:none', '-quiet')
8389
source = sourceSets.main.allJava // main only, exclude tests
8490
}
8591

javadoc-overview.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
in Java aimed at wide accessibility and quick deployment to desktop,
1313
web, and mobile platforms.
1414

15-
<h3>Key Features</h3>
15+
<h1>Key Features</h1>
1616
<ul>
1717
<li>Free, open-source software (under the New BSD license) – Use our free engine for commercial, educational, or hobby game development</li>
1818
<li>Minimal adaptations for cross-compatibility – Create games that run on any OpenGL 2 and 3-ready device with the Java Virtual Machine – web, desktop, or mobile.</li>
@@ -23,4 +23,3 @@ <h3>Key Features</h3>
2323

2424
</body>
2525
</html>
26-

jme3-core/src/main/java/com/jme3/anim/tween/action/Action.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@
3939
/**
4040
* Wraps an array of Tween actions into an action object.
4141
*
42-
* <p>
43-
* Notes :
42+
* <p>Notes:</p>
43+
* <ul>
4444
* <li> The sequence of tweens is determined by {@link com.jme3.anim.tween.Tweens} utility class and the {@link BaseAction} interpolates that sequence. </li>
4545
* <li> This implementation mimics the {@link com.jme3.anim.tween.AbstractTween}, but it delegates the interpolation method {@link Tween#interpolate(double)}
4646
* to the {@link BlendableAction} class. </li>
47-
* </p>
47+
* </ul>
4848
*
4949
* Created by Nehon.
5050
*
@@ -64,12 +64,12 @@ public abstract class Action implements JmeCloneable, Tween {
6464

6565
/**
6666
* Instantiates an action object that wraps a tween actions array by extracting their actions to the collection {@link Action#actions}.
67-
* <p>
68-
* Notes :
67+
* <p>Notes:</p>
68+
* <ul>
6969
* <li> If intentions are to wrap some tween actions, then subclasses have to call this constructor, examples : {@link BlendableAction} and {@link BlendAction}. </li>
7070
* <li> If intentions are to make an implementation of {@link Action} that shouldn't wrap tweens of actions, then subclasses shouldn't call this
7171
* constructor, examples : {@link ClipAction} and {@link BaseAction}. </li>
72-
* </p>
72+
* </ul>
7373
*
7474
* @param tweens the tween actions to be wrapped (not null).
7575
*/
@@ -117,13 +117,13 @@ public double getSpeed() {
117117

118118
/**
119119
* Alters the speedup factor applied by the layer running this action.
120-
* <p>
121-
* Notes:
120+
* <p>Notes:</p>
121+
* <ul>
122122
* <li> This factor controls the animation direction, if the speed is a positive value then the animation will run forward and vice versa. </li>
123123
* <li> The speed factor gets applied, inside the {@link com.jme3.anim.AnimLayer}, on each interpolation step by this formula : time += tpf * action.getSpeed() * composer.globalSpeed. </li>
124124
* <li> Default speed is 1.0, it plays the animation clips at their normal speed. </li>
125125
* <li> Setting the speed factor to Zero will stop the animation, while setting it to a negative number will play the animation in a backward fashion. </li>
126-
* </p>
126+
* </ul>
127127
*
128128
* @param speed the speed of frames.
129129
*/

jme3-core/src/main/java/com/jme3/anim/tween/action/BaseAction.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
* //run the action within this layer
5656
* animComposer.setCurrentAction("basicAction", ActionState.class.getSimpleName());
5757
* </pre>
58-
* </p>
5958
* Created by Nehon.
6059
*/
6160
public class BaseAction extends Action {

jme3-core/src/main/java/com/jme3/anim/tween/action/BlendSpace.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,37 +31,34 @@
3131
*/
3232
package com.jme3.anim.tween.action;
3333

34+
import com.jme3.anim.util.HasLocalTransform;
35+
import com.jme3.math.Transform;
36+
3437
/**
3538
* A provider interface which provides a value {@link BlendSpace#getWeight()} to control the blending between 2 successive actions in a {@link BlendAction}.
3639
* The blending weight is a read-only value, and it can be manipulated using the arbitrary value {@link BlendSpace#setValue(float)} during the application runtime.
3740
*
38-
* <p>
39-
* Notes about the blending action and its relations with the blending weight:
41+
* <p>Notes about the blending action and its relations with the blending weight:</p>
4042
* <ul>
4143
* <li> Blending is the action of mixing between 2 successive animation {@link BlendableAction}s by interpolating their transforms and
4244
* then applying the result on the assigned {@link HasLocalTransform} object, the {@link BlendSpace} provides this blending action with a blend weight value. </li>
4345
* <li> The blend weight is the value for the interpolation for the target transforms. </li>
4446
* <li> The blend weight value must be in this interval [0, 1]. </li>
4547
* </ul>
46-
* </p>
4748
*
48-
* <p>
49-
* Different blending weight case scenarios managed by {@link BlendAction} internally:
49+
* <p>Different blending weight case scenarios managed by {@link BlendAction} internally:</p>
5050
* <ul>
51-
* <li> In case of (0 < Blending weight < 1), the blending is executed each update among 2 actions, the first action will use
51+
* <li> In case of (0 &lt; Blending weight &lt; 1), the blending is executed each update among 2 actions, the first action will use
5252
* a blend value of 1 and the second action will use the blend space weight as a value for the interpolation. </li>
5353
* <li> In case of (Blending weight = 0), the blending hasn't started yet, only the first action will be interpolated at (weight = 1). </li>
5454
* <li> In case of (Blending weight = 1), the blending is finished and only the second action will continue to run at (weight = 1). </li>
5555
* </ul>
56-
* </p>
5756
*
58-
* <p>
59-
* Notes about the blending weight value:
57+
* <p>Notes about the blending weight value:</p>
6058
* <ul>
6159
* <li> Negative values and values greater than 1 aren't allowed (i.e., extrapolations aren't allowed). </li>
6260
* <li> For more details, see {@link BlendAction#doInterpolate(double)} and {@link BlendAction#collectTransform(HasLocalTransform, Transform, float, BlendableAction)}. </li>
6361
* </ul>
64-
* </p>
6562
*
6663
* Created by Nehon.
6764
* @see LinearBlendSpace an example of blendspace implementation

jme3-core/src/main/java/com/jme3/input/controls/MouseAxisTrigger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class MouseAxisTrigger implements Trigger {
4747

4848
/**
4949
* Create a new <code>MouseAxisTrigger</code>.
50-
* <p>
50+
*
5151
* @param mouseAxis Mouse axis. See AXIS_*** constants in {@link MouseInput}
5252
* @param negative True if listen to negative axis events, false if
5353
* listen to positive axis events.

jme3-core/src/main/java/com/jme3/material/logic/TechniqueDefLogic.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager
9191
* {@link #makeCurrent(com.jme3.asset.AssetManager, com.jme3.renderer.RenderManager, java.util.EnumSet, com.jme3.light.LightList, com.jme3.shader.DefineList)}.
9292
* @param geometry The geometry to render
9393
* @param lights Lights which influence the geometry.
94-
* @param lastTexUnit the index of the most recently used texture unit
94+
* @param lastBindUnits the most recently used bind units
9595
*/
9696
public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, BindUnits lastBindUnits);
9797
}

jme3-core/src/main/java/com/jme3/scene/Node.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -685,22 +685,23 @@ with BoundingSphere bounding volumes and collideWith(BoundingSphere). Doing
685685
/**
686686
* Returns flat list of Spatials implementing the specified class AND
687687
* with name matching the specified pattern.
688-
* <P>
688+
*
689689
* Note that we are <i>matching</i> the pattern, therefore the pattern
690690
* must match the entire pattern (i.e. it behaves as if it is sandwiched
691691
* between "^" and "$").
692692
* You can set regex modes, like case insensitivity, by using the (?X)
693693
* or (?X:Y) constructs.
694-
* </P> <P>
695-
* By design, it is always safe to code loops like:<PRE>
694+
*
695+
* <p>By design, it is always safe to code loops like:</p>
696+
* <PRE>
696697
* for (Spatial spatial : node.descendantMatches(AClass.class, "regex"))
697698
* </PRE>
698-
* <P>
699+
*
699700
* "Descendants" does not include self, per the definition of the word.
700701
* To test for descendants AND self, you must do a
701702
* <code>node.matches(aClass, aRegex)</code> +
702703
* <code>node.descendantMatches(aClass, aRegex)</code>.
703-
* <P>
704+
*
704705
*
705706
* @param <T> the type of Spatial returned
706707
* @param spatialSubclass Subclass which matching Spatials must implement.

0 commit comments

Comments
 (0)