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;
     }
 

Reply via email to