Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8293701

jdeps InverseDepsAnalyzer runs into NoSuchElementException: No value present

    XMLWordPrintable

Details

    • b18
    • generic
    • generic

    Backports

      Description

        We noticed that with certain jar file input, jdeps runs into the following exception, this happens with jdk11, 17 and 20.

        C:\jdk-11.0.16.1\bin\jdeps.exe --multi-release 11 --module-path . --inverse --package com.sap.nw.performance.supa.client test.jar

        Inverse transitive dependences matching packages [com.sap.nw.performance.supa.client]
        Exception in thread "main" java.util.NoSuchElementException: No value present
                at java.base/java.util.Optional.get(Optional.java:148)
                at jdk.jdeps/com.sun.tools.jdeps.InverseDepsAnalyzer.lambda$inverseDependences$2(InverseDepsAnalyzer.java:150)
                at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
                at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
                at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
                at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
                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.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
                at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
                at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
                at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
                at jdk.jdeps/com.sun.tools.jdeps.InverseDepsAnalyzer.lambda$inverseDependences$3(InverseDepsAnalyzer.java:150)
                at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
                at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
                at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
                at jdk.jdeps/com.sun.tools.jdeps.InverseDepsAnalyzer.inverseDependences(InverseDepsAnalyzer.java:145)
                at jdk.jdeps/com.sun.tools.jdeps.JdepsTask$InverseAnalyzeDeps.run(JdepsTask.java:860)
                at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:574)
                at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:533)
                at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)


        C:\jdk-17.0.4.1\bin\jdeps --multi-release 11 --module-path . --inverse --package com.sap.nw.performance.supa.client test.jar

        Inverse transitive dependences matching packages [com.sap.nw.performance.supa.client]
        Exception in thread "main" java.util.NoSuchElementException: No value present
                at java.base/java.util.Optional.get(Optional.java:143)
                at jdk.jdeps/com.sun.tools.jdeps.InverseDepsAnalyzer.lambda$inverseDependences$2(InverseDepsAnalyzer.java:150)
                at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
                at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
                at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
                at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
                at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
                at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
                at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
                at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
                at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
                at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
                at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
                at jdk.jdeps/com.sun.tools.jdeps.InverseDepsAnalyzer.lambda$inverseDependences$3(InverseDepsAnalyzer.java:150)
                at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
                at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
                at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
                at jdk.jdeps/com.sun.tools.jdeps.InverseDepsAnalyzer.inverseDependences(InverseDepsAnalyzer.java:145)
                at jdk.jdeps/com.sun.tools.jdeps.JdepsTask$InverseAnalyzeDeps.run(JdepsTask.java:860)
                at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:574)
                at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:533)
                at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)


        Looks like the iteration/streams - related coding in InverseDepsAnalyzer.java might need some adjustments , to be able to deal with "empty" optionals (v.get() seems to fail) ?

        https://github.com/openjdk/jdk/blob/master/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/InverseDepsAnalyzer.java#L150

        Attachments

          Issue Links

            Activity

              People

                mbaesken Matthias Baesken
                mbaesken Matthias Baesken
                Votes:
                0 Vote for this issue
                Watchers:
                8 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved: