You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by bl...@apache.org on 2017/10/16 14:20:09 UTC

[1/4] groovy git commit: Add a guard to figure out if @Generated should be created & added to methods

Repository: groovy
Updated Branches:
  refs/heads/master 9061c4a15 -> 540826abc


Add a guard to figure out if @Generated should be created & added to methods


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/f2f518d9
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/f2f518d9
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/f2f518d9

Branch: refs/heads/master
Commit: f2f518d97928aa8ca218f85f190f6e6385f15798
Parents: 3feea3e
Author: aalmiray <aa...@gmail.com>
Authored: Thu Oct 12 16:53:22 2017 +0200
Committer: Jochen Theodorou <bl...@gmx.org>
Committed: Mon Oct 16 16:18:22 2017 +0200

----------------------------------------------------------------------
 .../org/codehaus/groovy/classgen/Verifier.java  | 29 ++++++++++++--------
 1 file changed, 18 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/f2f518d9/src/main/org/codehaus/groovy/classgen/Verifier.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/Verifier.java b/src/main/org/codehaus/groovy/classgen/Verifier.java
index f1251d7..20fe156 100644
--- a/src/main/org/codehaus/groovy/classgen/Verifier.java
+++ b/src/main/org/codehaus/groovy/classgen/Verifier.java
@@ -387,11 +387,13 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
     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));
+
+        boolean shouldAnnotate = classNode.getModule().getContext() != null;
+        AnnotationNode generatedAnnotation = shouldAnnotate ? new AnnotationNode(ClassHelper.make(GENERATED_ANNOTATION)) : null;
 
         if (!node.hasMethod("getMetaClass", Parameter.EMPTY_ARRAY)) {
             metaClassField = setMetaClassFieldIfNotExists(node, metaClassField);
-            addMethod(node, !isAbstract(node.getModifiers()),
+            MethodNode methodNode = addMethod(node, !isAbstract(node.getModifiers()),
                     "getMetaClass",
                     ACC_PUBLIC,
                     ClassHelper.METACLASS_TYPE,
@@ -429,7 +431,8 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                             mv.visitInsn(ARETURN);
                         }
                     })
-            ).addAnnotation(generatedAnnotation);
+            );
+            if (shouldAnnotate) methodNode.addAnnotation(generatedAnnotation);
         }
 
         Parameter[] parameters = new Parameter[]{new Parameter(ClassHelper.METACLASS_TYPE, "mc")};
@@ -458,12 +461,13 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                 setMetaClassCode = new BytecodeSequence(list);
             }
 
-            addMethod(node, !isAbstract(node.getModifiers()),
+            MethodNode methodNode = addMethod(node, !isAbstract(node.getModifiers()),
                     "setMetaClass",
                     ACC_PUBLIC, ClassHelper.VOID_TYPE,
                     SET_METACLASS_PARAMS, ClassNode.EMPTY_ARRAY,
                     setMetaClassCode
-            ).addAnnotation(generatedAnnotation);
+            );
+            if (shouldAnnotate) methodNode.addAnnotation(generatedAnnotation);
         }
 
         if (!node.hasMethod("invokeMethod", INVOKE_METHOD_PARAMS)) {
@@ -473,7 +477,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
             blockScope.putReferencedLocalVariable(vMethods);
             blockScope.putReferencedLocalVariable(vArguments);
 
-            addMethod(node, !isAbstract(node.getModifiers()),
+            MethodNode methodNode = addMethod(node, !isAbstract(node.getModifiers()),
                     "invokeMethod",
                     ACC_PUBLIC,
                     ClassHelper.OBJECT_TYPE, INVOKE_METHOD_PARAMS,
@@ -489,11 +493,12 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                             mv.visitInsn(ARETURN);
                         }
                     })
-            ).addAnnotation(generatedAnnotation);
+            );
+            if (shouldAnnotate) methodNode.addAnnotation(generatedAnnotation);
         }
 
         if (!node.hasMethod("getProperty", GET_PROPERTY_PARAMS)) {
-            addMethod(node, !isAbstract(node.getModifiers()),
+            MethodNode methodNode = addMethod(node, !isAbstract(node.getModifiers()),
                     "getProperty",
                     ACC_PUBLIC,
                     ClassHelper.OBJECT_TYPE,
@@ -509,11 +514,12 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                             mv.visitInsn(ARETURN);
                         }
                     })
-            ).addAnnotation(generatedAnnotation);
+            );
+            if (shouldAnnotate) methodNode.addAnnotation(generatedAnnotation);
         }
 
         if (!node.hasMethod("setProperty", SET_PROPERTY_PARAMS)) {
-            addMethod(node, !isAbstract(node.getModifiers()),
+            MethodNode methodNode = addMethod(node, !isAbstract(node.getModifiers()),
                     "setProperty",
                     ACC_PUBLIC,
                     ClassHelper.VOID_TYPE,
@@ -530,7 +536,8 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                             mv.visitInsn(RETURN);
                         }
                     })
-            ).addAnnotation(generatedAnnotation);
+            );
+            if (shouldAnnotate) methodNode.addAnnotation(generatedAnnotation);
         }
     }
 


[3/4] groovy git commit: GROOVY-8352: add a @Generated annotation

