KengoTODA / spotbugs-cli

An experimental CLI for SpotBugs based on picocli
GNU Affero General Public License v3.0
1 stars 0 forks source link

EngineRegistrar cannot create database classes #53

Open KengoTODA opened 2 years ago

KengoTODA commented 2 years ago

When run the analysis with native-image, it reports many similar exceptions like below:

The following errors occurred during analysis:
  Exception analyzing edu.umd.cs.findbugs.ba.NullnessAnnotation$1 using detector edu.umd.cs.findbugs.detect.CheckTypeQualifiers
    edu.umd.cs.findbugs.classfile.UncheckedAnalysisException: Error instantiating edu.umd.cs.findbugs.ba.jsr305.TypeQualifierDatabase database
      At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getDatabase(AnalysisCache.java:500)
      At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getDatabase(AnalysisCache.java:467)
      At edu.umd.cs.findbugs.ba.jsr305.ForwardTypeQualifierDataflowAnalysis.registerReturnValueSource(ForwardTypeQualifierDataflowAnalysis.java:203)
      At edu.umd.cs.findbugs.ba.jsr305.ForwardTypeQualifierDataflowAnalysis.registerInstructionSources(ForwardTypeQualifierDataflowAnalysis.java:111)
      At edu.umd.cs.findbugs.ba.jsr305.ForwardTypeQualifierDataflowAnalysis.registerSourceSinkLocations(ForwardTypeQualifierDataflowAnalysis.java:99)
      At edu.umd.cs.findbugs.ba.jsr305.ForwardTypeQualifierDataflowFactory.getDataflow(ForwardTypeQualifierDataflowFactory.java:72)
      At edu.umd.cs.findbugs.ba.jsr305.ForwardTypeQualifierDataflowFactory.getDataflow(ForwardTypeQualifierDataflowFactory.java:52)
      At edu.umd.cs.findbugs.ba.jsr305.TypeQualifierDataflowFactory.compute(TypeQualifierDataflowFactory.java:93)
      At edu.umd.cs.findbugs.ba.jsr305.TypeQualifierDataflowFactory.getDataflow(TypeQualifierDataflowFactory.java:75)
      At edu.umd.cs.findbugs.detect.CheckTypeQualifiers.checkQualifier(CheckTypeQualifiers.java:235)
      At edu.umd.cs.findbugs.detect.CheckTypeQualifiers.visitMethodCFG(CheckTypeQualifiers.java:183)
      At edu.umd.cs.findbugs.bcel.CFGDetector.visitClass(CFGDetector.java:94)
      At edu.umd.cs.findbugs.detect.CheckTypeQualifiers.visitClass(CheckTypeQualifiers.java:137)
      At edu.umd.cs.findbugs.FindBugs2.lambda$analyzeApplication$1(FindBugs2.java:1108)
      At java.util.concurrent.FutureTask.run(FutureTask.java:264)
      At edu.umd.cs.findbugs.CurrentThreadExecutorService.execute(CurrentThreadExecutorService.java:86)
      At java.util.concurrent.AbstractExecutorService.invokeAll(AbstractExecutorService.java:242)
      At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1118)
      At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:309)
      At jp.skypencil.spotbugs.cli.App.call(App.kt:85)
      At jp.skypencil.spotbugs.cli.App.call(App.kt:34)
      At picocli.CommandLine.executeUserObject(CommandLine.java:1953)
      At picocli.CommandLine.access$1300(CommandLine.java:145)
      At picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358)
      At picocli.CommandLine$RunLast.handle(CommandLine.java:2352)
      At picocli.CommandLine$RunLast.handle(CommandLine.java:2314)
      At picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
      At picocli.CommandLine$RunLast.execute(CommandLine.java:2316)
      At picocli.CommandLine.execute(CommandLine.java:2078)
      At jp.skypencil.spotbugs.cli.App$Companion.main(App.kt:183)
      At jp.skypencil.spotbugs.cli.App.main(App.kt)
edu.umd.cs.findbugs.classfile.CheckedAnalysisException: Could not find a way to create database edu.umd.cs.findbugs.ba.jsr305.TypeQualifierDatabase
    at edu.umd.cs.findbugs.classfile.ReflectionDatabaseFactory.createDatabase(ReflectionDatabaseFactory.java:64)
    at edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getDatabase(AnalysisCache.java:490)
    at edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getDatabase(AnalysisCache.java:467)

It is because the code is using ReflectionDatabaseFactory to create database instances:

https://github.com/KengoTODA/spotbugs/blob/d63e473b865cfd6ad3adfa9d91fca881ed975e08/spotbugs/src/main/java/edu/umd/cs/findbugs/classfile/engine/bcel/EngineRegistrar.java#L76-L90

KengoTODA commented 2 years ago

the build/native-image-config/reflect-config.json file already contains the following entry:

{"name":"edu.umd.cs.findbugs.ba.jsr305.TypeQualifierDatabase","allPublicMethods":true}
KengoTODA commented 2 years ago

Class#getConstructor() throws NoSuchMethodException exception:

java.lang.NoSuchMethodException: edu.umd.cs.findbugs.ba.jsr305.TypeQualifierDatabase.<init>()

KengoTODA commented 2 years ago

added two more params explicitly but no luck.

[{
  "name": "edu.umd.cs.findbugs.ba.jsr305.TypeQualifierDatabase",
  "allDeclaredConstructors": true,
  "allPublicMethods": true,
  "allDeclaredMethods": true
}]