Coder Social home page Coder Social logo

evant / android-retrolambda-lombok Goto Github PK

View Code? Open in Web Editor NEW
175.0 175.0 7.0 1.98 MB

A modified version of lombok ast that allows lint to run on java 8 sources without error.

License: MIT License

Java 99.61% CSS 0.11% HTML 0.12% JavaScript 0.16%

android-retrolambda-lombok's Introduction

Hi there πŸ‘‹

evant = Eva New Technologyβ„’

android-retrolambda-lombok's People

Contributors

askoning avatar cdrussell avatar evant avatar grootjans avatar rspilker avatar rzwitserloot avatar tnorbye avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-retrolambda-lombok's Issues

UnsupportedOperationException: Unknown ASTNode child: IntersectionCastTypeReference

Using retrolambda 3.2.5 and lombok.ast 0.2.3.a2.
I get an exception when running ./gradlew lint whenever I have a class that uses an intersection cast:

Failed converting ECJ parse tree to Lombok for file A.java
java.lang.UnsupportedOperationException: Unknown ASTNode child: IntersectionCastTypeReference
        at lombok.ast.ecj.EcjTreeVisitor.visitOther(EcjTreeVisitor.java:376)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:372)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:217)
        ...

Class to reproduce problem:

class A {
    void a() {
        b((Serializable & Cloneable) new Object());
    }

    <T extends Serializable & Cloneable> void b(T a) {
    }
}

Test to reproduce the problem:

import org.eclipse.jdt.internal.compiler.CompilationResult;
import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies;
import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
import org.eclipse.jdt.internal.compiler.batch.CompilationUnit;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.parser.Parser;
import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
import org.eclipse.jdt.internal.compiler.problem.ProblemReporter;
import org.junit.Test;

import static org.eclipse.jdt.internal.compiler.util.Util.UTF_8;

public class EcjTreeConverterTest {

    @Test
    public void shouldParseClassWithIntersectionCastTypeReference() {
        String code =
            "class A {\n" +
                "\n" +
                "void a() {\n" +
                "b((Serializable & Cloneable) new Object());\n" +
                "}\n" +
                "\n" +
                "<T extends Serializable & Cloneable> void b(T a) {\n" +
                "}\n" +
                "}";
        CompilationUnit sourceUnit = new CompilationUnit(code.toCharArray(), "A.java", "UTF-8");
        CompilationResult compilationResult = new CompilationResult(sourceUnit, 0, 0, 0);
        CompilationUnitDeclaration unitDeclaration = getParser().parse(sourceUnit, compilationResult);

        lombok.ast.ecj.EcjTreeConverter converter = new lombok.ast.ecj.EcjTreeConverter();
        converter.visit(code, unitDeclaration);
    }

    private Parser getParser() {
        CompilerOptions options = createCompilerOptions();
        ProblemReporter problemReporter = new ProblemReporter(
            DefaultErrorHandlingPolicies.exitOnFirstError(),
            options,
            new DefaultProblemFactory());
        Parser mParser = new Parser(problemReporter,
            options.parseLiteralExpressionsAsConstants);
        mParser.javadocParser.checkDocComment = false;
        return mParser;
    }

    public static CompilerOptions createCompilerOptions() {
        CompilerOptions options = new CompilerOptions();
        long languageLevel = ClassFileConstants.JDK1_8;
        options.complianceLevel = languageLevel;
        options.sourceLevel = languageLevel;
        options.targetJDK = languageLevel;
        options.originalComplianceLevel = languageLevel;
        options.originalSourceLevel = languageLevel;
        options.inlineJsrBytecode = true; // >1.5
        options.parseLiteralExpressionsAsConstants = true;
        options.defaultEncoding = UTF_8;
        options.generateClassFiles = false;
        options.processAnnotations = true;
        return options;
    }
}

I guess the problem could be resolved by adding support for traversing IntersectionCastTypeReference in EcjTreeVisitor.

Android Lint claims NewApi for try-with-resources

With retrolambda and android lint, I got "Try-with-resources requires API level 19 (current min is 14)" on below line.

