Code Monkey home page Code Monkey logo

static-code-analysis-plugin's Issues

Avoid using afterEvaluate UNLESS using an Android plugin prior to 1.3

According to

// Apply Android Lint configuration
// must be done in `afterEvaluate` for compatibility with android plugin [1.0, 1.3)
withAndroidPlugins AndroidLintConfigurator

We only need the afterEvaluate for older Android plugins (which themselves applied everything on an afterEvaluate.

We currently do everything asynchronously as plugins are applied. So we MAY detect, once the android plugin is added, which version is being used, and either apply at the momento or defer to afterEvaluate. This would keep support for older versions without punishing newer ones / non-Android projects.

PMD error on Android projects using Play Services or LeakCanary

Hi!

I'm having two issues after upgrading to SCA v3.0.0.

First one is related to PMD, second one to Spotbugs.

Context

I was using v2.6.12 fine in the given context:

  • PMD enabled
  • Gradle v5.6.4
  • Android project
    • 'com.android.tools.build:gradle:3.6.2'
    • App module, 1 dynamic feature module, many library modules (all in the same repository)

Note: SCA v2.6.12 comes with PMD v6.20.0

Error

PMD runs ok in all modules but on the dynamic feature module, I'm getting the following result:

* What went wrong:
Execution failed for task ':my_anroid_dynamic_feature_module:processDebugAndroidTestResources'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > Android resource linking failed
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:34:13-36:66: AAPT: error: resource xml/leak_canary_file_paths (aka com.github.myawesomeproject.awesomefeature.test:xml/leak_canary_file_paths) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:39:9-44:66: AAPT: error: resource mipmap/leak_canary_icon (aka com.github.myawesomeproject.awesomefeature.test:mipmap/leak_canary_icon) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:39:9-44:66: AAPT: error: resource string/leak_canary_display_activity_label (aka com.github.myawesomeproject.awesomefeature.test:string/leak_canary_display_activity_label) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:39:9-44:66: AAPT: error: resource style/leak_canary_LeakCanary.Base (aka com.github.myawesomeproject.awesomefeature.test:style/leak_canary_LeakCanary.Base) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:46:9-62:26: AAPT: error: resource drawable/leak_canary_tv_icon (aka com.github.myawesomeproject.awesomefeature.test:drawable/leak_canary_tv_icon) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:46:9-62:26: AAPT: error: resource bool/leak_canary_add_launcher_icon (aka com.github.myawesomeproject.awesomefeature.test:bool/leak_canary_add_launcher_icon) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:46:9-62:26: AAPT: error: resource mipmap/leak_canary_icon (aka com.github.myawesomeproject.awesomefeature.test:mipmap/leak_canary_icon) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:46:9-62:26: AAPT: error: resource string/leak_canary_display_activity_label (aka com.github.myawesomeproject.awesomefeature.test:string/leak_canary_display_activity_label) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:46:9-62:26: AAPT: error: resource style/leak_canary_LeakCanary.Base (aka com.github.myawesomeproject.awesomefeature.test:style/leak_canary_LeakCanary.Base) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:64:9-70:68: AAPT: error: resource mipmap/leak_canary_icon (aka com.github.myawesomeproject.awesomefeature.test:mipmap/leak_canary_icon) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:64:9-70:68: AAPT: error: resource string/leak_canary_storage_permission_activity_label (aka com.github.myawesomeproject.awesomefeature.test:string/leak_canary_storage_permission_activity_label) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/12544b80cee21462a629a686340edfa2/jetified-leakcanary-android-core-2.2/AndroidManifest.xml:64:9-70:68: AAPT: error: resource style/leak_canary_Theme.Transparent (aka com.github.myawesomeproject.awesomefeature.test:style/leak_canary_Theme.Transparent) not found.
         
     /Users/myuser/.gradle/caches/transforms-2/files-2.1/1242a38a4d8d07b0c228c34712765379/jetified-play-services-basement-17.0.0/AndroidManifest.xml:23:9-25:69: AAPT: error: resource integer/google_play_services_version (aka com.github.myawesomeproject.awesomefeature.test:integer/google_play_services_version) not found.
         

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.3/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 6s
82 actionable tasks: 14 executed, 68 up-to-date

What I've tried

  • Bump 'com.android.tools.build:gradle:3.6.2' to v3.6.3 ==> same error
  • Bump Gradle to v6.3 ==> same error
  • Build a local version of SCA v3.0.0 downgrading to PMD v6.20.0 ==> same error
  • Remove dependency LeakCanary and its usages ==> same error (only for Play Services)
  • Clone project again ==> same error
  • Downgrade Gradle to v5.2.1 (with 'com.android.tools.build:gradle:3.4.1') ==> It works! 🤔

Why I tried downgrading to v5.2.1?
After upgrading to SCA v3.0.0, when running:

./gradlew spotbugs

I'm getting the following error:

No classes configured for SpotBugs analysis.

which is extremely similar to spotbugs/spotbugs-gradle-plugin#23.

But in this new context with Gradle v5.2.1 when running spotbugs I fall into spotbugs/spotbugs-gradle-plugin#90.

Since all was working ok before upgrading and even after upgrading but using the previous version of PMD, I think it's a bug on SCA itself (perhaps on the workaround I assume you're doing to make Spotbugs work with Android projects? Should I file a new issue for this Spotbugs behaviour?

I can share a branch to try on..

Using the static code analysis plugin causes gradle sync to fail

I just created an empty test project in the up to date Android Studio (2.2.3; macOS 10.11.6; JRE 1.8.0_112 x86_64; local Gradle 2.14.1 as supplied by AS). When I add this plugin to the app's build.gradle the following happens on gradle sync process:

Error:(2, 0) Could not get unknown property 'default' for configuration container.

No other changes have been made to the default gradle file (see below). It does not matter whether the DSL config is included in the build file or not.

Any idea why this happens and/or what the problem is?

plugins {
    id 'com.monits.staticCodeAnalysis' version '2.3.3'
}

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "com.test.androidtestapp"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.0'
    testCompile 'junit:junit:4.12'
    androidLint 'com.monits:android-linters:1.3.0'
}

