< prev index next >
src/jdk.jextract/share/classes/com/sun/tools/jextract/AsmCodeFactoryExt.java
Print this page
@@ -24,11 +24,16 @@
import java.foreign.Libraries;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import com.sun.tools.jextract.tree.Tree;
import jdk.internal.org.objectweb.asm.FieldVisitor;
import jdk.internal.org.objectweb.asm.ClassWriter;
import jdk.internal.org.objectweb.asm.MethodVisitor;
import jdk.internal.org.objectweb.asm.Type;
import com.sun.tools.jextract.tree.EnumTree;
@@ -136,20 +141,18 @@
return false;
}
}
@Override
- protected synchronized void produce() {
- super.produce();
- types.put(getSimpleClassName(), getClassBytes());
+ public Map<String, byte[]> generateNativeHeader(List<Tree> decls) {
+ Map<String, byte[]> results = new HashMap<>();
+ results.putAll(super.generateNativeHeader(decls));
+ results.put(getClassName(), getClassBytes());
+ return Collections.unmodifiableMap(results);
}
// Internals only below this point
- // not fully qualified
- private String getSimpleClassName() {
- return headerFile.clsName + STATICS_CLASS_NAME_SUFFIX;
- }
private String getClassName() {
return headerClassName + STATICS_CLASS_NAME_SUFFIX;
}
@@ -161,11 +164,11 @@
// map each C enum constant as a static final field of the static forwarder class
private void addEnumConstant(FieldTree fieldTree) {
assert (fieldTree.isEnumConstant());
String name = fieldTree.name();
- String desc = dict.lookup(fieldTree.type()).getDescriptor();
+ String desc = headerFile.dictionary().lookup(fieldTree.type()).getDescriptor();
if (desc.length() != 1) {
throw new AssertionError("expected single char descriptor: " + desc);
}
FieldVisitor fv = null;
switch (desc.charAt(0)) {
< prev index next >