From 3c0f5222466f6320ad748e886651255ef8136981 Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Mon, 15 Jul 2024 15:41:24 +0200 Subject: [PATCH] CodeGenerator should be able to generate basic code for records generates a final class as workaround instead of throwing an exception --- .../netbeans/modules/java/classfile/CodeGenerator.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/java/java.source/src/org/netbeans/modules/java/classfile/CodeGenerator.java b/java/java.source/src/org/netbeans/modules/java/classfile/CodeGenerator.java index 5c72770889b5..db4d16d9d7fb 100644 --- a/java/java.source/src/org/netbeans/modules/java/classfile/CodeGenerator.java +++ b/java/java.source/src/org/netbeans/modules/java/classfile/CodeGenerator.java @@ -393,6 +393,9 @@ public Tree visitType(TypeElement e, Void p) { List members = new LinkedList(); for (Element m : e.getEnclosedElements()) { + if (m.getKind() == ElementKind.RECORD_COMPONENT) { + continue; // TODO update to 'extend AbstractElementVisitor14'; visiting record components causes UnknownElementException + } Tree member = visit(m); if (member != null) @@ -408,6 +411,10 @@ public Tree visitType(TypeElement e, Void p) { return addDeprecated(e, make.Interface(mods, e.getSimpleName(), constructTypeParams(e.getTypeParameters()), computeSuper(e.getInterfaces()), members)); case ENUM: return addDeprecated(e, make.Enum(mods, e.getSimpleName(), computeSuper(e.getInterfaces()), members)); + case RECORD: + // TODO generates final class atm + return addDeprecated(e, make.Class(mods, e.getSimpleName(), constructTypeParams(e.getTypeParameters()), null, computeSuper(e.getInterfaces()), members)); +// return addDeprecated(e, make.Record(mods, e.getSimpleName(), computeSuper(e.getInterfaces()), members)); case ANNOTATION_TYPE: return addDeprecated(e, make.AnnotationType(mods, e.getSimpleName(), members)); default: @@ -782,6 +789,8 @@ public void writeInstr(Instruction instr) { IMPLICIT_MODIFIERS = new HashMap, Set>(); IMPLICIT_MODIFIERS.put(Arrays.asList(ElementKind.ENUM), EnumSet.of(Modifier.STATIC, Modifier.ABSTRACT, Modifier.FINAL)); + // TODO implement record support +// IMPLICIT_MODIFIERS.put(Arrays.asList(ElementKind.RECORD), EnumSet.of(Modifier.STATIC, Modifier.ABSTRACT, Modifier.FINAL)); IMPLICIT_MODIFIERS.put(Arrays.asList(ElementKind.ANNOTATION_TYPE), EnumSet.of(Modifier.STATIC, Modifier.ABSTRACT)); IMPLICIT_MODIFIERS.put(Arrays.asList(ElementKind.METHOD, ElementKind.ANNOTATION_TYPE), EnumSet.of(Modifier.ABSTRACT)); IMPLICIT_MODIFIERS.put(Arrays.asList(ElementKind.METHOD, ElementKind.INTERFACE), EnumSet.of(Modifier.ABSTRACT));