v2.1.5 compiled for Java8 only?

I'm using the plugin ok but when I tried to start using Data Binding, the project synced well but gives me an error running task: :installDebug.

It seems that the plugin either has any conflicting dependency with DataBinding or it is compiled for Java8 only (but I see it's compiling for compatibility with 7

What I tested

java -version Java7

./gradlew app:installDebug

Build file '/.../app/build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':app'.
> java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0

Note that DataBinding works ok in Java7.

java -version Java8

Without DataBinding

./gradlew app:installDebug

works ok! =)

With DataBinding

./gradlew app:installDebug

:app:mergeDebugAssets UP-TO-DATE
:app:transformClassesWithDexForDebug
Dex: Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the 'java' gradle plugin in a library submodule add 
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
to that submodule's build.gradle file.
    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.RuntimeException: Exception parsing classes
        at com.android.dx.command.dexer.Main.processClass(Main.java:775)
        at com.android.dx.command.dexer.Main.processFileBytes(Main.java:741)
        at com.android.dx.command.dexer.Main.access$1200(Main.java:88)
        at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1683)
        at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
        at com.android.dx.command.dexer.Main.processOne(Main.java:695)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:592)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:321)
        at com.android.dx.command.dexer.Main.run(Main.java:292)
        at com.android.builder.internal.compiler.DexWrapper.run(DexWrapper.java:54)
        at com.android.builder.core.DexByteCodeConverter.lambda$dexInProcess$2(DexByteCodeConverter.java:173)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
        at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:476)
        at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
        at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
        at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
        at com.android.dx.command.dexer.Main.parseClass(Main.java:787)
        at com.android.dx.command.dexer.Main.access$1600(Main.java:88)
        at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1722)
        at com.android.dx.command.dexer.Main.processClass(Main.java:773)
        ... 16 more

1 error; aborting
:app:transformClassesWithDexForDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Return code 1 for dex process

Sandbox

