Запустите анализатор NullAway, но при инициализации NullAway возникнет ошибка утверждения.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Запустите анализатор NullAway, но при инициализации NullAway возникнет ошибка утверждения.

Сообщение Anonymous »

Я пытаюсь обнаружить исключения нулевого указателя в файле Java с помощью NullAway. Однако NullAway не может быть запущен из-за ошибки утверждения, связанной с его инициализацией:

Код: Выделить всё

java.lang.AssertionError: com.google.errorprone.scanner.ErrorProneInjector$ProvisionException: Failed to initialize com.uber.nullaway.NullAway
at com.google.errorprone.ErrorProneAnalyzer.lambda$scansPlugins$0(ErrorProneAnalyzer.java:85)
at com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:181)
at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:156)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:133)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1436)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1383)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:963)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:319)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:178)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)
Caused by: com.google.errorprone.scanner.ErrorProneInjector$ProvisionException: Failed to initialize com.uber.nullaway.NullAway
at com.google.errorprone.scanner.ErrorProneInjector.getInstance(ErrorProneInjector.java:92)
at com.google.errorprone.scanner.ErrorProneInjector.getInstance(ErrorProneInjector.java:65)
at com.google.errorprone.scanner.ScannerSupplierImpl.instantiateChecker(ScannerSupplierImpl.java:66)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at com.google.errorprone.scanner.ScannerSupplierImpl.get(ScannerSupplierImpl.java:74)
at com.google.errorprone.scanner.ScannerSupplierImpl.get(ScannerSupplierImpl.java:37)
at com.google.errorprone.ErrorProneAnalyzer.lambda$scansPlugins$0(ErrorProneAnalyzer.java:80)
... 10 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at com.google.errorprone.scanner.ErrorProneInjector.getInstance(ErrorProneInjector.java:90)
... 22 more
Caused by: java.lang.NoClassDefFoundError: org/checkerframework/nullaway/dataflow/cfg/node/NodeVisitor
at com.uber.nullaway.handlers.Handlers.buildDefault(Handlers.java:67)
at com.uber.nullaway.NullAway.(NullAway.java:291)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
... 25 more
Caused by: java.lang.ClassNotFoundException: org.checkerframework.nullaway.dataflow.cfg.node.NodeVisitor
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
... 28 more
Ниже приведен сценарий, который я использовал для выполнения NullAway. Я следовал инструкциям Error Prone и внес некоторые изменения в соответствии с документацией NullAway:

Код: Выделить всё

EP_VERSION=2.23.0
DATAFLOW_VERSION=3.39.0-eisop1
NULLAWAY_VERSION=0.10.15
JSPECIFY_VERSION=1.0.0

# check if downloaded, if not, download
error_prone_core_jar=error_prone_core-${EP_VERSION?}-with-dependencies.jar
dataflow_errorprone_jar=dataflow-errorprone-${DATAFLOW_VERSION?}.jar
nullaway_jar=nullaway-${NULLAWAY_VERSION?}.jar
jspecify_jar=jspecify-${JSPECIFY_VERSION?}.jar

if [ ! -f $error_prone_core_jar ]; then
wget https://repo1.maven.org/maven2/com/google/errorprone/error_prone_core/${EP_VERSION?}/$error_prone_core_jar
fi
if [ ! -f $dataflow_errorprone_jar ]; then
wget https://repo1.maven.org/maven2/io/github/eisop/dataflow-errorprone/${DATAFLOW_VERSION?}/$dataflow_errorprone_jar
fi
if [ ! -f $nullaway_jar ]; then
wget https://repo1.maven.org/maven2/com/uber/nullaway/nullaway/${NULLAWAY_VERSION?}/$nullaway_jar
fi
if [ ! -f $jspecify_jar ]; then
wget https://repo1.maven.org/maven2/org/jspecify/jspecify/${JSPECIFY_VERSION?}/$jspecify_jar
fi

echo "Jar files downloaded"

javac \
-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED \
-XDcompilePolicy=simple \
-cp .:$jspecify_jar \
-processorpath $error_prone_core_jar:$nullaway_jar:$dataflow_errorprone_jar \
'-Xplugin:ErrorProne -XepOpt:NullAway:AnnotatedPackages=com.uber -Xep:CollectionIncompatibleType:ERROR' \
com/uber/mylib/ShortSet.java

echo "Compilation finished"
Источник "com/uber/mylib/ShortSet.java" идентичен примеру, предоставленному NullAway:

Код: Выделить всё

package com.uber.mylib;

import org.jspecify.annotations.Nullable;

/**
* A sample class.
*/
public class ShortSet {

static void log(Object x) {
System.out.println(x.toString());
}

static void foo() {
log(null);
}
}
И моя Java-версия:

Код: Выделить всё

$ java --version
openjdk 21.0.4 2024-07-16
OpenJDK Runtime Environment (build 21.0.4+7-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 21.0.4+7-Ubuntu-1ubuntu222.04, mixed mode, sharing)
Мне нужна помощь, чтобы понять, почему NullAway не может успешно инициализироваться. Спасибо за помощь!
NullAway можно успешно запустить и обнаружить NPE в коде.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ialization
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»