Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[java] Intermittent NPEs while analyzing Java code #4757

Closed
adangel opened this issue Dec 1, 2023 · 3 comments · Fixed by #4834
Closed

[java] Intermittent NPEs while analyzing Java code #4757

adangel opened this issue Dec 1, 2023 · 3 comments · Fixed by #4834
Assignees
Labels
a:bug PMD crashes or fails to analyse a file.
Milestone

Comments

@adangel
Copy link
Member

adangel commented Dec 1, 2023

Affects PMD Version: 7.0.0-SNAPSHOT

Description:

Sometimes, not always, a NullPointerException occurs. I've noticed two different stacktraces.

Exception Stacktrace 1a
    org.apache.commons.lang3.exception.ContextedRuntimeException: java.lang.NullPointerException: Cannot invoke "net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub$EnclosingInfo.getEnclosingClass()" because "this.enclosingInfo" is null
Exception Context:
        [1:Rule applied on node=!debug only! [MethodCall:43:9]System.out.println("This is just a test.")]
---------------------------------
        at net.sourceforge.pmd.util.AssertionUtil.contexted(AssertionUtil.java:232)
        at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex(RuleApplicator.java:77)
        at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.apply(RuleApplicator.java:55)
        at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:158)
        at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource(PmdRunnable.java:140)
        at net.sourceforge.pmd.lang.impl.PmdRunnable.run(PmdRunnable.java:80)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NullPointerException: Cannot invoke "net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub$EnclosingInfo.getEnclosingClass()" because "this.enclosingInfo" is null
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub.getEnclosingClass(ClassStub.java:355)
        at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.makeEnclosingOf(ClassTypeImpl.java:117)
        at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.(ClassTypeImpl.java:77)
        at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.(ClassTypeImpl.java:64)
        at net.sourceforge.pmd.lang.java.types.TypeSystem.typeOf(TypeSystem.java:458)
        at net.sourceforge.pmd.lang.java.types.TypeSystem.rawType(TypeSystem.java:485)
        at net.sourceforge.pmd.lang.java.types.TypesFromReflection.fromReflect(TypesFromReflection.java:99)
        at net.sourceforge.pmd.lang.java.types.TypesFromReflection.fromReflect(TypesFromReflection.java:69)
        at net.sourceforge.pmd.lang.java.types.TypeTestUtil.isA(TypeTestUtil.java:87)
        at net.sourceforge.pmd.lang.java.types.TypeTestUtil.isA(TypeTestUtil.java:65)
        at net.sourceforge.pmd.lang.java.rule.errorprone.UselessOperationOnImmutableRule.visit(UselessOperationOnImmutableRule.java:38)
        at net.sourceforge.pmd.lang.java.ast.ASTMethodCall.acceptVisitor(ASTMethodCall.java:75)
        at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.acceptVisitor(AbstractJavaNode.java:38)
        at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply(AbstractJavaRule.java:24)
        at net.sourceforge.pmd.lang.rule.AbstractDelegateRule.apply(AbstractDelegateRule.java:238)
        at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex(RuleApplicator.java:75)
        ... 9 more
