[External] : Re: Got: IllegalArgumentException: Could not resolve class
Adam Sotona
adam.sotona at oracle.com
Mon Apr 29 14:09:37 UTC 2024
It is good point that information about thisClass and superClass should be implicitly forwarded to the class hierarchy resolution for thisClass build.
Thank you,
Adam
From: Øystein Myhre Andersen <o.myhre at gmail.com>
Date: Monday, 29 April 2024 at 15:23
To: liangchenblue at gmail.com <liangchenblue at gmail.com>
Cc: Adam Sotona <adam.sotona at oracle.com>, classfile-api-dev at openjdk.org <classfile-api-dev at openjdk.org>
Subject: [External] : Re: Got: IllegalArgumentException: Could not resolve class
Proposal:
I defined a utility class:
public abstract class ClassHierarchy {
private static Map<ClassDesc, ClassDesc> classToSuperClass = new HashMap<ClassDesc, ClassDesc>();
private static Collection<ClassDesc> interfaces = new Vector<ClassDesc>();
public static ClassHierarchyResolver getResolver() {
ClassHierarchyResolver res = ClassHierarchyResolver.defaultResolver()
.orElse(ClassHierarchyResolver.of(interfaces, classToSuperClass));
return res;
}
public static void addClassToSuperClass(ClassDesc cld, ClassDesc sup) {
classToSuperClass.put(cld, sup);
}
}
And built my class files with a method like:
public byte[] buildClassFile() {
ClassDesc CD_ThisClass = ...
ClassDesc CD_SuperClass = ...
ClassHierarchy.addClassToSuperClass(CD_ThisClass, CD_SuperClass);
byte[] bytes = ClassFile.of(ClassFile.ClassHierarchyResolverOption
.of(ClassHierarchy.getResolver())).build(CD_ThisClass,
classBuilder -> {
classBuilder
.withSuperclass(CD_SuperClass);
... ...
This could perhaps have been done internally by letting .withSuperclass(CD_SuperClass);
make a call ala ClassHierarchy.addClassToSuperClass(CD_ThisClass, CD_SuperClass);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/classfile-api-dev/attachments/20240429/d369782e/attachment.htm>
More information about the classfile-api-dev
mailing list