try (Realm realm = getRealm()) {

But to suppress this requires ignoring all NewApi usage incl. other than try-with-resources.
Is there any workaround for this..?

java.lang.ClassCastException: lombok.ast.Block cannot be cast to lombok.ast.Expression

I tried it with latest versione of lini (24.2.2, but also on 24.1.0) and I obtain:

java.lang.ClassCastException: lombok.ast.Block cannot be cast to lombok.ast.Expression
at lombok.ast.ecj.EcjTreeConverter$2.visitReturnStatement(EcjTreeConverter.java:1181)
at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:96)
at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:206)
at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:147)
at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:193)
at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:163)
at lombok.ast.ecj.EcjTreeConverter.toBlock(EcjTreeConverter.java:308)
at lombok.ast.ecj.EcjTreeConverter.access$1500(EcjTreeConverter.java:52)
at lombok.ast.ecj.EcjTreeConverter$2.visitSwitchStatement(EcjTreeConverter.java:1030)
at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:72)
at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:206)
at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:147)
at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:193)
at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:163)
at lombok.ast.ecj.EcjTreeConverter.toBlock(EcjTreeConverter.java:308)
at lombok.ast.ecj.EcjTreeConverter.access$1500(EcjTreeConverter.java:52)
at lombok.ast.ecj.EcjTreeConverter$2.visitMethodDeclaration(EcjTreeConverter.java:1152)

Retrolambda Lombok breaks lint

Current dependencies:

  • Gradle: classpath 'com.android.tools.build:gradle:2.2.3'
  • Retrolambda: classpath 'me.tatarka:gradle-retrolambda:3.6.1'
  • Retrolambda Lombok: classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'

Logs of ./gradlew lint

Unexpected failure during lint analysis of LauncherActivity.java 
(this is a bug in lint or one of the libraries it depends on)

AbortCompilation:ProblemHandler.handle(ProblemHandler.java:159)
<-ProblemHandler.handle(ProblemHandler.java:226)
<-ProblemReporter.handle(ProblemReporter.java:2393)
<-ProblemReporter.isClassPathCorrect(ProblemReporter.java:4761)

Toast created but not shown: did you forget to call show() ?

curView.setOnClickListener(v -> {
     Toast.makeText(mContext, R.string.use, Toast.LENGTH_SHORT).show();
});

screen shot 2016-04-29 at 11 47 34 am

when I use new OnClickListener or extract a method showToast(), it's normal

    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'me.tatarka:gradle-retrolambda:3.2.5' //lambda need
    classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
    }
   configurations.classpath.exclude group: 'com.android.tools.external.lombok'

java.lang.ClassNotFoundException

buildscript {
repositories {
maven { url 'http://132.126.1.70:8888/nexus/content/groups/public' }
//maven { url 'http://maven.oschina.net/content/groups/public/' }
maven { url 'http://jcenter.bintray.com' }

    mavenCentral()
}
dependencies {
    classpath "${rootProject.DEP_GRADLE_PLUGIN}"

    classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
}

configurations.classpath.exclude group: 'com.android.tools.external.lombok'

}
stacktrack:
Failed converting ECJ parse tree to Lombok for file /Volumes/Doc/sources/android/WePiEE/wepiee-app-apk/src/androidTest/java/cn/cksweb/appexp/ApplicationTest.java
java.lang.NoClassDefFoundError: org/eclipse/jdt/internal/compiler/ast/ASTNode
at com.android.tools.lint.EcjParser.parseJava(EcjParser.java:411)
at com.android.tools.lint.client.api.JavaVisitor.visitFile(JavaVisitor.java:245)
at com.android.tools.lint.client.api.LintDriver.checkJava(LintDriver.java:1503)
at com.android.tools.lint.client.api.LintDriver.runFileDetectors(LintDriver.java:1037)
at com.android.tools.lint.client.api.LintDriver.checkProject(LintDriver.java:882)
at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:433)
at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:374)
at com.android.tools.lint.LintCliClient.run(LintCliClient.java:128)
at com.android.build.gradle.internal.LintGradleClient.run(LintGradleClient.java:112)
at com.android.build.gradle.internal.LintGradleClient$run.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at com.android.build.gradle.tasks.Lint.runLint(Lint.groovy:203)
at com.android.build.gradle.tasks.Lint.this$5$runLint(Lint.groovy)
at com.android.build.gradle.tasks.Lint$this$5$runLint$5.callCurrent(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)
at com.android.build.gradle.tasks.Lint.lintSingleVariant(Lint.groovy:178)
at com.android.build.gradle.tasks.Lint$lintSingleVariant$4.callCurrent(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)
at com.android.build.gradle.tasks.Lint.lint(Lint.groovy:80)
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:497)
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:579)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
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:305)
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.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.Main.doAction(Main.java:33)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
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:497)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jdt.internal.compiler.ast.ASTNode
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 85 more

