> When jdeps was migrated from old classfile to ClassFile API, the parsing > semantic changed - error checks are now made lazily, and nested crashes from > malformed signature or other problems is now latent, after a `ClassModel` > instance is available. (The old error check existed only for constructing a > `ClassModel`) > > To address this issue, I have updated the way of iterating class files to be > handler/consumer based like in the ClassFile API. This has the advantage that > when one invocation of the handler fails of a `ClassFileError`, other > invocations for other class files can proceed, and the exception handler has > sufficient information to report a useful message indicating the source of > error. > > For the particular example of examining a proguard processed > `dummy-scala.jar`, here is the new output of `jdeps dummy-scala.jar`: > > Warning: com.sun.tools.jdeps.Dependencies$ClassFileError: Unexpected > character ; at position 59, expected an identifier: > Lscala/collection/immutable/TreeMap$TreeMapBuilder<TA;TB;>.;: > scala/collection/immutable/TreeMap$TreeMapBuilder.class (dummy-scala.jar) > Warning: com.sun.tools.jdeps.Dependencies$ClassFileError: Unexpected > character ; at position 49, expected an identifier: > Lscala/collection/parallel/mutable/ParArray<TT;>.;: > scala/collection/parallel/mutable/ParArray.class (dummy-scala.jar) > > > Now, jdeps shows the bad class files. Inspection into the files reveal that > proguard incorrectly deleted the simple class names with trailing `$`, for > example, the original signature of the broken ParArray was > `Lscala/collection/parallel/mutable/ParArray<TT;>.ParArrayIterator$;`, so the > `ParArrayIterator$` part was incorrectly dropped by proguard. > > Testing: langtools/tools/jdeps.
Chen Liang has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision: - Merge branch 'master' of https://github.com/openjdk/jdk into fix/jdeps-bad-class-skip - Redundant library entry - Use test case to switch between flat dir and jar - Add a test - Review remarks - 8341608: jdeps in JDK 23 crashes when parsing signatures while jdeps in JDK 22 works fine ------------- Changes: - all: https://git.openjdk.org/jdk/pull/24604/files - new: https://git.openjdk.org/jdk/pull/24604/files/6a7cef62..32bc0a32 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=24604&range=04 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=24604&range=03-04 Stats: 190967 lines in 560 files changed: 20599 ins; 168910 del; 1458 mod Patch: https://git.openjdk.org/jdk/pull/24604.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/24604/head:pull/24604 PR: https://git.openjdk.org/jdk/pull/24604