You can un/comment this line where I'm applying this plugin to reproduce the error.
That branch is using DataBinding and works ok without applying static-code-analysis =(

Checkstyle fails on gradle 2.3

* What went wrong:
Execution failed for task ':commons:checkstyle'.
> Unable to create a Checker: cannot initialize module TreeWalker - Unable to instantiate CommentsIndentation

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':commons:checkstyle'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:306)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
Caused by: : Unable to create a Checker: cannot initialize module TreeWalker - Unable to instantiate CommentsIndentation
    at com.puppycrawl.tools.checkstyle.CheckStyleTask.createChecker(CheckStyleTask.java:362)
    at com.puppycrawl.tools.checkstyle.CheckStyleTask.realExecute(CheckStyleTask.java:280)
    at com.puppycrawl.tools.checkstyle.CheckStyleTask.execute(CheckStyleTask.java:243)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.gradle.api.internal.project.ant.BasicAntBuilder.nodeCompleted(BasicAntBuilder.java:77)
    at org.gradle.api.internal.project.AntBuilderDelegate.nodeCompleted(DefaultIsolatedAntBuilder.groovy:173)
    at org.gradle.api.plugins.quality.Checkstyle$_run_closure1.doCall(Checkstyle.groovy:142)
    at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:67)
    at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:130)
    at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:91)
    at org.gradle.util.ConfigureUtil$configure.call(Unknown Source)
    at org.gradle.util.ConfigureUtil$configure.call(Unknown Source)
    at org.gradle.api.internal.project.DefaultIsolatedAntBuilder.execute(DefaultIsolatedAntBuilder.groovy:104)
    at org.gradle.api.internal.project.IsolatedAntBuilder$execute$7.call(Unknown Source)
    at org.gradle.api.plugins.quality.Checkstyle.run(Checkstyle.groovy:139)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 13 more
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: cannot initialize module TreeWalker - Unable to instantiate CommentsIndentation
    at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:180)
    at com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:171)
    at com.puppycrawl.tools.checkstyle.CheckStyleTask.createChecker(CheckStyleTask.java:353)
    ... 36 more
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: Unable to instantiate CommentsIndentation
    at com.puppycrawl.tools.checkstyle.PackageObjectFactory.createModule(PackageObjectFactory.java:143)
    at com.puppycrawl.tools.checkstyle.TreeWalker.setupChild(TreeWalker.java:163)
    at com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:171)
    at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:160)
    ... 38 more
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: Unable to instantiate CommentsIndentationCheck
    at com.puppycrawl.tools.checkstyle.PackageObjectFactory.doMakeObject(PackageObjectFactory.java:101)
    at com.puppycrawl.tools.checkstyle.PackageObjectFactory.createModule(PackageObjectFactory.java:140)
    ... 41 more

Proyectos no encuentran buildToolsVersion desde la versión 1.6.2

Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
java.lang.IllegalStateException: buildToolsVersion is not specified.
    at com.google.common.base.Preconditions.checkState(Preconditions.java:176)
    at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:599)
    at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:566)
    at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:563)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:562)
    at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:559)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:93)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:82)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:79)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:30)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy9.afterEvaluate(Unknown Source)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:67)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:61)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:496)
    at org.gradle.api.internal.project.AbstractProject.evaluationDependsOn(AbstractProject.java:564)
    at org.gradle.api.internal.project.AbstractProject.evaluationDependsOn(AbstractProject.java:556)
    at com.android.build.gradle.internal.DependencyManager.ensureConfigured(DependencyManager.java:671)
    at com.android.build.gradle.internal.DependencyManager.resolveDependencyForConfig(DependencyManager.java:239)
    at com.android.build.gradle.internal.DependencyManager.resolveDependencies(DependencyManager.java:138)
    at com.android.build.gradle.internal.TaskManager.resolveDependencies(TaskManager.java:327)
    at com.android.build.gradle.internal.VariantManager$9.call(VariantManager.java:597)
    at com.android.build.gradle.internal.VariantManager$9.call(VariantManager.java:594)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.internal.profile.SpanRecorders.record(SpanRecorders.java:51)
    at com.android.build.gradle.internal.VariantManager.createVariantData(VariantManager.java:593)
    at com.android.build.gradle.internal.VariantManager.createVariantDataForProductFlavors(VariantManager.java:750)
    at com.android.build.gradle.internal.VariantManager.populateVariantDataList(VariantManager.java:459)
    at com.android.build.gradle.internal.VariantManager$1.call(VariantManager.java:263)
    at com.android.build.gradle.internal.VariantManager$1.call(VariantManager.java:260)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.internal.VariantManager.createAndroidTasks(VariantManager.java:259)
    at com.android.build.gradle.BasePlugin$12.call(BasePlugin.java:650)
    at com.android.build.gradle.BasePlugin$12.call(BasePlugin.java:647)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:646)
    at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:566)
    at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:563)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:562)
    at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:559)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:93)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:82)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:79)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:30)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy9.afterEvaluate(Unknown Source)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:67)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:61)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:496)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:87)
    at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)
    at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
    at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:125)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:122)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:77)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:47)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/dtecheira/Workspace/android/events/build.gradle' line: 2