UnsupportedOperationException: Unknown ASTNode child: LambdaExpression

From evant/gradle-retrolambda#140.

Using:

  • Android studio 1.4.1
  • Android gradle plugin 1.3.1
  • Gradle 2.8

I get an error from lint when I try to run ./gradle assemble or ./gradlew lint
I'm using gradle 2.8 and android gradle plugin 1.3.1 and this is my build file:

buildscript {
  repositories {
    mavenCentral()
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
  }

  dependencies {
    classpath 'me.tatarka:gradle-retrolambda:3.2.3'
    classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
    classpath 'io.fabric.tools:gradle:1.20.1'
  }

  // Retrolambda/lombok
  configurations.classpath.exclude group: 'com.android.tools.external.lombok'
}

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'io.fabric'

def gitSha = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()
def appVersionName = "0.3.0"
def appVersionCode = 3

android {
  compileSdkVersion 23
  buildToolsVersion "23.0.1"

  defaultConfig {
    applicationId appId
    minSdkVersion 15
    targetSdkVersion 23
    versionCode appVersionCode
    versionName appVersionName
  }

  buildTypes {
    debug {
      buildConfigField "boolean", "DEBUGGING", "true"

      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    staging {
      buildConfigField "boolean", "DEBUGGING", "true"

      signingConfig signingConfigs.release
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    release {
      signingConfig signingConfigs.release

      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

  // Retrolambda
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

repositories {
  mavenCentral()
  maven { url 'https://maven.fabric.io/public' }
}

ext {
  supportLibVersion = '23.1.0'
}

dependencies {
  compile "com.android.support:appcompat-v7:${supportLibVersion}"
  compile "com.android.support:support-annotations:${supportLibVersion}"
  compile "com.android.support:design:${supportLibVersion}"

  // Base
  compile project(':api')
  compile 'com.jakewharton:butterknife:7.0.1'
  compile 'com.jakewharton.timber:timber:4.1.0@aar'
  compile 'de.greenrobot:eventbus:2.4.0'

  debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
  stagingCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
  releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'

  // UI
  compile 'fr.avianey.com.viewpagerindicator:library:2.4.1@aar'
  compile('com.mikepenz:materialdrawer:4.4.4@aar') { transitive = true }
  compile 'com.squareup.picasso:picasso:2.5.2'
  compile 'com.sothree.slidinguppanel:library:3.2.0'

  // Management
  compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') { transitive = true; }

  testCompile 'junit:junit:4.12'
  testCompile "org.mockito:mockito-core:1.10.19"
  testCompile('com.squareup.assertj:assertj-android:1.1.0') {
    exclude group: 'com.android.support', module: 'support-annotations'
  }
}

and my lint.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
  <!-- Retrolambda/lombok -->
  <issue id="NewApi">
    <ignore regexp="Try-with-resources requires API level 19" />
  </issue>
</lint>

If I run ./gradlew assemble I still get a lot of:

Failed converting ECJ parse tree to Lombok for file .../sign_up/SignUpPresenter.java
java.lang.UnsupportedOperationException: Unknown ASTNode child: LambdaExpression
        at lombok.ast.ecj.EcjTreeVisitor.visitOther(EcjTreeVisitor.java:368)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:364)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
        at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
        at lombok.ast.ecj.EcjTreeConverter$2.visitMessageSend(EcjTreeConverter.java:1042)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:156)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
        at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:229)
        at lombok.ast.ecj.EcjTreeConverter.createVariableDefinition(EcjTreeConverter.java:352)
        at lombok.ast.ecj.EcjTreeConverter.toVariableDefinition(EcjTreeConverter.java:305)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:280)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
        at lombok.ast.ecj.EcjTreeConverter.toBlock(EcjTreeConverter.java:397)
        at lombok.ast.ecj.EcjTreeConverter.access$1500(EcjTreeConverter.java:141)
        at lombok.ast.ecj.EcjTreeConverter$2.visitMethodDeclaration(EcjTreeConverter.java:1241)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:152)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
        at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
        at lombok.ast.ecj.EcjTreeConverter$2.createNormalTypeBody(EcjTreeConverter.java:563)
        at lombok.ast.ecj.EcjTreeConverter$2.visitTypeDeclaration(EcjTreeConverter.java:486)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:48)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
        at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
        at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
        at lombok.ast.ecj.EcjTreeConverter$2.visitCompilationUnitDeclaration(EcjTreeConverter.java:441)
        at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:264)
        at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
        at com.android.tools.lint.EcjParser.parseJava(EcjParser.java:412)
        at com.android.tools.lint.client.api.JavaVisitor.visitFile(JavaVisitor.java:245)
        at com.android.tools.lint.client.api.LintDriver.checkJava(LintDriver.java:1503)
        at com.android.tools.lint.client.api.LintDriver.runFileDetectors(LintDriver.java:1037)
        at com.android.tools.lint.client.api.LintDriver.checkProject(LintDriver.java:882)
        at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:433)
        at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:374)
        at com.android.tools.lint.LintCliClient.run(LintCliClient.java:128)
        at com.android.build.gradle.internal.LintGradleClient.run(LintGradleClient.java:112)
        at com.android.build.gradle.internal.LintGradleClient$run.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.android.build.gradle.tasks.Lint.runLint(Lint.groovy:203)
        at com.android.build.gradle.tasks.Lint.this$5$runLint(Lint.groovy)
        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:497)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
        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:182)
        at com.android.build.gradle.tasks.Lint.lintSingleVariant(Lint.groovy:178)
        at com.android.build.gradle.tasks.Lint$lintSingleVariant$3.callCurrent(Unknown Source)
        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:174)
        at com.android.build.gradle.tasks.Lint.lint(Lint.groovy:80)
        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:497)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:227)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209)
        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)
        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:52)
        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.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:62)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
        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)

