pascal-lab / Tai-e-assignments

Tai-e assignments for static program analysis
https://tai-e.pascal-lab.net/
GNU Lesser General Public License v3.0
1.06k stars 242 forks source link

A4的test case出现NoSuchMethodError #20

Open lssssj opened 1 year ago

lssssj commented 1 year ago

问题

没有对不相关代码做任何修改,拷贝的是本仓库的最新代码 跑A4的InterCPTest.java的testExample方法出现下面的错误

java.lang.NoSuchMethodError
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:564)
    at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:591)
    at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:689)
    at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:159)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:173)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
    at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:765)
    at pascal.taie.analysis.AnalysisManager.runMethodAnalysis(AnalysisManager.java:134)
    at pascal.taie.analysis.AnalysisManager.runAnalysis(AnalysisManager.java:75)
    at pascal.taie.analysis.AnalysisManager.lambda$execute$0(AnalysisManager.java:60)
    at pascal.taie.util.Timer.lambda$runAndCount$0(Timer.java:112)
    at pascal.taie.util.Timer.runAndCount(Timer.java:93)
    at pascal.taie.util.Timer.runAndCount(Timer.java:111)
    at pascal.taie.util.Timer.runAndCount(Timer.java:107)
    at pascal.taie.analysis.AnalysisManager.lambda$execute$1(AnalysisManager.java:59)
    at java.util.ArrayList.forEach(ArrayList.java:1511)
    at pascal.taie.analysis.AnalysisManager.execute(AnalysisManager.java:59)
    at pascal.taie.Main.executePlan(Main.java:142)
    at pascal.taie.Main.lambda$main$0(Main.java:56)
    at pascal.taie.util.Timer.lambda$runAndCount$0(Timer.java:112)
    at pascal.taie.util.Timer.runAndCount(Timer.java:93)
    at pascal.taie.util.Timer.runAndCount(Timer.java:111)
    at pascal.taie.util.Timer.runAndCount(Timer.java:107)
    at pascal.taie.Main.main(Main.java:48)
    at pascal.taie.analysis.Tests.test(Tests.java:89)
    at pascal.taie.analysis.dataflow.analysis.constprop.InterCPTest.test(InterCPTest.java:34)
    at pascal.taie.analysis.dataflow.analysis.constprop.InterCPTest.testReference(InterCPTest.java:48)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:568)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:568)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    at jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
    at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: java.lang.NoSuchMethodError: 'java.util.Collection pascal.taie.language.classes.ClassHierarchy.getAllSubclassesOf(pascal.taie.language.classes.JClass, boolean)'
    at pascal.taie.analysis.exception.IntraExplicitThrowAnalysis.mayThrowExplicitly(IntraExplicitThrowAnalysis.java:107)
    at pascal.taie.analysis.exception.IntraExplicitThrowAnalysis.lambda$analyze$0(IntraExplicitThrowAnalysis.java:53)
    at java.lang.Iterable.forEach(Iterable.java:75)
    at pascal.taie.analysis.exception.IntraExplicitThrowAnalysis.analyze(IntraExplicitThrowAnalysis.java:50)
    at pascal.taie.analysis.exception.ThrowAnalysis.analyze(ThrowAnalysis.java:58)
    at pascal.taie.analysis.exception.ThrowAnalysis.analyze(ThrowAnalysis.java:29)
    at pascal.taie.analysis.AnalysisManager.lambda$runMethodAnalysis$3(AnalysisManager.java:136)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
    at java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(AbstractList.java:720)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:290)
    at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:754)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
    at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
    at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
lssssj commented 1 year ago

尝试在ClassHierarchy.javaClassHierarchyImpl.java添加和实现这个方法,又爆出别的问题。

Caused by: java.lang.NoSuchMethodError: 'boolean pascal.taie.language.classes.ClassHierarchy.isSubclass(pascal.taie.language.classes.JClass, pascal.taie.language.classes.JClass)