This is an automated email from the ASF dual-hosted git repository. sunlan pushed a commit to branch danielsun/tweak-native-record-20210926 in repository https://gitbox.apache.org/repos/asf/groovy.git
commit de132dd9d70c126ab19a7823057b77ce634de73a Author: Daniel Sun <[email protected]> AuthorDate: Sun Sep 26 13:32:05 2021 +0800 Trivial refactoring --- .../java/org/codehaus/groovy/classgen/AsmClassGenerator.java | 10 ++++++++++ .../org/codehaus/groovy/classgen/asm/WriterController.java | 12 +++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java index aaba8cc..87501a5 100644 --- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java +++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java @@ -103,6 +103,7 @@ import org.codehaus.groovy.classgen.asm.OperandStack; import org.codehaus.groovy.classgen.asm.OptimizingStatementWriter; import org.codehaus.groovy.classgen.asm.WriterController; import org.codehaus.groovy.classgen.asm.WriterControllerFactory; +import org.codehaus.groovy.control.CompilerConfiguration; import org.codehaus.groovy.control.SourceUnit; import org.codehaus.groovy.runtime.ScriptBytecodeAdapter; import org.codehaus.groovy.syntax.RuntimeParserException; @@ -252,6 +253,8 @@ public class AsmClassGenerator extends ClassGenerator { private static final MethodCaller createPojoWrapperMethod = MethodCaller.newStatic(ScriptBytecodeAdapter.class, "createPojoWrapper"); private static final MethodCaller createGroovyObjectWrapperMethod = MethodCaller.newStatic(ScriptBytecodeAdapter.class, "createGroovyObjectWrapper"); + private static final String RECORD_CLASS_NAME = "java.lang.Record"; + private final Map<String,ClassNode> referencedClasses = new HashMap<>(); private boolean passingParams; @@ -311,6 +314,13 @@ public class AsmClassGenerator extends ClassGenerator { bytecodeVersion = minVersion; } } + + CompilerConfiguration config = classNode.getCompileUnit().getConfig(); + if (bytecodeVersion >= Opcodes.V16 && classNode.isRecord() && config.isRecordsNative()) { + // `java.lang.Record` has been added since JDK16 + classNode.setSuperClass(ClassHelper.makeWithoutCaching(RECORD_CLASS_NAME)); + } + classVisitor.visit( bytecodeVersion, adjustedClassModifiersForClassWriting(classNode), diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java b/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java index 7a08d52..f05bb7e 100644 --- a/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java +++ b/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java @@ -19,7 +19,6 @@ package org.codehaus.groovy.classgen.asm; import org.codehaus.groovy.GroovyBugError; -import org.codehaus.groovy.ast.ClassHelper; import org.codehaus.groovy.ast.ClassNode; import org.codehaus.groovy.ast.ConstructorNode; import org.codehaus.groovy.ast.InterfaceHelperClassNode; @@ -47,7 +46,6 @@ import static org.codehaus.groovy.ast.ClassHelper.isGeneratedFunction; public class WriterController { private static final boolean LOG_CLASSGEN = getBooleanSafe("groovy.log.classgen"); - private static final String RECORD_CLASS_NAME = "java.lang.Record"; private AsmClassGenerator acg; private MethodVisitor methodVisitor; @@ -98,14 +96,8 @@ public class WriterController { this.classNode = cn; this.outermostClass = null; this.internalClassName = BytecodeHelper.getClassInternalName(cn); - this.bytecodeVersion = chooseBytecodeVersion(invokedynamic, config.isPreviewFeatures(), config.getTargetBytecode()); - if (bytecodeVersion >= Opcodes.V16 && cn.isRecord() && config.isRecordsNative()) { - // `java.lang.Record` has been added since JDK16 - cn.setSuperClass(ClassHelper.makeWithoutCaching(RECORD_CLASS_NAME)); - } - if (invokedynamic) { this.invocationWriter = new InvokeDynamicWriter(this); this.callSiteWriter = new IndyCallSiteWriter(this); @@ -132,7 +124,6 @@ public class WriterController { this.lambdaWriter = new LambdaWriter(this); this.methodPointerExpressionWriter = new MethodPointerExpressionWriter(this); this.methodReferenceExpressionWriter = new MethodReferenceExpressionWriter(this); - this.internalBaseClassName = BytecodeHelper.getClassInternalName(cn.getSuperClass()); this.acg = asmClassGenerator; this.context = gcon; this.compileStack = new CompileStack(this); @@ -325,6 +316,9 @@ public class WriterController { } public String getInternalBaseClassName() { + if (null == internalBaseClassName) { + internalBaseClassName = BytecodeHelper.getClassInternalName(classNode.getSuperClass()); + } return internalBaseClassName; }