* What went wrong:
A problem occurred evaluating project ':events'.
> Failed to apply plugin [id 'com.monits.staticCodeAnalysis']
   > Could not create plugin of type 'StaticCodeAnalysisPlugin'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Consider using android.getBootClasspath()

We don't currently use it for classpath population of analysis tools and may be handy to do so; maybe even fix some of the missing classes errors we currently have.

Checkstyle won't find root module on 3.0.0

When running checkstyle with Gradle 5.6.4, AGP 3.4.2

Command

./gradlew clean check

Error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkstyleMain'.
> Unable to create Root Module: config {/<system-path>/<android-project-root>/config/checkstyle/checkstyle-main.xml}, classpath {}.

Config

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
        "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
    <property name="severity" value="warning"/>
    <property name="cacheFile" value="${checkstyle.cache.file}"/>
    <module name="TreeWalker">
        <property name="tabWidth" value="4"/>
        <module name="JavadocMethod">
            <property name="severity" value="warning"/>
            <property name="scope" value="public"/>
            <property name="allowMissingPropertyJavadoc" value="true"/>
        </module>
        <module name="CommentsIndentation"/>
        <module name="EmptyLineSeparator">
            <property name="allowNoEmptyLineBetweenFields" value="true"/>
            <property name="allowMultipleEmptyLines" value="false"/>
            <property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
        </module>
        <module name="AnnotationLocation">
            <property name="severity" value="error"/>
        </module>
        <module name="OneTopLevelClass">
            <property name="severity" value="error"/>
        </module>
        <module name="DeclarationOrder">
            <property name="severity" value="error"/>
            <property name="ignoreModifiers" value="true"/>
        </module>
        <module name="MissingDeprecated">
            <property name="severity" value="error"/>
        </module>
        <module name="MultipleStringLiterals"> <!-- By default ignores annotations -->
            <property name="severity" value="error"/>
        </module>
        <module name="AtclauseOrder"/>
        <module name="NonEmptyAtclauseDescription"/>
        <module name="InterfaceTypeParameterName"/>
        <module name="MissingOverride">
            <property name="severity" value="error"/>
        </module>
        <module name="ConstantName">
            <property name="severity" value="error"/>
        </module>
        <module name="LocalVariableName">
            <property name="severity" value="error"/>
        </module>
        <module name="LocalFinalVariableName">
            <property name="severity" value="error"/>
        </module>
        <module name="MemberName">
            <property name="severity" value="error"/>
        </module>
        <module name="MethodName"/>
        <module name="PackageName">
            <property name="severity" value="warning"/>
            <property name="format" value="^[a-z]+(\.[a-z_][a-z0-9_]*)*$"/>
        </module>
        <module name="ParameterName">
            <property name="severity" value="error"/>
        </module>
        <module name="StaticVariableName">
            <property name="severity" value="error"/>
        </module>
        <module name="TypeName">
            <property name="severity" value="error"/>
        </module>
        <module name="AvoidStarImport">
            <property name="severity" value="error"/>
        </module>
        <module name="IllegalImport">
            <property name="severity" value="error"/>
            <property name="illegalPkgs" value="sun, framework.junit"/>
        </module>
        <module name="UnusedImports">
            <property name="severity" value="error"/>
            <property name="processJavadoc" value="true"/>
        </module>
        <module name="AnonInnerLength">
            <property name="max" value="40"/>
        </module>
        <module name="LineLength">
            <property name="severity" value="warning"/>
            <property name="max" value="150"/>
        </module>
        <module name="MethodLength">
            <property name="max" value="80"/>
        </module>
        <module name="OuterTypeNumber"/>
        <module name="EmptyForInitializerPad"/>
        <module name="OperatorWrap"/>
        <module name="LeftCurly">
            <property name="severity" value="error"/>
        </module>
        <module name="NeedBraces">
            <property name="severity" value="error"/>
        </module>
        <module name="RightCurly">
            <property name="severity" value="error"/>
        </module>
        <module name="CovariantEquals"/>
        <module name="EmptyStatement"/>
        <module name="EqualsAvoidNull">
            <property name="severity" value="error"/>
        </module>
        <module name="EqualsHashCode">
            <property name="severity" value="error"/>
        </module>
        <module name="FallThrough"/>
        <module name="MagicNumber">
            <property name="severity" value="warning"/>
            <property name="ignoreAnnotation" value="true"/>
        </module>
        <module name="InterfaceIsType"/>
        <module name="PackageDeclaration">
            <property name="severity" value="error"/>
        </module>
        <module name="StringLiteralEquality">
            <property name="severity" value="error"/>
        </module>
        <module name="SuperClone">
            <property name="severity" value="error"/>
        </module>
        <module name="SuperFinalize">
            <property name="severity" value="error"/>
        </module>
        <module name="ArrayTrailingComma"/>
        <module name="OneStatementPerLine">
            <property name="severity" value="error"/>
        </module>
        <module name="MutableException"/>
        <module name="NPathComplexity"/>
        <module name="CyclomaticComplexity"/>
        <module name="UncommentedMain">
            <property name="excludedClasses" value="\.Main$"/>
        </module>
        <module name="UpperEll"/>
        <module name="ClassTypeParameterName"/>
        <module name="MethodTypeParameterName"/>
        <module name="EmptyForIteratorPad"/>
        <module name="MethodParamPad"/>
        <module name="ParenPad"/>
        <module name="WhitespaceAround">
            <property name="tokens" value="ASSIGN,ARRAY_INIT,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,DO_WHILE,EQUAL,GE,GT,LAMBDA,LAND,LCURLY,LE,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SWITCH,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND"/>
            <property name="severity" value="error"/>
            <property name="ignoreEnhancedForColon" value="false"/>
        </module>
        <module name="ArrayTypeStyle"/>
        <module name="DefaultComesLast"/>
        <module name="WhitespaceAfter"/>
        <module name="GenericWhitespace"/>
        <module name="Indentation">
            <property name="caseIndent" value="0"/>
            <property name="lineWrappingIndentation" value="1"/>
        </module>
        <module name="OuterTypeFilename">
            <property name="severity" value="error"/>
        </module>
        <module name="EmptyBlock">
            <property name="option" value="text"/>
        </module>
        <module name="FinalLocalVariable">
            <!-- The new better way, not usable until we fully migrate (and then, remove FOR_EACH_CLAUSE from FinalParameters) -->
            <!--            <property name="validateEnhancedForLoopVariable" value="true"/>-->
        </module>
        <module name="FinalParameters">
            <property name="tokens" value="METHOD_DEF,CTOR_DEF,LITERAL_CATCH,FOR_EACH_CLAUSE"/>
        </module>
        <module name="FinalClass"/>
        <module name="ModifierOrder"/>
        <module name="SimplifyBooleanExpression"/>
        <module name="SimplifyBooleanReturn"/>
        <!-- Just allow spaces for indentation -->
        <module name="RegexpSinglelineJava">
            <property name="id" value="IndentWithSpaces"/>
            <property name="format" value="^ *\t+ *\S"/>
            <property name="message" value="Line has leading tabs; indentation should be performed with spaces only."/>
            <property name="ignoreComments" value="true"/>
        </module>
        <!-- Avoid multiple spaces within code -->
        <module name="RegexpSinglelineJava">
            <property name="id" value="ExtraWhitespace"/>
            <property name="format" value='\S(\s{2,}|\t)(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)'/>
            <property name="message" value="There are some extra whitespaces in this line."/>
            <property name="ignoreComments" value="true"/>
        </module>
        <module name="SuppressWarningsHolder"/>

        <!-- Allow to disable checks with comments -->
        <module name="SuppressionCommentFilter"/>
    </module>
    
    <!-- Allow to disable checks with @SuppressWarnings -->
    <module name="SuppressWarningsFilter"/>
    <module name="SuppressionFilter">
        <property name="file"
                  value="https://raw.githubusercontent.com/Monits/static-code-analysis-plugin/staging/defaults/checkstyle/checkstyle-suppressions.xml"/>
    </module>
    <!-- Check for unique properties in property files -->
    <module name="UniqueProperties"/>
    <!-- No triling spaces! -->
    <module name="RegexpSingleline">
        <property name="format" value="\s+$"/>
        <property name="message" value="There are some extra whitespaces at the end of this line."/>
    </module>