As @evant said I runed

task printBuildScriptClasspath << {
    println project.buildscript.configurations.classpath.asPath
}

and the output is:

/Users/danielgomez22/.gradle/caches/modules-2/files-2.1/me.tatarka/gradle-retrolambda/3.2.3/f8c72225ddc48f40ec671a985e796256c809e92/gradle-retrolambda-3.2.3.jar:/Users/danielgomez22/.gradle/caches/modules-2/files-2.1/me.tatarka.retrolambda.projectlombok/lombok.ast/0.2.3.a2/e649c244b625ffb9021b3f6debde350a74e46b62/lombok.ast-0.2.3.a2.jar:/Users/danielgomez22/.gradle/caches/modules-2/files-2.1/io.fabric.tools/gradle/1.20.1/f3fc9824abcb0f8681ed019d599232dc4d37e5c2/gradle-1.20.1.jar

Threading annotations hit on lambda, not class or method ref

Here's a minimum representative sample which illustrates the problem:
screen shot 2015-08-31 at 5 49 58 pm

Now this code is 100% contrived. One could imagine doInBackground using an Executor or hell, AsyncTask. But for the purposes of the bug it actually needs no implementation.

For copy/paste:

  @WorkerThread static void doSomething() {}
  static void doInBackground(Runnable r) {}

  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    doInBackground(new Runnable() {
      @Override public void run() {
        doSomething();
      }
    });
    doInBackground(() -> doSomething());
    doInBackground(MainActivity::doSomething);
  }

