Сбой проверки 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) был вызван где-то еще из лямбды. Замена там лямбды анонимным классом разрешила