Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_5_X 13522f887 -> b464b23bd


http://git-wip-us.apache.org/repos/asf/groovy/blob/04aa9f46/pr617.patch
----------------------------------------------------------------------
diff --git a/pr617.patch b/pr617.patch
deleted file mode 100644
index 23f72a7..0000000
--- a/pr617.patch
+++ /dev/null
@@ -1,293 +0,0 @@
-From 2e36707b9446f8b48a85bee26f6ec746d56e8b95 Mon Sep 17 00:00:00 2001
-From: aalmiray <[email protected]>
-Date: Wed, 11 Oct 2017 16:34:27 +0200
-Subject: [PATCH 1/2] GROOVY-8352: add a @Generated annotation
-
----
- src/main/groovy/transform/Generated.java           | 36 ++++++++++
- .../org/codehaus/groovy/classgen/Verifier.java     | 22 +++---
- .../groovy/tools/javac/JavaStubGenerator.java      | 10 +--
- .../groovy/transform/GeneratedTransformTest.groovy | 81 ++++++++++++++++++++++
- 4 files changed, 136 insertions(+), 13 deletions(-)
- create mode 100644 src/main/groovy/transform/Generated.java
- create mode 100644 
src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy
-
-diff --git a/src/main/groovy/transform/Generated.java 
b/src/main/groovy/transform/Generated.java
-new file mode 100644
-index 0000000000..f7ea40af6d
---- /dev/null
-+++ b/src/main/groovy/transform/Generated.java
-@@ -0,0 +1,36 @@
-+/*
-+ *  Licensed to the Apache Software Foundation (ASF) under one
-+ *  or more contributor license agreements.  See the NOTICE file
-+ *  distributed with this work for additional information
-+ *  regarding copyright ownership.  The ASF licenses this file
-+ *  to you under the Apache License, Version 2.0 (the
-+ *  "License"); you may not use this file except in compliance
-+ *  with the License.  You may obtain a copy of the License at
-+ *
-+ *    http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ *  Unless required by applicable law or agreed to in writing,
-+ *  software distributed under the License is distributed on an
-+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-+ *  KIND, either express or implied.  See the License for the
-+ *  specific language governing permissions and limitations
-+ *  under the License.
-+ */
-+package groovy.transform;
-+
-+import java.lang.annotation.ElementType;
-+import java.lang.annotation.Retention;
-+import java.lang.annotation.RetentionPolicy;
-+import java.lang.annotation.Target;
-+
-+/**
-+ * The Generated annotation is used to mark members that have been generated.
-+ *
-+ * @author Andres Almiray
-+ * @author Jochen Theodorou
-+ * @author Mark Hoffmann
-+ */
-+@Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.TYPE, 
ElementType.FIELD})
-+@Retention(RetentionPolicy.RUNTIME)
-+public @interface Generated {
-+}
-diff --git a/src/main/org/codehaus/groovy/classgen/Verifier.java 
b/src/main/org/codehaus/groovy/classgen/Verifier.java
-index b98e784577..f1251d7e7a 100644
---- a/src/main/org/codehaus/groovy/classgen/Verifier.java
-+++ b/src/main/org/codehaus/groovy/classgen/Verifier.java
-@@ -21,6 +21,7 @@
- import groovy.lang.GroovyClassLoader;
- import groovy.lang.GroovyObject;
- import groovy.lang.MetaClass;
-+import groovy.transform.Generated;
- import org.codehaus.groovy.GroovyBugError;
- import org.codehaus.groovy.ast.*;
- import org.codehaus.groovy.ast.expr.ArgumentListExpression;
-@@ -124,6 +125,8 @@
-             new Parameter(ClassHelper.METACLASS_TYPE, "mc")
-     };
- 
-+    private static final Class GENERATED_ANNOTATION = Generated.class;
-+
-     private ClassNode classNode;
-     private MethodNode methodNode;
- 
-@@ -384,6 +387,7 @@ public void visit(MethodVisitor mv) {
-     protected void addGroovyObjectInterfaceAndMethods(ClassNode node, final 
String classInternalName) {
-         if (!node.isDerivedFromGroovyObject()) 
node.addInterface(ClassHelper.make(GroovyObject.class));
-         FieldNode metaClassField = getMetaClassField(node);
-+        AnnotationNode generatedAnnotation = new 
AnnotationNode(ClassHelper.make(GENERATED_ANNOTATION));
- 
-         if (!node.hasMethod("getMetaClass", Parameter.EMPTY_ARRAY)) {
-             metaClassField = setMetaClassFieldIfNotExists(node, 
metaClassField);
-@@ -425,7 +429,7 @@ public void visit(MethodVisitor mv) {
-                             mv.visitInsn(ARETURN);
-                         }
-                     })
--            );
-+            ).addAnnotation(generatedAnnotation);
-         }
- 
-         Parameter[] parameters = new Parameter[]{new 
Parameter(ClassHelper.METACLASS_TYPE, "mc")};
-@@ -459,7 +463,7 @@ public void visit(MethodVisitor mv) {
-                     ACC_PUBLIC, ClassHelper.VOID_TYPE,
-                     SET_METACLASS_PARAMS, ClassNode.EMPTY_ARRAY,
-                     setMetaClassCode
--            );
-+            ).addAnnotation(generatedAnnotation);
-         }
- 
-         if (!node.hasMethod("invokeMethod", INVOKE_METHOD_PARAMS)) {
-@@ -485,7 +489,7 @@ public void visit(MethodVisitor mv) {
-                             mv.visitInsn(ARETURN);
-                         }
-                     })
--            );
-+            ).addAnnotation(generatedAnnotation);
-         }
- 
-         if (!node.hasMethod("getProperty", GET_PROPERTY_PARAMS)) {
-@@ -505,7 +509,7 @@ public void visit(MethodVisitor mv) {
-                             mv.visitInsn(ARETURN);
-                         }
-                     })
--            );
-+            ).addAnnotation(generatedAnnotation);
-         }
- 
-         if (!node.hasMethod("setProperty", SET_PROPERTY_PARAMS)) {
-@@ -526,7 +530,7 @@ public void visit(MethodVisitor mv) {
-                             mv.visitInsn(RETURN);
-                         }
-                     })
--            );
-+            ).addAnnotation(generatedAnnotation);
-         }
-     }
- 
-@@ -535,12 +539,12 @@ public void visit(MethodVisitor mv) {
-      * call will either be made to ClassNode.addSyntheticMethod() or 
ClassNode.addMethod(). If a non-synthetic method
-      * is to be added the ACC_SYNTHETIC modifier is removed if it has been 
accidentally supplied.
-      */
--    protected void addMethod(ClassNode node, boolean shouldBeSynthetic, 
String name, int modifiers, ClassNode returnType, Parameter[] parameters,
--                             ClassNode[] exceptions, Statement code) {
-+    protected MethodNode addMethod(ClassNode node, boolean shouldBeSynthetic, 
String name, int modifiers, ClassNode returnType, Parameter[] parameters,
-+                                   ClassNode[] exceptions, Statement code) {
-         if (shouldBeSynthetic) {
--            node.addSyntheticMethod(name, modifiers, returnType, parameters, 
exceptions, code);
-+            return node.addSyntheticMethod(name, modifiers, returnType, 
parameters, exceptions, code);
-         } else {
--            node.addMethod(name, modifiers & ~ACC_SYNTHETIC, returnType, 
parameters, exceptions, code);
-+            return node.addMethod(name, modifiers & ~ACC_SYNTHETIC, 
returnType, parameters, exceptions, code);
-         }
-     }
- 
-diff --git a/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java 
b/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
-index b672793c18..89d45aeba2 100644
---- a/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
-+++ b/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
-@@ -155,8 +155,8 @@ protected void addPropertyMethod(MethodNode method) {
-                     doAddMethod(method);
-                 }
-                 protected void addReturnIfNeeded(MethodNode node) {}
--                protected void addMethod(ClassNode node, boolean 
shouldBeSynthetic, String name, int modifiers, ClassNode returnType, 
Parameter[] parameters, ClassNode[] exceptions, Statement code) {
--                    doAddMethod(new MethodNode(name, modifiers, returnType, 
parameters, exceptions, code));
-+                protected MethodNode addMethod(ClassNode node, boolean 
shouldBeSynthetic, String name, int modifiers, ClassNode returnType, 
Parameter[] parameters, ClassNode[] exceptions, Statement code) {
-+                    return doAddMethod(new MethodNode(name, modifiers, 
returnType, parameters, exceptions, code));
-                 }
- 
-                 protected void addConstructor(Parameter[] newParams, 
ConstructorNode ctor, Statement code, ClassNode node) {
-@@ -184,13 +184,15 @@ protected void addDefaultParameters(DefaultArgsAction 
action, MethodNode method)
-                     }
-                 }
- 
--                private void doAddMethod(MethodNode method) {
-+                private MethodNode doAddMethod(MethodNode method) {
-                     String sig = method.getTypeDescriptor();
- 
--                    if (propertyMethodsWithSigs.containsKey(sig)) return;
-+                    if (propertyMethodsWithSigs.containsKey(sig)) return 
method;
- 
-                     propertyMethods.add(method);
-                     propertyMethodsWithSigs.put(sig, method);
-+
-+                    return method;
-                 }
- 
-                 @Override
-diff --git 
a/src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy 
b/src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy
-new file mode 100644
-index 0000000000..34e9f0ea0c
---- /dev/null
-+++ b/src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy
-@@ -0,0 +1,81 @@
-+/*
-+ *  Licensed to the Apache Software Foundation (ASF) under one
-+ *  or more contributor license agreements.  See the NOTICE file
-+ *  distributed with this work for additional information
-+ *  regarding copyright ownership.  The ASF licenses this file
-+ *  to you under the Apache License, Version 2.0 (the
-+ *  "License"); you may not use this file except in compliance
-+ *  with the License.  You may obtain a copy of the License at
-+ *
-+ *    http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ *  Unless required by applicable law or agreed to in writing,
-+ *  software distributed under the License is distributed on an
-+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-+ *  KIND, either express or implied.  See the License for the
-+ *  specific language governing permissions and limitations
-+ *  under the License.
-+ */
-+package org.codehaus.groovy.transform
-+
-+import org.junit.After
-+import org.junit.Before
-+import org.junit.Rule
-+import org.junit.Test
-+import org.junit.rules.TestName
-+import org.junit.runner.RunWith
-+import org.junit.runners.JUnit4
-+
-+import static org.junit.Assume.assumeTrue
-+
-+/**
-+ * Tests for the @Generated annotation.
-+ */
-+@RunWith(JUnit4)
-+class GeneratedTransformTest extends GroovyShellTestCase {
-+    @Rule public TestName nameRule = new TestName()
-+
-+    @Before
-+    void setUp() {
-+        super.setUp()
-+        // check java version requirements
-+        def v = System.getProperty("java.specification.version")
-+        assert v
-+        assumeTrue('Test requires jre8+', 
nameRule.methodName.endsWith('_vm8').implies(new BigDecimal(v) >= 1.8))
-+    }
-+
-+    @After
-+    void tearDown() {
-+        super.tearDown()
-+    }
-+
-+    @Test
-+    void testDefaultGroovyMethodsAreAnnotatedWithGenerated() {
-+        def person = evaluate('''
-+            class Person {
-+                String name
-+            }
-+            new Person()
-+        ''')
-+
-+        GroovyObject.declaredMethods.each { m ->
-+            def method = person.class.declaredMethods.find { it.name == 
m.name }
-+            assert method.annotations*.annotationType().name == 
['groovy.transform.Generated']
-+        }
-+    }
-+
-+    @Test
-+    void testOverridenDefaultGroovyMethodsAreNotAnnotatedWithGenerated() {
-+        def person = evaluate('''
-+            class Person {
-+                String name
-+                
-+                def invokeMethod(String name, args) { }
-+            }
-+            new Person()
-+        ''')
-+
-+        def method = person.class.declaredMethods.find { it.name == 
'invokeMethod' }
-+        assert !('groovy.transform.Generated' in 
method.annotations*.annotationType().name)
-+    }
-+}
-\ No newline at end of file
-
-From d2097c8cb1dc6080dc491d5fbae6b0732d697c23 Mon Sep 17 00:00:00 2001
-From: aalmiray <[email protected]>
-Date: Thu, 12 Oct 2017 10:07:07 +0200
-Subject: [PATCH 2/2] Remove author tags from javadoc
-
----
- src/main/groovy/transform/Generated.java | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/src/main/groovy/transform/Generated.java 
b/src/main/groovy/transform/Generated.java
-index f7ea40af6d..98eaf5b0df 100644
---- a/src/main/groovy/transform/Generated.java
-+++ b/src/main/groovy/transform/Generated.java
-@@ -25,10 +25,6 @@
- 
- /**
-  * The Generated annotation is used to mark members that have been generated.
-- *
-- * @author Andres Almiray
-- * @author Jochen Theodorou
-- * @author Mark Hoffmann
-  */
- @Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.TYPE, 
ElementType.FIELD})
- @Retention(RetentionPolicy.RUNTIME)

http://git-wip-us.apache.org/repos/asf/groovy/blob/04aa9f46/pr622.patch
----------------------------------------------------------------------
diff --git a/pr622.patch b/pr622.patch
deleted file mode 100644
index 1d3df05..0000000
--- a/pr622.patch
+++ /dev/null
@@ -1,237 +0,0 @@
-From 3839297520e325b8520d856bd2d74fc5ee63cced Mon Sep 17 00:00:00 2001
-From: paulk <[email protected]>
-Date: Mon, 30 Oct 2017 08:47:28 +1000
-Subject: [PATCH] GROOVY-8112: NPE in Groovy compiler when referencing @Field
- in aic
-
----
- .../groovy/transform/FieldASTTransformation.java   | 104 +++++++++++++++++----
- .../groovy/transform/FieldTransformTest.groovy     |  39 +++++++-
- 2 files changed, 122 insertions(+), 21 deletions(-)
-
-diff --git 
a/src/main/org/codehaus/groovy/transform/FieldASTTransformation.java 
b/src/main/org/codehaus/groovy/transform/FieldASTTransformation.java
-index 52b4406b94..8e6b58e8b5 100644
---- a/src/main/org/codehaus/groovy/transform/FieldASTTransformation.java
-+++ b/src/main/org/codehaus/groovy/transform/FieldASTTransformation.java
-@@ -27,15 +27,19 @@
- import org.codehaus.groovy.ast.ClassCodeExpressionTransformer;
- import org.codehaus.groovy.ast.ClassHelper;
- import org.codehaus.groovy.ast.ClassNode;
-+import org.codehaus.groovy.ast.ConstructorNode;
- import org.codehaus.groovy.ast.FieldNode;
- import org.codehaus.groovy.ast.MethodNode;
-+import org.codehaus.groovy.ast.Parameter;
- import org.codehaus.groovy.ast.Variable;
- import org.codehaus.groovy.ast.VariableScope;
--import org.codehaus.groovy.ast.expr.BinaryExpression;
-+import org.codehaus.groovy.ast.expr.ArgumentListExpression;
- import org.codehaus.groovy.ast.expr.ClosureExpression;
- import org.codehaus.groovy.ast.expr.ConstantExpression;
-+import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
- import org.codehaus.groovy.ast.expr.DeclarationExpression;
- import org.codehaus.groovy.ast.expr.Expression;
-+import org.codehaus.groovy.ast.expr.TupleExpression;
- import org.codehaus.groovy.ast.expr.VariableExpression;
- import org.codehaus.groovy.ast.stmt.ExpressionStatement;
- import org.codehaus.groovy.classgen.VariableScopeVisitor;
-@@ -44,6 +48,7 @@
- import org.codehaus.groovy.runtime.MetaClassHelper;
- import org.objectweb.asm.Opcodes;
- 
-+import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Iterator;
- import java.util.List;
-@@ -59,9 +64,6 @@
- 
- /**
-  * Handles transformation for the @Field annotation.
-- *
-- * @author Paul King
-- * @author Cedric Champeau
-  */
- @GroovyASTTransformation(phase = CompilePhase.SEMANTIC_ANALYSIS)
- public class FieldASTTransformation extends ClassCodeExpressionTransformer 
implements ASTTransformation, Opcodes {
-@@ -77,6 +79,7 @@
-     private String variableName;
-     private FieldNode fieldNode;
-     private ClosureExpression currentClosure;
-+    private ConstructorCallExpression currentAIC;
- 
-     public void visit(ASTNode[] nodes, SourceUnit source) {
-         sourceUnit = source;
-@@ -166,23 +169,76 @@ public Expression transform(Expression expr) {
-         } else if (insideScriptBody && expr instanceof VariableExpression && 
currentClosure != null) {
-             VariableExpression ve = (VariableExpression) expr;
-             if (ve.getName().equals(variableName)) {
--                // we may only check the variable name because the Groovy 
compiler
--                // already fails if a variable with the same name already 
exists in the scope.
--                // this means that a closure cannot shadow a class variable
--                ve.setAccessedVariable(fieldNode);
--                final VariableScope variableScope = 
currentClosure.getVariableScope();
--                final Iterator<Variable> iterator = 
variableScope.getReferencedLocalVariablesIterator();
--                while (iterator.hasNext()) {
--                    Variable next = iterator.next();
--                    if (next.getName().equals(variableName)) 
iterator.remove();
--                }
--                variableScope.putReferencedClassVariable(fieldNode);
-+                adjustToClassVar(ve);
-                 return ve;
-             }
-+        } else if (currentAIC != null && expr instanceof 
ArgumentListExpression) {
-+            // if a match is found, the compiler will have already set up aic 
constructor to hav
-+            // an argument which isn't needed since we'll be accessing the 
field; we must undo it
-+            Expression skip = null;
-+            List<Expression> origArgList = ((ArgumentListExpression) 
expr).getExpressions();
-+            for (int i = 0; i < origArgList.size(); i++) {
-+                Expression arg = origArgList.get(i);
-+                if (matchesCandidate(arg)) {
-+                    skip = arg;
-+                    adjustConstructorAndFields(i, currentAIC.getType());
-+                    break;
-+                }
-+            }
-+            if (skip != null) {
-+                return adjustedArgList(skip, origArgList);
-+            }
-         }
-         return expr.transformExpression(this);
-     }
- 
-+    private boolean matchesCandidate(Expression arg) {
-+        return arg instanceof VariableExpression && ((VariableExpression) 
arg).getAccessedVariable() == 
candidate.getVariableExpression().getAccessedVariable();
-+    }
-+
-+    private Expression adjustedArgList(Expression skip, List<Expression> 
origArgs) {
-+        List<Expression> newArgs = new ArrayList<Expression>(origArgs.size() 
- 1);
-+        for (Expression origArg : origArgs) {
-+            if (skip != origArg) {
-+                newArgs.add(origArg);
-+            }
-+        }
-+        return new ArgumentListExpression(newArgs);
-+    }
-+
-+    private void adjustConstructorAndFields(int skipIndex, ClassNode type) {
-+        List<ConstructorNode> constructors = type.getDeclaredConstructors();
-+        if (constructors.size() == 1) {
-+            ConstructorNode constructor = constructors.get(0);
-+            Parameter[] params = constructor.getParameters();
-+            Parameter[] newParams = new Parameter[params.length - 1];
-+            int to = 0;
-+            for (int from = 0; from < params.length; from++) {
-+                if (from != skipIndex) {
-+                    newParams[to++] = params[from];
-+                }
-+            }
-+            type.removeConstructor(constructor);
-+            // code doesn't mention the removed param at this point, okay to 
leave as is
-+            type.addConstructor(constructor.getModifiers(), newParams, 
constructor.getExceptions(), constructor.getCode());
-+            type.removeField(variableName);
-+        }
-+    }
-+
-+    private void adjustToClassVar(VariableExpression expr) {
-+        // we only need to check the variable name because the Groovy compiler
-+        // already fails if a variable with the same name already exists in 
the scope.
-+        // this means that a closure cannot shadow a class variable
-+        expr.setAccessedVariable(fieldNode);
-+        final VariableScope variableScope = currentClosure.getVariableScope();
-+        final Iterator<Variable> iterator = 
variableScope.getReferencedLocalVariablesIterator();
-+        while (iterator.hasNext()) {
-+            Variable next = iterator.next();
-+            if (next.getName().equals(variableName)) iterator.remove();
-+        }
-+        variableScope.putReferencedClassVariable(fieldNode);
-+    }
-+
-     @Override
-     public void visitClosureExpression(final ClosureExpression expression) {
-         ClosureExpression old = currentClosure;
-@@ -192,6 +248,20 @@ public void visitClosureExpression(final 
ClosureExpression expression) {
-     }
- 
-     @Override
-+    public void visitConstructorCallExpression(final 
ConstructorCallExpression cce) {
-+        if (!insideScriptBody || !cce.isUsingAnonymousInnerClass()) return;
-+        ConstructorCallExpression old = currentAIC;
-+        currentAIC = cce;
-+        Expression newArgs = transform(cce.getArguments());
-+        if (cce.getArguments() instanceof TupleExpression && newArgs 
instanceof TupleExpression) {
-+            List<Expression> argList = ((TupleExpression) 
cce.getArguments()).getExpressions();
-+            argList.clear();
-+            argList.addAll(((TupleExpression) newArgs).getExpressions());
-+        }
-+        currentAIC = old;
-+    }
-+
-+    @Override
-     public void visitMethod(MethodNode node) {
-         Boolean oldInsideScriptBody = insideScriptBody;
-         if (node.isScriptBody()) insideScriptBody = true;
-@@ -202,9 +272,7 @@ public void visitMethod(MethodNode node) {
-     @Override
-     public void visitExpressionStatement(ExpressionStatement es) {
-         Expression exp = es.getExpression();
--        if (exp instanceof BinaryExpression) {
--            exp.visit(this);
--        }
-+        exp.visit(this);
-         super.visitExpressionStatement(es);
-     }
- 
-diff --git a/src/test/org/codehaus/groovy/transform/FieldTransformTest.groovy 
b/src/test/org/codehaus/groovy/transform/FieldTransformTest.groovy
-index 2821f6e11c..6575720bfb 100644
---- a/src/test/org/codehaus/groovy/transform/FieldTransformTest.groovy
-+++ b/src/test/org/codehaus/groovy/transform/FieldTransformTest.groovy
-@@ -21,8 +21,7 @@ package org.codehaus.groovy.transform
- import gls.CompilableTestSupport
- 
- /**
-- * @author Paul King
-- * @author C�dric Champeau
-+ * Tests for the {@code @Field} transformation
-  */
- class FieldTransformTest extends CompilableTestSupport {
- 
-@@ -226,4 +225,38 @@ class FieldTransformTest extends CompilableTestSupport {
-             assert foo + bar + baz == 'foobarbaz'
-         '''
-     }
--}
-\ No newline at end of file
-+
-+    void testAnonymousInnerClassReferencesToField() {
-+        // GROOVY-8112
-+        assertScript '''
-+            @groovy.transform.Field
-+            StringBuilder logger = new StringBuilder()
-+            logger.append('a')
-+            ['b'].each {
-+                logger.append(it)
-+                new Object() {
-+                    String toString() {
-+                        logger.append('c')
-+                        ['d'].each { logger.append(it) }
-+                    }
-+                }.toString()
-+            }
-+            Closure c = { logger.append('e') }
-+            c()
-+            // control: worked previously, make sure we didn't break
-+            def method() {
-+                logger.append('f')
-+                ['g'].each {
-+                    logger.append(it)
-+                    new Object() {
-+                        String toString() {
-+                            logger.append('h')
-+                        }
-+                    }.toString()
-+                }
-+            }
-+            method()
-+            assert logger.toString() == 'abcdefgh'
-+        '''
-+    }
-+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/04aa9f46/pr625.patch
----------------------------------------------------------------------
diff --git a/pr625.patch b/pr625.patch
deleted file mode 100644
index 4d0e8d2..0000000
--- a/pr625.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 03fd268d814c491f1424f9fe8d8a0d30c5c333a5 Mon Sep 17 00:00:00 2001
-From: Shil Sinha <[email protected]>
-Date: Tue, 31 Oct 2017 13:29:19 -0400
-Subject: [PATCH] GROOVY-8369: Statically compiled property access on enum
- class throws NoSuchFieldError
-
----
- .../classgen/asm/sc/StaticTypesCallSiteWriter.java      | 10 +++++-----
- .../asm/sc/FieldsAndPropertiesStaticCompileTest.groovy  | 17 +++++++++++++++++
- 2 files changed, 22 insertions(+), 5 deletions(-)
-
-diff --git 
a/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java 
b/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
-index 8d003ebc75..2eaa9348e6 100644
---- 
a/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
-+++ 
b/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
-@@ -148,11 +148,6 @@ public void makeGetPropertySite(Expression receiver, 
final String methodName, fi
-         }
-         if (makeGetPropertyWithGetter(receiver, receiverType, methodName, 
safe, implicitThis)) return;
-         if (makeGetField(receiver, receiverType, methodName, safe, 
implicitThis, samePackages(receiverType.getPackageName(), 
classNode.getPackageName()))) return;
--        if (receiverType.isEnum()) {
--            mv.visitFieldInsn(GETSTATIC, 
BytecodeHelper.getClassInternalName(receiverType), methodName, 
BytecodeHelper.getTypeDescription(receiverType));
--            controller.getOperandStack().push(receiverType);
--            return;
--        }
-         if (receiver instanceof ClassExpression) {
-             if (makeGetField(receiver, receiver.getType(), methodName, safe, 
implicitThis, samePackages(receiver.getType().getPackageName(), 
classNode.getPackageName()))) return;
-             if (makeGetPropertyWithGetter(receiver, receiver.getType(), 
methodName, safe, implicitThis)) return;
-@@ -163,6 +158,11 @@ public void makeGetPropertySite(Expression receiver, 
final String methodName, fi
-             if (makeGetPropertyWithGetter(receiver, CLASS_Type, methodName, 
safe, implicitThis)) return;
-             if (makeGetField(receiver, CLASS_Type, methodName, safe, false, 
true)) return;
-         }
-+        if (receiverType.isEnum()) {
-+            mv.visitFieldInsn(GETSTATIC, 
BytecodeHelper.getClassInternalName(receiverType), methodName, 
BytecodeHelper.getTypeDescription(receiverType));
-+            controller.getOperandStack().push(receiverType);
-+            return;
-+        }
-         if (makeGetPrivateFieldWithBridgeMethod(receiver, receiverType, 
methodName, safe, implicitThis)) return;
- 
-         // GROOVY-5580, it is still possible that we're calling a 
superinterface property
-diff --git 
a/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
 
b/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
-index 6af5f135f1..2bf0a867bd 100644
---- 
a/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
-+++ 
b/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
-@@ -696,4 +696,21 @@ import 
org.codehaus.groovy.transform.sc.ListOfExpressionsExpression
-             assert astTrees['A$_closure1'][1].contains('INVOKESTATIC 
A.pfaccess$02 (LA;Ljava/lang/String;)Ljava/lang/String;')
-         }
-     }
-+
-+    //GROOVY-8369
-+    void testPropertyAccessOnEnumClass() {
-+        try {
-+            assertScript '''
-+                enum Foo {}
-+
-+                def test() {
-+                    println Foo.getModifiers() // => 16401 // ENUM | FINAL | 
PUBLIC (see GROOVY_8360 wrt STATIC)
-+                    println Foo.modifiers      // java.lang.NoSuchFieldError: 
modifiers
-+                }    
-+                test()
-+            '''
-+        } finally {
-+            //println astTrees
-+        }
-+    }
- }

http://git-wip-us.apache.org/repos/asf/groovy/blob/04aa9f46/src/main/groovy/transform/MapArguments.java.bak
----------------------------------------------------------------------
diff --git a/src/main/groovy/transform/MapArguments.java.bak 
b/src/main/groovy/transform/MapArguments.java.bak
deleted file mode 100644
index c4d097d..0000000
--- a/src/main/groovy/transform/MapArguments.java.bak
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.transform;
-
-import org.codehaus.groovy.transform.GroovyASTTransformationClass;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.METHOD})
-@GroovyASTTransformationClass("org.apache.groovy.transform.MapArgumentsASTTransformation")
-public @interface MapArguments {
-    Class typeHint() default Object.class;
-}

http://git-wip-us.apache.org/repos/asf/groovy/blob/04aa9f46/src/main/org/apache/groovy/transform/MapArgumentsASTTransformation.java.bak
----------------------------------------------------------------------
diff --git 
a/src/main/org/apache/groovy/transform/MapArgumentsASTTransformation.java.bak 
b/src/main/org/apache/groovy/transform/MapArgumentsASTTransformation.java.bak
deleted file mode 100644
index bd9b293..0000000
--- 
a/src/main/org/apache/groovy/transform/MapArgumentsASTTransformation.java.bak
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- *//*
-package org.apache.groovy.transform;
-
-import groovy.transform.MapArguments;
-import org.codehaus.groovy.ast.ASTNode;
-import org.codehaus.groovy.ast.AnnotationNode;
-import org.codehaus.groovy.ast.ClassHelper;
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.ConstructorNode;
-import org.codehaus.groovy.ast.MethodNode;
-import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.expr.ArgumentListExpression;
-import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.expr.VariableExpression;
-import org.codehaus.groovy.control.CompilePhase;
-import org.codehaus.groovy.control.SourceUnit;
-import org.codehaus.groovy.transform.AbstractASTTransformation;
-import org.codehaus.groovy.transform.GroovyASTTransformation;
-import org.objectweb.asm.Opcodes;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.apache.groovy.ast.tools.FactoryUtils.args;
-import static org.apache.groovy.ast.tools.FactoryUtils.callThisX;
-import static org.apache.groovy.ast.tools.FactoryUtils.castX;
-import static org.apache.groovy.ast.tools.FactoryUtils.classX;
-import static org.apache.groovy.ast.tools.FactoryUtils.constX;
-import static org.apache.groovy.ast.tools.FactoryUtils.ctorX;
-import static org.apache.groovy.ast.tools.FactoryUtils.stmt;
-import static org.apache.groovy.ast.tools.FactoryUtils.varX;
-
-@GroovyASTTransformation(phase = CompilePhase.SEMANTIC_ANALYSIS)
-public class MapArgumentsASTTransformation extends AbstractASTTransformation {
-
-    @Override
-    public void visit(ASTNode[] nodes, SourceUnit source) {
-        init(nodes, source);
-
-        MethodNode methodNode = (MethodNode) nodes[1];
-
-        Parameter[] parameters = methodNode.getParameters();
-        Parameter closureParameter = null;
-
-        switch (parameters.length) {
-            case 0:
-                addError("MapArguments parameters should not be empty", 
methodNode);
-                return;
-            case 1:
-                //TODO more object checks
-                break;
-            case 2:
-                closureParameter = parameters[1];
-                if 
(!(closureParameter.getType().isDerivedFrom(ClassHelper.CLOSURE_TYPE)) && 
!ClassHelper.isSAMType(closureParameter.getType())) {
-                    addError("MapArguments second parameter can be a closure 
only", closureParameter);
-                    return;
-                }
-                break;
-            default:
-                addError("MapArguments parameters length should not be greater 
than 2", methodNode);
-                return;
-        }
-
-        Parameter mapParameter = new 
Parameter(nonGeneric(ClassHelper.MAP_TYPE), "__namedArgs");
-
-        Parameter[] mapBasedMethodParameters = closureParameter != null ? new 
Parameter[]{mapParameter, closureParameter} : new Parameter[]{mapParameter};
-
-        ClassNode declaringClass = methodNode.getDeclaringClass();
-
-        if (declaringClass.hasMethod(methodNode.getName(), 
mapBasedMethodParameters)) {
-            addError("This class already has a Map-based method", methodNode);
-            return;
-        }
-
-        Expression convertedValueExpression;
-
-        ClassNode parameterType = parameters[0].getType();
-        if (checkForMapConstructor(parameterType)) {
-            ArgumentListExpression convertedArguments = 
args(varX(mapParameter));
-            if ((parameterType.getModifiers() & Opcodes.ACC_STATIC) == 0) {
-                if(methodNode.isStatic()) {
-                    addError("You can't use inner class as map argument since 
it's impossible to instantiate it", methodNode);
-                    return;
-                }
-                convertedArguments.getExpressions().add(0, 
VariableExpression.THIS_EXPRESSION);
-            }
-            convertedValueExpression = ctorX(parameterType, 
convertedArguments);
-        } else {
-            convertedValueExpression = castX(parameterType, 
varX(mapParameter));
-        }
-
-        ArgumentListExpression oldMethodArguments = 
FactoryUtils.args(convertedValueExpression);
-
-        List<MethodNode> generatedMethods = new ArrayList<MethodNode>();
-        generatedMethods.add(declaringClass.addMethod(
-                methodNode.getName(),
-                methodNode.getModifiers(),
-                methodNode.getReturnType(),
-                mapBasedMethodParameters,
-                methodNode.getExceptions(),
-                stmt(callThisX(methodNode.getName(), oldMethodArguments))
-        ));
-
-        if (closureParameter != null) {
-            oldMethodArguments.addExpression(varX(closureParameter));
-            generatedMethods.add(declaringClass.addMethod(
-                    methodNode.getName(),
-                    methodNode.getModifiers(),
-                    methodNode.getReturnType(),
-                    new Parameter[]{mapBasedMethodParameters[0]},
-                    methodNode.getExceptions(),
-                    stmt(callThisX(
-                            methodNode.getName(),
-                            args(oldMethodArguments.getExpression(0), 
castX(closureParameter.getType(), constX(null)))
-                    ))
-            ));
-        }
-
-        for (MethodNode generatedMethod : generatedMethods) {
-            AnnotationNode mapArgumentsAnnotationNode = new 
AnnotationNode(ClassHelper.makeWithoutCaching(MapArguments.class));
-            mapArgumentsAnnotationNode.setMember("typeHint", 
classX(parameterType));
-            generatedMethod.addAnnotation(mapArgumentsAnnotationNode);
-        }
-    }
-
-    protected boolean checkForMapConstructor(ClassNode parameterType) {
-        List<ConstructorNode> declaredConstructors = 
parameterType.getDeclaredConstructors();
-
-        for (ConstructorNode declaredConstructor : declaredConstructors) {
-            Parameter[] declaredConstructorParameters = 
declaredConstructor.getParameters();
-            if (declaredConstructorParameters.length != 1) {
-                continue;
-            }
-
-            ClassNode declaredConstructorParameterType = 
declaredConstructorParameters[0].getType();
-
-            if (declaredConstructorParameterType == null) {
-                continue;
-            }
-
-            if (declaredConstructorParameterType.equals(ClassHelper.MAP_TYPE)) 
{
-                return true;
-            }
-        }
-
-        return false;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/groovy/blob/04aa9f46/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy8224Bug.groovy.bak
----------------------------------------------------------------------
diff --git 
a/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy8224Bug.groovy.bak 
b/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy8224Bug.groovy.bak
deleted file mode 100644
index 8fe711b..0000000
--- a/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy8224Bug.groovy.bak
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.stubgenerator
-
-/**
- * Test that traits include getters/setters.
- */
-class Groovy8224Bug extends StringSourcesStubTestCase {
-
-    Map<String, String> provideSources() {
-        [
-                'Foo.groovy': '''
-                    trait GroovyXTrait {
-                        int foo
-                    }
-                ''',
-                'Main.java': '''
-                    class Main {
-                        public static void main(String[] args) {
-                            new GroovyXImpl().getFoo();
-                        }
-                    }
-                ''',
-                'GroovyXImpl.groovy': '''
-                    class GroovyXImpl implements GroovyXTrait { }
-                ''',
-        ]
-    }
-
-    void verifyStubs() {
-        def stubSource = stubJavaSourceFor('GroovyXImpl')
-        assert stubSource.contains('interface Foo')
-        assert stubSource.contains('int foo()')
-        assert stubSource.contains('void baz(int y)')
-        assert stubSource.contains('void bar(int x)')
-    }
-}

Reply via email to