Skip to content

Commit

Permalink
update checkstyle to 10.1: as checkstyle 10 drops java 8 support, aut…
Browse files Browse the repository at this point in the history
…omatically switch to backport (maintained by the community) on jre lower 11;

 add new configuration quality.checkstyleBackport to be able to force backport for jre 11 or disable automatic switching to backport
  • Loading branch information
xvik committed Apr 10, 2022
1 parent fae06e9 commit 75fc234
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 5 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
* Update checkstyle 9.1 -> 10.1
IMPORTANT: Checkstyle 10 requires java 11, but plugin will automatically switch to
[backports](https://checkstyle.org/#Backport) for lower jre.
Additional maven repository would be registered if required (LIMITED to checkstyle only)
Warning in log would clearly indicate when backport is used
* New option: quality.checkstyleBackport (by default true for jre < 11)
Option might be used to force backport for java >=11 or to disable backport at all
* Update checkstyle config:
- Add [UnusedLocalVariable](https://checkstyle.sourceforge.io/config_coding.html#UnusedLocalVariable)

### 4.7.0 (2021-11-10)
* Fix gradle 7 deprecation warnings (#30)
* Update spotbugs plugin 4.7.1 -> 4.7.9
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ mkdocs {
}
extras = [
'version': project.docVersion,
'checkstyle': '9.1',
'checkstyle': '10.1',
'pmd': '6.34.0',
'spotbugs': '4.4.2',
'codenarc': '2.2.0',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ru.vyarus.gradle.plugin.quality

import groovy.transform.CompileStatic
import groovy.transform.TypeCheckingMode
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.SourceSet
Expand All @@ -21,7 +22,7 @@ class QualityExtension {
sourceSets = [project.sourceSets.main] as Collection<SourceSet>
}

String checkstyleVersion = '9.1'
String checkstyleVersion = '10.1'
String pmdVersion = '6.34.0'
String spotbugsVersion = '4.4.2'
String codenarcVersion = '2.2.0'
Expand Down Expand Up @@ -79,6 +80,21 @@ class QualityExtension {
*/
boolean codenarc = true

/**
* Since checkstyle 10, minimum required java is 11. Community (not checkstyle core team!) started a
* <a href="https://checkstyle.org/#Backport">backport</a> project - maintaining java 8 compatibility.
* Backport releases would be delayed relative to main checkstyle releases (see
* <a href="https://rnveach.github.io/checkstyle-backport-jre8/">checkstyle-backport-jre8</a>).
* <p>
* NOTE: additional repository would be configured to download backport (only when backport required). But the
* repository would be limited to checkstyle group only!
* <p>
* This property switches between backport and normal checkstyle versions. By default backport would be enabled
* on java 8-10, but you can manually enable it for all java versions if required. Or you can use false value
* to prevent backport behaviour and preventing new repository registration.
*/
boolean checkstyleBackport = !JavaVersion.current().java11Compatible

/**
* Enable PMD incremental analysis (cache results between builds to speed up processing).
* This is a shortcut for pmd plugin's {@code pmd.incrementalAnalysis } configuration option.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,13 @@ import org.gradle.api.Task
import org.gradle.api.execution.TaskExecutionGraph
import org.gradle.api.plugins.GroovyPlugin
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.quality.*
import org.gradle.api.plugins.quality.Checkstyle
import org.gradle.api.plugins.quality.CheckstylePlugin
import org.gradle.api.plugins.quality.CodeNarc
import org.gradle.api.plugins.quality.CodeNarcPlugin
import org.gradle.api.plugins.quality.Pmd
import org.gradle.api.plugins.quality.PmdExtension
import org.gradle.api.plugins.quality.PmdPlugin
import org.gradle.api.reporting.Report
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceTask
Expand All @@ -18,7 +24,13 @@ import org.gradle.api.tasks.TaskState
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.process.CommandLineArgumentProvider
import org.gradle.util.GradleVersion
import ru.vyarus.gradle.plugin.quality.report.*
import ru.vyarus.gradle.plugin.quality.report.CheckstyleReporter
import ru.vyarus.gradle.plugin.quality.report.CodeNarcReporter
import ru.vyarus.gradle.plugin.quality.report.CpdReporter
import ru.vyarus.gradle.plugin.quality.report.HtmlReportGenerator
import ru.vyarus.gradle.plugin.quality.report.PmdReporter
import ru.vyarus.gradle.plugin.quality.report.Reporter
import ru.vyarus.gradle.plugin.quality.report.SpotbugsReporter
import ru.vyarus.gradle.plugin.quality.spotbugs.CustomSpotBugsPlugin
import ru.vyarus.gradle.plugin.quality.task.InitQualityConfigTask
import ru.vyarus.gradle.plugin.quality.util.CpdUtils
Expand Down Expand Up @@ -121,6 +133,7 @@ class QualityPlugin implements Plugin<Project> {
}

@CompileStatic(TypeCheckingMode.SKIP)
@SuppressWarnings(['MethodSize', 'NestedBlockDepth'])
private void applyCheckstyle(Project project, QualityExtension extension, ConfigLoader configLoader,
boolean register) {
configurePlugin(project,
Expand All @@ -141,6 +154,19 @@ class QualityPlugin implements Plugin<Project> {
configDirectory = configLoader.resolveCheckstyleConfigDir()
sourceSets = extension.sourceSets
}
if (extension.checkstyleBackport) {
repositories {
maven {
url 'https://rnveach.github.io/checkstyle-backport-jre8/'
// use custom repository ONLY for checkstyle (just in case)
content { includeGroup 'com.puppycrawl.tools' }
}
}
dependencies {
checkstyle "com.puppycrawl.tools:checkstyle-backport-jre8:${extension.checkstyleVersion}"
}
}

tasks.withType(Checkstyle).configureEach {
doFirst {
if (GradleVersion.current() < GradleVersion.version('6.0')) {
Expand All @@ -150,6 +176,10 @@ class QualityPlugin implements Plugin<Project> {
configProperties[propName] = configProperties[propName]
?: configLoader.resolveCheckstyleConfigDir().absolutePath
}
if (extension.checkstyleBackport) {
project.logger.warn("WARNING: checkstyle-backport-jre8 (${extension.checkstyleVersion})" +
' used instead of regular checkstyle: https://checkstyle.org/#Backport')
}
configLoader.resolveCheckstyleConfig()
applyExcludes(it, extension)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@
<module name="UnnecessarySemicolonAfterTypeMemberDeclaration"/>
<module name="UnnecessarySemicolonInEnumeration"/>
<module name="UnnecessarySemicolonInTryWithResources"/>
<module name="UnusedLocalVariable"/>
<module name="VariableDeclarationUsageDistance">
<property name="allowedDistance" value="5"/>
</module>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ class MultiModuleUseKitTest extends AbstractKitTest {
BuildResult result = run('check')

then: "violations detected in module only"
unifyString(result.output).replaceAll("Total time: .*", "").trim().startsWith("""> Task :mod1:compileJava
unifyString(result.output).replaceAll("Total time: .*", "")
// only on jdk 8
.replaceAll("WARNING: checkstyle-backport-jre8 .*\n", "")
.trim().startsWith("""> Task :mod1:compileJava
> Task :mod1:processResources NO-SOURCE
> Task :mod1:classes
Expand Down

0 comments on commit 75fc234

Please sign in to comment.