From 0a0adebd89fd37f7d5a89dc91e92a6af78a9fdd9 Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Fri, 8 Aug 2025 08:08:34 -0700 Subject: [PATCH 1/3] [build] Upgrade to Gradle 8.14.3 (#8164) This fixes local builds with JDK 24. I fixed deprecation warnings from `./gradlew wrapper --warning-mode all` as well. --- build.gradle | 4 ++-- buildSrc/build.gradle | 2 +- datalogtool/publish.gradle | 4 ++-- docs/build.gradle | 10 +++++----- fieldImages/publish.gradle | 4 ++-- glass/publish.gradle | 8 ++++---- gradle/wrapper/gradle-wrapper.jar | Bin 43583 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 9 ++++----- gradlew.bat | 4 ++-- msvcruntime/build.gradle | 1 - ntcoreffi/build.gradle | 4 ++-- outlineviewer/publish.gradle | 4 ++-- processstarter/publish.gradle | 4 ++-- roborioteamnumbersetter/publish.gradle | 4 ++-- shared/java/javacommon.gradle | 6 +++--- shared/javacpp/publish.gradle | 4 ++-- shared/jni/publish.gradle | 8 ++++---- shared/plugins/publish.gradle | 4 ++-- sysid/publish.gradle | 6 +++--- thirdparty/googletest/publish.gradle | 4 ++-- thirdparty/imgui_suite/publish.gradle | 4 ++-- wpical/publish.gradle | 4 ++-- wpigui/publish.gradle | 4 ++-- wpilibc/publish.gradle | 4 ++-- wpilibcExamples/publish.gradle | 12 ++++++------ wpilibcIntegrationTests/build.gradle | 2 +- wpilibjExamples/build.gradle | 12 ++++++------ wpilibjExamples/publish.gradle | 12 ++++++------ wpilibjIntegrationTests/build.gradle | 2 +- 30 files changed, 75 insertions(+), 77 deletions(-) diff --git a/build.gradle b/build.gradle index 2db7083603..3e8f45f37e 100644 --- a/build.gradle +++ b/build.gradle @@ -81,7 +81,7 @@ task libraryBuild() {} build.dependsOn outputVersions task copyAllOutputs(type: Copy) { - destinationDir outputsFolder + destinationDir = outputsFolder } build.dependsOn copyAllOutputs @@ -170,5 +170,5 @@ ext.getCurrentArch = { } wrapper { - gradleVersion = '8.11' + gradleVersion = '8.14.3' } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 36829299fb..58b94ad4c4 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -5,7 +5,7 @@ repositories { url = 'https://frcmaven.wpi.edu/artifactory/ex-gradle' } mavenCentral() - url "https://plugins.gradle.org/m2/" + url = "https://plugins.gradle.org/m2/" } } dependencies { diff --git a/datalogtool/publish.gradle b/datalogtool/publish.gradle index 6e6f079bc9..4f433961a9 100644 --- a/datalogtool/publish.gradle +++ b/datalogtool/publish.gradle @@ -31,7 +31,7 @@ model { // Create the ZIP. def task = project.tasks.create("copyDataLogToolExecutable" + binary.targetPlatform.operatingSystem.name + binary.targetPlatform.architecture.name, Zip) { - description("Copies the DataLogTool executable to the outputs directory.") + description = "Copies the DataLogTool executable to the outputs directory." destinationDirectory = outputsFolder archiveBaseName = zipBaseName @@ -117,7 +117,7 @@ model { artifactId = baseArtifactId groupId = artifactGroupId - version wpilibVersioning.version.get() + version = wpilibVersioning.version.get() } } } diff --git a/docs/build.gradle b/docs/build.gradle index bdc4e3e08a..597699515f 100644 --- a/docs/build.gradle +++ b/docs/build.gradle @@ -177,7 +177,7 @@ tasks.register("zipCppDocs", Zip) { // Java configurations { javaSource { - transitive false + transitive = false } } @@ -265,15 +265,15 @@ publishing { artifact zipJavaDocs artifactId = "${baseArtifactIdJava}" - groupId artifactGroupIdJava - version wpilibVersioning.version.get() + groupId = artifactGroupIdJava + version = wpilibVersioning.version.get() } cpp(MavenPublication) { artifact zipCppDocs artifactId = "${baseArtifactIdCpp}" - groupId artifactGroupIdCpp - version wpilibVersioning.version.get() + groupId = artifactGroupIdCpp + version = wpilibVersioning.version.get() } } } diff --git a/fieldImages/publish.gradle b/fieldImages/publish.gradle index 688376e8b3..1ce268c184 100644 --- a/fieldImages/publish.gradle +++ b/fieldImages/publish.gradle @@ -63,8 +63,8 @@ model { artifact cppSourcesZip artifactId = "${baseArtifactId}-cpp" - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/glass/publish.gradle b/glass/publish.gradle index ab8df4f9ac..a29ad2401c 100644 --- a/glass/publish.gradle +++ b/glass/publish.gradle @@ -86,7 +86,7 @@ model { // Create the ZIP. def task = project.tasks.create("copyGlassExecutable" + binary.targetPlatform.operatingSystem.name + binary.targetPlatform.architecture.name, Zip) { - description("Copies the Glass executable to the outputs directory.") + description = "Copies the Glass executable to the outputs directory." destinationDirectory = outputsFolder archiveBaseName = zipBaseName @@ -175,7 +175,7 @@ model { artifactId = baseArtifactId groupId = artifactGroupId - version wpilibVersioning.version.get() + version = wpilibVersioning.version.get() } libglass(MavenPublication) { libGlassTaskList.each { artifact it } @@ -185,7 +185,7 @@ model { artifactId = libBaseArtifactId groupId = libArtifactGroupId - version wpilibVersioning.version.get() + version = wpilibVersioning.version.get() } libglassnt(MavenPublication) { libGlassntTaskList.each { artifact it } @@ -195,7 +195,7 @@ model { artifactId = libntBaseArtifactId groupId = libntArtifactGroupId - version wpilibVersioning.version.get() + version = wpilibVersioning.version.get() } } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b9530d66f5e68d973ea569d8e19de379189..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 34943 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

Gn4F+B~IivciU9^t0j-Mgao3 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 DDw4oP diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 94113f200e..d4081da476 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6d6b..23d15a9367 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -206,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. @@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019c79..5eed7ee845 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/msvcruntime/build.gradle b/msvcruntime/build.gradle index 2bbcd1382c..b8cb6b880e 100644 --- a/msvcruntime/build.gradle +++ b/msvcruntime/build.gradle @@ -1,6 +1,5 @@ import org.gradle.nativeplatform.toolchain.internal.msvcpp.VisualStudioLocator import org.gradle.internal.os.OperatingSystem -import org.gradle.util.VersionNumber plugins { id 'cpp' diff --git a/ntcoreffi/build.gradle b/ntcoreffi/build.gradle index ca86fe8fb8..dab982e408 100644 --- a/ntcoreffi/build.gradle +++ b/ntcoreffi/build.gradle @@ -140,8 +140,8 @@ model { artifact cppHeadersZip artifactId = "${baseArtifactId}-cpp" - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/outlineviewer/publish.gradle b/outlineviewer/publish.gradle index 4b5d287fc6..824962e690 100644 --- a/outlineviewer/publish.gradle +++ b/outlineviewer/publish.gradle @@ -31,7 +31,7 @@ model { // Create the ZIP. def task = project.tasks.create("copyOutlineViewerExecutable" + binary.targetPlatform.operatingSystem.name + binary.targetPlatform.architecture.name, Zip) { - description("Copies the OutlineViewer executable to the outputs directory.") + description = "Copies the OutlineViewer executable to the outputs directory." destinationDirectory = outputsFolder archiveBaseName = zipBaseName @@ -117,7 +117,7 @@ model { artifactId = baseArtifactId groupId = artifactGroupId - version wpilibVersioning.version.get() + version = wpilibVersioning.version.get() } } } diff --git a/processstarter/publish.gradle b/processstarter/publish.gradle index 49b4bd42fe..b287bf930a 100644 --- a/processstarter/publish.gradle +++ b/processstarter/publish.gradle @@ -30,7 +30,7 @@ model { // Create the ZIP. def task = project.tasks.create("copyprocessstarterExecutable" + binary.targetPlatform.architecture.name, Zip) { - description("Copies the processstarter executable to the outputs directory.") + description = "Copies the processstarter executable to the outputs directory." destinationDirectory = outputsFolder archiveBaseName = zipBaseName @@ -60,7 +60,7 @@ model { artifactId = baseArtifactId groupId = artifactGroupId - version wpilibVersioning.version.get() + version = wpilibVersioning.version.get() } } } diff --git a/roborioteamnumbersetter/publish.gradle b/roborioteamnumbersetter/publish.gradle index 7b147195ae..e5b228bb0a 100644 --- a/roborioteamnumbersetter/publish.gradle +++ b/roborioteamnumbersetter/publish.gradle @@ -31,7 +31,7 @@ model { // Create the ZIP. def task = project.tasks.create("copyroboRIOTeamNumberSetterExecutable" + binary.targetPlatform.operatingSystem.name + binary.targetPlatform.architecture.name, Zip) { - description("Copies the roboRIOTeamNumberSetter executable to the outputs directory.") + description = "Copies the roboRIOTeamNumberSetter executable to the outputs directory." destinationDirectory = outputsFolder archiveBaseName = zipBaseName @@ -117,7 +117,7 @@ model { artifactId = baseArtifactId groupId = artifactGroupId - version wpilibVersioning.version.get() + version = wpilibVersioning.version.get() } } } diff --git a/shared/java/javacommon.gradle b/shared/java/javacommon.gradle index 7802818b48..3f82db58ed 100644 --- a/shared/java/javacommon.gradle +++ b/shared/java/javacommon.gradle @@ -65,8 +65,8 @@ publishing { artifact javadocJar artifactId = "${baseArtifactId}-java" - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } @@ -76,7 +76,7 @@ test { systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' testLogging { events "failed" - exceptionFormat "full" + exceptionFormat = "full" } finalizedBy jacocoTestReport } diff --git a/shared/javacpp/publish.gradle b/shared/javacpp/publish.gradle index 5af49f0c45..ca7fc5f7d8 100644 --- a/shared/javacpp/publish.gradle +++ b/shared/javacpp/publish.gradle @@ -67,8 +67,8 @@ model { artifact cppSourcesZip artifactId = "${baseArtifactId}-cpp" - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/shared/jni/publish.gradle b/shared/jni/publish.gradle index dd1ec1cb07..9bfe4d0282 100644 --- a/shared/jni/publish.gradle +++ b/shared/jni/publish.gradle @@ -85,8 +85,8 @@ model { artifact cppSourcesZip artifactId = "${baseArtifactId}-cpp" - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } @@ -118,8 +118,8 @@ model { } artifactId = "${baseArtifactId}-jnicvstatic" - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/shared/plugins/publish.gradle b/shared/plugins/publish.gradle index 8d7b9d4b71..7c7a980b55 100644 --- a/shared/plugins/publish.gradle +++ b/shared/plugins/publish.gradle @@ -56,8 +56,8 @@ model { artifactId = baseArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/sysid/publish.gradle b/sysid/publish.gradle index 568abea3dd..c998accd30 100644 --- a/sysid/publish.gradle +++ b/sysid/publish.gradle @@ -31,7 +31,7 @@ model { // Create the macOS bundle. def bundleTask = project.tasks.create("bundleSysIdOsxApp" + binary.targetPlatform.architecture.name, Copy) { - description("Creates a macOS application bundle for SysId") + description = "Creates a macOS application bundle for SysId" from(file("$project.projectDir/Info.plist")) into(file("$project.buildDir/outputs/bundles/$binary.targetPlatform.architecture.name/SysId.app/Contents")) into("MacOS") { @@ -74,7 +74,7 @@ model { // Create the ZIP. def task = project.tasks.create("copySysIdExecutable" + binary.targetPlatform.architecture.name, Zip) { - description("Copies the SysId executable to the outputs directory.") + description = "Copies the SysId executable to the outputs directory." destinationDirectory = outputsFolder archiveBaseName = zipBaseName @@ -118,7 +118,7 @@ model { artifactId = baseArtifactId groupId = artifactGroupId - version wpilibVersioning.version.get() + version = wpilibVersioning.version.get() } } } diff --git a/thirdparty/googletest/publish.gradle b/thirdparty/googletest/publish.gradle index 3bcd84dd93..c9ef0172b2 100644 --- a/thirdparty/googletest/publish.gradle +++ b/thirdparty/googletest/publish.gradle @@ -54,8 +54,8 @@ model { artifact cppSourcesZip artifactId = baseArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/thirdparty/imgui_suite/publish.gradle b/thirdparty/imgui_suite/publish.gradle index 818a180bfc..943c5cc877 100644 --- a/thirdparty/imgui_suite/publish.gradle +++ b/thirdparty/imgui_suite/publish.gradle @@ -85,8 +85,8 @@ model { artifact cppSourcesZip artifactId = baseArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/wpical/publish.gradle b/wpical/publish.gradle index 5af5956239..16875347b8 100644 --- a/wpical/publish.gradle +++ b/wpical/publish.gradle @@ -31,7 +31,7 @@ model { // Create the ZIP. def task = project.tasks.create("copywpicalExecutable" + binary.targetPlatform.operatingSystem.name + binary.targetPlatform.architecture.name, Zip) { - description("Copies the wpical executable to the outputs directory.") + description = "Copies the wpical executable to the outputs directory." destinationDirectory = outputsFolder archiveBaseName = zipBaseName @@ -121,7 +121,7 @@ model { artifactId = baseArtifactId groupId = artifactGroupId - version wpilibVersioning.version.get() + version = wpilibVersioning.version.get() } } } diff --git a/wpigui/publish.gradle b/wpigui/publish.gradle index c137d7c579..6c102cc389 100644 --- a/wpigui/publish.gradle +++ b/wpigui/publish.gradle @@ -63,8 +63,8 @@ model { artifact cppSourcesZip artifactId = baseArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/wpilibc/publish.gradle b/wpilibc/publish.gradle index aff50caa69..2c0452c082 100644 --- a/wpilibc/publish.gradle +++ b/wpilibc/publish.gradle @@ -66,8 +66,8 @@ model { artifact cppSourcesZip artifactId = baseArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/wpilibcExamples/publish.gradle b/wpilibcExamples/publish.gradle index e0fba64688..0918ea6921 100644 --- a/wpilibcExamples/publish.gradle +++ b/wpilibcExamples/publish.gradle @@ -76,24 +76,24 @@ publishing { artifact cppExamplesZip artifactId = baseExamplesArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } templates(MavenPublication) { artifact cppTemplatesZip artifactId = baseTemplatesArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } commands(MavenPublication) { artifact cppCommandsZip artifactId = baseCommandsArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/wpilibcIntegrationTests/build.gradle b/wpilibcIntegrationTests/build.gradle index 7ab64e7ecb..6af7a5668d 100644 --- a/wpilibcIntegrationTests/build.gradle +++ b/wpilibcIntegrationTests/build.gradle @@ -94,7 +94,7 @@ model { } } } - destinationDir testOutputFolder + destinationDir = testOutputFolder } // This is in a separate if statement because of what I would assume is a bug in grade. // Will file an issue on their side. diff --git a/wpilibjExamples/build.gradle b/wpilibjExamples/build.gradle index eec38c0a35..9bca5f3a39 100644 --- a/wpilibjExamples/build.gradle +++ b/wpilibjExamples/build.gradle @@ -162,7 +162,7 @@ model { new groovy.json.JsonSlurper().parseText(exampleFile.text).each { entry -> project.tasks.create("run${entry.foldername}", JavaExec) { run -> - run.group "run examples" + run.group = "run examples" run.mainClass = "edu.wpi.first.wpilibj.examples." + entry.foldername + "." + entry.mainclass run.classpath = sourceSets.main.runtimeClasspath run.dependsOn it.tasks.install @@ -174,7 +174,7 @@ model { } } project.tasks.create("test${entry.foldername}", Test) { testTask -> - testTask.group "verification" + testTask.group = "verification" testTask.useJUnitPlatform() testTask.filter { includeTestsMatching("edu.wpi.first.wpilibj.examples.${entry.foldername}.*") @@ -195,7 +195,7 @@ model { testTask.systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' testTask.testLogging { events "failed" - exceptionFormat "full" + exceptionFormat = "full" } testTask.systemProperty 'java.library.path', filePath @@ -207,7 +207,7 @@ model { } new groovy.json.JsonSlurper().parseText(snippetsFile.text).each { entry -> project.tasks.create("runSnippet${entry.foldername}", JavaExec) { run -> - run.group "run snippets" + run.group = "run snippets" run.mainClass = "edu.wpi.first.wpilibj.snippets." + entry.foldername + "." + entry.mainclass run.classpath = sourceSets.main.runtimeClasspath run.dependsOn it.tasks.install @@ -219,7 +219,7 @@ model { } } project.tasks.create("testSnippet${entry.foldername}", Test) { testTask -> - testTask.group "verification" + testTask.group = "verification" testTask.useJUnitPlatform() testTask.filter { includeTestsMatching("edu.wpi.first.wpilibj.snippets.${entry.foldername}.*") @@ -236,7 +236,7 @@ model { testTask.systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' testTask.testLogging { events "failed" - exceptionFormat "full" + exceptionFormat = "full" } testTask.systemProperty 'java.library.path', filePath diff --git a/wpilibjExamples/publish.gradle b/wpilibjExamples/publish.gradle index fc90e78909..02c82ca847 100644 --- a/wpilibjExamples/publish.gradle +++ b/wpilibjExamples/publish.gradle @@ -76,24 +76,24 @@ publishing { artifact javaExamplesZip artifactId = baseExamplesArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } templates(MavenPublication) { artifact javaTemplatesZip artifactId = baseTemplatesArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } commands(MavenPublication) { artifact javaCommandsZip artifactId = baseCommandsArtifactId - groupId artifactGroupId - version wpilibVersioning.version.get() + groupId = artifactGroupId + version = wpilibVersioning.version.get() } } } diff --git a/wpilibjIntegrationTests/build.gradle b/wpilibjIntegrationTests/build.gradle index b916736964..fc93c11dab 100644 --- a/wpilibjIntegrationTests/build.gradle +++ b/wpilibjIntegrationTests/build.gradle @@ -44,7 +44,7 @@ build.dependsOn shadowJar def testOutputFolder = file("${project(':').buildDir}/integrationTestFiles") task copyWpilibJIntegrationTestJarToOutput(type: Copy) { - destinationDir testOutputFolder + destinationDir = testOutputFolder dependsOn shadowJar inputs.file shadowJar.archiveFile from(shadowJar) { From 5fd9e1e72a29ee73b3339970ab87b96c72a9a989 Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Fri, 8 Aug 2025 22:48:11 -0700 Subject: [PATCH 2/3] [build] Fix Gradle Task.project deprecation warning (#8167) ``` > Task :wpilibcExamples:checkCommands Script '/home/tav/frc/wpilib/allwpilib/shared/examplecheck.gradle': line 135 Invocation of Task.project at execution time has been deprecated. This will fail with an error in Gradle 10.0. This API is incompatible with the configuration cache, which will become the only mode supported by Gradle in a future release. Consult the upgrading guide for further information: https://docs.gradle.org/8.14.3/userguide/upgrading_version_7.html#task_project at examplecheck_4wsg1s37eigy9vs5arzst20ga$_run_closure5$_closure16$_closure17.doCall$original(/home/tav/frc/wpilib/allwpilib/shared/examplecheck.gradle:135) (Run with --stacktrace to get the full stack trace of this deprecation warning.) ``` Moving the project access outside the doLast block makes it occur at confguration time instead. --- shared/examplecheck.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shared/examplecheck.gradle b/shared/examplecheck.gradle index bbd7f65c80..347475116a 100644 --- a/shared/examplecheck.gradle +++ b/shared/examplecheck.gradle @@ -122,6 +122,7 @@ task checkSnippets(type: Task) { } task checkCommands(type: Task) { + def isCppCommands = project.isCppCommands; doLast { def parsedJson = new groovy.json.JsonSlurper().parseText(commandFile.text) fileCheck(parsedJson, commandDirectory) @@ -132,7 +133,7 @@ task checkCommands(type: Task) { assert it.foldername != null assert it.replacename != null assert it.commandversion != null - if (project.isCppCommands) { + if (isCppCommands) { assert it.headers != null assert !it.headers.isEmpty() assert it.source != null From 9ac7e286f5ecf8451ad3d1db94d5666a85ae66a4 Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Fri, 8 Aug 2025 23:04:02 -0700 Subject: [PATCH 3/3] [build] Upgrade Gradle plugins (#8166) I upgraded all plugins I could see except org.ysb33r.doxygen. 2.0 made breaking changes, and I couldn't figure out how to migrate. Most of the changes are for suppressing new linter purification rites. --- .../first/apriltag/AprilTagFieldLayout.java | 7 +- .../first/apriltag/AprilTagDetectorTest.java | 1 - build.gradle | 8 +- cameraserver/multiCameraServer/build.gradle | 2 +- .../wpi/first/cameraserver/CameraServer.java | 4 +- .../edu/wpi/first/vision/VisionPipeline.java | 1 + .../java/edu/wpi/first/cscore/CvSource.java | 5 +- docs/build.gradle | 12 +- .../processor/AnnotationProcessorTest.java | 3 +- .../logging/LogBackedSendableBuilder.java | 1 - .../java/edu/wpi/first/hal/AnalogJNI.java | 10 +- .../java/edu/wpi/first/hal/CANAPITypes.java | 4 +- .../first/hal/PowerDistributionFaults.java | 4 +- .../hal/PowerDistributionStickyFaults.java | 4 +- .../first/hal/can/CANExceptionFactory.java | 17 ++- .../first/hal/simulation/BufferCallback.java | 1 + .../hal/simulation/ConstBufferCallback.java | 1 + .../first/hal/simulation/NotifyCallback.java | 1 + .../SpiReadAutoReceiveBufferCallback.java | 1 + .../generate/main/java/EntryImpl.java.jinja | 1 - .../main/java/GenericSubscriber.java.jinja | 1 - .../main/java/NetworkTableValue.java.jinja | 5 +- .../generate/main/java/Subscriber.java.jinja | 1 - .../generate/main/java/Timestamped.java.jinja | 1 - .../networktables/BooleanArrayEntryImpl.java | 1 - .../networktables/BooleanArraySubscriber.java | 1 - .../first/networktables/BooleanEntryImpl.java | 1 - .../networktables/BooleanSubscriber.java | 1 - .../networktables/DoubleArrayEntryImpl.java | 1 - .../networktables/DoubleArraySubscriber.java | 1 - .../first/networktables/DoubleEntryImpl.java | 1 - .../first/networktables/DoubleSubscriber.java | 1 - .../networktables/FloatArrayEntryImpl.java | 1 - .../networktables/FloatArraySubscriber.java | 1 - .../first/networktables/FloatEntryImpl.java | 1 - .../first/networktables/FloatSubscriber.java | 1 - .../networktables/GenericSubscriber.java | 1 - .../networktables/IntegerArrayEntryImpl.java | 1 - .../networktables/IntegerArraySubscriber.java | 1 - .../first/networktables/IntegerEntryImpl.java | 1 - .../networktables/IntegerSubscriber.java | 1 - .../networktables/NetworkTableValue.java | 5 +- .../wpi/first/networktables/RawEntryImpl.java | 1 - .../first/networktables/RawSubscriber.java | 1 - .../networktables/StringArrayEntryImpl.java | 1 - .../networktables/StringArraySubscriber.java | 1 - .../first/networktables/StringEntryImpl.java | 1 - .../first/networktables/StringSubscriber.java | 1 - .../networktables/TimestampedBoolean.java | 1 - .../TimestampedBooleanArray.java | 1 - .../networktables/TimestampedDouble.java | 1 - .../networktables/TimestampedDoubleArray.java | 1 - .../first/networktables/TimestampedFloat.java | 1 - .../networktables/TimestampedFloatArray.java | 1 - .../networktables/TimestampedInteger.java | 1 - .../TimestampedIntegerArray.java | 1 - .../first/networktables/TimestampedRaw.java | 1 - .../networktables/TimestampedString.java | 1 - .../networktables/TimestampedStringArray.java | 1 - .../wpi/first/networktables/NTSendable.java | 1 + .../edu/wpi/first/networktables/RawTest.java | 1 - shared/java/javacommon.gradle | 5 +- shared/java/javastyle.gradle | 10 +- styleguide/pmd-ruleset.xml | 25 ++-- styleguide/spotbugs-exclude.xml | 126 +++++++++++++----- .../wpilibj2/command/ParallelRaceGroup.java | 1 - .../main/native/cpp/DigitalGlitchFilter.cpp | 1 + .../edu/wpi/first/wpilibj/ADIS16448_IMU.java | 2 +- .../edu/wpi/first/wpilibj/ADIS16470_IMU.java | 2 +- .../java/edu/wpi/first/wpilibj/Alert.java | 3 +- .../first/wpilibj/DigitalGlitchFilter.java | 3 +- .../edu/wpi/first/wpilibj/DriverStation.java | 1 - .../edu/wpi/first/wpilibj/GenericHID.java | 1 - .../main/java/edu/wpi/first/wpilibj/I2C.java | 3 +- .../java/edu/wpi/first/wpilibj/RobotBase.java | 51 ++++--- .../first/wpilibj/SynchronousInterrupt.java | 1 - .../edu/wpi/first/wpilibj/Ultrasonic.java | 1 - .../wpilibj/shuffleboard/LayoutType.java | 1 + .../wpilibj/shuffleboard/WidgetType.java | 1 + .../wpilibj/simulation/CallbackStore.java | 3 + .../smartdashboard/SendableBuilderImpl.java | 1 - .../smartdashboard/SmartDashboard.java | 1 - .../wpilibj/AddressableLEDBufferTest.java | 27 ++-- wpilibjExamples/build.gradle | 4 +- .../commandbased/commands/ExampleCommand.java | 2 +- .../commands/ExampleCommand.java | 2 +- .../commands/ExampleCommand.java | 2 +- wpimath/src/generate/main/java/Nat.java.jinja | 1 + .../main/java/edu/wpi/first/math/Nat.java | 1 + .../math/interpolation/Interpolatable.java | 1 + .../wpi/first/math/spline/SplineHelper.java | 2 +- .../main/java/Measure-immutable.java.jinja | 2 +- .../main/java/Measure-mutable.java.jinja | 2 +- .../units/measure/ImmutableAcceleration.java | 2 +- .../first/units/measure/ImmutableAngle.java | 2 +- .../measure/ImmutableAngularAcceleration.java | 2 +- .../measure/ImmutableAngularMomentum.java | 2 +- .../measure/ImmutableAngularVelocity.java | 2 +- .../first/units/measure/ImmutableCurrent.java | 2 +- .../units/measure/ImmutableDimensionless.java | 2 +- .../units/measure/ImmutableDistance.java | 2 +- .../first/units/measure/ImmutableEnergy.java | 2 +- .../first/units/measure/ImmutableForce.java | 2 +- .../units/measure/ImmutableFrequency.java | 2 +- .../measure/ImmutableLinearAcceleration.java | 2 +- .../measure/ImmutableLinearMomentum.java | 2 +- .../measure/ImmutableLinearVelocity.java | 2 +- .../first/units/measure/ImmutableMass.java | 2 +- .../measure/ImmutableMomentOfInertia.java | 2 +- .../first/units/measure/ImmutableMult.java | 2 +- .../wpi/first/units/measure/ImmutablePer.java | 2 +- .../first/units/measure/ImmutablePower.java | 2 +- .../units/measure/ImmutableResistance.java | 2 +- .../units/measure/ImmutableTemperature.java | 2 +- .../first/units/measure/ImmutableTime.java | 2 +- .../first/units/measure/ImmutableTorque.java | 2 +- .../units/measure/ImmutableVelocity.java | 2 +- .../first/units/measure/ImmutableVoltage.java | 2 +- .../first/units/measure/MutAcceleration.java | 2 +- .../edu/wpi/first/units/measure/MutAngle.java | 2 +- .../units/measure/MutAngularAcceleration.java | 2 +- .../units/measure/MutAngularMomentum.java | 2 +- .../units/measure/MutAngularVelocity.java | 2 +- .../wpi/first/units/measure/MutCurrent.java | 2 +- .../first/units/measure/MutDimensionless.java | 2 +- .../wpi/first/units/measure/MutDistance.java | 2 +- .../wpi/first/units/measure/MutEnergy.java | 2 +- .../edu/wpi/first/units/measure/MutForce.java | 2 +- .../wpi/first/units/measure/MutFrequency.java | 2 +- .../units/measure/MutLinearAcceleration.java | 2 +- .../units/measure/MutLinearMomentum.java | 2 +- .../units/measure/MutLinearVelocity.java | 2 +- .../edu/wpi/first/units/measure/MutMass.java | 2 +- .../units/measure/MutMomentOfInertia.java | 2 +- .../edu/wpi/first/units/measure/MutMult.java | 2 +- .../edu/wpi/first/units/measure/MutPer.java | 2 +- .../edu/wpi/first/units/measure/MutPower.java | 2 +- .../first/units/measure/MutResistance.java | 2 +- .../first/units/measure/MutTemperature.java | 2 +- .../edu/wpi/first/units/measure/MutTime.java | 2 +- .../wpi/first/units/measure/MutTorque.java | 2 +- .../wpi/first/units/measure/MutVelocity.java | 2 +- .../wpi/first/units/measure/MutVoltage.java | 2 +- .../first/util/cleanup/ReflectionCleanup.java | 1 + .../edu/wpi/first/util/sendable/Sendable.java | 1 + .../first/util/struct/StructGenerator.java | 3 +- .../first/util/cleanup/CleanupPoolTest.java | 1 - 147 files changed, 289 insertions(+), 243 deletions(-) diff --git a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java index c670cf1ae1..3a85ded7c0 100644 --- a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java +++ b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java @@ -152,9 +152,10 @@ public class AprilTagFieldLayout { var pose = switch (origin) { case kBlueAllianceWallRightSide -> Pose3d.kZero; - case kRedAllianceWallRightSide -> new Pose3d( - new Translation3d(m_fieldDimensions.fieldLength, m_fieldDimensions.fieldWidth, 0), - new Rotation3d(0, 0, Math.PI)); + case kRedAllianceWallRightSide -> + new Pose3d( + new Translation3d(m_fieldDimensions.fieldLength, m_fieldDimensions.fieldWidth, 0), + new Rotation3d(0, 0, Math.PI)); }; setOrigin(pose); } diff --git a/apriltag/src/test/java/edu/wpi/first/apriltag/AprilTagDetectorTest.java b/apriltag/src/test/java/edu/wpi/first/apriltag/AprilTagDetectorTest.java index e290343fa0..4a83016b8c 100644 --- a/apriltag/src/test/java/edu/wpi/first/apriltag/AprilTagDetectorTest.java +++ b/apriltag/src/test/java/edu/wpi/first/apriltag/AprilTagDetectorTest.java @@ -24,7 +24,6 @@ import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; -@SuppressWarnings("PMD.MutableStaticState") class AprilTagDetectorTest { @SuppressWarnings("MemberName") AprilTagDetector detector; diff --git a/build.gradle b/build.gradle index 3e8f45f37e..c752168520 100644 --- a/build.gradle +++ b/build.gradle @@ -17,10 +17,10 @@ plugins { id 'edu.wpi.first.GradleVsCode' id 'idea' id 'visual-studio' - id 'net.ltgt.errorprone' version '3.1.0' apply false - id 'com.gradleup.shadow' version '8.3.4' apply false - id 'com.diffplug.spotless' version '6.20.0' apply false - id 'com.github.spotbugs' version '6.0.2' apply false + id 'net.ltgt.errorprone' version '4.3.0' apply false + id 'com.gradleup.shadow' version '9.0.0' apply false + id 'com.diffplug.spotless' version '7.2.1' apply false + id 'com.github.spotbugs' version '6.2.3' apply false } wpilibVersioning.buildServerMode = project.hasProperty('buildServer') diff --git a/cameraserver/multiCameraServer/build.gradle b/cameraserver/multiCameraServer/build.gradle index 377bdbcf3c..687c20046e 100644 --- a/cameraserver/multiCameraServer/build.gradle +++ b/cameraserver/multiCameraServer/build.gradle @@ -31,7 +31,7 @@ repositories { } dependencies { - implementation 'com.google.code.gson:gson:2.10.1' + implementation 'com.google.code.gson:gson:2.13.1' implementation project(':wpiutil') implementation project(':wpinet') diff --git a/cameraserver/src/main/java/edu/wpi/first/cameraserver/CameraServer.java b/cameraserver/src/main/java/edu/wpi/first/cameraserver/CameraServer.java index 0ff47f8f5c..e724cbdccc 100644 --- a/cameraserver/src/main/java/edu/wpi/first/cameraserver/CameraServer.java +++ b/cameraserver/src/main/java/edu/wpi/first/cameraserver/CameraServer.java @@ -46,7 +46,7 @@ public final class CameraServer { private static final String kPublishName = "/CameraPublisher"; private static final class PropertyPublisher implements AutoCloseable { - @SuppressWarnings({"PMD.MissingBreakInSwitch", "PMD.ImplicitSwitchFallThrough", "fallthrough"}) + @SuppressWarnings("fallthrough") PropertyPublisher(NetworkTable table, VideoEvent event) { String name; String infoName; @@ -66,7 +66,7 @@ public final class CameraServer { break; case kEnum: m_choicesTopic = table.getStringArrayTopic(infoName + "/choices"); - // fall through + // fallthrough case kInteger: m_integerValueEntry = table.getIntegerTopic(name).getEntry(0); m_minPublisher = table.getIntegerTopic(infoName + "/min").publish(); diff --git a/cameraserver/src/main/java/edu/wpi/first/vision/VisionPipeline.java b/cameraserver/src/main/java/edu/wpi/first/vision/VisionPipeline.java index 29c285f03e..d9e65df896 100644 --- a/cameraserver/src/main/java/edu/wpi/first/vision/VisionPipeline.java +++ b/cameraserver/src/main/java/edu/wpi/first/vision/VisionPipeline.java @@ -13,6 +13,7 @@ import org.opencv.core.Mat; * @see VisionRunner * @see VisionThread */ +@FunctionalInterface public interface VisionPipeline { /** * Processes the image input and sets the result objects. Implementations should make these diff --git a/cscore/src/main/java/edu/wpi/first/cscore/CvSource.java b/cscore/src/main/java/edu/wpi/first/cscore/CvSource.java index 944b58f0eb..4ca03a4194 100644 --- a/cscore/src/main/java/edu/wpi/first/cscore/CvSource.java +++ b/cscore/src/main/java/edu/wpi/first/cscore/CvSource.java @@ -68,8 +68,9 @@ public class CvSource extends ImageSource { case 2 -> PixelFormat.kYUYV; // 2 channels is assumed YUYV case 3 -> PixelFormat.kBGR; // 3 channels is assumed BGR case 4 -> PixelFormat.kBGRA; // 4 channels is assumed BGRA - default -> throw new VideoException( - "Unable to get pixel format for " + channels + " channels"); + default -> + throw new VideoException( + "Unable to get pixel format for " + channels + " channels"); }; putFrame(finalImage, format, true); diff --git a/docs/build.gradle b/docs/build.gradle index 597699515f..f18433901a 100644 --- a/docs/build.gradle +++ b/docs/build.gradle @@ -1,6 +1,6 @@ plugins { id 'java' - id "org.ysb33r.doxygen" version "1.0.4" + id "org.ysb33r.doxygen" version "2.0.0" } evaluationDependsOn(':apriltag') @@ -62,12 +62,12 @@ doxygen { } } -doxygen { - template 'Doxyfile' +doxygen.sourceSets.main { + template = 'Doxyfile' cppProjectZips.each { - dependsOn it - source it.source + doxygenDox.dependsOn it + sources it.source it.ext.includeDirs.each { cppIncludeRoots.add(it.absolutePath) } @@ -169,7 +169,7 @@ doxygen { tasks.register("zipCppDocs", Zip) { archiveBaseName = zipBaseNameCpp destinationDirectory = outputsFolder - dependsOn doxygen + dependsOn doxygenDox from ("$buildDir/docs/doxygen/html") into '/' } diff --git a/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/AnnotationProcessorTest.java b/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/AnnotationProcessorTest.java index 50795a45b0..bc6189bf0b 100644 --- a/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/AnnotationProcessorTest.java +++ b/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/AnnotationProcessorTest.java @@ -2536,7 +2536,8 @@ class AnnotationProcessorTest { class Example {} """; - String packageInfo = """ + String packageInfo = + """ package example; """; diff --git a/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/logging/LogBackedSendableBuilder.java b/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/logging/LogBackedSendableBuilder.java index 5de5756ff4..67277e30b5 100644 --- a/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/logging/LogBackedSendableBuilder.java +++ b/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/logging/LogBackedSendableBuilder.java @@ -19,7 +19,6 @@ import java.util.function.LongSupplier; import java.util.function.Supplier; /** A sendable builder implementation that sends data to a {@link EpilogueBackend}. */ -@SuppressWarnings("PMD.CouplingBetweenObjects") // most methods simply delegate to the backend public class LogBackedSendableBuilder implements SendableBuilder { private final EpilogueBackend m_backend; private final Collection m_updates = new ArrayList<>(); diff --git a/hal/src/main/java/edu/wpi/first/hal/AnalogJNI.java b/hal/src/main/java/edu/wpi/first/hal/AnalogJNI.java index f2996f60c2..3b8f439356 100644 --- a/hal/src/main/java/edu/wpi/first/hal/AnalogJNI.java +++ b/hal/src/main/java/edu/wpi/first/hal/AnalogJNI.java @@ -15,19 +15,19 @@ package edu.wpi.first.hal; public class AnalogJNI extends JNIWrapper { /** * native declaration : AthenaJava\target\native\include\HAL\Analog.h:58
- * enum values + * enum values. */ public interface AnalogTriggerType { - /** native declaration : AthenaJava\target\native\include\HAL\Analog.h:54 */ + /** native declaration : AthenaJava\target\native\include\HAL\Analog.h:54. */ int kInWindow = 0; - /** native declaration : AthenaJava\target\native\include\HAL\Analog.h:55 */ + /** native declaration : AthenaJava\target\native\include\HAL\Analog.h:55. */ int kState = 1; - /** native declaration : AthenaJava\target\native\include\HAL\Analog.h:56 */ + /** native declaration : AthenaJava\target\native\include\HAL\Analog.h:56. */ int kRisingPulse = 2; - /** native declaration : AthenaJava\target\native\include\HAL\Analog.h:57 */ + /** native declaration : AthenaJava\target\native\include\HAL\Analog.h:57. */ int kFallingPulse = 3; } diff --git a/hal/src/main/java/edu/wpi/first/hal/CANAPITypes.java b/hal/src/main/java/edu/wpi/first/hal/CANAPITypes.java index e485ee6399..cef69b65b2 100644 --- a/hal/src/main/java/edu/wpi/first/hal/CANAPITypes.java +++ b/hal/src/main/java/edu/wpi/first/hal/CANAPITypes.java @@ -53,7 +53,7 @@ public final class CANAPITypes { kFirmwareUpdate(31); /** The device type ID. */ - @SuppressWarnings("PMD.MemberName") + @SuppressWarnings("MemberName") public final int id; CANDeviceType(int id) { @@ -108,7 +108,7 @@ public final class CANAPITypes { kVividHosting(16); /** The manufacturer ID. */ - @SuppressWarnings("PMD.MemberName") + @SuppressWarnings("MemberName") public final int id; CANManufacturer(int id) { diff --git a/hal/src/main/java/edu/wpi/first/hal/PowerDistributionFaults.java b/hal/src/main/java/edu/wpi/first/hal/PowerDistributionFaults.java index 052c72b4cd..ac141c1006 100644 --- a/hal/src/main/java/edu/wpi/first/hal/PowerDistributionFaults.java +++ b/hal/src/main/java/edu/wpi/first/hal/PowerDistributionFaults.java @@ -125,8 +125,8 @@ public class PowerDistributionFaults { case 21 -> Channel21BreakerFault; case 22 -> Channel22BreakerFault; case 23 -> Channel23BreakerFault; - default -> throw new IndexOutOfBoundsException( - "Power distribution fault channel out of bounds!"); + default -> + throw new IndexOutOfBoundsException("Power distribution fault channel out of bounds!"); }; } diff --git a/hal/src/main/java/edu/wpi/first/hal/PowerDistributionStickyFaults.java b/hal/src/main/java/edu/wpi/first/hal/PowerDistributionStickyFaults.java index 4d7836c5e6..aced62501e 100644 --- a/hal/src/main/java/edu/wpi/first/hal/PowerDistributionStickyFaults.java +++ b/hal/src/main/java/edu/wpi/first/hal/PowerDistributionStickyFaults.java @@ -134,8 +134,8 @@ public class PowerDistributionStickyFaults { case 21 -> Channel21BreakerFault; case 22 -> Channel22BreakerFault; case 23 -> Channel23BreakerFault; - default -> throw new IndexOutOfBoundsException( - "Power distribution fault channel out of bounds!"); + default -> + throw new IndexOutOfBoundsException("Power distribution fault channel out of bounds!"); }; } diff --git a/hal/src/main/java/edu/wpi/first/hal/can/CANExceptionFactory.java b/hal/src/main/java/edu/wpi/first/hal/can/CANExceptionFactory.java index d5b5688ce5..32bf43de03 100644 --- a/hal/src/main/java/edu/wpi/first/hal/can/CANExceptionFactory.java +++ b/hal/src/main/java/edu/wpi/first/hal/can/CANExceptionFactory.java @@ -32,15 +32,14 @@ public final class CANExceptionFactory { case NIRioStatus.kRioStatusSuccess -> { // Everything is ok... don't throw. } - case ERR_CANSessionMux_InvalidBuffer, - NIRioStatus.kRIOStatusBufferInvalidSize -> throw new CANInvalidBufferException(); - case ERR_CANSessionMux_MessageNotFound, - NIRioStatus.kRIOStatusOperationTimedOut -> throw new CANMessageNotFoundException(); - case ERR_CANSessionMux_NotAllowed, - NIRioStatus.kRIOStatusFeatureNotSupported -> throw new CANMessageNotAllowedException( - "MessageID = " + messageID); - case ERR_CANSessionMux_NotInitialized, - NIRioStatus.kRIOStatusResourceNotInitialized -> throw new CANNotInitializedException(); + case ERR_CANSessionMux_InvalidBuffer, NIRioStatus.kRIOStatusBufferInvalidSize -> + throw new CANInvalidBufferException(); + case ERR_CANSessionMux_MessageNotFound, NIRioStatus.kRIOStatusOperationTimedOut -> + throw new CANMessageNotFoundException(); + case ERR_CANSessionMux_NotAllowed, NIRioStatus.kRIOStatusFeatureNotSupported -> + throw new CANMessageNotAllowedException("MessageID = " + messageID); + case ERR_CANSessionMux_NotInitialized, NIRioStatus.kRIOStatusResourceNotInitialized -> + throw new CANNotInitializedException(); default -> throw new UncleanStatusException("Fatal status code detected: " + status); } } diff --git a/hal/src/main/java/edu/wpi/first/hal/simulation/BufferCallback.java b/hal/src/main/java/edu/wpi/first/hal/simulation/BufferCallback.java index 7c66563a32..efe70af800 100644 --- a/hal/src/main/java/edu/wpi/first/hal/simulation/BufferCallback.java +++ b/hal/src/main/java/edu/wpi/first/hal/simulation/BufferCallback.java @@ -5,6 +5,7 @@ package edu.wpi.first.hal.simulation; /** Interface for simulation buffer callbacks. */ +@FunctionalInterface public interface BufferCallback { /** * Simulation buffer callback function. diff --git a/hal/src/main/java/edu/wpi/first/hal/simulation/ConstBufferCallback.java b/hal/src/main/java/edu/wpi/first/hal/simulation/ConstBufferCallback.java index 9e88ec3a88..21277b3c0b 100644 --- a/hal/src/main/java/edu/wpi/first/hal/simulation/ConstBufferCallback.java +++ b/hal/src/main/java/edu/wpi/first/hal/simulation/ConstBufferCallback.java @@ -4,6 +4,7 @@ package edu.wpi.first.hal.simulation; +@FunctionalInterface public interface ConstBufferCallback { void callback(String name, byte[] buffer, int count); } diff --git a/hal/src/main/java/edu/wpi/first/hal/simulation/NotifyCallback.java b/hal/src/main/java/edu/wpi/first/hal/simulation/NotifyCallback.java index 55605b8167..e0b3233f52 100644 --- a/hal/src/main/java/edu/wpi/first/hal/simulation/NotifyCallback.java +++ b/hal/src/main/java/edu/wpi/first/hal/simulation/NotifyCallback.java @@ -6,6 +6,7 @@ package edu.wpi.first.hal.simulation; import edu.wpi.first.hal.HALValue; +@FunctionalInterface public interface NotifyCallback { void callback(String name, HALValue value); diff --git a/hal/src/main/java/edu/wpi/first/hal/simulation/SpiReadAutoReceiveBufferCallback.java b/hal/src/main/java/edu/wpi/first/hal/simulation/SpiReadAutoReceiveBufferCallback.java index 10dd0d2e21..6aa446b7b4 100644 --- a/hal/src/main/java/edu/wpi/first/hal/simulation/SpiReadAutoReceiveBufferCallback.java +++ b/hal/src/main/java/edu/wpi/first/hal/simulation/SpiReadAutoReceiveBufferCallback.java @@ -4,6 +4,7 @@ package edu.wpi.first.hal.simulation; +@FunctionalInterface public interface SpiReadAutoReceiveBufferCallback { int callback(String name, int[] buffer, int numToRead); } diff --git a/ntcore/src/generate/main/java/EntryImpl.java.jinja b/ntcore/src/generate/main/java/EntryImpl.java.jinja index 5053e10cdb..e022bd8ac9 100644 --- a/ntcore/src/generate/main/java/EntryImpl.java.jinja +++ b/ntcore/src/generate/main/java/EntryImpl.java.jinja @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.nio.ByteBuffer; {% endif %} /** NetworkTables {{ TypeName }} implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class {{ TypeName }}EntryImpl extends EntryBase implements {{ TypeName }}Entry { /** * Constructor. diff --git a/ntcore/src/generate/main/java/GenericSubscriber.java.jinja b/ntcore/src/generate/main/java/GenericSubscriber.java.jinja index c0ed6611a9..883d20ecb9 100644 --- a/ntcore/src/generate/main/java/GenericSubscriber.java.jinja +++ b/ntcore/src/generate/main/java/GenericSubscriber.java.jinja @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.Supplier; /** NetworkTables generic subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface GenericSubscriber extends Subscriber, Supplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generate/main/java/NetworkTableValue.java.jinja b/ntcore/src/generate/main/java/NetworkTableValue.java.jinja index 7d82b25b3b..8b0baf1a83 100644 --- a/ntcore/src/generate/main/java/NetworkTableValue.java.jinja +++ b/ntcore/src/generate/main/java/NetworkTableValue.java.jinja @@ -9,7 +9,7 @@ package edu.wpi.first.networktables; import java.util.Objects; /** A network table entry value. */ -@SuppressWarnings({"UnnecessaryParentheses", "PMD.MethodReturnsInternalArray"}) +@SuppressWarnings("UnnecessaryParentheses") public final class NetworkTableValue { NetworkTableValue(NetworkTableType type, Object value, long time, long serverTime) { m_type = type; @@ -176,7 +176,6 @@ public final class NetworkTableValue { return out; } - @SuppressWarnings("PMD.AvoidArrayLoops") static double[] toNativeDoubleArray(Number[] arr) { double[] out = new double[arr.length]; for (int i = 0; i < arr.length; i++) { @@ -185,7 +184,6 @@ public final class NetworkTableValue { return out; } - @SuppressWarnings("PMD.AvoidArrayLoops") static long[] toNativeIntegerArray(Number[] arr) { long[] out = new long[arr.length]; for (int i = 0; i < arr.length; i++) { @@ -194,7 +192,6 @@ public final class NetworkTableValue { return out; } - @SuppressWarnings("PMD.AvoidArrayLoops") static float[] toNativeFloatArray(Number[] arr) { float[] out = new float[arr.length]; for (int i = 0; i < arr.length; i++) { diff --git a/ntcore/src/generate/main/java/Subscriber.java.jinja b/ntcore/src/generate/main/java/Subscriber.java.jinja index 73e6190379..c3531068c7 100644 --- a/ntcore/src/generate/main/java/Subscriber.java.jinja +++ b/ntcore/src/generate/main/java/Subscriber.java.jinja @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import {{ java.SupplierFunctionPackage|default('java.util.function') }}.{{ java.FunctionTypePrefix }}Supplier; /** NetworkTables {{ TypeName }} subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface {{ TypeName }}Subscriber extends Subscriber, {{ java.FunctionTypePrefix }}Supplier{{ java.FunctionTypeSuffix }} { /** * Get the corresponding topic. diff --git a/ntcore/src/generate/main/java/Timestamped.java.jinja b/ntcore/src/generate/main/java/Timestamped.java.jinja index 21e50e244f..0bbd74774e 100644 --- a/ntcore/src/generate/main/java/Timestamped.java.jinja +++ b/ntcore/src/generate/main/java/Timestamped.java.jinja @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped {{ TypeName }}. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class Timestamped{{ TypeName }} { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanArrayEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanArrayEntryImpl.java index 40e455ccac..88ed6cb787 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanArrayEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanArrayEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables BooleanArray implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class BooleanArrayEntryImpl extends EntryBase implements BooleanArrayEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanArraySubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanArraySubscriber.java index ff07119840..479336cf2e 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanArraySubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanArraySubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.Supplier; /** NetworkTables BooleanArray subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface BooleanArraySubscriber extends Subscriber, Supplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanEntryImpl.java index f099afc0da..273bd5e2ed 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables Boolean implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class BooleanEntryImpl extends EntryBase implements BooleanEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanSubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanSubscriber.java index 7f54f4b3fd..b037bc0977 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanSubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/BooleanSubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.BooleanSupplier; /** NetworkTables Boolean subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface BooleanSubscriber extends Subscriber, BooleanSupplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleArrayEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleArrayEntryImpl.java index 7bb270ac37..effce7a9b8 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleArrayEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleArrayEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables DoubleArray implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class DoubleArrayEntryImpl extends EntryBase implements DoubleArrayEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleArraySubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleArraySubscriber.java index a807d66efc..19f15f5c48 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleArraySubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleArraySubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.Supplier; /** NetworkTables DoubleArray subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface DoubleArraySubscriber extends Subscriber, Supplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleEntryImpl.java index 968686d502..579834a322 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables Double implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class DoubleEntryImpl extends EntryBase implements DoubleEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleSubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleSubscriber.java index 688f6eaed7..c8ec1d0051 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleSubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/DoubleSubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.DoubleSupplier; /** NetworkTables Double subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface DoubleSubscriber extends Subscriber, DoubleSupplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatArrayEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatArrayEntryImpl.java index 1afe83728b..86753c4019 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatArrayEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatArrayEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables FloatArray implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class FloatArrayEntryImpl extends EntryBase implements FloatArrayEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatArraySubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatArraySubscriber.java index b70bece391..9e778d37b5 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatArraySubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatArraySubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.Supplier; /** NetworkTables FloatArray subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface FloatArraySubscriber extends Subscriber, Supplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatEntryImpl.java index f7efebfce4..ad0a1d3410 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables Float implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class FloatEntryImpl extends EntryBase implements FloatEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatSubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatSubscriber.java index 758463b89e..83696ae10a 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatSubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/FloatSubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import edu.wpi.first.util.function.FloatSupplier; /** NetworkTables Float subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface FloatSubscriber extends Subscriber, FloatSupplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/GenericSubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/GenericSubscriber.java index 7d7ca9639b..35738f2300 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/GenericSubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/GenericSubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.Supplier; /** NetworkTables generic subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface GenericSubscriber extends Subscriber, Supplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerArrayEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerArrayEntryImpl.java index e74f4893b9..d26d55f447 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerArrayEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerArrayEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables IntegerArray implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class IntegerArrayEntryImpl extends EntryBase implements IntegerArrayEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerArraySubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerArraySubscriber.java index cbb2e6fe81..c77ed10038 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerArraySubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerArraySubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.Supplier; /** NetworkTables IntegerArray subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface IntegerArraySubscriber extends Subscriber, Supplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerEntryImpl.java index a8db1bff9d..49b691c5e4 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables Integer implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class IntegerEntryImpl extends EntryBase implements IntegerEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerSubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerSubscriber.java index 81a9740ef7..bdeb65cc05 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerSubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/IntegerSubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.LongSupplier; /** NetworkTables Integer subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface IntegerSubscriber extends Subscriber, LongSupplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/NetworkTableValue.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/NetworkTableValue.java index 78786bc6c7..780553c43e 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/NetworkTableValue.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/NetworkTableValue.java @@ -9,7 +9,7 @@ package edu.wpi.first.networktables; import java.util.Objects; /** A network table entry value. */ -@SuppressWarnings({"UnnecessaryParentheses", "PMD.MethodReturnsInternalArray"}) +@SuppressWarnings("UnnecessaryParentheses") public final class NetworkTableValue { NetworkTableValue(NetworkTableType type, Object value, long time, long serverTime) { m_type = type; @@ -668,7 +668,6 @@ public final class NetworkTableValue { return out; } - @SuppressWarnings("PMD.AvoidArrayLoops") static double[] toNativeDoubleArray(Number[] arr) { double[] out = new double[arr.length]; for (int i = 0; i < arr.length; i++) { @@ -677,7 +676,6 @@ public final class NetworkTableValue { return out; } - @SuppressWarnings("PMD.AvoidArrayLoops") static long[] toNativeIntegerArray(Number[] arr) { long[] out = new long[arr.length]; for (int i = 0; i < arr.length; i++) { @@ -686,7 +684,6 @@ public final class NetworkTableValue { return out; } - @SuppressWarnings("PMD.AvoidArrayLoops") static float[] toNativeFloatArray(Number[] arr) { float[] out = new float[arr.length]; for (int i = 0; i < arr.length; i++) { diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/RawEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/RawEntryImpl.java index 55767f73ea..ab8ca0e1f3 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/RawEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/RawEntryImpl.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.nio.ByteBuffer; /** NetworkTables Raw implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class RawEntryImpl extends EntryBase implements RawEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/RawSubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/RawSubscriber.java index 089d999dc2..cf8fc8636e 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/RawSubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/RawSubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.Supplier; /** NetworkTables Raw subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface RawSubscriber extends Subscriber, Supplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringArrayEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringArrayEntryImpl.java index 536db7b8ac..d97f70b773 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringArrayEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringArrayEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables StringArray implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class StringArrayEntryImpl extends EntryBase implements StringArrayEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringArraySubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringArraySubscriber.java index 62a05759bf..3cd20f2360 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringArraySubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringArraySubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.Supplier; /** NetworkTables StringArray subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface StringArraySubscriber extends Subscriber, Supplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringEntryImpl.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringEntryImpl.java index 76c9b98545..7780f4c832 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringEntryImpl.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringEntryImpl.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables String implementation. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") final class StringEntryImpl extends EntryBase implements StringEntry { /** * Constructor. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringSubscriber.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringSubscriber.java index 8c453b03a4..c11da81341 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringSubscriber.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/StringSubscriber.java @@ -9,7 +9,6 @@ package edu.wpi.first.networktables; import java.util.function.Supplier; /** NetworkTables String subscriber. */ -@SuppressWarnings("PMD.MissingOverride") public interface StringSubscriber extends Subscriber, Supplier { /** * Get the corresponding topic. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedBoolean.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedBoolean.java index 05497fcb3b..97b85e68a9 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedBoolean.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedBoolean.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped Boolean. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedBoolean { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedBooleanArray.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedBooleanArray.java index 51e2591291..0aec21ad59 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedBooleanArray.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedBooleanArray.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped BooleanArray. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedBooleanArray { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedDouble.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedDouble.java index 586c9fc1d1..7ca5f71c8e 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedDouble.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedDouble.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped Double. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedDouble { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedDoubleArray.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedDoubleArray.java index aaeafd788e..1d0beb6fda 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedDoubleArray.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedDoubleArray.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped DoubleArray. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedDoubleArray { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedFloat.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedFloat.java index 4d8aa095df..49cfa15ce7 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedFloat.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedFloat.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped Float. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedFloat { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedFloatArray.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedFloatArray.java index 85fe7bcac7..8f97ddd85e 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedFloatArray.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedFloatArray.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped FloatArray. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedFloatArray { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedInteger.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedInteger.java index 0ee7855363..bc518dae33 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedInteger.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedInteger.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped Integer. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedInteger { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedIntegerArray.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedIntegerArray.java index 8686326996..bb08a85c17 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedIntegerArray.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedIntegerArray.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped IntegerArray. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedIntegerArray { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedRaw.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedRaw.java index 12ec095e3f..8423d06e7b 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedRaw.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedRaw.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped Raw. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedRaw { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedString.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedString.java index a51432ee49..c033f3fefd 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedString.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedString.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped String. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedString { /** * Create a timestamped value. diff --git a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedStringArray.java b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedStringArray.java index 420a4685a9..b314fc9125 100644 --- a/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedStringArray.java +++ b/ntcore/src/generated/main/java/edu/wpi/first/networktables/TimestampedStringArray.java @@ -7,7 +7,6 @@ package edu.wpi.first.networktables; /** NetworkTables timestamped StringArray. */ -@SuppressWarnings("PMD.ArrayIsStoredDirectly") public final class TimestampedStringArray { /** * Create a timestamped value. diff --git a/ntcore/src/main/java/edu/wpi/first/networktables/NTSendable.java b/ntcore/src/main/java/edu/wpi/first/networktables/NTSendable.java index 641224d3fc..992cfffe7e 100644 --- a/ntcore/src/main/java/edu/wpi/first/networktables/NTSendable.java +++ b/ntcore/src/main/java/edu/wpi/first/networktables/NTSendable.java @@ -8,6 +8,7 @@ import edu.wpi.first.util.sendable.Sendable; import edu.wpi.first.util.sendable.SendableBuilder; /** Interface for NetworkTable Sendable objects. */ +@SuppressWarnings("PMD.ImplicitFunctionalInterface") public interface NTSendable extends Sendable { /** * Initializes this {@link Sendable} object. diff --git a/ntcore/src/test/java/edu/wpi/first/networktables/RawTest.java b/ntcore/src/test/java/edu/wpi/first/networktables/RawTest.java index 293d4437bd..871f6b0672 100644 --- a/ntcore/src/test/java/edu/wpi/first/networktables/RawTest.java +++ b/ntcore/src/test/java/edu/wpi/first/networktables/RawTest.java @@ -12,7 +12,6 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -@SuppressWarnings("PMD.SimplifiableTestAssertion") class RawTest { private NetworkTableInstance m_inst; diff --git a/shared/java/javacommon.gradle b/shared/java/javacommon.gradle index 3f82db58ed..dd94007785 100644 --- a/shared/java/javacommon.gradle +++ b/shared/java/javacommon.gradle @@ -72,6 +72,7 @@ publishing { } test { + jvmArgs '--enable-native-access=ALL-UNNAMED' useJUnitPlatform() systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' testLogging { @@ -118,7 +119,7 @@ tasks.withType(JavaCompile).configureEach { } dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' + testImplementation 'org.junit.jupiter:junit-jupiter:5.13.4' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' devImplementation sourceSets.main.output @@ -133,7 +134,7 @@ task run(type: JavaExec) { build.dependsOn devClasses jacoco { - toolVersion = "0.8.10" + toolVersion = "0.8.13" } jacocoTestReport { diff --git a/shared/java/javastyle.gradle b/shared/java/javastyle.gradle index e2b713e7e6..e81ad9967f 100644 --- a/shared/java/javastyle.gradle +++ b/shared/java/javastyle.gradle @@ -5,7 +5,7 @@ if (project.hasProperty('skipJavaFormat')) { apply plugin: 'checkstyle' checkstyle { - toolVersion = "10.12.2" + toolVersion = "11.0.0" configDirectory = file("${project.rootDir}/styleguide") config = resources.text.fromFile(new File(configDirectory.get().getAsFile(), "checkstyle.xml")) } @@ -13,7 +13,7 @@ checkstyle { apply plugin: 'pmd' pmd { - toolVersion = '7.2.0' + toolVersion = '7.16.0' consoleOutput = true reportsDir = file("$project.buildDir/reports/pmd") ruleSetFiles = files(new File(rootDir, "styleguide/pmd-ruleset.xml")) @@ -40,7 +40,7 @@ spotless { exclude '**/build/**', '**/build-*/**', '**/bin/**' } greclipse() - indentWithSpaces(4) + leadingTabsToSpaces(4) trimTrailingWhitespace() endWithNewline() } @@ -60,7 +60,7 @@ spotless { } eclipseWtp('xml') trimTrailingWhitespace() - indentWithSpaces(2) + leadingTabsToSpaces(2) endWithNewline() } format 'misc', { @@ -69,7 +69,7 @@ spotless { exclude '**/build/**', '**/build-*/**', '**/bin/**' } trimTrailingWhitespace() - indentWithSpaces(2) + leadingTabsToSpaces(2) endWithNewline() } } diff --git a/styleguide/pmd-ruleset.xml b/styleguide/pmd-ruleset.xml index 8553506b6f..4d3c46258e 100644 --- a/styleguide/pmd-ruleset.xml +++ b/styleguide/pmd-ruleset.xml @@ -6,8 +6,13 @@ PMD Ruleset for WPILib - .*/*JNI.* + + .*/*EntryImpl\.java + .*/*Subscriber\.java + .*/Timestamped.*\.java + .*/*IntegrationTests.* + .*/*JNI.* .*/math/proto.* @@ -18,18 +23,19 @@ - - - - - - + + - + + + + + + @@ -45,8 +51,8 @@ - + @@ -82,6 +88,7 @@ + diff --git a/styleguide/spotbugs-exclude.xml b/styleguide/spotbugs-exclude.xml index c5807cb459..084206b4e0 100644 --- a/styleguide/spotbugs-exclude.xml +++ b/styleguide/spotbugs-exclude.xml @@ -1,5 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -30,12 +70,21 @@ + + + + - + @@ -49,50 +98,81 @@ - + + + + + - + - + - + - + - + - + - + - + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + - + @@ -141,27 +221,11 @@ - - - - - - - - - - - - - - + + + diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelRaceGroup.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelRaceGroup.java index 36eaf27543..069f4a8162 100644 --- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelRaceGroup.java +++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelRaceGroup.java @@ -42,7 +42,6 @@ public class ParallelRaceGroup extends Command { * * @param commands Commands to add to the group. */ - @SuppressWarnings("PMD.UseArraysAsList") public final void addCommands(Command... commands) { if (!m_finished) { throw new IllegalStateException( diff --git a/wpilibc/src/main/native/cpp/DigitalGlitchFilter.cpp b/wpilibc/src/main/native/cpp/DigitalGlitchFilter.cpp index 44bcabe463..be15e6ca98 100644 --- a/wpilibc/src/main/native/cpp/DigitalGlitchFilter.cpp +++ b/wpilibc/src/main/native/cpp/DigitalGlitchFilter.cpp @@ -39,6 +39,7 @@ DigitalGlitchFilter::~DigitalGlitchFilter() { if (m_channelIndex >= 0) { std::scoped_lock lock(m_mutex); m_filterAllocated[m_channelIndex] = false; + m_channelIndex = -1; } } diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16448_IMU.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16448_IMU.java index 008b17864f..8a2e6ba7d5 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16448_IMU.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16448_IMU.java @@ -29,7 +29,7 @@ import edu.wpi.first.util.sendable.SendableBuilder; // CHECKSTYLE.OFF: EmptyCatchBlock /** This class is for the ADIS16448 IMU that connects to the RoboRIO MXP port. */ -@SuppressWarnings({"PMD.RedundantFieldInitializer", "PMD.ImmutableField"}) +@SuppressWarnings({"PMD.RedundantFieldInitializer", "PMD.ImmutableField", "PMD.UnusedPrivateField"}) public class ADIS16448_IMU implements AutoCloseable, Sendable { // ADIS16448 Register Map Declaration private static final int FLASH_CNT = 0x00; // Flash memory write count diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16470_IMU.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16470_IMU.java index 0a957e3d65..27707b63e7 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16470_IMU.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/ADIS16470_IMU.java @@ -20,7 +20,7 @@ import edu.wpi.first.util.sendable.SendableBuilder; // CHECKSTYLE.OFF: EmptyCatchBlock /** This class is for the ADIS16470 IMU that connects to the RoboRIO SPI port. */ -@SuppressWarnings("PMD.RedundantFieldInitializer") +@SuppressWarnings({"PMD.RedundantFieldInitializer", "PMD.UnusedPrivateField"}) public class ADIS16470_IMU implements AutoCloseable, Sendable { /* ADIS16470 Register Map Declaration */ private static final int FLASH_CNT = 0x00; // Flash memory write count diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Alert.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Alert.java index 828a3e3a21..ae791573e4 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Alert.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Alert.java @@ -8,6 +8,7 @@ import edu.wpi.first.util.sendable.Sendable; import edu.wpi.first.util.sendable.SendableBuilder; import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; import java.util.Comparator; +import java.util.EnumMap; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -186,7 +187,7 @@ public class Alert implements AutoCloseable { private static final class SendableAlerts implements Sendable { private static final Map groups = new HashMap(); - private final Map> m_alerts = new HashMap<>(); + private final EnumMap> m_alerts = new EnumMap<>(AlertType.class); /** * Returns a reference to the set of active alerts for the given type. diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DigitalGlitchFilter.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DigitalGlitchFilter.java index 9d3086e952..f87836e5d4 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DigitalGlitchFilter.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DigitalGlitchFilter.java @@ -38,11 +38,10 @@ public class DigitalGlitchFilter implements Sendable, AutoCloseable { m_mutex.lock(); try { m_filterAllocated[m_channelIndex] = false; + m_channelIndex = -1; } finally { m_mutex.unlock(); } - - m_channelIndex = -1; } } diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java index 36721e355a..befa01636c 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java @@ -285,7 +285,6 @@ public final class DriverStation { System.arraycopy(axes.m_axes, 0, m_prevAxes.m_axes, 0, count); } - @SuppressWarnings("PMD.AvoidArrayLoops") void appendPOVs(HALJoystickPOVs povs, long timestamp) { int count = povs.m_count; if (m_sizedPOVs == null || m_sizedPOVs.length != count) { diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/GenericHID.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/GenericHID.java index ba48da1662..138d54c808 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/GenericHID.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/GenericHID.java @@ -70,7 +70,6 @@ public class GenericHID { /** HIDType value. */ public final int value; - @SuppressWarnings("PMD.UseConcurrentHashMap") private static final Map map = new HashMap<>(); HIDType(int value) { diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/I2C.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/I2C.java index 1ed131b2c7..bc90e67043 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/I2C.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/I2C.java @@ -40,6 +40,7 @@ public class I2C implements AutoCloseable { private final int m_port; private final int m_deviceAddress; + private ByteBuffer m_readDataToSendBuffer; /** * Constructor. @@ -265,8 +266,6 @@ public class I2C implements AutoCloseable { return transaction(registerAddressArray, registerAddressArray.length, buffer, count); } - private ByteBuffer m_readDataToSendBuffer; - /** * Execute a read transaction with the device. * diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/RobotBase.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/RobotBase.java index e595a5899e..0cf6403196 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/RobotBase.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/RobotBase.java @@ -96,29 +96,36 @@ public abstract class RobotBase implements AutoCloseable { @Override public void reportUsage(MathUsageId id, int count) { switch (id) { - case kKinematics_DifferentialDrive -> HAL.report( - tResourceType.kResourceType_Kinematics, tInstances.kKinematics_DifferentialDrive); - case kKinematics_MecanumDrive -> HAL.report( - tResourceType.kResourceType_Kinematics, tInstances.kKinematics_MecanumDrive); - case kKinematics_SwerveDrive -> HAL.report( - tResourceType.kResourceType_Kinematics, tInstances.kKinematics_SwerveDrive); - case kTrajectory_TrapezoidProfile -> HAL.report( - tResourceType.kResourceType_TrapezoidProfile, count); + case kKinematics_DifferentialDrive -> + HAL.report( + tResourceType.kResourceType_Kinematics, + tInstances.kKinematics_DifferentialDrive); + case kKinematics_MecanumDrive -> + HAL.report( + tResourceType.kResourceType_Kinematics, tInstances.kKinematics_MecanumDrive); + case kKinematics_SwerveDrive -> + HAL.report( + tResourceType.kResourceType_Kinematics, tInstances.kKinematics_SwerveDrive); + case kTrajectory_TrapezoidProfile -> + HAL.report(tResourceType.kResourceType_TrapezoidProfile, count); case kFilter_Linear -> HAL.report(tResourceType.kResourceType_LinearFilter, count); - case kOdometry_DifferentialDrive -> HAL.report( - tResourceType.kResourceType_Odometry, tInstances.kOdometry_DifferentialDrive); - case kOdometry_SwerveDrive -> HAL.report( - tResourceType.kResourceType_Odometry, tInstances.kOdometry_SwerveDrive); - case kOdometry_MecanumDrive -> HAL.report( - tResourceType.kResourceType_Odometry, tInstances.kOdometry_MecanumDrive); - case kController_PIDController2 -> HAL.report( - tResourceType.kResourceType_PIDController2, count); - case kController_ProfiledPIDController -> HAL.report( - tResourceType.kResourceType_ProfiledPIDController, count); - case kController_BangBangController -> HAL.report( - tResourceType.kResourceType_BangBangController, count); - case kTrajectory_PathWeaver -> HAL.report( - tResourceType.kResourceType_PathWeaverTrajectory, count); + case kOdometry_DifferentialDrive -> + HAL.report( + tResourceType.kResourceType_Odometry, tInstances.kOdometry_DifferentialDrive); + case kOdometry_SwerveDrive -> + HAL.report( + tResourceType.kResourceType_Odometry, tInstances.kOdometry_SwerveDrive); + case kOdometry_MecanumDrive -> + HAL.report( + tResourceType.kResourceType_Odometry, tInstances.kOdometry_MecanumDrive); + case kController_PIDController2 -> + HAL.report(tResourceType.kResourceType_PIDController2, count); + case kController_ProfiledPIDController -> + HAL.report(tResourceType.kResourceType_ProfiledPIDController, count); + case kController_BangBangController -> + HAL.report(tResourceType.kResourceType_BangBangController, count); + case kTrajectory_PathWeaver -> + HAL.report(tResourceType.kResourceType_PathWeaverTrajectory, count); default -> { // NOP } diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/SynchronousInterrupt.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/SynchronousInterrupt.java index 449402c6cd..57d80c04dc 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/SynchronousInterrupt.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/SynchronousInterrupt.java @@ -16,7 +16,6 @@ import edu.wpi.first.hal.InterruptJNI; *

Asynchronous interrupts are handled by the AsynchronousInterrupt class. */ public class SynchronousInterrupt implements AutoCloseable { - @SuppressWarnings("PMD.SingularField") private final DigitalSource m_source; private final int m_handle; diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Ultrasonic.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Ultrasonic.java index 14103544ce..f96ba47c8e 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Ultrasonic.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Ultrasonic.java @@ -44,7 +44,6 @@ public class Ultrasonic implements Sendable, AutoCloseable { private static Thread m_task; private static int m_instances; - @SuppressWarnings("PMD.SingularField") private SimDevice m_simDevice; private SimBoolean m_simRangeValid; diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/shuffleboard/LayoutType.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/shuffleboard/LayoutType.java index 82ffcbef20..038539af42 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/shuffleboard/LayoutType.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/shuffleboard/LayoutType.java @@ -10,6 +10,7 @@ package edu.wpi.first.wpilibj.shuffleboard; * * @see BuiltInWidgets the built-in widget types */ +@SuppressWarnings("PMD.ImplicitFunctionalInterface") public interface LayoutType { /** * Gets the string type of the layout as defined by that layout in Shuffleboard. diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/shuffleboard/WidgetType.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/shuffleboard/WidgetType.java index 3033f8efc8..a1cfc8fcda 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/shuffleboard/WidgetType.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/shuffleboard/WidgetType.java @@ -10,6 +10,7 @@ package edu.wpi.first.wpilibj.shuffleboard; * * @see BuiltInWidgets the built-in widget types */ +@SuppressWarnings("PMD.ImplicitFunctionalInterface") public interface WidgetType { /** * Gets the string type of the widget as defined by that widget in Shuffleboard. diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/CallbackStore.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/CallbackStore.java index 75bae9e767..c6ea362a44 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/CallbackStore.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/CallbackStore.java @@ -7,16 +7,19 @@ package edu.wpi.first.wpilibj.simulation; /** Manages simulation callbacks; each object is associated with a callback. */ public class CallbackStore implements AutoCloseable { /** Note: This interface is for simulation classes only. It should not be used by teams! */ + @SuppressWarnings("PMD.ImplicitFunctionalInterface") interface CancelCallbackFunc { void cancel(int index, int uid); } /** Note: This interface is for simulation classes only. It should not be used by teams! */ + @SuppressWarnings("PMD.ImplicitFunctionalInterface") interface CancelCallbackChannelFunc { void cancel(int index, int channel, int uid); } /** Note: This interface is for simulation classes only. It should not be used by teams! */ + @SuppressWarnings("PMD.ImplicitFunctionalInterface") interface CancelCallbackNoIndexFunc { void cancel(int uid); } diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SendableBuilderImpl.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SendableBuilderImpl.java index 09a16860e5..e05cb652c4 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SendableBuilderImpl.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SendableBuilderImpl.java @@ -58,7 +58,6 @@ import java.util.function.LongSupplier; import java.util.function.Supplier; /** Implementation detail for SendableBuilder. */ -@SuppressWarnings("PMD.CompareObjectsWithEquals") public class SendableBuilderImpl implements NTSendableBuilder { @FunctionalInterface private interface TimedConsumer { diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SmartDashboard.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SmartDashboard.java index 81fbaa6c19..6e90a48696 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SmartDashboard.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SmartDashboard.java @@ -30,7 +30,6 @@ public final class SmartDashboard { /** * A table linking tables in the SmartDashboard to the {@link Sendable} objects they came from. */ - @SuppressWarnings("PMD.UseConcurrentHashMap") private static final Map tablesToData = new HashMap<>(); /** The executor for listener tasks; calls listener tasks synchronously from main thread. */ diff --git a/wpilibj/src/test/java/edu/wpi/first/wpilibj/AddressableLEDBufferTest.java b/wpilibj/src/test/java/edu/wpi/first/wpilibj/AddressableLEDBufferTest.java index 267cc293ca..c15f1dfb37 100644 --- a/wpilibj/src/test/java/edu/wpi/first/wpilibj/AddressableLEDBufferTest.java +++ b/wpilibj/src/test/java/edu/wpi/first/wpilibj/AddressableLEDBufferTest.java @@ -103,18 +103,21 @@ class AddressableLEDBufferTest { buffer.forEach( (index, r, g, b) -> { switch (index) { - case 0 -> assertAll( - () -> assertEquals(1, r, "red at index 0"), - () -> assertEquals(2, g, "green at index 0"), - () -> assertEquals(3, b, "blue at index 0")); - case 1 -> assertAll( - () -> assertEquals(4, r, "red at index 1"), - () -> assertEquals(5, g, "green at index 1"), - () -> assertEquals(6, b, "blue at index 1")); - case 2 -> assertAll( - () -> assertEquals(7, r, "red at index 2"), - () -> assertEquals(8, g, "green at index 2"), - () -> assertEquals(9, b, "blue at index 2")); + case 0 -> + assertAll( + () -> assertEquals(1, r, "red at index 0"), + () -> assertEquals(2, g, "green at index 0"), + () -> assertEquals(3, b, "blue at index 0")); + case 1 -> + assertAll( + () -> assertEquals(4, r, "red at index 1"), + () -> assertEquals(5, g, "green at index 1"), + () -> assertEquals(6, b, "blue at index 1")); + case 2 -> + assertAll( + () -> assertEquals(7, r, "red at index 2"), + () -> assertEquals(8, g, "green at index 2"), + () -> assertEquals(9, b, "blue at index 2")); default -> fail("Unexpected index " + index); } }); diff --git a/wpilibjExamples/build.gradle b/wpilibjExamples/build.gradle index 9bca5f3a39..a1e6a29151 100644 --- a/wpilibjExamples/build.gradle +++ b/wpilibjExamples/build.gradle @@ -27,12 +27,12 @@ dependencies { implementation project(':epilogue-runtime') annotationProcessor project(':epilogue-processor') - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' + testImplementation 'org.junit.jupiter:junit-jupiter:5.13.4' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } jacoco { - toolVersion = "0.8.10" + toolVersion = "0.8.13" } jacocoTestReport { diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/commandbased/commands/ExampleCommand.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/commandbased/commands/ExampleCommand.java index 181de6dbb4..36f57ccabb 100644 --- a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/commandbased/commands/ExampleCommand.java +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/commandbased/commands/ExampleCommand.java @@ -9,7 +9,7 @@ import edu.wpi.first.wpilibj2.command.Command; /** An example command that uses an example subsystem. */ public class ExampleCommand extends Command { - @SuppressWarnings({"PMD.UnusedPrivateField", "PMD.SingularField"}) + @SuppressWarnings("PMD.UnusedPrivateField") private final ExampleSubsystem m_subsystem; /** diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/romicommandbased/commands/ExampleCommand.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/romicommandbased/commands/ExampleCommand.java index c05a53a272..62e8d0ca73 100644 --- a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/romicommandbased/commands/ExampleCommand.java +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/romicommandbased/commands/ExampleCommand.java @@ -9,7 +9,7 @@ import edu.wpi.first.wpilibj2.command.Command; /** An example command that uses an example subsystem. */ public class ExampleCommand extends Command { - @SuppressWarnings({"PMD.UnusedPrivateField", "PMD.SingularField"}) + @SuppressWarnings("PMD.UnusedPrivateField") private final RomiDrivetrain m_subsystem; /** diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/xrpcommandbased/commands/ExampleCommand.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/xrpcommandbased/commands/ExampleCommand.java index 27f759a8c7..6b352b939e 100644 --- a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/xrpcommandbased/commands/ExampleCommand.java +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/xrpcommandbased/commands/ExampleCommand.java @@ -9,7 +9,7 @@ import edu.wpi.first.wpilibj2.command.Command; /** An example command that uses an example subsystem. */ public class ExampleCommand extends Command { - @SuppressWarnings({"PMD.UnusedPrivateField", "PMD.SingularField"}) + @SuppressWarnings("PMD.UnusedPrivateField") private final XRPDrivetrain m_subsystem; /** diff --git a/wpimath/src/generate/main/java/Nat.java.jinja b/wpimath/src/generate/main/java/Nat.java.jinja index 66f06390c2..a65c3c912a 100644 --- a/wpimath/src/generate/main/java/Nat.java.jinja +++ b/wpimath/src/generate/main/java/Nat.java.jinja @@ -18,6 +18,7 @@ import edu.wpi.first.math.numbers.N{{ num }}; * * @param The {@link Num} this represents. */ +@SuppressWarnings("PMD.ImplicitFunctionalInterface") public interface Nat { /** * The number this interface represents. diff --git a/wpimath/src/generated/main/java/edu/wpi/first/math/Nat.java b/wpimath/src/generated/main/java/edu/wpi/first/math/Nat.java index f6b0b81250..f2647738a5 100644 --- a/wpimath/src/generated/main/java/edu/wpi/first/math/Nat.java +++ b/wpimath/src/generated/main/java/edu/wpi/first/math/Nat.java @@ -37,6 +37,7 @@ import edu.wpi.first.math.numbers.N20; * * @param The {@link Num} this represents. */ +@SuppressWarnings("PMD.ImplicitFunctionalInterface") public interface Nat { /** * The number this interface represents. diff --git a/wpimath/src/main/java/edu/wpi/first/math/interpolation/Interpolatable.java b/wpimath/src/main/java/edu/wpi/first/math/interpolation/Interpolatable.java index 9fe09fe475..186ed41841 100644 --- a/wpimath/src/main/java/edu/wpi/first/math/interpolation/Interpolatable.java +++ b/wpimath/src/main/java/edu/wpi/first/math/interpolation/Interpolatable.java @@ -11,6 +11,7 @@ package edu.wpi.first.math.interpolation; * * @param The class that is interpolatable. */ +@SuppressWarnings("PMD.ImplicitFunctionalInterface") public interface Interpolatable { /** * Return the interpolated value. This object is assumed to be the starting position, or lower diff --git a/wpimath/src/main/java/edu/wpi/first/math/spline/SplineHelper.java b/wpimath/src/main/java/edu/wpi/first/math/spline/SplineHelper.java index 2df70589c6..44f4fee85b 100644 --- a/wpimath/src/main/java/edu/wpi/first/math/spline/SplineHelper.java +++ b/wpimath/src/main/java/edu/wpi/first/math/spline/SplineHelper.java @@ -226,7 +226,7 @@ public final class SplineHelper { * @param splines An array of un-optimized quintic splines. * @return An array of optimized quintic splines. */ - @SuppressWarnings({"LocalVariableName", "PMD.AvoidInstantiatingObjectsInLoops"}) + @SuppressWarnings("LocalVariableName") public static QuinticHermiteSpline[] optimizeCurvature(QuinticHermiteSpline[] splines) { // If there's only spline in the array, we can't optimize anything so just return that. if (splines.length < 2) { diff --git a/wpiunits/src/generate/main/java/Measure-immutable.java.jinja b/wpiunits/src/generate/main/java/Measure-immutable.java.jinja index 526c950977..b4c11266b1 100644 --- a/wpiunits/src/generate/main/java/Measure-immutable.java.jinja +++ b/wpiunits/src/generate/main/java/Measure-immutable.java.jinja @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record Immutable{{ helpers['type_decl'](name) }}(double magnitude, double baseUnitMagnitude, {{ helpers['mtou'](name) }} unit) implements {{ helpers['type_usage'](name) }} { @Override public {{ helpers['type_usage'](name) }} copy() { diff --git a/wpiunits/src/generate/main/java/Measure-mutable.java.jinja b/wpiunits/src/generate/main/java/Measure-mutable.java.jinja index 8adf22f74d..ecc855418b 100644 --- a/wpiunits/src/generate/main/java/Measure-mutable.java.jinja +++ b/wpiunits/src/generate/main/java/Measure-mutable.java.jinja @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class Mut{{ helpers['type_decl'](name) }} extends MutableMeasureBase<{{ helpers['mtou'](name) }}, {{ helpers['type_usage'](name) }}, Mut{{ helpers['type_usage'](name) }}> implements {{ helpers['type_usage'](name) }} { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAcceleration.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAcceleration.java index ab6f0449bf..481ad454c6 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAcceleration.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAcceleration.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableAcceleration(double magnitude, double baseUnitMagnitude, AccelerationUnit unit) implements Acceleration { @Override public Acceleration copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngle.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngle.java index 352e19ea38..e15951a581 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngle.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngle.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableAngle(double magnitude, double baseUnitMagnitude, AngleUnit unit) implements Angle { @Override public Angle copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularAcceleration.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularAcceleration.java index 0c417e08c6..59b55b5e94 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularAcceleration.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularAcceleration.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableAngularAcceleration(double magnitude, double baseUnitMagnitude, AngularAccelerationUnit unit) implements AngularAcceleration { @Override public AngularAcceleration copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularMomentum.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularMomentum.java index 7d00dd669e..f4bda92003 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularMomentum.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularMomentum.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableAngularMomentum(double magnitude, double baseUnitMagnitude, AngularMomentumUnit unit) implements AngularMomentum { @Override public AngularMomentum copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularVelocity.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularVelocity.java index c692a116d5..2a8f7eb089 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularVelocity.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableAngularVelocity.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableAngularVelocity(double magnitude, double baseUnitMagnitude, AngularVelocityUnit unit) implements AngularVelocity { @Override public AngularVelocity copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableCurrent.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableCurrent.java index 8710f57efe..2c529d90a4 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableCurrent.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableCurrent.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableCurrent(double magnitude, double baseUnitMagnitude, CurrentUnit unit) implements Current { @Override public Current copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableDimensionless.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableDimensionless.java index 455bd2b402..1043b052e1 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableDimensionless.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableDimensionless.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableDimensionless(double magnitude, double baseUnitMagnitude, DimensionlessUnit unit) implements Dimensionless { @Override public Dimensionless copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableDistance.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableDistance.java index f919782236..eff6a5ea0d 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableDistance.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableDistance.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableDistance(double magnitude, double baseUnitMagnitude, DistanceUnit unit) implements Distance { @Override public Distance copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableEnergy.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableEnergy.java index 7e443075b0..4978e60e0c 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableEnergy.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableEnergy.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableEnergy(double magnitude, double baseUnitMagnitude, EnergyUnit unit) implements Energy { @Override public Energy copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableForce.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableForce.java index 14f11ec7a1..e42f8a3d98 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableForce.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableForce.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableForce(double magnitude, double baseUnitMagnitude, ForceUnit unit) implements Force { @Override public Force copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableFrequency.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableFrequency.java index f9084ed569..c9f7b011c3 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableFrequency.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableFrequency.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableFrequency(double magnitude, double baseUnitMagnitude, FrequencyUnit unit) implements Frequency { @Override public Frequency copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearAcceleration.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearAcceleration.java index 3212588d05..05a400ff4e 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearAcceleration.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearAcceleration.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableLinearAcceleration(double magnitude, double baseUnitMagnitude, LinearAccelerationUnit unit) implements LinearAcceleration { @Override public LinearAcceleration copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearMomentum.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearMomentum.java index 0d7afd654b..404c33adb2 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearMomentum.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearMomentum.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableLinearMomentum(double magnitude, double baseUnitMagnitude, LinearMomentumUnit unit) implements LinearMomentum { @Override public LinearMomentum copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearVelocity.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearVelocity.java index 7373307d39..6453893b70 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearVelocity.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableLinearVelocity.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableLinearVelocity(double magnitude, double baseUnitMagnitude, LinearVelocityUnit unit) implements LinearVelocity { @Override public LinearVelocity copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMass.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMass.java index c74ad2711a..d3eff5ab87 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMass.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMass.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableMass(double magnitude, double baseUnitMagnitude, MassUnit unit) implements Mass { @Override public Mass copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMomentOfInertia.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMomentOfInertia.java index ea903c7652..b593428cb6 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMomentOfInertia.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMomentOfInertia.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableMomentOfInertia(double magnitude, double baseUnitMagnitude, MomentOfInertiaUnit unit) implements MomentOfInertia { @Override public MomentOfInertia copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMult.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMult.java index fc69825ee4..7cdc8e9ea6 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMult.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableMult.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableMult(double magnitude, double baseUnitMagnitude, MultUnit unit) implements Mult { @Override public Mult copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutablePer.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutablePer.java index 3d9ad1fe14..8a21ba5c54 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutablePer.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutablePer.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutablePer(double magnitude, double baseUnitMagnitude, PerUnit unit) implements Per { @Override public Per copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutablePower.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutablePower.java index 0c7ffc0d95..f5a55b3862 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutablePower.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutablePower.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutablePower(double magnitude, double baseUnitMagnitude, PowerUnit unit) implements Power { @Override public Power copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableResistance.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableResistance.java index 34b780e7d3..adcbd597ed 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableResistance.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableResistance.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableResistance(double magnitude, double baseUnitMagnitude, ResistanceUnit unit) implements Resistance { @Override public Resistance copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTemperature.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTemperature.java index e035d80922..71ebf5cfc5 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTemperature.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTemperature.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableTemperature(double magnitude, double baseUnitMagnitude, TemperatureUnit unit) implements Temperature { @Override public Temperature copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTime.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTime.java index 1230d92028..77a32c08f3 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTime.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTime.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableTime(double magnitude, double baseUnitMagnitude, TimeUnit unit) implements Time { @Override public Time copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTorque.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTorque.java index 7c756e75dc..177311a6b3 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTorque.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableTorque.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableTorque(double magnitude, double baseUnitMagnitude, TorqueUnit unit) implements Torque { @Override public Torque copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableVelocity.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableVelocity.java index 89256f9d05..04d2f1b125 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableVelocity.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableVelocity.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableVelocity(double magnitude, double baseUnitMagnitude, VelocityUnit unit) implements Velocity { @Override public Velocity copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableVoltage.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableVoltage.java index ca5dfebbf3..2345859477 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableVoltage.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableVoltage.java @@ -9,7 +9,7 @@ package edu.wpi.first.units.measure; import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public record ImmutableVoltage(double magnitude, double baseUnitMagnitude, VoltageUnit unit) implements Voltage { @Override public Voltage copy() { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAcceleration.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAcceleration.java index ed74009c45..b3191e2862 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAcceleration.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAcceleration.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutAcceleration extends MutableMeasureBase, Acceleration, MutAcceleration> implements Acceleration { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngle.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngle.java index ff356e33c2..45f7f2dc29 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngle.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngle.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutAngle extends MutableMeasureBase implements Angle { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularAcceleration.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularAcceleration.java index 8d7cecc803..065aa9cd2e 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularAcceleration.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularAcceleration.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutAngularAcceleration extends MutableMeasureBase implements AngularAcceleration { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularMomentum.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularMomentum.java index c7ee472622..9b716b3e11 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularMomentum.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularMomentum.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutAngularMomentum extends MutableMeasureBase implements AngularMomentum { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularVelocity.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularVelocity.java index d4083e179c..ba4465b720 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularVelocity.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutAngularVelocity.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutAngularVelocity extends MutableMeasureBase implements AngularVelocity { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutCurrent.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutCurrent.java index 3dab503de2..c2e736a88d 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutCurrent.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutCurrent.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutCurrent extends MutableMeasureBase implements Current { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutDimensionless.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutDimensionless.java index 13ee3f6e8c..3f06defa28 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutDimensionless.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutDimensionless.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutDimensionless extends MutableMeasureBase implements Dimensionless { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutDistance.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutDistance.java index 35f1e3faa9..134ead958f 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutDistance.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutDistance.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutDistance extends MutableMeasureBase implements Distance { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutEnergy.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutEnergy.java index bd23cd1e9b..362547ab57 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutEnergy.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutEnergy.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutEnergy extends MutableMeasureBase implements Energy { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutForce.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutForce.java index da6c973164..73a1e2c2ea 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutForce.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutForce.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutForce extends MutableMeasureBase implements Force { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutFrequency.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutFrequency.java index 091afd130b..aa26c18124 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutFrequency.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutFrequency.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutFrequency extends MutableMeasureBase implements Frequency { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearAcceleration.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearAcceleration.java index dd074db5f8..34bf7d5cc7 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearAcceleration.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearAcceleration.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutLinearAcceleration extends MutableMeasureBase implements LinearAcceleration { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearMomentum.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearMomentum.java index da3113c345..0c95a0ad6f 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearMomentum.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearMomentum.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutLinearMomentum extends MutableMeasureBase implements LinearMomentum { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearVelocity.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearVelocity.java index ffd19e3a7e..ec7a66750b 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearVelocity.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutLinearVelocity.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutLinearVelocity extends MutableMeasureBase implements LinearVelocity { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMass.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMass.java index c1b80c191e..f4aa4e7064 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMass.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMass.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutMass extends MutableMeasureBase implements Mass { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMomentOfInertia.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMomentOfInertia.java index b6f7481fa5..ee5135e183 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMomentOfInertia.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMomentOfInertia.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutMomentOfInertia extends MutableMeasureBase implements MomentOfInertia { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMult.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMult.java index b743c950fd..317a19bbc7 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMult.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutMult.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutMult extends MutableMeasureBase, Mult, MutMult> implements Mult { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutPer.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutPer.java index 054d87f19b..76e4f7bb86 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutPer.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutPer.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutPer extends MutableMeasureBase, Per, MutPer> implements Per { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutPower.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutPower.java index 7a08663a7d..54daae6170 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutPower.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutPower.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutPower extends MutableMeasureBase implements Power { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutResistance.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutResistance.java index 6acee59f56..512f214dae 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutResistance.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutResistance.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutResistance extends MutableMeasureBase implements Resistance { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTemperature.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTemperature.java index 31ae1fe7b5..7105031e2a 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTemperature.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTemperature.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutTemperature extends MutableMeasureBase implements Temperature { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTime.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTime.java index 4b9b81a745..59b2808849 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTime.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTime.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutTime extends MutableMeasureBase implements Time { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTorque.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTorque.java index 30f9152329..b87e8453fb 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTorque.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutTorque.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutTorque extends MutableMeasureBase implements Torque { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutVelocity.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutVelocity.java index 660cfa9de2..8bfb75879c 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutVelocity.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutVelocity.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutVelocity extends MutableMeasureBase, Velocity, MutVelocity> implements Velocity { diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutVoltage.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutVoltage.java index 7002767b9e..709c5b12b6 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutVoltage.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutVoltage.java @@ -10,7 +10,7 @@ import static edu.wpi.first.units.Units.*; import edu.wpi.first.units.*; import edu.wpi.first.units.mutable.MutableMeasureBase; -@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +@SuppressWarnings({"unchecked", "cast", "checkstyle"}) public final class MutVoltage extends MutableMeasureBase implements Voltage { diff --git a/wpiutil/src/main/java/edu/wpi/first/util/cleanup/ReflectionCleanup.java b/wpiutil/src/main/java/edu/wpi/first/util/cleanup/ReflectionCleanup.java index 0803028f40..bed453ef21 100644 --- a/wpiutil/src/main/java/edu/wpi/first/util/cleanup/ReflectionCleanup.java +++ b/wpiutil/src/main/java/edu/wpi/first/util/cleanup/ReflectionCleanup.java @@ -11,6 +11,7 @@ import java.lang.reflect.Field; * your `close` method, that will use reflection to find all `AutoCloseable` instance members and * close them. */ +@SuppressWarnings("PMD.ImplicitFunctionalInterface") public interface ReflectionCleanup extends AutoCloseable { /** * Default implementation that uses reflection to find all AutoCloseable fields not marked diff --git a/wpiutil/src/main/java/edu/wpi/first/util/sendable/Sendable.java b/wpiutil/src/main/java/edu/wpi/first/util/sendable/Sendable.java index ad1fe28d09..e593e48c2e 100644 --- a/wpiutil/src/main/java/edu/wpi/first/util/sendable/Sendable.java +++ b/wpiutil/src/main/java/edu/wpi/first/util/sendable/Sendable.java @@ -5,6 +5,7 @@ package edu.wpi.first.util.sendable; /** The base interface for objects that can be sent over the network. */ +@SuppressWarnings("PMD.ImplicitFunctionalInterface") public interface Sendable { /** * Initializes this {@link Sendable} object. diff --git a/wpiutil/src/main/java/edu/wpi/first/util/struct/StructGenerator.java b/wpiutil/src/main/java/edu/wpi/first/util/struct/StructGenerator.java index 24b2541e1c..e883d9da76 100644 --- a/wpiutil/src/main/java/edu/wpi/first/util/struct/StructGenerator.java +++ b/wpiutil/src/main/java/edu/wpi/first/util/struct/StructGenerator.java @@ -435,7 +435,6 @@ public final class StructGenerator { } int size = 0; - boolean failed = false; for (final E constant : enumVariants) { final String name = constant.name(); @@ -452,6 +451,8 @@ public final class StructGenerator { .filter(f -> !f.isEnumConstant() && !Modifier.isStatic(f.getModifiers())) .toList(); + boolean failed = false; + for (final Field field : enumFields) { final Class type = field.getType(); final String name = field.getName(); diff --git a/wpiutil/src/test/java/edu/wpi/first/util/cleanup/CleanupPoolTest.java b/wpiutil/src/test/java/edu/wpi/first/util/cleanup/CleanupPoolTest.java index a953a855e6..2906bf2f9f 100644 --- a/wpiutil/src/test/java/edu/wpi/first/util/cleanup/CleanupPoolTest.java +++ b/wpiutil/src/test/java/edu/wpi/first/util/cleanup/CleanupPoolTest.java @@ -87,7 +87,6 @@ class CleanupPoolTest { } @Test - @SuppressWarnings("PMD.AvoidCatchingGenericException") void cleanupStackWithExceptionInCloseWorks() { List objects = new ArrayList<>(); objects.add(new AutoCloseableObject());