> 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 incrementally with one additional 
commit since the last revision:

  Add a test

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/24604/files
  - new: https://git.openjdk.org/jdk/pull/24604/files/7d2d5d0c..f61e9201

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=24604&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=24604&range=01-02

  Stats: 169 lines in 5 files changed: 165 ins; 0 del; 4 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

Reply via email to