Now I don't know about the implementation of this library, but it seems like it is exposing the code inside of the lambda to lint as if it were a part of the surrounding method rather than nested in a context similar to an anonymous class. Ideally the behavior would be exactly that as an anonymous class but I don't know if you have all the information needed for that or not.

maven + retrolambda + lint

Hello,

lovely tool! I am wondering if you know how I can run this with maven, and the android maven plugin, that has a built in lint goal

Cheers,
Sakis

Doesn't seem to correctly use modified lombok version

Hooked up everything as specified in the README, but lint still crashes when it encounters Lambda expressions in the AST. My guess is that it's still using the bundled lint version for some reason despite the classpath exclusion. Any ideas?

Failed converting ECJ parse tree to Lombok for file <thefile>
java.lang.UnsupportedOperationException: Unknown ASTNode child: LambdaExpression
    at lombok.ast.ecj.EcjTreeVisitor.visitOther(EcjTreeVisitor.java:368)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:364)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
    at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.visitMessageSend(EcjTreeConverter.java:1042)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:156)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
    at lombok.ast.ecj.EcjTreeConverter.toBlock(EcjTreeConverter.java:397)
    at lombok.ast.ecj.EcjTreeConverter.access$1500(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.visitBlock(EcjTreeConverter.java:636)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:292)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:229)
    at lombok.ast.ecj.EcjTreeConverter.access$000(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.visitTryStatement(EcjTreeConverter.java:1145)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:52)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
    at lombok.ast.ecj.EcjTreeConverter.toBlock(EcjTreeConverter.java:397)
    at lombok.ast.ecj.EcjTreeConverter.access$1500(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.visitMethodDeclaration(EcjTreeConverter.java:1241)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:152)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
    at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.createNormalTypeBody(EcjTreeConverter.java:563)
    at lombok.ast.ecj.EcjTreeConverter$2.visitTypeDeclaration(EcjTreeConverter.java:486)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:48)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
    at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.createNormalTypeBody(EcjTreeConverter.java:563)
    at lombok.ast.ecj.EcjTreeConverter$2.visitTypeDeclaration(EcjTreeConverter.java:486)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:48)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
    at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.visitCompilationUnitDeclaration(EcjTreeConverter.java:441)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:264)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at com.android.tools.lint.EcjParser.parseJava(EcjParser.java:411)
    at com.android.tools.lint.client.api.JavaVisitor.visitFile(JavaVisitor.java:236)
    at com.android.tools.lint.client.api.LintDriver.checkJava(LintDriver.java:1491)
    at com.android.tools.lint.client.api.LintDriver.runFileDetectors(LintDriver.java:1026)
    at com.android.tools.lint.client.api.LintDriver.checkProject(LintDriver.java:882)
    at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:433)
    at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:374)
    at com.android.tools.lint.LintCliClient.run(LintCliClient.java:129)
    at com.android.build.gradle.internal.LintGradleClient.run(LintGradleClient.java:112)
    at com.android.build.gradle.internal.LintGradleClient$run.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at com.android.build.gradle.tasks.Lint.runLint(Lint.groovy:198)
    at com.android.build.gradle.tasks.Lint.this$4$runLint(Lint.groovy)
    at com.android.build.gradle.tasks.Lint$this$4$runLint$1.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)
    at com.android.build.gradle.tasks.Lint.lintSingleVariant(Lint.groovy:173)
    at com.android.build.gradle.tasks.Lint$lintSingleVariant$0.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)
    at com.android.build.gradle.tasks.Lint.lint(Lint.groovy:75)
    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:483)
    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:579)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    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:305)
    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.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:47)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:70)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:46)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
    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)

Failed converting ECJ parse tree to PSI for.... IllegalArgumentException: ArrayTypeReference

Small snippet that causes the error:

public class Test {
    private static class Foo {
        private final String a = "";
    }

