Сбой проверки Lint с java.lang.NullPointerException (сбой компилятора ECJ)

При запуске 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 ответ

У Линт есть некоторые проблемы с лямбдами. Та же проблема произошла со мной для проекта с исходным кодом Java с sourceCompatibility JavaVersion.VERSION_1_8.

Я обнаружил, что статический метод из рассматриваемого класса (в вашем случае ImageUtil.java) был вызван где-то еще из лямбды. Замена там лямбды анонимным классом разрешила

Другие вопросы по тегам