https://bz.apache.org/bugzilla/show_bug.cgi?id=62086

            Bug ID: 62086
           Summary: NullPointerException in ChainedMapper.mapFileName when
                    building Lucene with Ant 1.10.2
           Product: Ant
           Version: 1.10.2
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Core
          Assignee: notifications@ant.apache.org
          Reporter: jpou...@gmail.com
  Target Milestone: ---

Ant 1.10.2 fails to build Lucene/Solr while 1.10.1 succeeds. Here is what the
error looks like:

BUILD FAILED
/home/jpountz/src/lucene-solr/build.xml:21: The following error occurred while
executing this line:
/home/jpountz/src/lucene-solr/lucene/common-build.xml:624:
java.lang.NullPointerException
        at java.base/java.util.Arrays.stream(Arrays.java:5610)
        at java.base/java.util.stream.Stream.of(Stream.java:1187)
        at
java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:269)
        at
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at
java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
        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.AbstractPipeline.evaluate(AbstractPipeline.java:550)
        at
java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
        at
java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:450)
        at
org.apache.tools.ant.util.ChainedMapper.lambda$mapFileName$1(ChainedMapper.java:36)
        at
java.base/java.util.stream.ReduceOps$1ReducingSink.accept(ReduceOps.java:80)
        at
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1494)
        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.reduce(ReferencePipeline.java:496)
        at
org.apache.tools.ant.util.ChainedMapper.mapFileName(ChainedMapper.java:35)
        at
org.apache.tools.ant.util.CompositeMapper.lambda$mapFileName$0(CompositeMapper.java:32)
        at
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at
java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
        at
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1494)
        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.AbstractPipeline.evaluate(AbstractPipeline.java:550)
        at
java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
        at
java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:450)
        at
org.apache.tools.ant.util.CompositeMapper.mapFileName(CompositeMapper.java:33)
        at
org.apache.tools.ant.taskdefs.PathConvert.execute(PathConvert.java:363)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:346)
        at org.apache.tools.ant.Target.execute(Target.java:448)
        at
org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:172)
        at
org.apache.tools.ant.taskdefs.ImportTask.importResource(ImportTask.java:221)
        at
org.apache.tools.ant.taskdefs.ImportTask.execute(ImportTask.java:165)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:346)
        at org.apache.tools.ant.Target.execute(Target.java:448)
        at
org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:183)
        at
org.apache.tools.ant.ProjectHelper.configureProject(ProjectHelper.java:93)
        at org.apache.tools.ant.Main.runBuild(Main.java:824)
        at org.apache.tools.ant.Main.startAnt(Main.java:228)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:283)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)

Total time: 0 seconds



This is due to the fact that ChainedMapper.mapFileName was refactored to use
streams rather than an explicit for loop but some null checks haven't been
migrated.

Specifically, one of the sub mappers is a GlobPatternMapper, which sometimes
returns null. This is problematic since ChainedMapper.mapFileNamp calls
Arrays.stream on the result array without checking for nulls.

Replacing ".map(m::mapFileName).flatMap(Stream::of).toArray(String[]::new)"
with
".map(m::mapFileName).filter(Objects::nonNull).flatMap(Stream::of).toArray(String[]::new)"
seems to fix the issue but I don't know Ant well enough to know whether this is
the appropriate fix.

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to