[ERROR] Tests run: 6, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 8.099 s <<< FAILURE! - in org.apache.maven.plugins.pmd.PmdViolationCheckMojoTest
Exception Stacktrace 1b
2023-11-27T15:11:35.3546412Z [INFO] --- pmd:3.21.2:pmd (pmd) @ pmd-jsp ---
2023-11-27T15:11:35.3625221Z [INFO] PMD version: 7.0.0-rc4
2023-11-27T15:11:36.5540446Z [WARNING] Exception applying rule UseUtilityClass on file D:\a\pmd\pmd\pmd-jsp\src\main\java\net\sourceforge\pmd\lang\jsp\ast\ASTAttribute.java, continuing with next rule
2023-11-27T15:11:36.5776585Z org.apache.commons.lang3.exception.ContextedRuntimeException: java.lang.NullPointerException
2023-11-27T15:11:36.5777784Z Exception Context:
2023-11-27T15:11:36.5778949Z 	[1:Rule applied on node=!debug only! [ClassOrInterfaceDeclaration:7:14]public final class ASTAttribute extends AbstractJspNode {
2023-11-27T15:11:36.5780037Z 
2023-11-27T15:11:36.5780213Z     private String name;
2023-11-27T15:11:36.5780788Z 
2023-11-27T15:11:36.5780963Z     ASTAttribute(int id) {
2023-11-27T15:11:36.5781442Z         super(id);
2023-11-27T15:11:36.5781828Z     }
2023-11-27T15:11:36.5782017Z 
2023-11-27T15:11:36.5782154Z  (truncated)]
2023-11-27T15:11:36.5783525Z ---------------------------------
2023-11-27T15:11:36.5784486Z     at net.sourceforge.pmd.util.AssertionUtil.contexted (AssertionUtil.java:232)
2023-11-27T15:11:36.5785967Z     at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex (RuleApplicator.java:77)
2023-11-27T15:11:36.5787577Z     at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.apply (RuleApplicator.java:55)
2023-11-27T15:11:36.5788879Z     at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:158)
2023-11-27T15:11:36.5790060Z     at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource (PmdRunnable.java:140)
2023-11-27T15:11:36.5791352Z     at net.sourceforge.pmd.lang.impl.PmdRunnable.run (PmdRunnable.java:80)
2023-11-27T15:11:36.5792535Z     at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:515)
2023-11-27T15:11:36.5793613Z     at java.util.concurrent.FutureTask.run (FutureTask.java:264)
2023-11-27T15:11:36.5794798Z     at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
2023-11-27T15:11:36.5796168Z     at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
2023-11-27T15:11:36.5797162Z     at java.lang.Thread.run (Thread.java:829)
2023-11-27T15:11:36.5797848Z Caused by: java.lang.NullPointerException
2023-11-27T15:11:36.5799445Z     at net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub.getEnclosingClass (ClassStub.java:355)
2023-11-27T15:11:36.5800489Z     at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.makeEnclosingOf (ClassTypeImpl.java:117)
2023-11-27T15:11:36.5801404Z     at net.sourceforge.pmd.lang.java.types.ClassTypeImpl. (ClassTypeImpl.java:77)
2023-11-27T15:11:36.5802549Z     at net.sourceforge.pmd.lang.java.types.ClassTypeImpl. (ClassTypeImpl.java:64)
2023-11-27T15:11:36.5803310Z     at net.sourceforge.pmd.lang.java.types.TypeSystem.typeOf (TypeSystem.java:458)
2023-11-27T15:11:36.5804055Z     at net.sourceforge.pmd.lang.java.types.TypeSystem.rawType (TypeSystem.java:485)
2023-11-27T15:11:36.5804974Z     at net.sourceforge.pmd.lang.java.types.TypesFromReflection.loadClassMaybeArray (TypesFromReflection.java:237)
2023-11-27T15:11:36.5805975Z     at net.sourceforge.pmd.lang.java.types.TypesFromReflection.loadType (TypesFromReflection.java:205)
2023-11-27T15:11:36.5806820Z     at net.sourceforge.pmd.lang.java.types.TypeTestUtil.isA (TypeTestUtil.java:176)
2023-11-27T15:11:36.5807561Z     at net.sourceforge.pmd.lang.java.types.TypeTestUtil.isA (TypeTestUtil.java:122)
2023-11-27T15:11:36.5808600Z     at net.sourceforge.pmd.lang.java.rule.design.UseUtilityClassRule.visit (UseUtilityClassRule.java:39)
2023-11-27T15:11:36.5809708Z     at net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration.acceptVisitor (ASTClassOrInterfaceDeclaration.java:38)
2023-11-27T15:11:36.5810772Z     at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.acceptVisitor (AbstractJavaNode.java:38)
2023-11-27T15:11:36.5811635Z     at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply (AbstractJavaRule.java:24)
2023-11-27T15:11:36.5812482Z     at net.sourceforge.pmd.lang.rule.AbstractDelegateRule.apply (AbstractDelegateRule.java:232)
2023-11-27T15:11:36.5813381Z     at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex (RuleApplicator.java:75)
2023-11-27T15:11:36.5814254Z     at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.apply (RuleApplicator.java:55)
2023-11-27T15:11:36.5814930Z     at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:158)
2023-11-27T15:11:36.5815566Z     at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource (PmdRunnable.java:140)
2023-11-27T15:11:36.5816269Z     at net.sourceforge.pmd.lang.impl.PmdRunnable.run (PmdRunnable.java:80)
2023-11-27T15:11:36.5817203Z     at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:515)
2023-11-27T15:11:36.5817836Z     at java.util.concurrent.FutureTask.run (FutureTask.java:264)
2023-11-27T15:11:36.5818495Z     at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
2023-11-27T15:11:36.5819502Z     at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
2023-11-27T15:11:36.5820175Z     at java.lang.Thread.run (Thread.java:829)
2023-11-27T15:11:36.5821398Z [WARNING] Exception occurred on node !debug only! [ClassOrInterfaceDeclaration:7:14]public final class ASTAttribute extends AbstractJspNode {
2023-11-27T15:11:36.5822477Z 
2023-11-27T15:11:36.5822641Z     private String name;
2023-11-27T15:11:36.5822931Z 
2023-11-27T15:11:36.5823100Z     ASTAttribute(int id) {
2023-11-27T15:11:36.5823519Z         super(id);
2023-11-27T15:11:36.5823869Z     }
2023-11-27T15:11:36.5824050Z 
2023-11-27T15:11:36.5824182Z  (truncated)
Exception Stacktrace 2
[PmdThread 2] ERROR net.sourceforge.pmd.lang.java.symbols.internal.asm.ParseLock - java.lang.NullPointerException
java.lang.NullPointerException
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub.getEnclosingTypeParameterOwner(ClassStub.java:373)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.GenericSigBase.getEnclosingTypeParams(GenericSigBase.java:71)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.SignatureParser.typeParamsWrapper(SignatureParser.java:88)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.SignatureParser.parseClassSignature(SignatureParser.java:56)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.GenericSigBase$LazyClassSignature.doParse(GenericSigBase.java:155)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.GenericSigBase$1.doParse(GenericSigBase.java:54)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.ParseLock.getFinalStatus(ParseLock.java:33)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.ParseLock.ensureParsed(ParseLock.java:22)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.GenericSigBase.ensureParsed(GenericSigBase.java:76)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.GenericSigBase.getTypeParams(GenericSigBase.java:92)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub.getTypeParameters(ClassStub.java:289)
        at net.sourceforge.pmd.lang.java.symbols.JTypeParameterOwnerSymbol.getTypeParameterCount(JTypeParameterOwnerSymbol.java:47)
        at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.typeArgsAreOk(ClassTypeImpl.java:446)
        at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.validateParams(ClassTypeImpl.java:420)
        at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.(ClassTypeImpl.java:69)
        at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.(ClassTypeImpl.java:64)
        at net.sourceforge.pmd.lang.java.types.TypeSystem.parameterise(TypeSystem.java:522)
        at net.sourceforge.pmd.lang.java.types.ast.LazyTypeResolver.visit(LazyTypeResolver.java:472)
        at net.sourceforge.pmd.lang.java.types.ast.LazyTypeResolver.visit(LazyTypeResolver.java:95)
        at net.sourceforge.pmd.lang.java.ast.ASTClassLiteral.acceptVisitor(ASTClassLiteral.java:26)
        at net.sourceforge.pmd.lang.java.ast.AbstractJavaTypeNode.getTypeMirror(AbstractJavaTypeNode.java:51)
        at net.sourceforge.pmd.lang.java.ast.ASTClassLiteral.getTypeMirror(ASTClassLiteral.java:19)
        at net.sourceforge.pmd.lang.java.ast.AbstractJavaTypeNode.getTypeMirror(AbstractJavaTypeNode.java:39)
        at net.sourceforge.pmd.lang.java.ast.ASTClassLiteral.getTypeMirror(ASTClassLiteral.java:19)
        at net.sourceforge.pmd.lang.java.ast.InternalApiBridge.lambda$forceTypeResolutionPhase$0(InternalApiBridge.java:94)
        at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
        at net.sourceforge.pmd.lang.ast.internal.IteratorBasedNStream.forEach(IteratorBasedNStream.java:102)
        at net.sourceforge.pmd.lang.java.ast.InternalApiBridge.forceTypeResolutionPhase(InternalApiBridge.java:92)
        at net.sourceforge.pmd.lang.java.internal.JavaAstProcessor.lambda$process$3(JavaAstProcessor.java:134)
        at net.sourceforge.pmd.benchmark.TimeTracker.bench(TimeTracker.java:163)
        at net.sourceforge.pmd.lang.java.internal.JavaAstProcessor.process(JavaAstProcessor.java:134)
        at net.sourceforge.pmd.lang.java.internal.JavaAstProcessor.process(JavaAstProcessor.java:164)
        at net.sourceforge.pmd.lang.java.internal.JavaAstProcessor.process(JavaAstProcessor.java:148)
        at net.sourceforge.pmd.lang.java.ast.JavaParser.parseImpl(JavaParser.java:69)
        at net.sourceforge.pmd.lang.java.ast.JavaParser.parseImpl(JavaParser.java:25)
        at net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeParserAdapter.parse(JjtreeParserAdapter.java:36)
        at net.sourceforge.pmd.lang.impl.PmdRunnable.parse(PmdRunnable.java:112)
        at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource(PmdRunnable.java:132)
        at net.sourceforge.pmd.lang.impl.PmdRunnable.run(PmdRunnable.java:80)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
[PmdThread 2] WARN net.sourceforge.pmd.lang.rule.internal.RuleApplicator - Exception applying rule JUnitAssertionsShouldIncludeMessage on file /home/runner/work/pmd/target/repositories/spring-framework/integrati
on-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java, continuing with next rule
org.apache.commons.lang3.exception.ContextedRuntimeException: java.lang.NullPointerException
Exception Context:
        [1:Resolving type of=!debug only! [MethodCall:55:42]CLASS.getSimpleName()]
        [2:Rule applied on node=!debug only! [MethodCall:55:42]CLASS.getSimpleName()]
---------------------------------
        at net.sourceforge.pmd.util.AssertionUtil.contexted(AssertionUtil.java:232)
        at net.sourceforge.pmd.lang.java.ast.AbstractJavaTypeNode.getTypeMirror(AbstractJavaTypeNode.java:54)
        at net.sourceforge.pmd.lang.java.ast.ASTMethodCall.getTypeMirror(ASTMethodCall.java:22)
        at net.sourceforge.pmd.lang.java.ast.AbstractJavaTypeNode.getTypeMirror(AbstractJavaTypeNode.java:39)
        at net.sourceforge.pmd.lang.java.ast.ASTMethodCall.getTypeMirror(ASTMethodCall.java:22)
        at net.sourceforge.pmd.lang.java.ast.AbstractJavaTypeNode.forceTypeResolution(AbstractJavaTypeNode.java:29)
        at net.sourceforge.pmd.lang.java.ast.AbstractInvocationExpr.getOverloadSelectionInfo(AbstractInvocationExpr.java:27)
        at net.sourceforge.pmd.lang.java.ast.ASTMethodCall.getOverloadSelectionInfo(ASTMethodCall.java:22)
        at net.sourceforge.pmd.lang.java.ast.InvocationNode.getMethodType(InvocationNode.java:48)
        at net.sourceforge.pmd.lang.java.rule.internal.TestFrameworksUtil.isCallOnAssertionContainer(TestFrameworksUtil.java:166)
        at net.sourceforge.pmd.lang.java.rule.bestpractices.JUnitAssertionsShouldIncludeMessageRule.visit(JUnitAssertionsShouldIncludeMessageRule.java:37)
        at net.sourceforge.pmd.lang.java.ast.ASTMethodCall.acceptVisitor(ASTMethodCall.java:75)
        at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.acceptVisitor(AbstractJavaNode.java:38)
        at net.sourceforge.pmd.lang.java.rule.AbstractJavaRule.apply(AbstractJavaRule.java:24)
        at net.sourceforge.pmd.lang.rule.AbstractDelegateRule.apply(AbstractDelegateRule.java:232)
        at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex(RuleApplicator.java:75)
        at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.apply(RuleApplicator.java:55)
        at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:158)
        at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource(PmdRunnable.java:140)
        at net.sourceforge.pmd.lang.impl.PmdRunnable.run(PmdRunnable.java:80)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.NullPointerException
        at net.sourceforge.pmd.lang.java.types.TypeOps.mapPreservingSelf(TypeOps.java:951)
        at net.sourceforge.pmd.lang.java.types.TypeOps.substClasses(TypeOps.java:933)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.GenericSigBase$LazyClassSignature.getSuperItfs(GenericSigBase.java:186)
        at net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub.getSuperInterfaceTypes(ClassStub.java:283)
        at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.getSuperInterfaces(ClassTypeImpl.java:302)
        at net.sourceforge.pmd.lang.java.symbols.table.internal.SuperTypesEnumerator$SuperTypeWalker.enqueue(SuperTypesEnumerator.java:153)
        at net.sourceforge.pmd.lang.java.symbols.table.internal.SuperTypesEnumerator$SuperTypeWalker.computeNext(SuperTypesEnumerator.java:144)
        at net.sourceforge.pmd.util.IteratorUtil$AbstractIterator.hasNext(IteratorUtil.java:529)
        at java.base/java.util.Iterator.forEachRemaining(Iterator.java:132)
        at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
        at net.sourceforge.pmd.lang.java.types.TypeOps.getMethodsOf(TypeOps.java:1879)
        at net.sourceforge.pmd.lang.java.types.internal.infer.ast.MethodInvocMirror.getAccessibleCandidates(MethodInvocMirror.java:71)
        at net.sourceforge.pmd.lang.java.types.internal.infer.ast.MethodInvocMirror.getAccessibleCandidates(MethodInvocMirror.java:26)
        at net.sourceforge.pmd.lang.java.types.internal.infer.Infer.computeCompileTimeDecl(Infer.java:271)
        at net.sourceforge.pmd.lang.java.types.internal.infer.Infer.getCompileTimeDecl(Infer.java:249)
        at net.sourceforge.pmd.lang.java.types.internal.infer.Infer.goToInvocationWithFallback(Infer.java:182)
        at net.sourceforge.pmd.lang.java.types.internal.infer.Infer.inferInvocationRecursively(Infer.java:171)
        at net.sourceforge.pmd.lang.java.types.ast.PolyResolution.inferInvocation(PolyResolution.java:251)
        at net.sourceforge.pmd.lang.java.types.ast.PolyResolution.polyTypeOtherCtx(PolyResolution.java:123)
        at net.sourceforge.pmd.lang.java.types.ast.PolyResolution.computePolyType(PolyResolution.java:113)
        at net.sourceforge.pmd.lang.java.types.ast.LazyTypeResolver.handlePoly(LazyTypeResolver.java:268)
        at net.sourceforge.pmd.lang.java.types.ast.LazyTypeResolver.visit(LazyTypeResolver.java:273)
        at net.sourceforge.pmd.lang.java.types.ast.LazyTypeResolver.visit(LazyTypeResolver.java:95)
        at net.sourceforge.pmd.lang.java.ast.ASTMethodCall.acceptVisitor(ASTMethodCall.java:75)
        at net.sourceforge.pmd.lang.java.ast.AbstractJavaTypeNode.getTypeMirror(AbstractJavaTypeNode.java:51)
        ... 23 more
