> ## Summary > > Follow-up to [JDK-8341608](https://bugs.openjdk.org/browse/JDK-8341608), > which addressed `ClassFileError` propagation in jdeps but did not fix the > underlying signature parsing. > > `SignaturesImpl.classTypeSig()` throws `IllegalArgumentException` when > parsing a class type signature that contains an empty identifier after the > inner class separator `.`. > > ## Problem > > The Scala compiler emits class type signatures such as: > > > Lcoursierapi/shaded/scala/collection/immutable/TreeMap$TreeMapBuilder<TK;TV;>.; > > Here the `.` after the type arguments is followed directly by `;` with no > inner class name. While this violates JVMS ยง4.7.9.1 (which requires an > identifier after `.`), such signatures exist widely in published Scala > artifacts on Maven Central and cannot be recompiled. > > Running `jdeps` against JARs containing these signatures crashes with: > > Exception in thread "main" com.sun.tools.jdeps.Dependencies$ClassFileError > Caused by: java.lang.IllegalArgumentException: > Unexpected character ; at position 78, expected an identifier > > ## Fix > > In `classTypeSig()`, the identifier after `.` is now optional when an outer > type is already present. On the first iteration (no outer type), an > identifier is still strictly required. > > ## Test > > Added `LOuter<TK;TV;>.;` to `goodTypeSignatures` in `SignaturesTest`.
Hyeonsoo Lee has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision: jdeps: catch ClassFileError in transitive dependency analysis path DependencyFinder.parse(Archive, Finder, String) is used by DepsAnalyzer.transitiveDeps() to resolve individual classes by name. Unlike ClassFileReader.forEachClassFile(), this code path did not catch Dependencies.ClassFileError, causing jdeps to crash when encountering malformed class files during transitive analysis. This is a follow-up to JDK-8341608, which added ClassFileError handling only in the initial archive parsing path. ------------- Changes: - all: https://git.openjdk.org/jdk/pull/30041/files - new: https://git.openjdk.org/jdk/pull/30041/files/97d5464e..56417b83 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=30041&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=30041&range=00-01 Stats: 79 lines in 4 files changed: 67 ins; 4 del; 8 mod Patch: https://git.openjdk.org/jdk/pull/30041.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/30041/head:pull/30041 PR: https://git.openjdk.org/jdk/pull/30041