</module>

Rollback to version version 2.6.1 still works fine.

SCA not working

Hi,

My files are referenced under root for a flexible config, gradle wrapper is 4.10.2 ; still, I can't get to run checkstyle for example. From readme:

All tasks, are hooked to be run as part of the check task of the Java Plugin.

Also running gradle check, checkstyle does not seems to work; I've placed unused imports to make sure that build would fail.

I can't see tasks created under Gradle Tasks UI of Android Studio; Other plugins like detekt are working fine.

Would you mind to support me on this? I really enjoyed your plugin =)

apply plugin: 'com.monits.staticCodeAnalysis'

buildscript {
    ext {
        ...
        monits_version = '2.6.10'
        gradle_version = '3.3.1'
    }

    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath "com.android.tools.build:gradle:${gradle_version}"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.monits:static-code-analysis-plugin:$monits_version"
        ...
    }
}

allprojects {

    repositories {
        google()
        jcenter()
    }

    staticCodeAnalysis {
        findbugs = true
        checkstyle = true
        pmd = true
        cpd = true
        androidLint = true
        ignoreErrors = false

        sourceSetConfig {
            test {
                findbugsExclude = "${project.rootDir}/.findbugs.xml"
                checkstyleRules = "${project.rootDir}/.checkstyle.xml"
                androidLintConfig = "${project.rootDir}/.lint.xml"
                pmdRules = [ "${project.rootDir}/.pmd.xml",
                             "${project.rootDir}/.pmd-android.xml" ]
            }
        }
    }
}

