From b1d89f30663aed28783e839c5690f46a2b382002 Mon Sep 17 00:00:00 2001 From: Adam Sotona Date: Fri, 10 Mar 2023 10:15:37 +0000 Subject: [PATCH] 8294971: jdk.jlink jdk.tools.jimage.JImageTask is using ASM to verify classes Reviewed-by: mchung --- src/java.base/share/classes/module-info.java | 2 ++ .../classes/jdk/tools/jimage/JImageTask.java | 16 +++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/java.base/share/classes/module-info.java b/src/java.base/share/classes/module-info.java index 98a15ca6184..8aab97eb31c 100644 --- a/src/java.base/share/classes/module-info.java +++ b/src/java.base/share/classes/module-info.java @@ -190,6 +190,8 @@ module java.base { jdk.jlink; exports jdk.internal.logger to java.logging; + exports jdk.internal.classfile to + jdk.jlink; exports jdk.internal.org.objectweb.asm to jdk.jartool, jdk.jfr, diff --git a/src/jdk.jlink/share/classes/jdk/tools/jimage/JImageTask.java b/src/jdk.jlink/share/classes/jdk/tools/jimage/JImageTask.java index 5fcb174b8e6..731a1ffedb5 100644 --- a/src/jdk.jlink/share/classes/jdk/tools/jimage/JImageTask.java +++ b/src/jdk.jlink/share/classes/jdk/tools/jimage/JImageTask.java @@ -39,12 +39,14 @@ import java.util.MissingResourceException; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; +import jdk.internal.classfile.ClassModel; +import jdk.internal.classfile.Classfile; +import jdk.internal.classfile.CodeModel; +import jdk.internal.classfile.MethodModel; import jdk.internal.jimage.BasicImageReader; import jdk.internal.jimage.ImageHeader; import jdk.internal.jimage.ImageLocation; -import jdk.internal.org.objectweb.asm.ClassReader; -import jdk.internal.org.objectweb.asm.tree.ClassNode; import jdk.tools.jlink.internal.ImageResourcesTree; import jdk.tools.jlink.internal.TaskHelper; import jdk.tools.jlink.internal.TaskHelper.BadArgs; @@ -366,9 +368,13 @@ class JImageTask { if (name.endsWith(".class") && !name.endsWith("module-info.class")) { try { byte[] bytes = reader.getResource(location); - ClassReader cr = new ClassReader(bytes); - ClassNode cn = new ClassNode(); - cr.accept(cn, 0); + Classfile.parse(bytes).forEachElement(cle -> { + if (cle instanceof MethodModel mm) mm.forEachElement(me -> { + if (me instanceof CodeModel com) com.forEachElement(coe -> { + //do nothing here, just visit each model element + }); + }); + }); } catch (Exception ex) { log.println("Error(s) in Class: " + name); }