[PmdThread 2] WARN net.sourceforge.pmd.lang.rule.internal.RuleApplicator - Exception occurred on node !debug only! [MethodCall:55:42]CLASS.getSimpleName()

Code Sample demonstrating the issue:

Don't know exactly.

Stacktrace 1a appeared when building maven-pmd-plugin against PMD 7 (there are some unit tests which execute PMD)

Stacktrace 1b appeared when running PMD against pmd code base (in PR #4754)

Stacktrace 2 appeared when running the regression tester against the spring framework.

Running PMD through: CLI, Maven

@adangel adangel added the a:bug PMD crashes or fails to analyse a file. label Dec 1, 2023
@adangel
Copy link
Member Author

adangel commented Dec 1, 2023

One note to Stacktrace 2: Is it maybe a circular initialization problem? ClassStub::getTypeParameters -> ParseLock::ensureParsed -> ClassStub::getEnclosingTypeParameterOwner -> ParseLock::ensureParsed

@adangel adangel added this to the 7.0.0 milestone Dec 1, 2023
@adangel adangel pinned this issue Jan 11, 2024
@emouty
Copy link
Contributor

emouty commented Feb 9, 2024

Hello,

I also occasionally get Stacktrace 1a. I have notice that after this Stacktrace appear I get a lot of NPE on TypeOps.

I running analysis with maven-pmd-plugin with pmd 7 and pmd-compat6 module

example on NPE on TypeOps

  [WARNING] Exception applying rule AvoidCalendarDateCreation on file /home/jenkins/agent/workspace/MyProject_PR-3995@tmp/codeAnalysis.tmp5736574437765240806/src/main/java/com/myproject/MyClass.java, continuing with next rule
  org.apache.commons.lang3.exception.ContextedRuntimeException: java.lang.NullPointerException: Cannot invoke "java.util.List.size()" because "ts" is null
  Exception Context:
  	[1:Rule applied on node=!debug only! [ClassOrInterfaceType:71:59]MyScope]
  ---------------------------------
      at net.sourceforge.pmd.util.AssertionUtil.contexted (AssertionUtil.java:232)
      at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex (RuleApplicator.java:77)
      at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.apply (RuleApplicator.java:55)
      at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:158)
      at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource (PmdRunnable.java:140)
      at net.sourceforge.pmd.lang.impl.PmdRunnable.run (PmdRunnable.java:80)
      at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
      at java.util.concurrent.FutureTask.run (FutureTask.java:317)
      at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1144)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:642)
      at java.lang.Thread.run (Thread.java:1583)
  Caused by: java.lang.NullPointerException: Cannot invoke "java.util.List.size()" because "ts" is null
      at net.sourceforge.pmd.lang.java.types.TypeOps.mapPreservingSelf (TypeOps.java:951)
      at net.sourceforge.pmd.lang.java.types.TypeOps.substClasses (TypeOps.java:933)
      at net.sourceforge.pmd.lang.java.symbols.internal.asm.GenericSigBase$LazyClassSignature.getSuperItfs (GenericSigBase.java:186)
      at net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub.getSuperInterfaceTypes (ClassStub.java:283)
      at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.getSuperInterfaces (ClassTypeImpl.java:302)
      at net.sourceforge.pmd.lang.java.types.TypeOps$AsSuperVisitor.visitClass (TypeOps.java:1678)
      at net.sourceforge.pmd.lang.java.types.TypeOps$AsSuperVisitor.visitClass (TypeOps.java:1653)
      at net.sourceforge.pmd.lang.java.types.JClassType.acceptVisitor (JClassType.java:310)
      at net.sourceforge.pmd.lang.java.types.TypeOps$AsSuperVisitor.visitClass (TypeOps.java:1672)
      at net.sourceforge.pmd.lang.java.types.TypeOps$AsSuperVisitor.visitClass (TypeOps.java:1653)
      at net.sourceforge.pmd.lang.java.types.JClassType.acceptVisitor (JClassType.java:310)
      at net.sourceforge.pmd.lang.java.types.TypeOps.asSuper (TypeOps.java:1630)
      at net.sourceforge.pmd.lang.java.types.JTypeMirror.getAsSuper (JTypeMirror.java:232)
      at net.sourceforge.pmd.lang.java.types.JClassType.getAsSuper (JClassType.java:243)
      at net.sourceforge.pmd.lang.java.types.TypeOps$SubtypeVisitor.visitClass (TypeOps.java:830)
      at net.sourceforge.pmd.lang.java.types.TypeOps$SubtypeVisitor.visitClass (TypeOps.java:771)
      at net.sourceforge.pmd.lang.java.types.JClassType.acceptVisitor (JClassType.java:310)
      at net.sourceforge.pmd.lang.java.types.TypeOps.isConvertible (TypeOps.java:464)
      at net.sourceforge.pmd.lang.java.types.TypeOps.isConvertible (TypeOps.java:401)
      at net.sourceforge.pmd.lang.java.types.JTypeMirror.isConvertibleTo (JTypeMirror.java:127)
      at net.sourceforge.pmd.lang.java.types.JTypeMirror.isSubtypeOf (JTypeMirror.java:115)
      at net.sourceforge.pmd.lang.java.types.TypeTestUtil.isA (TypeTestUtil.java:158)
      at net.sourceforge.pmd.lang.java.types.TypeTestUtil.isA (TypeTestUtil.java:178)
      at net.sourceforge.pmd.lang.java.types.TypeTestUtil.isA (TypeTestUtil.java:122)
      at net.sourceforge.pmd.lang.java.rule.xpath.internal.BaseContextNodeTestFun$1.call (BaseContextNodeTestFun.java:71)
      at net.sf.saxon.lib.ExtensionFunctionCall.effectiveBooleanValue (ExtensionFunctionCall.java:187)
      at net.sf.saxon.functions.IntegratedFunctionCall.effectiveBooleanValue (IntegratedFunctionCall.java:344)
      at net.sf.saxon.expr.OrExpression.effectiveBooleanValue (OrExpression.java:137)
      at net.sf.saxon.expr.FilterIterator$NonNumeric.matches (FilterIterator.java:180)
      at net.sf.saxon.expr.FilterIterator.getNextMatchingItem (FilterIterator.java:77)
      at net.sf.saxon.expr.FilterIterator.next (FilterIterator.java:63)
      at net.sf.saxon.om.FocusTrackingIterator.next (FocusTrackingIterator.java:76)
      at net.sf.saxon.expr.FilterIterator.getNextMatchingItem (FilterIterator.java:76)
      at net.sf.saxon.expr.FilterIterator.next (FilterIterator.java:63)
      at net.sourceforge.pmd.lang.rule.xpath.internal.SaxonXPathRuleQuery.evaluate (SaxonXPathRuleQuery.java:127)
      at net.sourceforge.pmd.lang.rule.XPathRule.apply (XPathRule.java:131)
      at net.sourceforge.pmd.lang.rule.AbstractDelegateRule.apply (AbstractDelegateRule.java:232)
      at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex (RuleApplicator.java:75)
      at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.apply (RuleApplicator.java:55)
      at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:158)
      at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource (PmdRunnable.java:140)
      at net.sourceforge.pmd.lang.impl.PmdRunnable.run (PmdRunnable.java:80)
      at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
      at java.util.concurrent.FutureTask.run (FutureTask.java:317)
      at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1144)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:642)
      at java.lang.Thread.run (Thread.java:1583)
  [WARNING] Exception occurred on node !debug only! [ClassOrInterfaceType:71:59]MyScope

