-
Notifications
You must be signed in to change notification settings - Fork 160
Open
Description
Testing on a project that uses Google's immutables AP, I ran into this NPE :
java.lang.NullPointerException: Cannot invoke "java.lang.CharSequence.length()" because "this.text" is null
at java.base/java.util.regex.Matcher.getTextLength(Matcher.java:1806)
at java.base/java.util.regex.Matcher.reset(Matcher.java:459)
at java.base/java.util.regex.Matcher.<init>(Matcher.java:255)
at java.base/java.util.regex.Pattern.matcher(Pattern.java:1181)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeProcessingEnvImpl.lambda$4(IdeProcessingEnvImpl.java:106)
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$0(Collectors.java:180)
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1716)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:723)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeProcessingEnvImpl.getOptions(IdeProcessingEnvImpl.java:95)
at org.immutables.value.internal.$processor$.$Processor$RestrictingIncrementalProcessingEnvironment.<init>($Processor.java:149)
at org.immutables.value.internal.$processor$.$Processor$RestrictingIncrementalProcessingEnvironment.<init>($Processor.java:142)
at org.immutables.value.internal.$processor$.$Processor.init($Processor.java:139)
at org.immutables.processor.ProxyProcessor.init(ProxyProcessor.java:67)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.discoverNextProcessor(IdeAnnotationProcessorManager.java:91)
at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:120)
at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:177)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:132)
at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:859)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:333)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:309)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:486)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:253)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:377)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:118)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:312)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:224)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1109)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:299)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:355)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:449)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:452)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:564)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:512)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:594)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:208)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:309)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
This project in particular uses a processor option with no value (https://github.com/apache/arrow-java/blob/266dfc12151a49dd49153890eb16e97937c5667c/memory/memory-core/pom.xml#L71). It's defined by another AP, checker
There's no null check on optionValue here:
Line 106 in cb0ce53
| Matcher placeholder = Pattern.compile("%([^%]+)%").matcher(optionValue); |
The UI allows setting keys without values:

Metadata
Metadata
Assignees
Labels
No labels