Console

➜  mProject git:(master) ✗ ./gradlew checkstyle                                                                                                                              10/08/19 |11:21AM

FAILURE: Build failed with an exception.

* What went wrong:
Task 'checkstyle' not found in root project 'Shutter Gallery'.

Configuring CPD

So, the usage explanation shows how to configure everything but CPD. How do I pass custom configuration to the CPD task?

MissingPropertyException useJack for class GradleVariantConfiguration

Hi!

I'm using this plugin in a new project and I'm getting the following output when running the lint task:

./gradlew app:lint
Incremental java compilation is an incubating feature.
Encountered an error trying to set inputs and outputs for Androoid Lint tasks, it will be disabled. Please, report this incident in https://github.com/monits/static-code-analysis-plugin/issues
groovy.lang.MissingPropertyException: No such property: useJack for class: com.android.build.gradle.internal.core.GradleVariantConfiguration
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
        at org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:66)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296)
        at com.monits.gradle.sca.config.AndroidLintConfigurator$_configureLintInputsAndOutputs_closure3.doCall(AndroidLintConfigurator.groovy:107)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019)
        at groovy.lang.Closure.call(Closure.java:426)
        at groovy.lang.Closure.call(Closure.java:442)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:67)
        at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:110)
        at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:115)
        at org.gradle.api.DomainObjectCollection$all$5.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
        at com.monits.gradle.sca.config.AndroidLintConfigurator.configureLintInputsAndOutputs(AndroidLintConfigurator.groovy:92)
        at com.monits.gradle.sca.config.AndroidLintConfigurator.applyAndroidConfig(AndroidLintConfigurator.groovy:49)
        at com.monits.gradle.sca.StaticCodeAnalysisPlugin$_withAndroidPlugins_closure9.doCall(StaticCodeAnalysisPlugin.groovy:192)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019)
        at groovy.lang.Closure.call(Closure.java:426)
        at org.codehaus.groovy.runtime.ConvertedClosure.invokeCustom(ConvertedClosure.java:53)
        at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:105)
        at com.sun.proxy.$Proxy46.execute(Unknown Source)
        at org.gradle.internal.Actions$FilteredAction.execute(Actions.java:205)
        at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:110)
        at org.gradle.api.internal.DefaultDomainObjectCollection.withType(DefaultDomainObjectCollection.java:120)
        at com.monits.gradle.sca.StaticCodeAnalysisPlugin.withPlugin(StaticCodeAnalysisPlugin.groovy:205)
        at com.monits.gradle.sca.StaticCodeAnalysisPlugin.withOptionalPlugin(StaticCodeAnalysisPlugin.groovy:219)
        at com.monits.gradle.sca.StaticCodeAnalysisPlugin.withAndroidPlugins(StaticCodeAnalysisPlugin.groovy:209)
        at com.monits.gradle.sca.StaticCodeAnalysisPlugin.withAndroidPlugins(StaticCodeAnalysisPlugin.groovy:194)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019)
        at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
        at com.monits.gradle.sca.StaticCodeAnalysisPlugin$_apply_closure1.doCall(StaticCodeAnalysisPlugin.groovy:66)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019)
        at groovy.lang.Closure.call(Closure.java:426)
        at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:40)
        at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:25)
        at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44)
        at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:79)
        at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:30)
        at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
        at com.sun.proxy.$Proxy10.afterEvaluate(Unknown Source)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:67)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:61)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:529)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:90)
        at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
        at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:125)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:122)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
        at org.gradle.util.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
        at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