    private void fun() {
        List<Foo> fooList = new ArrayList<Foo>() {{
            add(new Foo());
            add(new Foo());
        }};

        String[] strings = Stream.of(fooList)
                .map(foo -> foo.a)
                .toArray(String[]::new);
    }
}

Only way I can find to get rid of the error is to change .toArray(String[]::new); to .toArray(value -> new String[value]);.

Failed converting ECJ parse tree to PSI for file /home/gregory/Code/TestTest/app/src/main/java/com/example/gregory/myapplication/Test.java
java.lang.IllegalArgumentException: org.eclipse.jdt.internal.compiler.ast.ArrayTypeReference
	at com.android.tools.lint.psi.EcjPsiBuilder.toExpression(EcjPsiBuilder.java:977)
	at com.android.tools.lint.psi.EcjPsiBuilder.toFunctionalExpression(EcjPsiBuilder.java:1038)
	at com.android.tools.lint.psi.EcjPsiBuilder.toExpression(EcjPsiBuilder.java:969)
	at com.android.tools.lint.psi.EcjPsiBuilder.toArguments(EcjPsiBuilder.java:2281)
	at com.android.tools.lint.psi.EcjPsiBuilder.toCallExpression(EcjPsiBuilder.java:1094)
	at com.android.tools.lint.psi.EcjPsiBuilder.toExpression(EcjPsiBuilder.java:959)
	at com.android.tools.lint.psi.EcjPsiBuilder.toVariable(EcjPsiBuilder.java:1723)
	at com.android.tools.lint.psi.EcjPsiBuilder.toDeclarationStatement(EcjPsiBuilder.java:2376)
	at com.android.tools.lint.psi.EcjPsiBuilder.toStatement(EcjPsiBuilder.java:1852)
	at com.android.tools.lint.psi.EcjPsiBuilder.toBlock(EcjPsiBuilder.java:1811)
	at com.android.tools.lint.psi.EcjPsiBuilder.toMethod(EcjPsiBuilder.java:913)
	at com.android.tools.lint.psi.EcjPsiBuilder.initializeClassBody(EcjPsiBuilder.java:798)
	at com.android.tools.lint.psi.EcjPsiBuilder.toClass(EcjPsiBuilder.java:700)
	at com.android.tools.lint.psi.EcjPsiBuilder.toFile(EcjPsiBuilder.java:2518)
	at com.android.tools.lint.psi.EcjPsiBuilder.create(EcjPsiBuilder.java:387)
	at com.android.tools.lint.EcjParser$EcjResult.findFile(EcjParser.java:348)
	at com.android.tools.lint.EcjParser.parseJavaToPsi(EcjParser.java:634)
	at com.android.tools.lint.client.api.JavaPsiVisitor.visitFile(JavaPsiVisitor.java:277)
	at com.android.tools.lint.client.api.LintDriver.visitJavaFiles(LintDriver.java:1571)
	at com.android.tools.lint.client.api.LintDriver.checkJava(LintDriver.java:1551)
	at com.android.tools.lint.client.api.LintDriver.runFileDetectors(LintDriver.java:1090)
	at com.android.tools.lint.client.api.LintDriver.checkProject(LintDriver.java:935)
	at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:454)
	at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.java:395)
	at com.android.tools.lint.LintCliClient.run(LintCliClient.java:131)
	at com.android.build.gradle.internal.LintGradleClient.run(LintGradleClient.java:146)
	at com.android.build.gradle.tasks.Lint.runLint(Lint.java:255)
	at com.android.build.gradle.tasks.Lint.lintSingleVariant(Lint.java:224)
	at com.android.build.gradle.tasks.Lint.lint(Lint.java:109)
	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.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141)
	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123)
	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:624)
	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:607)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:76)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:61)
	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:45)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:233)
	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215)
	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:74)
	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:55)
	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)

The test proj I used to reproduce this:
IssueTestProj.zip

  • Load project
  • Change to release (Doesn't happen on debug)
  • Build APK

The error won't actually stop the build, everything seems to work anyways but it clutters the log :(

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.