lint检查崩溃与java.lang.NullPointerException(ECJ编译器崩溃)

时间:2018-02-17 20:18:26

标签: android lint

在我的应用来源上运行lintVitalRelease检查时,会发生以下崩溃:

> Task :app:lintVitalRelease
ECJ compiler crashed processing D:\PROJECTS\xxxxx\app\src\main\java\com\xxxxx\xxxxx\utils\images\ImageUtil.java
java.lang.NullPointerException
        at org.eclipse.jdt.internal.compiler.ast.MessageSend.analyseCode(MessageSend.java:138)
        at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.analyseCode(MethodDeclaration.java:125)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.internalAnalyseCode(TypeDeclaration.java:739)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.analyseCode(TypeDeclaration.java:263)
        at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.analyseCode(CompilationUnitDeclaration.java:118)
        at com.android.tools.lint.EcjParser$NonGeneratingCompiler.process(EcjParser.java:1416)
        at org.eclipse.jdt.internal.compiler.Compiler.processCompiledUnits(Compiler.java:550)
        at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:462)
        at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:417)
        at com.android.tools.lint.EcjParser.parse(EcjParser.java:549)

我能够将此问题分解为以下代码行:

public static void startFromGalleryIntent(Fragment f) {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        f.startActivityForResult(intent, GALLERY_INTENT_RESOLVER);
    }

一旦我评论出最后一行:

// f.startActivityForResult(intent, GALLERY_INTENT_RESOLVER);

lintVitalRelease完成没有问题。

我正在使用最新的稳定构建工具(com.android.tools.build:gradle:3.0.1

谁能解释发生了什么,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

Lint与lambdas存在一些问题。 使用带有sourceCompatibility JavaVersion.VERSION_1_8的Java源代码的项目也发生了同样的问题。

我发现有问题的类中的静态方法(在你的情况下是ImageUtil.java)是从lambda的其他地方调用的。用匿名类替换lambda解决了它