Posted by bl...@apache.org.
GROOVY-8352: add a @Generated annotation


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/ed2aeb84
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/ed2aeb84
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/ed2aeb84

Branch: refs/heads/master
Commit: ed2aeb84bb14cf33f3234bdc80ebdaf1b18d7fd6
Parents: 9061c4a
Author: aalmiray <aa...@gmail.com>
Authored: Wed Oct 11 16:34:27 2017 +0200
Committer: Jochen Theodorou <bl...@gmx.org>
Committed: Mon Oct 16 16:18:22 2017 +0200

----------------------------------------------------------------------
 src/main/groovy/transform/Generated.java        | 36 +++++++++
 .../org/codehaus/groovy/classgen/Verifier.java  | 22 +++---
 .../groovy/tools/javac/JavaStubGenerator.java   | 10 ++-
 .../transform/GeneratedTransformTest.groovy     | 81 ++++++++++++++++++++
 4 files changed, 136 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/ed2aeb84/src/main/groovy/transform/Generated.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/transform/Generated.java b/src/main/groovy/transform/Generated.java
new file mode 100644
index 0000000..f7ea40a
--- /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 {
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/ed2aeb84/src/main/org/codehaus/groovy/classgen/Verifier.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/Verifier.java b/src/main/org/codehaus/groovy/classgen/Verifier.java
index b98e784..f1251d7 100644
--- a/src/main/org/codehaus/groovy/classgen/Verifier.java
+++ b/src/main/org/codehaus/groovy/classgen/Verifier.java
@@ -21,6 +21,7 @@ package org.codehaus.groovy.classgen;
 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 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
             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 class Verifier implements GroovyClassVisitor, Opcodes {
     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 class Verifier implements GroovyClassVisitor, Opcodes {
                             mv.visitInsn(ARETURN);
                         }
                     })
-            );
+            ).addAnnotation(generatedAnnotation);
         }
 
         Parameter[] parameters = new Parameter[]{new Parameter(ClassHelper.METACLASS_TYPE, "mc")};
@@ -459,7 +463,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                     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 class Verifier implements GroovyClassVisitor, Opcodes {
                             mv.visitInsn(ARETURN);
                         }
                     })
-            );
+            ).addAnnotation(generatedAnnotation);
         }
 
         if (!node.hasMethod("getProperty", GET_PROPERTY_PARAMS)) {
@@ -505,7 +509,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                             mv.visitInsn(ARETURN);
                         }
                     })
-            );
+            ).addAnnotation(generatedAnnotation);
         }
 
         if (!node.hasMethod("setProperty", SET_PROPERTY_PARAMS)) {
@@ -526,7 +530,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                             mv.visitInsn(RETURN);
                         }
                     })
-            );
+            ).addAnnotation(generatedAnnotation);
         }
     }
 
@@ -535,12 +539,12 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
      * 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);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/ed2aeb84/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index b672793..89d45ae 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 @@ public class JavaStubGenerator {
                     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 @@ public class JavaStubGenerator {
                     }
                 }
 
-                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

http://git-wip-us.apache.org/repos/asf/groovy/blob/ed2aeb84/src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy
----------------------------------------------------------------------
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 0000000..34e9f0e
--- /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


[4/4] groovy git commit: Remove JDK8 check in GeneratedTransformTest (close #617)

Posted by bl...@apache.org.
Remove JDK8 check in GeneratedTransformTest (close #617)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/540826ab
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/540826ab
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/540826ab

Branch: refs/heads/master
Commit: 540826abc16bdc8ede6372ad3f8637b96f32cbd6
Parents: f2f518d
Author: aalmiray <aa...@gmail.com>
Authored: Thu Oct 12 16:53:44 2017 +0200
Committer: Jochen Theodorou <bl...@gmx.org>
Committed: Mon Oct 16 16:19:06 2017 +0200

----------------------------------------------------------------------
 .../codehaus/groovy/transform/GeneratedTransformTest.groovy    | 6 ------
 1 file changed, 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/540826ab/src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy b/src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy
index 34e9f0e..af708c8 100644
--- a/src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/GeneratedTransformTest.groovy
@@ -26,8 +26,6 @@ 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.
  */
@@ -38,10 +36,6 @@ class GeneratedTransformTest extends GroovyShellTestCase {
     @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


[2/4] groovy git commit: Remove author tags from javadoc

Posted by bl...@apache.org.
Remove author tags from javadoc


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/3feea3eb
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/3feea3eb
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/3feea3eb

Branch: refs/heads/master
Commit: 3feea3eb6bf633b9f7ede2b88235a293c0e2305b
Parents: ed2aeb8
Author: aalmiray <aa...@gmail.com>
Authored: Thu Oct 12 10:07:07 2017 +0200
Committer: Jochen Theodorou <bl...@gmx.org>
Committed: Mon Oct 16 16:18:22 2017 +0200

----------------------------------------------------------------------
 src/main/groovy/transform/Generated.java | 4 ----
 1 file changed, 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/3feea3eb/src/main/groovy/transform/Generated.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/transform/Generated.java b/src/main/groovy/transform/Generated.java
index f7ea40a..98eaf5b 100644
--- a/src/main/groovy/transform/Generated.java
+++ b/src/main/groovy/transform/Generated.java
@@ -25,10 +25,6 @@ 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)