Affects PMD Version: 7.0.0-SNAPSHOT
Description:
Sometimes, not always, a NullPointerException occurs. I've noticed two different stacktraces.
Exception Stacktrace 1aorg.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.PmdViolationCheckMojoTestException 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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4