:app:preBuild UP-TO-DATE
...

Context:

  • jdk8 +
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

compileSdkVersion 24
buildToolsVersion "23.0.3"

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 24
}

Oh! And you've got a typo at the error message: "Androoid" =)

HTML Reporting is not working

Hi

I don't have any other choice other than creating an issue.

I checked the source and found you guys disabling HTML reporting. Any specific reason for that?

Help me to get a report in HTML for PMD and Checkstyle. For Findbugs it works if just config like this but not for others

tasks.withType(FindBugs) {
    reports {
        xml.enabled = false
        html.enabled = true
    }
}

InvalidUserDataException: Cannot change role of configuration XXX after it has been included in dependency resolution

Hi!

I faced this error when running ./gradlew check

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> Cannot change role of configuration ':app:debugApk' after it has been included in dependency resolution.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s

which going deeper is:

Encountered an error trying to set inputs and outputs for Android Lint tasks, it will be disabled. Please, report this incident at https://github.com/monits/static-code-analysis-plugin/issues

...

InvalidUserDataException: Cannot change role of configuration ':module:debugPublish' after it has been included in dependency resolution

after an upgrade from: classpath 'com.android.tools.build:gradle:3.4.2' to v3.5.0

See the
output.log

Context:

  • Gradle Wrapper v5.5.1
  • SCA v2.6.10

Android productFlavors are not supported

When using product flavors, the plugin will fail on Findbugs checks, saying no classes are configured for analysis.

This error may also affect the effectiveness of PMD's type resolution, but that's not yet confirmed.

Regarding Analysis Results

I have modified app/build.gradle file and now it looks as below. Then, I compiled the project and that is not giving any error. May you please guide where it produces the results? or I need to do something more for getting analysis results. Please answer.

plugins {
    id 'com.monits.staticCodeAnalysis' version '2.6.3'
}
apply plugin: 'com.android.application'

staticCodeAnalysis {
    findbugs = true
    checkstyle = true
    pmd = true
    cpd = true
    androidLint = true // Since 2.2.0

    ignoreErrors = true // Since 1.3.0

    // default rules
    findbugsExclude = "$project.rootProject.projectDir/config/findbugs/excludeFilter.xml"
    checkstyleRules = 'https://raw.githubusercontent.com/Monits/static-code-analysis-plugin/staging/defaults/checkstyle/checkstyle-cache.xml'
    pmdRules = [ 'https://raw.githubusercontent.com/Monits/static-code-analysis-plugin/staging/defaults/pmd/pmd.xml',
                 'https://raw.githubusercontent.com/Monits/static-code-analysis-plugin/staging/defaults/pmd/pmd-android.xml' ]

    // Since 2.2.0
    androidLintConfig = 'https://raw.githubusercontent.com/Monits/static-code-analysis-plugin/staging/defaults/android/android-lint.xml'

    // Since 2.0.0
    sourceSetConfig {
        test { // or the name of any other sourceset
            // use a more relaxed ruleset
            checkstyleRules = 'config/checkstyle/test-checkstyle.xml'
            findbugsExclude = 'config/findbugs/test-findbugs.xml'
            pmdRules = [ 'config/pmd/test-pmd.xml',
                         'https://raw.githubusercontent.com/Monits/static-code-analysis-plugin/staging/defaults/pmd/pmd-android.xml' ]
        }
    }
}

android {
    compileSdkVersion 25
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "edu.ksu.cs.benign"
        minSdkVersion 17
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
}

Thanks

Default config for PMD fails under Gradle 2.3

* What went wrong:
Execution failed for task ':commons:pmd'.
> java.lang.IllegalArgumentException: Unable to find referenced rule CommentDefaultAccessModifier; perhaps the rule name is mispelled?

Prepare for Gradle 4.0