@valodzka
Copy link

Similar issue, see it randomly when runnig mvn pmd:pmd

org.apache.commons.lang3.exception.ContextedRuntimeException: java.lang.NullPointerException: Cannot invoke "net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub$EnclosingInfo.getEnclosingClass()" because "this.enclosingInfo" is null
Exception Context:
	[1:Rule applied on node=!debug only! [ClassOrInterfaceDeclaration:14:8]@State(Scope.Thread)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(Mode.AverageTime)
public class BenchRemainderVsCondition {
    in(truncated)]
---------------------------------
    at net.sourceforge.pmd.util.AssertionUtil.contexted (AssertionUtil.java:232)
    at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex (RuleApplicator.java:77)
    at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.apply (RuleApplicator.java:55)
    at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:158)
    at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource (PmdRunnable.java:140)
    at net.sourceforge.pmd.lang.impl.PmdRunnable.run (PmdRunnable.java:80)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1144)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:642)
    at java.lang.Thread.run (Thread.java:1583)
Caused by: java.lang.NullPointerException: Cannot invoke "net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub$EnclosingInfo.getEnclosingClass()" because "this.enclosingInfo" is null
    at net.sourceforge.pmd.lang.java.symbols.internal.asm.ClassStub.getEnclosingClass (ClassStub.java:355)
    at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.makeEnclosingOf (ClassTypeImpl.java:117)
    at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.<init> (ClassTypeImpl.java:77)
    at net.sourceforge.pmd.lang.java.types.ClassTypeImpl.<init> (ClassTypeImpl.java:64)
    at net.sourceforge.pmd.lang.java.types.TypeSystem.typeOf (TypeSystem.java:458)
    at net.sourceforge.pmd.lang.java.types.TypeSystem.rawType (TypeSystem.java:485)
    at net.sourceforge.pmd.lang.java.types.TypesFromReflection.loadClassMaybeArray (TypesFromReflection.java:237)
    at net.sourceforge.pmd.lang.java.types.TypesFromReflection.loadType (TypesFromReflection.java:205)
    at net.sourceforge.pmd.lang.java.types.TypeTestUtil.isA (TypeTestUtil.java:176)
    at net.sourceforge.pmd.lang.java.types.TypeTestUtil.isA (TypeTestUtil.java:122)
    at net.sourceforge.pmd.lang.java.rule.xpath.internal.BaseContextNodeTestFun$1.call (BaseContextNodeTestFun.java:71)
    at net.sf.saxon.lib.ExtensionFunctionCall.effectiveBooleanValue (ExtensionFunctionCall.java:187)
    at net.sf.saxon.functions.IntegratedFunctionCall.effectiveBooleanValue (IntegratedFunctionCall.java:344)
    at net.sf.saxon.expr.OrExpression.effectiveBooleanValue (OrExpression.java:137)
    at net.sf.saxon.expr.OrExpression.effectiveBooleanValue (OrExpression.java:137)
    at net.sf.saxon.expr.OrExpression.effectiveBooleanValue (OrExpression.java:137)
    at net.sf.saxon.expr.FilterIterator$NonNumeric.matches (FilterIterator.java:180)
    at net.sf.saxon.expr.FilterIterator.getNextMatchingItem (FilterIterator.java:77)
    at net.sf.saxon.expr.FilterIterator.next (FilterIterator.java:63)
    at net.sourceforge.pmd.lang.rule.xpath.internal.SaxonXPathRuleQuery.evaluate (SaxonXPathRuleQuery.java:127)
    at net.sourceforge.pmd.lang.rule.XPathRule.apply (XPathRule.java:131)
    at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.applyOnIndex (RuleApplicator.java:75)
    at net.sourceforge.pmd.lang.rule.internal.RuleApplicator.apply (RuleApplicator.java:55)
    at net.sourceforge.pmd.RuleSets.apply (RuleSets.java:158)
    at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource (PmdRunnable.java:140)
    at net.sourceforge.pmd.lang.impl.PmdRunnable.run (PmdRunnable.java:80)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1144)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:642)
    at java.lang.Thread.run (Thread.java:1583)

@adangel adangel self-assigned this Feb 24, 2024
adangel added a commit to adangel/pmd that referenced this issue Feb 24, 2024
adangel added a commit to adangel/pmd that referenced this issue Feb 25, 2024
@adangel adangel unpinned this issue Mar 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a:bug PMD crashes or fails to analyse a file.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants