Easy setup of static analysis tools for Android and Java projects.

Overview

[DEPRECATED] Gradle static analysis plugin

⚠️ A fork of this project is maintained at https://github.com/GradleUp/static-analysis-plugin/ Please migrate by using com.gradleup.static-analysis plugin id instead.

Bintray

A Gradle plugin to easily apply the same setup of static analysis tools across different Android, Java or Kotlin projects.

Supports Task Configuration Avoidance so that you have zero overhead in build speeds when you use this plugin!

Description

Gradle supports many popular static analysis (Checkstyle, PMD, FindBugs, etc) via a set of built-in plugins. Using these plugins in an Android module will require an additional setup to compensate for the differences between the model adopted by the Android plugin compared to the the Java one.

The gradle-static-analysis-plugin aims to provide:

  • flexible, configurable penalty strategy for builds
  • easy, Android-friendly integration for all static analysis
  • convenient way of sharing same setup across different projects
  • healthy, versionable and configurable defaults

Supported tools

The plugin supports various static analysis tools for Java, Kotlin and Android projects:

Please note that the tools availability depends on the project the plugin is applied to. For more details please refer to the supported tools page.

Tools in-consideration

  • CPD (Duplicate Code Detection) #150
  • error-prone #151
  • Jetbrains IDEA Inspections #152

For all tools in consideration, please refer to issues.

Out-of-the-box support for Android projects

Android projects use a Gradle model that is not compatible with the Java one, supported by the built-in static analysis tools plugins. Applying gradle-static-analysis-plugin to your Android project will make sure all the necessary tasks are created and correctly configured without any additional hassle.

Add the plugin to your project

Apply the plugin from jCenter as a classpath dependency

buildscript {
    repositories {
       jcenter()
    }
    dependencies {
        classpath 'com.novoda:gradle-static-analysis-plugin:1.2'
    }
}

apply plugin: 'com.novoda.static-analysis'

or from the Gradle Plugins Repository:

plugins {
    id 'com.novoda.static-analysis' version '1.2'
}

Simple usage

A typical configuration for the plugin will look like:

staticAnalysis {
    penalty {
        maxErrors = 0
        maxWarnings = 0
    }
    checkstyle { }
    pmd { }
    findbugs { }
    spotbugs { }
    detekt { }
    lintOptions { }
}

This will enable all the tools with their default settings and create evaluateViolations task. Running ./gradlew evaluateViolations task will run all configured tools and print the reports to console. For more advanced configurations, please refer to the advanced usage and to the supported tools pages.

Sample app

There are two sample Android projects available, one consisting of a regular app - available here - and the other comprising a multi-module setup available here. Both sample projects showcase a setup featuring Checkstyle, FindBugs, SpotBugs, PMD, Lint, Ktlint and Detekt.

Snapshots

CI status Download from Bintray

Snapshot builds from develop are automatically deployed to a repository that is not synced with JCenter. To consume a snapshot build add an additional maven repo as follows:

repositories {
    maven {
        url 'https://dl.bintray.com/novoda-oss/snapshots/'
    }
}

You can find the latest snapshot version following this link.

Roadmap

This project is routinely used by many Novoda projects and by other external projects with no known critical issues.

Future improvements and new tool integrations can be found on the repository's issue tracker.

Comments
  • Upgrade Gradle to 5.1.1

    Upgrade Gradle to 5.1.1

    The current used version is 4.10.2 https://github.com/novoda/gradle-static-analysis-plugin/blob/master/sample-multi-module/gradle/wrapper/gradle-wrapper.properties#L3

    It would be great to ensure that the plugin supports the latest 5.x available Gradle version, including the sample applications.

    opened by zegnus 16
  • Updated KtLintConfigurator to check for new report file name for #201.

    Updated KtLintConfigurator to check for new report file name for #201.

    Currently this plugin won't support version 9.0.0+ from the ktlint-gradle plugin: #201

    This PR resolves it by:

    • Adds version 9.0.0 to the integration tests, and updated them to make sure we were showing the right config for the version.
    • Added an if/else statement that handles the renamed property, and will now also throw a more relevant error if it were to change again.
    • Updated the gradle version to 5.x because that's required by the latest ktlint-gradle plugin.
    • Updated the sample app to point to version 9.0.0

    Version 5.6.2 might be a larger jump than necessary, but I wasn't sure how to determine what a good change was. For ktlint-gradle the minimum supported version is 5.4.1, so let me know if we should use that instead.

    Validated by updating to 9.0.0 in the sample app and ensuring that runs, as well as running all of the tests locally.

    opened by AdamMc331 15
  • Make evaluateViolations task run for specific buildVariant

    Make evaluateViolations task run for specific buildVariant

    When running evaluateViolations in a project with multiple buildFlavors. The task compile all the buildVariants even if we're running the build for a specific buildVariant. Because of this behavior it's increases the time it's take for all the checks to run even on small projects.

    enhancement 
    opened by bitsydarel 15
  • Detekt RC9 integration

    Detekt RC9 integration

    Detekt Gradle Plugin was rewritten recently. It now extends from CodeQualityTask. This PR fixes the integration with the new version. From now on, I am not expecting the integration to be broken anymore.

    Changes in the new plugin:

    • profile is gone. Since we gather user's configurations, this is not directly affecting us. But affects the tests drastically. That's why a copied version of the tests are added with the configuration. I could've been more intelligent on this but 1 test is not applicable so I decided to have a new copy.
    • detektCheck task is renamed to detekt
    • new reports property is available mimicking other Java tools. I was hoping they would extend from Reporting from gradle. It is a public API. This would make our integration even more solid. :) But you cannot have all the nice things. Currently depending on having this property availability.

    Fixes #131

    opened by tasomaniac 14
  • Create separate evaluation tasks per tool

    Create separate evaluation tasks per tool

    Problem

    The Static Analysis Plugin serves two main purposes:

    1. A common language to configure and collect results from static analysis tools
    2. A task (evaluateViolations) to execute all those analyses in one go.

    The problem is that some projects may be interested in those static analysis tasks separately per tool. For example, to parallelise them in CI pipelines or to defer the execution of the most expensive ones to later build stages.

    This was raised here too https://github.com/novoda/gradle-static-analysis-plugin/issues/164

    Solution

    This is my naive approach to the problem. It creates separate tasks per analysis tool:

    evaluateLintViolations
    evaluatePMDViolations
    evaluateFindbugsViolations
    evaluateCheckstyleViolations
    evaluateDetektViolations
    evaluateKtLintViolations
    

    and makes the original evaluateViolations task depends on all of them.

    The solution Works For Me but it's incomplete existing tests pass, but there are no new ones If this feature is considered interesting for the project I'm happy to pair to make it better.

    Generated tasks

    These are the tasks generated for the sample project inside this repo before and after the change. Notice the new evaluate<TOOL>Violation tasks. (Sorry for the hacks to align code blocks side by side on markdown :P)

    Before After
    Verification tasks
    ------------------
    check
    checkstyleAndroidTest
    checkstyleAndroidTestDebug
    checkstyleDebug
    checkstyleMain
    checkstyleRelease
    checkstyleTest
    checkstyleTestDebug
    checkstyleTestRelease
    collectcheckstyleDebugAndroidTestVariantViolations
    collectcheckstyleDebugUnitTestVariantViolations
    collectcheckstyleDebugVariantViolations
    collectpmdDebugAndroidTestVariantViolations
    collectpmdDebugUnitTestVariantViolations
    collectpmdDebugVariantViolations
    connectedAndroidTest
    connectedCheck
    connectedDebugAndroidTest
    detekt
    detektBaseline
    detektGenerateConfig
    detektIdeaFormat
    detektIdeaInspect
    deviceAndroidTest
    deviceCheck
    evaluateViolations
    findbugsDebug
    findbugsDebugAndroidTest
    findbugsDebugUnitTest
    ktlintCheck
    ktlintDebugCheck
    ktlintReleaseCheck
    lint
    lintDebug
    lintRelease
    pmdAndroidTest
    pmdAndroidTestDebug
    pmdDebug
    pmdMain
    pmdRelease
    pmdTest
    pmdTestDebug
    pmdTestRelease
    test
    testDebugUnitTest
    testReleaseUnitTest
    
    .
    .
    .
    .
    .
    .
    Verification tasks
    ------------------
    check
    checkstyleAndroidTest
    checkstyleAndroidTestDebug
    checkstyleDebug
    checkstyleMain
    checkstyleRelease
    checkstyleTest
    checkstyleTestDebug
    checkstyleTestRelease
    collectcheckstyleDebugAndroidTestVariantViolations
    collectcheckstyleDebugUnitTestVariantViolations
    collectcheckstyleDebugVariantViolations
    collectpmdDebugAndroidTestVariantViolations
    collectpmdDebugUnitTestVariantViolations
    collectpmdDebugVariantViolations
    connectedAndroidTest
    connectedCheck
    connectedDebugAndroidTest
    detekt
    detektBaseline
    detektGenerateConfig
    detektIdeaFormat
    detektIdeaInspect
    deviceAndroidTest
    deviceCheck
    evaluateCheckstyleViolations
    evaluateDetektViolations
    evaluateFindbugsViolations
    evaluateKtLintViolations
    evaluateLintViolations
    evaluatePMDViolations
    evaluateViolations
    findbugsDebug
    findbugsDebugAndroidTest
    findbugsDebugUnitTest
    ktlintCheck
    ktlintDebugCheck
    ktlintReleaseCheck
    lint
    lintDebug
    lintRelease
    pmdAndroidTest
    pmdAndroidTestDebug
    pmdDebug
    pmdMain
    pmdRelease
    pmdTest
    pmdTestDebug
    pmdTestRelease
    test
    testDebugUnitTest
    testReleaseUnitTest
    

    Now we can execute individual evaluate<TOOL>Violations tasks separately or the main evaluateViolations which triggers all the others.

    Sample: evaluateCheckstyleViolations

    If we choose to execute only an individual task, it runs only its tool analysis and produces only results for itself:

    ./gradlew evaluateCheckstyleViolations
    
    > Task :app:evaluateCheckstyleViolations
    
    Violations found (1 errors, 0 warnings)
    
    > Checkstyle violations found (1 errors, 0 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/checkstyle/main.html
    
    BUILD SUCCESSFUL in 1s
    3 actionable tasks: 2 executed, 1 up-to-date
    

    EvaluateViolations

    For existing users changes in this PR are transparent. They'll see individual tasks reporting messages, but the main one will remain exactly the same. Executing evaluateViolations with the same project will produce:

    ./gradlew evaluateViolations
    Starting a Gradle Daemon, 1 busy and 1 stopped Daemons could not be reused, use --status for details
    
    > Configure project :app
    
    > Task :app:evaluateCheckstyleViolations
    
    Violations found (1 errors, 0 warnings)
    
    > Checkstyle violations found (1 errors, 0 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/checkstyle/main.html
    
    
    > Task :app:evaluateDetektViolations
    
    Violations found (0 errors, 26 warnings)
    
    > Detekt violations found (0 errors, 26 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/detekt/detekt.html
    
    
    > Task :app:evaluateFindbugsViolations
    
    Violations found (0 errors, 2 warnings)
    
    > Findbugs violations found (0 errors, 2 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/findbugs/debug.html
    
    
    > Task :app:lint
    Ran lint on variant release: 1 issues found
    Ran lint on variant debug: 1 issues found
    Wrote HTML report to file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/lint-results.html
    Wrote XML report to file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/lint-results.xml
    
    > Task :app:evaluateLintViolations
    
    Violations found (1 errors, 0 warnings)
    
    > Lint violations found (1 errors, 0 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/lint-results.html
    
    
    > Task :app:evaluatePMDViolations
    
    Violations found (1 errors, 13 warnings)
    
    > PMD violations found (1 errors, 13 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/pmd/main.html
    
    (...)
    
    > Task :app:evaluatektlintViolations
    
    Violations found (37 errors, 0 warnings)
    
    > ktlint violations found (37 errors, 0 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/ktlint/ktlintMainSourceSetCheck.html
    
    
    > Task :app:evaluateViolations
    
    Violations found (40 errors, 41 warnings)
    
    > Checkstyle violations found (1 errors, 0 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/checkstyle/main.html
    > Detekt violations found (0 errors, 26 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/detekt/detekt.html
    > Findbugs violations found (0 errors, 2 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/findbugs/debug.html
    > Lint violations found (1 errors, 0 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/lint-results.html
    > PMD violations found (1 errors, 13 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/pmd/main.html
    > ktlint violations found (37 errors, 0 warnings). See the reports at:
    - file:///Users/luisvalle/Developer/workspace/gradle-static-analysis-plugin/sample/app/build/reports/ktlint/ktlintMainSourceSetCheck.html
    
    BUILD SUCCESSFUL in 3s
    61 actionable tasks: 15 executed, 46 up-to-date
    
    opened by lgvalle 13
  • Change deprecated classesDir for classesDirs

    Change deprecated classesDir for classesDirs

    Note: copy of #170 due to rebase

    classesDir is deprecated in Gradle 4.x and we should use classesDirs instead as Gradle 5.x removes this property.

    Without this change, Gradle complains about it if we use Gradle 5.x on the client:

    * What went wrong:
    Could not determine the dependencies of task ':core-java:findbugsMain'.
    > Could not get unknown property 'classesDir' for main classes of type org.gradle.api.internal.tasks.DefaultSourceSetOutput.
    
    

    Fixes #94

    opened by pablisco 12
  • Running tasks from command line

    Running tasks from command line

    When building the project the only static analysis tool check is detekt even when verifying the list of tasks available I don't see findbugs,pmd,checkstyle tasks . Is there's any way to run all the checks ?

    opened by bitsydarel 10
  • Unable to evaluate project with latest version of detekt (1.0.0.RC9)

    Unable to evaluate project with latest version of detekt (1.0.0.RC9)

    See https://github.com/novoda/gradle-static-analysis-plugin/issues/131#issuecomment-421380912 for the correct stacktrace.


    When trying to use the gradle-static-analysis-plugin with the latest version of detekt (1.0.0.RC9), I'm getting this error at the project evaluation stage:

     ▲  xrigau@xrigau-mbp ~/d/pet-project  $ ./gradlew --stacktrace
    Parallel execution is an incubating feature.
    
    > Configure project :app 
    
    Project evaluation failed including an error in afterEvaluate {}.
    java.lang.IllegalStateException: compileSdkVersion is not specified.
            at com.google.common.base.Preconditions.checkState(Preconditions.java:456)
            at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:590)
            at com.android.build.gradle.BasePlugin.lambda$null$3(BasePlugin.java:555)
            at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:81)
            at com.android.build.gradle.BasePlugin.lambda$createTasks$4(BasePlugin.java:551)
            at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
            at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
            at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
            at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
            at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
            at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
            at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
            at com.sun.proxy.$Proxy24.afterEvaluate(Unknown Source)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:76)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:70)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.access$100(LifecycleProjectEvaluator.java:34)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$ConfigureProject.run(LifecycleProjectEvaluator.java:110)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:50)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:667)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:136)
            at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
            at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62)
            at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38)
            at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(DefaultGradleLauncher.java:249)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
            at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:167)
            at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:126)
            at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:109)
            at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:78)
            at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:75)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:152)
            at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:100)
            at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:75)
            at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
            at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
            at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(RunAsBuildOperationBuildActionRunner.java:43)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
            at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:49)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:32)
            at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
            at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:80)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53)
            at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:57)
            at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:32)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
            at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
            at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:64)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:29)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:59)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:44)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:45)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:30)
            at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            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:122)
            at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
            at java.lang.Thread.run(Thread.java:748)
    
    
    FAILURE: Build failed with an exception.
    
    * Where:
    Script '/Users/xrigau/development/pet-project/gradle/static-analysis.gradle' line: 2
    
    * What went wrong:
    A problem occurred evaluating script.
    > org.gradle.api.tasks.TaskContainer.register(Ljava/lang/String;Ljava/lang/Class;Lorg/gradle/api/Action;)Lorg/gradle/api/tasks/TaskProvider;
    
    * Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Exception is:
    org.gradle.api.GradleScriptException: A problem occurred evaluating script.
            at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:92)
            at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:204)
            at org.gradle.configuration.DefaultScriptTarget.addConfiguration(DefaultScriptTarget.java:74)
            at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:209)
            at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:61)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
            at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:58)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyScript(DefaultObjectConfigurationAction.java:109)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$000(DefaultObjectConfigurationAction.java:38)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$1.run(DefaultObjectConfigurationAction.java:68)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:143)
            at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:46)
            at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.java:34)
            at org.gradle.api.Script$apply.callCurrent(Unknown Source)
            at build_8npc8zy817oppb2dze4og81lc.run(/Users/xrigau/development/pet-project/app/build.gradle:66)
            at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:90)
            at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:204)
            at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77)
            at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:209)
            at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:61)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
            at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:58)
            at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:41)
            at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
            at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:64)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.access$100(LifecycleProjectEvaluator.java:34)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$ConfigureProject.run(LifecycleProjectEvaluator.java:110)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:50)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:667)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:136)
            at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
            at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62)
            at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38)
            at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(DefaultGradleLauncher.java:249)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
            at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:167)
            at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:126)
            at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:109)
            at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:78)
            at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:75)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:152)
            at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:100)
            at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:75)
            at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
            at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
            at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(RunAsBuildOperationBuildActionRunner.java:43)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
            at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:49)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:32)
            at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
            at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:80)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53)
            at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:57)
            at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:32)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
            at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
            at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:64)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:29)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:59)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:44)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:45)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:30)
            at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            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:122)
            at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
            at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    Caused by: java.lang.NoSuchMethodError: org.gradle.api.tasks.TaskContainer.register(Ljava/lang/String;Ljava/lang/Class;Lorg/gradle/api/Action;)Lorg/gradle/api/tasks/TaskProvider;
            at io.gitlab.arturbosch.detekt.DetektPlugin.createAndConfigureDetektTask(DetektPlugin.kt:29)
            at io.gitlab.arturbosch.detekt.DetektPlugin.apply(DetektPlugin.kt:21)
            at io.gitlab.arturbosch.detekt.DetektPlugin.apply(DetektPlugin.kt:12)
            at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:42)
            at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:50)
            at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:164)
            at org.gradle.api.internal.plugins.DefaultPluginManager.access$200(DefaultPluginManager.java:47)
            at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:252)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
            at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:144)
            at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:125)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:120)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:38)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:86)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:143)
            at org.gradle.groovy.scripts.DefaultScript.apply(DefaultScript.java:128)
            at org.gradle.api.Script$apply.callCurrent(Unknown Source)
            at static_analysis_703euohp5bpp852g9bj4garzs.run(/Users/xrigau/development/pet-project/gradle/static-analysis.gradle:2)
            at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:90)
            ... 111 more
    

    I guess the compileSdkVersion is not specified error is just a side-effect of the main error (since the compileSdkVersion is being set in the android configuration).

    The fallback solution for now is to revert back to the previous version of detekt (1.0.0.RC8).

    bug 
    opened by xrigau 9
  • Detekt configuration fails with RC6-4

    Detekt configuration fails with RC6-4

    Breaking changes with https://github.com/arturbosch/detekt/pull/719. systemOrDefaultProfile() is no longer available.

    * Where:
    Script '.../gradle-static-analysis-plugin/sample-multi-module/team-props/static-analysis.gradle' line: 36
    
    * What went wrong:
    A problem occurred evaluating script.
    > Could not find method systemOrDefaultProfile() for arguments [] on DetektExtension(version='latest.release', debug=false, profile='main', ideaExtension=IdeaExtension(path=null, codeStyleScheme=null, inspectionsProfile=null, report=null, mask='*.kt'), profiles=[ProfileExtension(name='main', input=.../gradle-static-analysis-plugin/sample-multi-module/app/src/main/java, config=.../gradle-static-analysis-plugin/sample-multi-module/team-props/detekt-config.yml, configResource=/default-detekt-config.yml, filters=.*test.*,.*/resources/.*,.*/tmp/.*, ruleSets=null, output=.../gradle-static-analysis-plugin/sample-multi-module/app/build/reports/detekt, outputName=null, baseline=null, parallel=false, disableDefaultRuleSets=false)]) of type io.gitlab.arturbosch.detekt.extensions.DetektExtension.
    
    opened by takecare 9
  • evaluateViolations doesn't stop w/ errors?

    evaluateViolations doesn't stop w/ errors?

    Not sure how to debug this so I'm hoping someone has seen this. This is using the latest 1.2 version of the plugin.

    When I run ./gradlew evaluateViolations, it claims the build is successful. When I do a --dry-run, it seems to run the correct tasks: :app:ktlintDebugSourceSetCheck SKIPPED :app:collectKtlintDebugViolations SKIPPED :app:ktlintMainSourceSetCheck SKIPPED :app:collectKtlintMainViolations SKIPPED :app:ktlintStandardDebugSourceSetCheck SKIPPED :app:collectKtlintStandardDebugViolations SKIPPED :app:ktlintStandardSourceSetCheck SKIPPED :app:collectKtlintStandardViolations SKIPPED :app:collectKtlintStandardDebugVariantViolations SKIPPED

    However, it's not failing properly. E.g., when I run detekt manually via ./gradlew detekt, there are a lot of errors. The config is pretty standard with the failure config like this:

    staticAnalysis {
        penalty {
            maxErrors = 0
            maxWarnings = 0
        }
    
    opened by kenyee 8
  • Make the plugin Gradle Kotlin DSL friendly

    Make the plugin Gradle Kotlin DSL friendly

    Currently, we are depending on a lot of Groovy features. It works really well since it supports variety of code quality plugins without knowing the internal implementation details of them.

    While keeping this plugin implementation in Groovy, we can make the DSL usage more kotlin friendly.

    enhancement help wanted kotlin 
    opened by tasomaniac 8
Releases(1.2)
Owner
Novoda
Novoda
⌨️ A tool that gives you a massive head start when building Compose based apps. It saves you from time-consuming setup and configuration

⌨️ A tool that gives you a massive head start when building Compose based apps. It saves you from time-consuming setup and configuration

theapache64 467 Dec 23, 2022
Yet another static code analyzer for malicious Android applications

Androwarn Yet another static code analyzer for malicious Android applications Description Androwarn is a tool whose main aim is to detect and warn the

Thomas D. 422 Dec 28, 2022
Static recyclerview dan kalkulator sederhana, dibuat dengan menggunakan kotlin

Static Recyclerview Using Kotlin Static recyclerview dan kalkulator sederhana, dibuat dengan menggunakan kotlin. Screenshot License Copyright (C) 2021

AR Hakim 2 Dec 14, 2021
FlowDroid Static Data Flow Tracker

FlowDroid Data Flow Analysis Tool This repository hosts the FlowDroid data flow analysis tool. FlowDroid statically computes data flows in Android app

Secure Software Engineering Group at Paderborn University and Fraunhofer IEM 801 Dec 28, 2022
Android Package Inspector - dynamic analysis with api hooks, start unexported activities and more. (Xposed Module)

Inspeckage - Android Package Inspector Inspeckage is a tool developed to offer dynamic analysis of Android applications. By applying hooks to function

acpm 2.5k Jan 8, 2023
ArchGuard is a architecture governance tool which can analysis architecture in container, component, code level, create architecure fitness functions, and anaysis system dependencies..

ArchGuard backend ArchGuard is a architecture governance tool which can analysis architecture in container, component, code level, database, create ar

ArchGuard 446 Dec 20, 2022
Veyron - Covid 19 analysis using OWID data

veyron Covid 19 & Vaccine history representation by country. The app was designe

Nino Matassa 0 Feb 10, 2022
Mole Analysis Use Case for HMS ML Kit Custom Model

Mole Analysis Mole Analysis Use Case for HMS ML Kit Custom Model Introduction What is Melanoma? Melanoma is the most serious among skin cancers becaus

null 15 Aug 23, 2022
A Simple and Minimal Quotes Android Application to demonstrate the Modern Android Development tools

Quotee Android ?? A Simple and Minimal Quotes Android Application to demonstrate the Modern Android Development tools. Developed with ❤️ by Aminullah

null 12 Aug 24, 2022
A simple Android project using modern Android development tools and libraries.

A simple Android project using modern Android development tools and libraries.

Ahmed Sumeiry 0 Feb 3, 2022
Alkaa is a to-do application project to study the latest components, architecture and tools for Android development

Alkaa (begin, start in Finnish) is a to-do application project to study the latest components, architecture and tools for Android development. The project evolved a lot since the beginning is available on Google Play! ❤️

Igor Escodro 851 Jan 9, 2023
A multi-modular Gradle project that encapsulates various modules to learn Kotlin language, tools and frameworks.

KotlinLearn This is a gradle project for the sole basis of exploring and learning Kotlin language, tools and frameworks. The root project wil encapsul

Victor Kiprop 2 Oct 10, 2021
An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly.

An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly. The main aim of this repository is to help students who are learning Android Development or preparing for an Android Developer role-based job.

Mimo Patra 15 Dec 29, 2022
A modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs

Smack About Smack is an open-source, highly modular, easy to use, XMPP client library written in Java for Java SE compatible JVMs and Android. Being a

Ignite Realtime 2.3k Dec 28, 2022
A modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs

Smack About Smack is an open-source, highly modular, easy to use, XMPP client library written in Java for Java SE compatible JVMs and Android. Being a

Ignite Realtime 2.3k Dec 21, 2021
Shreyas Patil 2.1k Dec 30, 2022
📒 NotyKT is a complete 💎Kotlin-stack (Backend + Android) 📱 application built to demonstrate the use of Modern development tools with best practices implementation🦸.

NotyKT ??️ NotyKT is the complete Kotlin-stack note taking ??️ application ?? built to demonstrate a use of Kotlin programming language in server-side

Shreyas Patil 1.4k Jan 8, 2023
Inspection tools for native android apps

InspectElement This project was just an exercise based on Android Developer Assistant, I have used AccessibilityService for inspecting, You can change

AmirHosseinAghajari 4 Sep 9, 2022
The application is developed using Modern tools/libraries with UI implementations with Navigation architecture

This is mobile application which actual users will interact with. The application is developed using Modern tools/libraries with UI implementations with Navigation architecture. It connects with the Dog API to retrieve data. more detail of api can be found here - https://dog.ceo/dog-api/documentation/random This project a basic example of Retrofit and mvvm

null 4 Feb 3, 2022