ModuleDependency.getConfiguration() has been deprecated and is scheduled to be removed in Gradle 4.0. Use ModuleDependency.getTargetConfiguration() instead.
        at org.gradle.api.internal.artifacts.dependencies.AbstractModuleDependency.getConfiguration(AbstractModuleDependency.java:57)
        at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency_Decorated.getConfiguration(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor117.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaBeanProperty.getProperty(MetaBeanProperty.java:59)
        at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.getProperty(BeanDynamicObject.java:213)
        at org.gradle.internal.metaobject.BeanDynamicObject.getProperty(BeanDynamicObject.java:156)
        at org.gradle.internal.metaobject.CompositeDynamicObject.getProperty(CompositeDynamicObject.java:55)
        at org.gradle.internal.metaobject.AbstractDynamicObject.getProperty(AbstractDynamicObject.java:60)
        at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency_Decorated.getProperty(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:50)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296)
        at com.monits.gradle.sca.StaticCodeAnalysisPlugin$_addDepsButModulesToScaconfig_closure10$_closure33.doCall(StaticCodeAnalysisPlugin.groovy:201)

Issue running SpotBugs on 3.0.0

When using AGP 3.6.0 + Gradle 5.6.4 I can't run SpotBugs task successfully.

The following error gets thrown on a normal build task:
(Caused by: org.gradle.api.InvalidUserDataException: No classes configured for SpotBugs analysis.)

> Task :contact-tracing-ble:spotbugsMain FAILED

> Task :app:lint
Ran lint on variant debug: 3 issues found
Ran lint on variant release: 3 issues found
Wrote HTML report to file:///Users/saguilera/Projects/build/fury_covid-android/app/reports/lint-results.html
Wrote XML report to file:///Users/saguilera/Projects/build/fury_covid-android/app/reports/lint-results.xml

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':contact-tracing-ble:spotbugsMain'.
> No classes configured for SpotBugs analysis.

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':contact-tracing-ble:spotbugsMain'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:166)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:163)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:156)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
        at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
        at org.gradle.api.internal.tasks.execution.StartSnapshotTaskInputsBuildOperationTaskExecuter.execute(StartSnapshotTaskInputsBuildOperationTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: org.gradle.api.InvalidUserDataException: No classes configured for SpotBugs analysis.
        at com.github.spotbugs.internal.spotbugs.SpotBugsSpecBuilder.<init>(SpotBugsSpecBuilder.java:48)
        at com.github.spotbugs.SpotBugsTask.generateSpec(SpotBugsTask.java:292)
        at com.github.spotbugs.SpotBugsTask.run(SpotBugsTask.java:276)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:49)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:717)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:684)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$5.run(ExecuteActionsTaskExecuter.java:476)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:461)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:444)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:93)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:237)
        at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:33)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:58)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:33)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:39)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
        at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:35)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:45)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:31)
        at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:208)
        at org.gradle.internal.execution.steps.CacheStep.executeAndStoreInCache(CacheStep.java:187)
        at org.gradle.internal.execution.steps.CacheStep.lambda$executeWithCache$2(CacheStep.java:110)
        at org.gradle.internal.execution.steps.CacheStep.lambda$executeWithCache$3(CacheStep.java:110)
        at org.gradle.internal.Try$1.apply(Try.java:59)
        at org.gradle.internal.Try$1.apply(Try.java:56)
        at org.gradle.internal.Try$Success.flatMap(Try.java:102)
        at org.gradle.internal.Try.map(Try.java:56)
        at org.gradle.internal.execution.steps.CacheStep.executeWithCache(CacheStep.java:79)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:69)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:45)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
        at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:43)
        at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:32)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:90)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:48)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:69)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:47)
        at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:140)
        ... 35 more

The following issue seems to happen only on projects having the library and kotlin plugins, as it's not occuring if I run a build on the app alone.

I can provide any further info if needed.

Allow separate rulesets for tests

Analyzing testss can be usefull (specially since there are specific rules for testing), but more often than not, one is not as strict with our coding standard on tests as on main code (think of confusing ternary, empty catch, etc.).

Having the ability to optionaly define a separate ruleset for Checkstyle, PMD and Findbugs for test resources would be most useful.

The default should still be to use the same everywhere for backwards compatibility.

Support Kotlin

PMD, CPD and Spotbugs (when compiling for the JVM) should all support Kotlin.

Additional tools such as detekt or ktlint may be considered for automatic application.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.