You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2020/09/16 04:49:18 UTC
[groovy] 02/03: GROOVY-9736: Remove org.objectweb.asm.Opcodes as
implemented interface in most (all?) places (closes #1367)
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit d404ecd20a844b75fa7ca33097b81f51d3d9f374
Author: Paul King <pa...@asert.com.au>
AuthorDate: Sun Sep 13 15:25:02 2020 +1000
GROOVY-9736: Remove org.objectweb.asm.Opcodes as implemented interface in most (all?) places (closes #1367)
---
.../TimedInterruptibleASTTransformation.groovy | 2 +
.../java/org/codehaus/groovy/ast/ClassNode.java | 10 +++-
.../java/org/codehaus/groovy/ast/CompileUnit.java | 2 +
.../java/org/codehaus/groovy/ast/FieldNode.java | 11 +++-
.../java/org/codehaus/groovy/ast/MethodNode.java | 10 +++-
.../groovy/ast/MixinASTTransformation.java | 3 +
.../java/org/codehaus/groovy/ast/ModuleNode.java | 7 ++-
.../java/org/codehaus/groovy/ast/PropertyNode.java | 7 ++-
.../groovy/ast/tools/WideningCategories.java | 3 +
.../groovy/classgen/AsmClassGenerator.java | 53 +++++++++++++++++
.../codehaus/groovy/classgen/ClassGenerator.java | 2 +-
.../groovy/classgen/DummyClassGenerator.java | 9 ++-
.../classgen/InnerClassCompletionVisitor.java | 14 ++++-
.../groovy/classgen/InnerClassVisitor.java | 8 ++-
.../groovy/classgen/asm/BytecodeHelper.java | 67 ++++++++++++++++++----
.../codehaus/groovy/classgen/asm/CompileStack.java | 14 ++++-
.../codehaus/groovy/classgen/asm/MethodCaller.java | 9 ++-
.../sc/IndyStaticTypesMultiTypeDispatcher.java | 2 +
...icTypesBinaryExpressionMultiTypeDispatcher.java | 19 +++++-
.../classgen/asm/sc/StaticTypesCallSiteWriter.java | 24 +++++++-
.../asm/sc/StaticTypesUnaryExpressionHelper.java | 17 +++++-
.../codehaus/groovy/reflection/SunClassLoader.java | 13 +++--
.../groovy/runtime/ProxyGeneratorAdapter.java | 40 ++++++++++++-
.../org/codehaus/groovy/tools/DgmConverter.java | 21 ++++++-
.../transform/AbstractASTTransformation.java | 2 +-
.../transform/AutoCloneASTTransformation.java | 3 +
.../transform/BaseScriptASTTransformation.java | 1 +
.../transform/DelegateASTTransformation.java | 5 ++
.../EqualsAndHashCodeASTTransformation.java | 3 +
.../ExternalizeMethodsASTTransformation.java | 2 +
.../ExternalizeVerifierASTTransformation.java | 2 +
.../transform/ImmutableASTTransformation.java | 5 ++
.../IndexedPropertyASTTransformation.java | 2 +
.../groovy/transform/LazyASTTransformation.java | 6 ++
.../transform/MapConstructorASTTransformation.java | 1 +
.../transform/MemoizedASTTransformation.java | 8 ++-
.../transform/PackageScopeASTTransformation.java | 3 +
.../transform/ReadWriteLockASTTransformation.java | 4 +-
.../transform/SingletonASTTransformation.java | 5 ++
.../transform/SortableASTTransformation.java | 5 ++
.../transform/SynchronizedASTTransformation.java | 3 +
.../transform/ToStringASTTransformation.java | 3 +
.../TupleConstructorASTTransformation.java | 1 +
.../sc/transformers/CompareIdentityExpression.java | 8 ++-
.../sc/transformers/CompareToNullExpression.java | 9 ++-
.../transformers/ConstructorCallTransformer.java | 8 ++-
.../transform/trait/TraitASTTransformation.java | 7 +++
.../metaprogramming/MacroExpressionTest.groovy | 2 +
.../test/metaprogramming/MacroStatementTest.groovy | 2 +
.../MacroVariableSubstitutionTest.groovy | 2 +
src/test/groovy/lang/GroovyClassLoaderTest.groovy | 4 +-
.../test/groovy/groovy/ant/Groovy8872Test.groovy | 3 +
.../ast/visitor/AnnotationClosureVisitor.java | 2 +-
.../groovy/contracts/util/ExpressionUtils.java | 2 +-
54 files changed, 420 insertions(+), 60 deletions(-)
diff --git a/src/main/groovy/org/codehaus/groovy/transform/TimedInterruptibleASTTransformation.groovy b/src/main/groovy/org/codehaus/groovy/transform/TimedInterruptibleASTTransformation.groovy
index 8b64587..4cf9168 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/TimedInterruptibleASTTransformation.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/TimedInterruptibleASTTransformation.groovy
@@ -57,6 +57,8 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.plusX
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX
import static org.codehaus.groovy.ast.tools.GeneralUtils.throwS
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX
+import static org.objectweb.asm.Opcodes.ACC_FINAL
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE
/**
* Allows "interrupt-safe" executions of scripts by adding timer expiration
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassNode.java b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
index a70ac43..6e8d714 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
@@ -32,7 +32,6 @@ import org.codehaus.groovy.control.CompilePhase;
import org.codehaus.groovy.transform.ASTTransformation;
import org.codehaus.groovy.transform.GroovyASTTransformation;
import org.codehaus.groovy.vmplugin.VMPluginFactory;
-import org.objectweb.asm.Opcodes;
import java.lang.reflect.Array;
import java.util.ArrayList;
@@ -52,6 +51,13 @@ import java.util.stream.Collectors;
import static java.util.Arrays.stream;
import static java.util.stream.Collectors.joining;
import static org.apache.groovy.ast.tools.MethodNodeUtils.getCodeAsBlock;
+import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
+import static org.objectweb.asm.Opcodes.ACC_ANNOTATION;
+import static org.objectweb.asm.Opcodes.ACC_ENUM;
+import static org.objectweb.asm.Opcodes.ACC_INTERFACE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
/**
* Represents a class in the AST.
@@ -109,7 +115,7 @@ import static org.apache.groovy.ast.tools.MethodNodeUtils.getCodeAsBlock;
*
* @see org.codehaus.groovy.ast.ClassHelper
*/
-public class ClassNode extends AnnotatedNode implements Opcodes {
+public class ClassNode extends AnnotatedNode {
private static class MapOfLists {
Map<Object, List<MethodNode>> map;
diff --git a/src/main/java/org/codehaus/groovy/ast/CompileUnit.java b/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
index 9ed2172..082252c 100644
--- a/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
+++ b/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
@@ -34,6 +34,8 @@ import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+
/**
* Represents the entire contents of a compilation step which consists of one or more
* {@link ModuleNode} instances. There's one instance of this that's shared by all modules and
diff --git a/src/main/java/org/codehaus/groovy/ast/FieldNode.java b/src/main/java/org/codehaus/groovy/ast/FieldNode.java
index 28208cd..64b2090 100644
--- a/src/main/java/org/codehaus/groovy/ast/FieldNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/FieldNode.java
@@ -19,14 +19,21 @@
package org.codehaus.groovy.ast;
import org.codehaus.groovy.ast.expr.Expression;
-import org.objectweb.asm.Opcodes;
import java.lang.reflect.Field;
+import static org.objectweb.asm.Opcodes.ACC_ENUM;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PROTECTED;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_VOLATILE;
+
/**
* Represents a field (member variable)
*/
-public class FieldNode extends AnnotatedNode implements Opcodes, Variable {
+public class FieldNode extends AnnotatedNode implements Variable {
private String name;
private int modifiers;
diff --git a/src/main/java/org/codehaus/groovy/ast/MethodNode.java b/src/main/java/org/codehaus/groovy/ast/MethodNode.java
index f91cd7a..9b4a3cb 100644
--- a/src/main/java/org/codehaus/groovy/ast/MethodNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/MethodNode.java
@@ -21,15 +21,21 @@ package org.codehaus.groovy.ast;
import org.apache.groovy.ast.tools.MethodNodeUtils;
import org.codehaus.groovy.ast.stmt.BlockStatement;
import org.codehaus.groovy.ast.stmt.Statement;
-import org.objectweb.asm.Opcodes;
import java.util.List;
import java.util.Optional;
+import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PROTECTED;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+
/**
* Represents a method declaration.
*/
-public class MethodNode extends AnnotatedNode implements Opcodes {
+public class MethodNode extends AnnotatedNode {
private final String name;
private int modifiers;
diff --git a/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java b/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java
index 5bbe7b0..39af998 100644
--- a/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java
@@ -33,6 +33,9 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.classX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
/**
* @deprecated static mixins have been deprecated in favour of traits (trait keyword).
diff --git a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
index 50d5785..1866f34 100644
--- a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
@@ -25,7 +25,6 @@ import org.codehaus.groovy.classgen.GeneratorContext;
import org.codehaus.groovy.control.SourceUnit;
import org.codehaus.groovy.runtime.InvokerHelper;
import org.codehaus.groovy.transform.BaseScriptASTTransformation;
-import org.objectweb.asm.Opcodes;
import java.io.File;
import java.net.URI;
@@ -47,13 +46,17 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
+import static org.objectweb.asm.Opcodes.ACC_INTERFACE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
/**
* Represents a module, which consists typically of a class declaration
* but could include some imports, some statements and multiple classes
* intermixed with statements like scripts in Python or Ruby
*/
-public class ModuleNode extends ASTNode implements Opcodes {
+public class ModuleNode extends ASTNode {
private List<ClassNode> classes = new LinkedList<>();
private final List<MethodNode> methods = new ArrayList<>();
diff --git a/src/main/java/org/codehaus/groovy/ast/PropertyNode.java b/src/main/java/org/codehaus/groovy/ast/PropertyNode.java
index 81b2a7e..726aff5 100644
--- a/src/main/java/org/codehaus/groovy/ast/PropertyNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/PropertyNode.java
@@ -20,12 +20,15 @@ package org.codehaus.groovy.ast;
import org.codehaus.groovy.ast.expr.Expression;
import org.codehaus.groovy.ast.stmt.Statement;
-import org.objectweb.asm.Opcodes;
+
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
/**
* Represents a property (member variable, a getter and setter)
*/
-public class PropertyNode extends AnnotatedNode implements Opcodes, Variable {
+public class PropertyNode extends AnnotatedNode implements Variable {
private FieldNode field;
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
index 85cdd76..a0b7c70 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
@@ -53,6 +53,9 @@ import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveType;
import static org.codehaus.groovy.ast.ClassHelper.long_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
import static org.codehaus.groovy.ast.GenericsType.GenericsTypeName;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+
/**
* This class provides helper methods to determine the type from a widening
* operation for example for a plus operation.
diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 93c2395..1f99040 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -109,6 +109,7 @@ import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import org.objectweb.asm.util.TraceMethodVisitor;
@@ -134,6 +135,58 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.thisPropX;
import static org.codehaus.groovy.transform.sc.StaticCompilationMetadataKeys.PROPERTY_OWNER;
+import static org.objectweb.asm.Opcodes.AASTORE;
+import static org.objectweb.asm.Opcodes.ACC_ENUM;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PROTECTED;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SUPER;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
+import static org.objectweb.asm.Opcodes.ACC_VARARGS;
+import static org.objectweb.asm.Opcodes.ACONST_NULL;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ANEWARRAY;
+import static org.objectweb.asm.Opcodes.ARETURN;
+import static org.objectweb.asm.Opcodes.ASTORE;
+import static org.objectweb.asm.Opcodes.ATHROW;
+import static org.objectweb.asm.Opcodes.BASTORE;
+import static org.objectweb.asm.Opcodes.CASTORE;
+import static org.objectweb.asm.Opcodes.CHECKCAST;
+import static org.objectweb.asm.Opcodes.DASTORE;
+import static org.objectweb.asm.Opcodes.DUP;
+import static org.objectweb.asm.Opcodes.DUP2;
+import static org.objectweb.asm.Opcodes.FASTORE;
+import static org.objectweb.asm.Opcodes.GETFIELD;
+import static org.objectweb.asm.Opcodes.GETSTATIC;
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.IASTORE;
+import static org.objectweb.asm.Opcodes.ICONST_0;
+import static org.objectweb.asm.Opcodes.ICONST_1;
+import static org.objectweb.asm.Opcodes.IFNONNULL;
+import static org.objectweb.asm.Opcodes.ILOAD;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.INVOKESTATIC;
+import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
+import static org.objectweb.asm.Opcodes.LASTORE;
+import static org.objectweb.asm.Opcodes.NEW;
+import static org.objectweb.asm.Opcodes.NEWARRAY;
+import static org.objectweb.asm.Opcodes.POP;
+import static org.objectweb.asm.Opcodes.PUTFIELD;
+import static org.objectweb.asm.Opcodes.PUTSTATIC;
+import static org.objectweb.asm.Opcodes.RETURN;
+import static org.objectweb.asm.Opcodes.SASTORE;
+import static org.objectweb.asm.Opcodes.SWAP;
+import static org.objectweb.asm.Opcodes.T_BOOLEAN;
+import static org.objectweb.asm.Opcodes.T_BYTE;
+import static org.objectweb.asm.Opcodes.T_CHAR;
+import static org.objectweb.asm.Opcodes.T_DOUBLE;
+import static org.objectweb.asm.Opcodes.T_FLOAT;
+import static org.objectweb.asm.Opcodes.T_INT;
+import static org.objectweb.asm.Opcodes.T_LONG;
+import static org.objectweb.asm.Opcodes.T_SHORT;
+import static org.objectweb.asm.Opcodes.V_PREVIEW;
/**
* Generates Java class versions of Groovy classes using ASM.
diff --git a/src/main/java/org/codehaus/groovy/classgen/ClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/ClassGenerator.java
index 237b06d..304c024 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ClassGenerator.java
@@ -28,7 +28,7 @@ import java.util.LinkedList;
/**
* Abstract base class for generator of Java class versions of Groovy AST classes
*/
-public abstract class ClassGenerator extends ClassCodeVisitorSupport implements Opcodes {
+public abstract class ClassGenerator extends ClassCodeVisitorSupport {
// inner classes created while generating bytecode
protected LinkedList<ClassNode> innerClasses = new LinkedList<ClassNode>();
diff --git a/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java
index f6c71dd..d6a095c 100644
--- a/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java
@@ -32,7 +32,12 @@ import org.codehaus.groovy.ast.PropertyNode;
import org.codehaus.groovy.classgen.asm.BytecodeHelper;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
+
+import static org.objectweb.asm.Opcodes.ATHROW;
+import static org.objectweb.asm.Opcodes.DUP;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.NEW;
+import static org.objectweb.asm.Opcodes.V1_3;
/**
* To generate a class that has all the fields and methods, except that fields are not initialized
@@ -72,7 +77,7 @@ public class DummyClassGenerator extends ClassGenerator {
this.internalBaseClassName = BytecodeHelper.getClassInternalName(classNode.getSuperClass());
cv.visit(
- Opcodes.V1_3,
+ V1_3,
classNode.getModifiers(),
internalClassName,
null,
diff --git a/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java b/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java
index 231dcae..da8bb4d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java
@@ -33,7 +33,6 @@ import org.codehaus.groovy.classgen.asm.BytecodeHelper;
import org.codehaus.groovy.control.CompilationUnit;
import org.codehaus.groovy.control.SourceUnit;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
import java.util.List;
import java.util.function.BiConsumer;
@@ -52,8 +51,17 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
-
-public class InnerClassCompletionVisitor extends InnerClassVisitorHelper implements Opcodes {
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ARETURN;
+import static org.objectweb.asm.Opcodes.CHECKCAST;
+import static org.objectweb.asm.Opcodes.GETFIELD;
+import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
+import static org.objectweb.asm.Opcodes.RETURN;
+
+public class InnerClassCompletionVisitor extends InnerClassVisitorHelper {
private ClassNode classNode;
private FieldNode thisField;
diff --git a/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java b/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java
index b6bd1fc..09e778f 100644
--- a/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java
@@ -41,14 +41,18 @@ import org.codehaus.groovy.ast.stmt.ExpressionStatement;
import org.codehaus.groovy.control.CompilationUnit;
import org.codehaus.groovy.control.SourceUnit;
import org.codehaus.groovy.transform.trait.Traits;
-import org.objectweb.asm.Opcodes;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
-public class InnerClassVisitor extends InnerClassVisitorHelper implements Opcodes {
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
+
+public class InnerClassVisitor extends InnerClassVisitorHelper {
private ClassNode classNode;
private FieldNode currentField;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
index 6dea156..3889a5d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
@@ -29,7 +29,6 @@ import org.codehaus.groovy.reflection.ReflectionCache;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
import java.lang.reflect.Modifier;
@@ -42,11 +41,52 @@ import static org.codehaus.groovy.ast.ClassHelper.float_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.long_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ARETURN;
+import static org.objectweb.asm.Opcodes.ASTORE;
+import static org.objectweb.asm.Opcodes.BIPUSH;
+import static org.objectweb.asm.Opcodes.CHECKCAST;
+import static org.objectweb.asm.Opcodes.DCMPL;
+import static org.objectweb.asm.Opcodes.DCONST_0;
+import static org.objectweb.asm.Opcodes.DLOAD;
+import static org.objectweb.asm.Opcodes.DRETURN;
+import static org.objectweb.asm.Opcodes.DSTORE;
+import static org.objectweb.asm.Opcodes.DUP;
+import static org.objectweb.asm.Opcodes.DUP2;
+import static org.objectweb.asm.Opcodes.FCMPL;
+import static org.objectweb.asm.Opcodes.FCONST_0;
+import static org.objectweb.asm.Opcodes.FLOAD;
+import static org.objectweb.asm.Opcodes.FRETURN;
+import static org.objectweb.asm.Opcodes.FSTORE;
+import static org.objectweb.asm.Opcodes.GETSTATIC;
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.ICONST_0;
+import static org.objectweb.asm.Opcodes.ICONST_1;
+import static org.objectweb.asm.Opcodes.ICONST_2;
+import static org.objectweb.asm.Opcodes.ICONST_3;
+import static org.objectweb.asm.Opcodes.ICONST_4;
+import static org.objectweb.asm.Opcodes.ICONST_5;
+import static org.objectweb.asm.Opcodes.IFEQ;
+import static org.objectweb.asm.Opcodes.IFNE;
+import static org.objectweb.asm.Opcodes.ILOAD;
+import static org.objectweb.asm.Opcodes.INVOKESTATIC;
+import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
+import static org.objectweb.asm.Opcodes.IRETURN;
+import static org.objectweb.asm.Opcodes.ISTORE;
+import static org.objectweb.asm.Opcodes.LCMP;
+import static org.objectweb.asm.Opcodes.LCONST_0;
+import static org.objectweb.asm.Opcodes.LLOAD;
+import static org.objectweb.asm.Opcodes.LRETURN;
+import static org.objectweb.asm.Opcodes.LSTORE;
+import static org.objectweb.asm.Opcodes.POP;
+import static org.objectweb.asm.Opcodes.POP2;
+import static org.objectweb.asm.Opcodes.RETURN;
+import static org.objectweb.asm.Opcodes.SIPUSH;
/**
* A helper class for bytecode generation with AsmClassGenerator.
*/
-public class BytecodeHelper implements Opcodes {
+public class BytecodeHelper {
private static String DTT_CLASSNAME = BytecodeHelper.getClassInternalName(DefaultTypeTransformation.class);
@@ -367,12 +407,11 @@ public class BytecodeHelper implements Opcodes {
private static void writeGenericsBoundType(StringBuilder ret, ClassNode printType, boolean writeInterfaceMarker) {
if (writeInterfaceMarker && printType.isInterface()) ret.append(":");
- if (printType.isGenericsPlaceHolder() && printType.getGenericsTypes()!=null) {
+ if (printType.isGenericsPlaceHolder() && printType.getGenericsTypes() != null) {
ret.append("T");
ret.append(printType.getGenericsTypes()[0].getName());
ret.append(";");
- }
- else {
+ } else {
ret.append(getTypeDescription(printType, false));
addSubTypes(ret, printType.getGenericsTypes(), "<", ">");
if (!ClassHelper.isPrimitiveType(printType)) ret.append(";");
@@ -440,7 +479,8 @@ public class BytecodeHelper implements Opcodes {
* Given a wrapped number type (Byte, Integer, Short, ...), generates bytecode
* to convert it to a primitive number (int, long, double) using calls to
* wrapped.[targetType]Value()
- * @param mv method visitor
+ *
+ * @param mv method visitor
* @param sourceType the wrapped number type
* @param targetType the primitive target type
*/
@@ -452,7 +492,8 @@ public class BytecodeHelper implements Opcodes {
* Given a primitive number type (byte, integer, short, ...), generates bytecode
* to convert it to a wrapped number (Integer, Long, Double) using calls to
* [WrappedType].valueOf
- * @param mv method visitor
+ *
+ * @param mv method visitor
* @param sourceType the primitive number type
* @param targetType the wrapped target type
*/
@@ -469,7 +510,7 @@ public class BytecodeHelper implements Opcodes {
CHECKCAST,
type.isArray() ?
BytecodeHelper.getTypeDescription(type) :
- BytecodeHelper.getClassInternalName(type.getName()));
+ BytecodeHelper.getClassInternalName(type.getName()));
}
}
@@ -544,6 +585,7 @@ public class BytecodeHelper implements Opcodes {
* Tells if a class node is candidate for class literal bytecode optimization. If so,
* bytecode may use LDC instructions instead of static constant Class fields to retrieve
* class literals.
+ *
* @param classNode the classnode for which we want to know if bytecode optimization is possible
* @return true if the bytecode can be optimized
*/
@@ -557,6 +599,7 @@ public class BytecodeHelper implements Opcodes {
/**
* Returns true if the two classes share the same compilation unit.
+ *
* @param a class a
* @param b class b
* @return true if both classes share the same compilation unit
@@ -570,6 +613,7 @@ public class BytecodeHelper implements Opcodes {
/**
* Computes a hash code for a string. The purpose of this hashcode is to be constant independently of
* the JDK being used.
+ *
* @param str the string for which to compute the hashcode
* @return hashcode of the string
*/
@@ -585,7 +629,7 @@ public class BytecodeHelper implements Opcodes {
/**
* Converts a primitive type to boolean.
*
- * @param mv method visitor
+ * @param mv method visitor
* @param type primitive type to convert
*/
public static void convertPrimitiveToBoolean(MethodVisitor mv, ClassNode type) {
@@ -604,7 +648,7 @@ public class BytecodeHelper implements Opcodes {
Label trueLabel = new Label();
Label falseLabel = new Label();
// Convert long to int for IFEQ comparison using LCMP
- if (type== long_TYPE) {
+ if (type == long_TYPE) {
mv.visitInsn(LCONST_0);
mv.visitInsn(LCMP);
}
@@ -817,7 +861,9 @@ public class BytecodeHelper implements Opcodes {
}
protected abstract void handleDoubleType();
+
protected abstract void handleFloatType();
+
protected abstract void handleLongType();
/**
@@ -826,6 +872,7 @@ public class BytecodeHelper implements Opcodes {
protected abstract void handleIntType();
protected abstract void handleVoidType();
+
protected abstract void handleRefType();
}
}
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java b/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
index 5cf6685..5c9bb7f 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
@@ -28,7 +28,6 @@ import org.codehaus.groovy.ast.VariableScope;
import org.codehaus.groovy.classgen.AsmClassGenerator;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
import java.util.Collection;
import java.util.Deque;
@@ -38,6 +37,17 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import static org.objectweb.asm.Opcodes.ACONST_NULL;
+import static org.objectweb.asm.Opcodes.ASTORE;
+import static org.objectweb.asm.Opcodes.DCONST_0;
+import static org.objectweb.asm.Opcodes.DUP_X1;
+import static org.objectweb.asm.Opcodes.FCONST_0;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.LCONST_0;
+import static org.objectweb.asm.Opcodes.NEW;
+import static org.objectweb.asm.Opcodes.NOP;
+import static org.objectweb.asm.Opcodes.SWAP;
+
/**
* Manages different aspects of the code of a code block like handling labels,
* defining variables, and scopes. After a MethodNode is visited clear should be
@@ -66,7 +76,7 @@ import java.util.Map;
*
* @see org.codehaus.groovy.classgen.AsmClassGenerator
*/
-public class CompileStack implements Opcodes {
+public class CompileStack {
// TODO: remove optimization of this.foo -> this.@foo
/** state flag */
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java b/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java
index 85fae66..91a5988 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java
@@ -20,15 +20,18 @@ package org.codehaus.groovy.classgen.asm;
import org.codehaus.groovy.classgen.ClassGeneratorException;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import java.lang.reflect.Method;
+import static org.objectweb.asm.Opcodes.INVOKEINTERFACE;
+import static org.objectweb.asm.Opcodes.INVOKESTATIC;
+import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
+
/**
* A helper class to invoke methods more easily in ASM
*/
-public class MethodCaller implements Opcodes {
+public class MethodCaller {
private int opcode;
private String internalName;
@@ -62,7 +65,7 @@ public class MethodCaller implements Opcodes {
}
public void call(MethodVisitor methodVisitor) {
- methodVisitor.visitMethodInsn(opcode, internalName, name, getMethodDescriptor(), opcode == Opcodes.INVOKEINTERFACE);
+ methodVisitor.visitMethodInsn(opcode, internalName, name, getMethodDescriptor(), opcode == INVOKEINTERFACE);
}
public String getMethodDescriptor() {
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/indy/sc/IndyStaticTypesMultiTypeDispatcher.java b/src/main/java/org/codehaus/groovy/classgen/asm/indy/sc/IndyStaticTypesMultiTypeDispatcher.java
index 375155e..88d448a 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/indy/sc/IndyStaticTypesMultiTypeDispatcher.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/indy/sc/IndyStaticTypesMultiTypeDispatcher.java
@@ -30,6 +30,8 @@ import java.lang.invoke.CallSite;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
+import static org.objectweb.asm.Opcodes.H_INVOKESTATIC;
+
/**
* Multi type dispatcher for binary expression backend combining indy and static compilation
*
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
index 9c835fd..6df100c 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
@@ -46,7 +46,6 @@ import org.codehaus.groovy.syntax.Token;
import org.codehaus.groovy.syntax.TokenUtil;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
import java.lang.reflect.Modifier;
import java.util.Map;
@@ -81,12 +80,28 @@ import static org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.inferL
import static org.codehaus.groovy.transform.stc.StaticTypesMarker.DIRECT_METHOD_CALL_TARGET;
import static org.codehaus.groovy.transform.stc.StaticTypesMarker.INFERRED_FUNCTIONAL_INTERFACE_TYPE;
import static org.codehaus.groovy.transform.stc.StaticTypesMarker.INFERRED_TYPE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.DADD;
+import static org.objectweb.asm.Opcodes.DCONST_1;
+import static org.objectweb.asm.Opcodes.DSUB;
+import static org.objectweb.asm.Opcodes.FADD;
+import static org.objectweb.asm.Opcodes.FCONST_1;
+import static org.objectweb.asm.Opcodes.FSUB;
+import static org.objectweb.asm.Opcodes.IADD;
+import static org.objectweb.asm.Opcodes.ICONST_1;
+import static org.objectweb.asm.Opcodes.IFNULL;
+import static org.objectweb.asm.Opcodes.ISUB;
+import static org.objectweb.asm.Opcodes.LADD;
+import static org.objectweb.asm.Opcodes.LCONST_1;
+import static org.objectweb.asm.Opcodes.LSUB;
+import static org.objectweb.asm.Opcodes.PUTFIELD;
+import static org.objectweb.asm.Opcodes.PUTSTATIC;
/**
* A specialized version of the multi type binary expression dispatcher which is aware of static compilation.
* It is able to generate optimized bytecode for some operations using JVM instructions when available.
*/
-public class StaticTypesBinaryExpressionMultiTypeDispatcher extends BinaryExpressionMultiTypeDispatcher implements Opcodes {
+public class StaticTypesBinaryExpressionMultiTypeDispatcher extends BinaryExpressionMultiTypeDispatcher {
private static final MethodNode CLOSURE_GETTHISOBJECT_METHOD = CLOSURE_TYPE.getMethod("getThisObject", Parameter.EMPTY_ARRAY);
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
index 9fe6321..d25cb9f 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
@@ -48,7 +48,6 @@ import org.codehaus.groovy.transform.sc.StaticCompilationMetadataKeys;
import org.codehaus.groovy.transform.stc.StaticTypesMarker;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
import java.util.ArrayList;
import java.util.Collection;
@@ -93,13 +92,34 @@ import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.choose
import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.findDGMMethodsByNameAndArguments;
import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.implementsInterfaceOrIsSubclassOf;
import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isClassClassNodeWrappingConcreteType;
+import static org.objectweb.asm.Opcodes.AALOAD;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACONST_NULL;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ARRAYLENGTH;
+import static org.objectweb.asm.Opcodes.ASTORE;
+import static org.objectweb.asm.Opcodes.CHECKCAST;
+import static org.objectweb.asm.Opcodes.DUP;
+import static org.objectweb.asm.Opcodes.GETFIELD;
+import static org.objectweb.asm.Opcodes.GETSTATIC;
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.IFEQ;
+import static org.objectweb.asm.Opcodes.IFNONNULL;
+import static org.objectweb.asm.Opcodes.INVOKEINTERFACE;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.INVOKESTATIC;
+import static org.objectweb.asm.Opcodes.NEW;
+import static org.objectweb.asm.Opcodes.POP;
+import static org.objectweb.asm.Opcodes.PUTFIELD;
+import static org.objectweb.asm.Opcodes.PUTSTATIC;
/**
* A call site writer which replaces call site caching with static calls. This means that the generated code
* looks more like Java code than dynamic Groovy code. Best effort is made to use JVM instructions instead of
* calls to helper methods.
*/
-public class StaticTypesCallSiteWriter extends CallSiteWriter implements Opcodes {
+public class StaticTypesCallSiteWriter extends CallSiteWriter {
private static final ClassNode COLLECTION_TYPE = ClassHelper.make(Collection.class);
private static final ClassNode INVOKERHELPER_TYPE = ClassHelper.make(InvokerHelper.class);
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesUnaryExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesUnaryExpressionHelper.java
index 54d75fe..fadcc56 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesUnaryExpressionHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesUnaryExpressionHelper.java
@@ -29,7 +29,6 @@ import org.codehaus.groovy.classgen.asm.TypeChooser;
import org.codehaus.groovy.classgen.asm.UnaryExpressionHelper;
import org.codehaus.groovy.classgen.asm.WriterController;
import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
import static org.codehaus.groovy.ast.ClassHelper.boolean_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.byte_TYPE;
@@ -40,12 +39,26 @@ import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.long_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
import static org.codehaus.groovy.ast.tools.GeneralUtils.bytecodeX;
+import static org.objectweb.asm.Opcodes.DNEG;
+import static org.objectweb.asm.Opcodes.FNEG;
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.I2B;
+import static org.objectweb.asm.Opcodes.I2C;
+import static org.objectweb.asm.Opcodes.I2S;
+import static org.objectweb.asm.Opcodes.ICONST_0;
+import static org.objectweb.asm.Opcodes.ICONST_1;
+import static org.objectweb.asm.Opcodes.ICONST_M1;
+import static org.objectweb.asm.Opcodes.IFNE;
+import static org.objectweb.asm.Opcodes.INEG;
+import static org.objectweb.asm.Opcodes.IXOR;
+import static org.objectweb.asm.Opcodes.LNEG;
+import static org.objectweb.asm.Opcodes.LXOR;
/**
* An expression helper which generates optimized bytecode depending on the
* current type on top of the operand stack.
*/
-public class StaticTypesUnaryExpressionHelper extends UnaryExpressionHelper implements Opcodes {
+public class StaticTypesUnaryExpressionHelper extends UnaryExpressionHelper {
private static final BitwiseNegationExpression EMPTY_BITWISE_NEGATE = new BitwiseNegationExpression(EmptyExpression.INSTANCE);
private static final UnaryMinusExpression EMPTY_UNARY_MINUS = new UnaryMinusExpression(EmptyExpression.INSTANCE);
diff --git a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java b/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
index 6ae9d71..5f9b7ac 100644
--- a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
+++ b/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
@@ -21,7 +21,6 @@ package org.codehaus.groovy.reflection;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
import java.io.IOException;
import java.io.InputStream;
@@ -30,10 +29,16 @@ import java.security.PrivilegedAction;
import java.util.HashMap;
import java.util.Map;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.RETURN;
+import static org.objectweb.asm.Opcodes.V1_4;
+
/**
* Special class loader, which when running on Sun VM allows to generate accessor classes for any method
*/
-public class SunClassLoader extends ClassLoader implements Opcodes {
+public class SunClassLoader extends ClassLoader {
protected final Map<String, Class> knownClasses = new HashMap<String, Class>();
protected static final SunClassLoader sunVM;
@@ -64,8 +69,8 @@ public class SunClassLoader extends ClassLoader implements Opcodes {
private void loadMagic() {
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
- cw.visit(Opcodes.V1_4, Opcodes.ACC_PUBLIC, "sun/reflect/GroovyMagic", null, "sun/reflect/MagicAccessorImpl", null);
- MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
+ cw.visit(V1_4, ACC_PUBLIC, "sun/reflect/GroovyMagic", null, "sun/reflect/MagicAccessorImpl", null);
+ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "sun/reflect/MagicAccessorImpl", "<init>", "()V", false);
diff --git a/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java b/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
index 23c4017..e8fbd79 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
@@ -39,7 +39,6 @@ import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import java.lang.annotation.Annotation;
@@ -61,6 +60,41 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
+import static org.objectweb.asm.Opcodes.AASTORE;
+import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
+import static org.objectweb.asm.Opcodes.ACC_TRANSIENT;
+import static org.objectweb.asm.Opcodes.ACONST_NULL;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ANEWARRAY;
+import static org.objectweb.asm.Opcodes.ARETURN;
+import static org.objectweb.asm.Opcodes.ASTORE;
+import static org.objectweb.asm.Opcodes.ATHROW;
+import static org.objectweb.asm.Opcodes.CHECKCAST;
+import static org.objectweb.asm.Opcodes.DCONST_0;
+import static org.objectweb.asm.Opcodes.DLOAD;
+import static org.objectweb.asm.Opcodes.DUP;
+import static org.objectweb.asm.Opcodes.FCONST_0;
+import static org.objectweb.asm.Opcodes.FLOAD;
+import static org.objectweb.asm.Opcodes.GETFIELD;
+import static org.objectweb.asm.Opcodes.ICONST_0;
+import static org.objectweb.asm.Opcodes.IFNONNULL;
+import static org.objectweb.asm.Opcodes.ILOAD;
+import static org.objectweb.asm.Opcodes.INVOKEINTERFACE;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.INVOKESTATIC;
+import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
+import static org.objectweb.asm.Opcodes.LCONST_0;
+import static org.objectweb.asm.Opcodes.LLOAD;
+import static org.objectweb.asm.Opcodes.NEW;
+import static org.objectweb.asm.Opcodes.POP;
+import static org.objectweb.asm.Opcodes.PUTFIELD;
+import static org.objectweb.asm.Opcodes.RETURN;
+import static org.objectweb.asm.Opcodes.V1_5;
+
/**
* A proxy generator responsible for mapping a map of closures to a class implementing a list of interfaces. For
* example, the following code:
@@ -84,7 +118,7 @@ import java.util.concurrent.atomic.AtomicLong;
*
* @since 2.0.0
*/
-public class ProxyGeneratorAdapter extends ClassVisitor implements Opcodes {
+public class ProxyGeneratorAdapter extends ClassVisitor {
private static final Map<String, Boolean> EMPTY_DELEGATECLOSURE_MAP = Collections.emptyMap();
private static final Set<String> EMPTY_STRING_SET = Collections.emptySet();
@@ -186,7 +220,7 @@ public class ProxyGeneratorAdapter extends ClassVisitor implements Opcodes {
// generate bytecode
ClassWriter writer = (ClassWriter) cv;
- this.visit(Opcodes.V1_5, ACC_PUBLIC, proxyName, null, null, null);
+ this.visit(V1_5, ACC_PUBLIC, proxyName, null, null, null);
byte[] b = writer.toByteArray();
// CheckClassAdapter.verify(new ClassReader(b), true, new PrintWriter(System.err));
cachedClass = loader.defineClass(proxyName.replace('/', '.'), b);
diff --git a/src/main/java/org/codehaus/groovy/tools/DgmConverter.java b/src/main/java/org/codehaus/groovy/tools/DgmConverter.java
index 0f13835..ea68c5c 100644
--- a/src/main/java/org/codehaus/groovy/tools/DgmConverter.java
+++ b/src/main/java/org/codehaus/groovy/tools/DgmConverter.java
@@ -36,7 +36,26 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-public class DgmConverter implements Opcodes {
+import static org.objectweb.asm.Opcodes.AALOAD;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACONST_NULL;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ARETURN;
+import static org.objectweb.asm.Opcodes.ASTORE;
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.ICONST_0;
+import static org.objectweb.asm.Opcodes.ICONST_1;
+import static org.objectweb.asm.Opcodes.IFEQ;
+import static org.objectweb.asm.Opcodes.IFNULL;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.INVOKESTATIC;
+import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
+import static org.objectweb.asm.Opcodes.IRETURN;
+import static org.objectweb.asm.Opcodes.RETURN;
+import static org.objectweb.asm.Opcodes.V1_3;
+
+public class DgmConverter {
public static void main(String[] args) throws IOException {
String targetDirectory = "target/classes/";
diff --git a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
index e8fa9f6..690a28d 100644
--- a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
@@ -53,7 +53,7 @@ import static groovy.transform.Undefined.isUndefined;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getInstanceNonPropertyFieldNames;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getSuperNonPropertyFields;
-public abstract class AbstractASTTransformation implements Opcodes, ASTTransformation, ErrorCollecting {
+public abstract class AbstractASTTransformation implements ASTTransformation, ErrorCollecting {
public static final ClassNode RETENTION_CLASSNODE = ClassHelper.makeWithoutCaching(Retention.class);
protected SourceUnit sourceUnit;
diff --git a/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
index 85a1c9c..5281383 100644
--- a/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
@@ -80,6 +80,9 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ternaryX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PROTECTED;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
/**
* Handles generation of code for the @AutoClone annotation.
diff --git a/src/main/java/org/codehaus/groovy/transform/BaseScriptASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/BaseScriptASTTransformation.java
index cae8642..76433e3 100644
--- a/src/main/java/org/codehaus/groovy/transform/BaseScriptASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/BaseScriptASTTransformation.java
@@ -40,6 +40,7 @@ import org.codehaus.groovy.control.SourceUnit;
import java.util.List;
import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
+import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
/**
* Handles transformation for the @BaseScript annotation.
diff --git a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
index 0d4c86c..5bbcf90 100644
--- a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
@@ -68,6 +68,11 @@ import static org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpec;
import static org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse;
import static org.codehaus.groovy.ast.tools.GenericsUtils.createGenericsSpec;
import static org.codehaus.groovy.ast.tools.GenericsUtils.extractSuperClassGenerics;
+import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_NATIVE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
/**
* Handles generation of code for the <code>@Delegate</code> annotation
diff --git a/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
index a955f00..928b400 100644
--- a/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
@@ -82,6 +82,9 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.sameX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
import static org.codehaus.groovy.ast.tools.GenericsUtils.makeClassSafe;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
@GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
public class EqualsAndHashCodeASTTransformation extends AbstractASTTransformation {
diff --git a/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
index b2ec94a..7c821f4 100644
--- a/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
@@ -49,6 +49,8 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_TRANSIENT;
/**
* Handles generation of code for the @ExternalizeMethods annotation.
diff --git a/src/main/java/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
index 602d84a..515a38e 100644
--- a/src/main/java/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
@@ -36,6 +36,8 @@ import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveType;
import static org.codehaus.groovy.ast.ClassHelper.make;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getInstanceNonPropertyFields;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getInstancePropertyFields;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_TRANSIENT;
@org.codehaus.groovy.transform.GroovyASTTransformation(phase = CompilePhase.CLASS_GENERATION)
public class ExternalizeVerifierASTTransformation extends org.codehaus.groovy.transform.AbstractASTTransformation {
diff --git a/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java
index b81046f..f21e50a 100644
--- a/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java
@@ -80,6 +80,11 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ternaryX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
/**
* Handles generation of code for the @Immutable annotation.
diff --git a/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java
index 6f30ab7..d770236 100644
--- a/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java
@@ -42,6 +42,8 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.indexX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
/**
* Handles generation of code for the {@code @}IndexedProperty annotation.
diff --git a/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
index c7d3578..63a7186 100644
--- a/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
@@ -62,6 +62,12 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PROTECTED;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
/**
* Handles generation of code for the @Lazy annotation
diff --git a/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
index 5939c83..ab738cf 100644
--- a/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
@@ -63,6 +63,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
/**
* Handles generation of code for the @MapConstructor annotation.
diff --git a/src/main/java/org/codehaus/groovy/transform/MemoizedASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/MemoizedASTTransformation.java
index 5742c9f..4413b30 100644
--- a/src/main/java/org/codehaus/groovy/transform/MemoizedASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/MemoizedASTTransformation.java
@@ -52,6 +52,10 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
import static org.codehaus.groovy.ast.tools.GenericsUtils.newClass;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PROTECTED;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
/**
* Handles generation of code for the {@link Memoized} annotation.
@@ -88,9 +92,9 @@ public class MemoizedASTTransformation extends AbstractASTTransformation {
MethodNode delegatingMethod = buildDelegatingMethod(methodNode, ownerClassNode);
addGeneratedMethod(ownerClassNode, delegatingMethod);
- int modifiers = FieldNode.ACC_PRIVATE | FieldNode.ACC_FINAL;
+ int modifiers = ACC_PRIVATE | ACC_FINAL;
if (methodNode.isStatic()) {
- modifiers = modifiers | FieldNode.ACC_STATIC;
+ modifiers = modifiers | ACC_STATIC;
}
int protectedCacheSize = getMemberIntValue(annotationNode, PROTECTED_CACHE_SIZE_NAME);
diff --git a/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java
index 74225ee..a196ecc 100644
--- a/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java
@@ -42,6 +42,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+
/**
* Handles transformation for the @PackageScope annotation.
* <p>
diff --git a/src/main/java/org/codehaus/groovy/transform/ReadWriteLockASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ReadWriteLockASTTransformation.java
index 89a4983..2e5b9d4 100644
--- a/src/main/java/org/codehaus/groovy/transform/ReadWriteLockASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ReadWriteLockASTTransformation.java
@@ -42,7 +42,9 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.tryCatchS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
-
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
/**
* Handles generation of code for the {@code @}WithReadLock and {@code @}WithWriteLock annotation.<br>
diff --git a/src/main/java/org/codehaus/groovy/transform/SingletonASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SingletonASTTransformation.java
index eeae41e..9c55b6c 100644
--- a/src/main/java/org/codehaus/groovy/transform/SingletonASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SingletonASTTransformation.java
@@ -49,6 +49,11 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.throwS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
import static org.codehaus.groovy.ast.tools.GenericsUtils.newClass;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_VOLATILE;
/**
* Handles generation of code for the @Singleton annotation
diff --git a/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
index c12ff24..6226cc5 100644
--- a/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SortableASTTransformation.java
@@ -74,6 +74,11 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
import static org.codehaus.groovy.ast.tools.GenericsUtils.makeClassSafe;
import static org.codehaus.groovy.ast.tools.GenericsUtils.makeClassSafeWithGenerics;
import static org.codehaus.groovy.ast.tools.GenericsUtils.newClass;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
/**
* Injects a set of Comparators and sort methods.
diff --git a/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java
index fd009b3..59bfadb 100644
--- a/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java
@@ -38,6 +38,9 @@ import java.util.Collections;
import static org.codehaus.groovy.ast.ClassHelper.make;
import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
/**
* Handles generation of code for the {@code @Synchronized} annotation.
diff --git a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
index 80871a4..7a05ad7 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -65,6 +65,9 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.sameX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
/**
* Handles generation of code for the @ToString annotation.
diff --git a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 4c97c67..82a75dc 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -79,6 +79,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.throwS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
import static org.codehaus.groovy.transform.ImmutableASTTransformation.makeImmutable;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
/**
* Handles generation of code for the @TupleConstructor annotation.
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/transformers/CompareIdentityExpression.java b/src/main/java/org/codehaus/groovy/transform/sc/transformers/CompareIdentityExpression.java
index 77bb6ac..8ce4e5c 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/transformers/CompareIdentityExpression.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/transformers/CompareIdentityExpression.java
@@ -29,7 +29,11 @@ import org.codehaus.groovy.syntax.Token;
import org.codehaus.groovy.syntax.Types;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
+
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.ICONST_0;
+import static org.objectweb.asm.Opcodes.ICONST_1;
+import static org.objectweb.asm.Opcodes.IF_ACMPNE;
/**
* Compares two objects using identity comparison.
@@ -39,7 +43,7 @@ import org.objectweb.asm.Opcodes;
* This expression should only be used to compare to objects, not primitives, and only
* in the context of reference equality check.
*/
-public class CompareIdentityExpression extends BinaryExpression implements Opcodes {
+public class CompareIdentityExpression extends BinaryExpression {
private final Expression leftExpression;
private final Expression rightExpression;
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/transformers/CompareToNullExpression.java b/src/main/java/org/codehaus/groovy/transform/sc/transformers/CompareToNullExpression.java
index 8c4e4f1..5a661a9 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/transformers/CompareToNullExpression.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/transformers/CompareToNullExpression.java
@@ -30,9 +30,14 @@ import org.codehaus.groovy.syntax.Token;
import org.codehaus.groovy.syntax.Types;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-public class CompareToNullExpression extends BinaryExpression implements Opcodes {
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.ICONST_0;
+import static org.objectweb.asm.Opcodes.ICONST_1;
+import static org.objectweb.asm.Opcodes.IFNONNULL;
+import static org.objectweb.asm.Opcodes.IFNULL;
+
+public class CompareToNullExpression extends BinaryExpression {
private final boolean equalsNull;
public CompareToNullExpression(final Expression objectExpression, final boolean compareToNull) {
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/transformers/ConstructorCallTransformer.java b/src/main/java/org/codehaus/groovy/transform/sc/transformers/ConstructorCallTransformer.java
index 0a01f16..0f6a14d 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/transformers/ConstructorCallTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/transformers/ConstructorCallTransformer.java
@@ -41,7 +41,6 @@ import org.codehaus.groovy.syntax.Token;
import org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport;
import org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
import java.util.List;
@@ -49,6 +48,11 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.binX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.bytecodeX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
import static org.codehaus.groovy.transform.stc.StaticTypesMarker.DIRECT_METHOD_CALL_TARGET;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ASTORE;
+import static org.objectweb.asm.Opcodes.DUP;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.NEW;
public class ConstructorCallTransformer {
private final StaticCompilationTransformer staticCompilationTransformer;
@@ -99,7 +103,7 @@ public class ConstructorCallTransformer {
return staticCompilationTransformer.superTransform(expr);
}
- private static class MapStyleConstructorCall extends BytecodeExpression implements Opcodes {
+ private static class MapStyleConstructorCall extends BytecodeExpression {
private final StaticCompilationTransformer staticCompilationTransformer;
private AsmClassGenerator acg;
private final ClassNode declaringClass;
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
index da8cf12..7b6328d 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
@@ -76,6 +76,13 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
import static org.codehaus.groovy.transform.trait.SuperCallTraitTransformer.UNRESOLVED_HELPER_CLASS;
+import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_INTERFACE;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
/**
* Handles generation of code for the traits (trait keyword is equivalent to using the @Trait annotation).
diff --git a/src/spec/test/metaprogramming/MacroExpressionTest.groovy b/src/spec/test/metaprogramming/MacroExpressionTest.groovy
index 0c57bf8..2b1ffbd 100644
--- a/src/spec/test/metaprogramming/MacroExpressionTest.groovy
+++ b/src/spec/test/metaprogramming/MacroExpressionTest.groovy
@@ -64,6 +64,8 @@ class MacroExpressionTest extends GroovyTestCase {
@interface AddGetTwo { }
// end::addgettwoannotation[]
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC
+
// tag::addgettwotransformation[]
@GroovyASTTransformation(phase = CompilePhase.INSTRUCTION_SELECTION)
class AddGetTwoASTTransformation extends AbstractASTTransformation {
diff --git a/src/spec/test/metaprogramming/MacroStatementTest.groovy b/src/spec/test/metaprogramming/MacroStatementTest.groovy
index a714f41..2574758 100644
--- a/src/spec/test/metaprogramming/MacroStatementTest.groovy
+++ b/src/spec/test/metaprogramming/MacroStatementTest.groovy
@@ -70,6 +70,8 @@ class MacroStatementTest extends GroovyTestCase {
@interface AddMethod { }
// end::addmethodannotation[]
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC
+
// tag::addmethodtransformationwithoutmacro[]
@GroovyASTTransformation(phase = CompilePhase.INSTRUCTION_SELECTION)
class AddMethodASTTransformation extends AbstractASTTransformation {
diff --git a/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy b/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy
index 31a51bf..79283c1 100644
--- a/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy
+++ b/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy
@@ -59,6 +59,8 @@ class MacroVariableSubstitutionTest extends GroovyTestCase {
@interface MD5 { }
// end::md5annotation[]
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC
+
// tag::md5transformation[]
@GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
class MD5ASTTransformation extends AbstractASTTransformation {
diff --git a/src/test/groovy/lang/GroovyClassLoaderTest.groovy b/src/test/groovy/lang/GroovyClassLoaderTest.groovy
index 41a41e3..8edca9b 100644
--- a/src/test/groovy/lang/GroovyClassLoaderTest.groovy
+++ b/src/test/groovy/lang/GroovyClassLoaderTest.groovy
@@ -270,10 +270,12 @@ class GroovyClassLoaderTestCustomGCL extends GroovyClassLoader {
}
}
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC
+
class GroovyClassLoaderTestPropertyAdder implements CompilationUnit.IPrimaryClassNodeOperation {
@Override
void call(SourceUnit source, GeneratorContext context, ClassNode classNode) {
- classNode.addProperty("id", ClassNode.ACC_PUBLIC, ClassHelper.long_TYPE, null, null, null)
+ classNode.addProperty("id", ACC_PUBLIC, ClassHelper.long_TYPE, null, null, null)
}
}
diff --git a/subprojects/groovy-ant/src/test/groovy/groovy/ant/Groovy8872Test.groovy b/subprojects/groovy-ant/src/test/groovy/groovy/ant/Groovy8872Test.groovy
index bc46aed..acc40d2 100644
--- a/subprojects/groovy-ant/src/test/groovy/groovy/ant/Groovy8872Test.groovy
+++ b/subprojects/groovy-ant/src/test/groovy/groovy/ant/Groovy8872Test.groovy
@@ -70,6 +70,9 @@ class Groovy8872Test extends AntTestCase {
import org.codehaus.groovy.transform.*
import org.codehaus.groovy.control.*
import static org.codehaus.groovy.ast.tools.GeneralUtils.*
+ import static org.objectweb.asm.Opcodes.ACC_FINAL;
+ import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+ import static org.objectweb.asm.Opcodes.ACC_STATIC;
@GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
class ExtractParamNamesTransformation extends AbstractASTTransformation {
diff --git a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationClosureVisitor.java b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationClosureVisitor.java
index 5d8ece5..4f6bcb0 100644
--- a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationClosureVisitor.java
+++ b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationClosureVisitor.java
@@ -301,7 +301,7 @@ public class AnnotationClosureVisitor extends BaseVisitor implements ASTNodeMeta
someNode.setNodeMetaData(CLOSURE_REPLACED, Boolean.TRUE);
}
- static class ClosureExpressionValidator extends ClassCodeVisitorSupport implements Opcodes {
+ static class ClosureExpressionValidator extends ClassCodeVisitorSupport {
private final ClassNode classNode;
private final MethodNode methodNode;
diff --git a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/util/ExpressionUtils.java b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/util/ExpressionUtils.java
index 54a1a81..6cfe15d 100644
--- a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/util/ExpressionUtils.java
+++ b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/util/ExpressionUtils.java
@@ -120,7 +120,7 @@ public class ExpressionUtils {
return result;
}
- static class AssertStatementCollector extends ClassCodeVisitorSupport implements Opcodes {
+ static class AssertStatementCollector extends ClassCodeVisitorSupport {
public List<AssertStatement> assertStatements = new ArrayList<AssertStatement>();