[GitHub] groovy pull request #835: GROOVY-8908: Bump gradle to 5.0

2018-12-03 Thread melix
Github user melix commented on a diff in the pull request:

https://github.com/apache/groovy/pull/835#discussion_r238345659
  
--- Diff: subprojects/parser-antlr4/build.gradle ---
@@ -30,9 +30,11 @@ def srcBase = "subprojects/parser-antlr4/src"
 def srcMain = "$srcBase/main"
 def srcTest = "$srcBase/test"
 
-final PARSER_PACKAGE_NAME = 'org.apache.groovy.parser.antlr4'
 generateGrammarSource {
+maxHeapSize = '1g'
--- End diff --

From my tests it seems we can reduce to `512m`, otherwise LGTM :+1: 


---


[GitHub] groovy pull request #719: Optimize generation of Groovydoc

2018-05-23 Thread melix
GitHub user melix opened a pull request:

https://github.com/apache/groovy/pull/719

Optimize generation of Groovydoc

There's a lot to say about Groovydoc, but worst of all, its performance is 
terrible. This PR is an attempt to fix part of it.

Before my changes: https://scans.gradle.com/s/msfs2nf5mqmxw (3m35s)
After my changes: https://scans.gradle.com/s/a7pi5g6bb7bbu (53s)

@paulk-asert I'm leaving the review/merge to you as I spent already too 
much time on this. Given the improvements, I wouldn't mind a backport to 2.5!

You can merge this pull request into a Git repository by running:

$ git pull https://github.com/melix/groovy cc/faster-groovydoc

Alternatively you can review and apply these changes as the patch at:

https://github.com/apache/groovy/pull/719.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

This closes #719


commit 3a8dd6d5b3f36e7058567f32264ce9c3126e3631
Author: Cedric Champeau <cchampeau@...>
Date:   2018-05-23T06:34:10Z

Cache class resolution

As soon as we have a project with a reasonable size, we spend a large
amount of time resolving the same classes again and again. This commit
introduces a (poor man's) cache to avoid the same lookups. It's not an
attempt to make Groovydoc better, it's just a patch to make it not so
slow.

commit d8f4ec430f1285c36375047b0f3488a313602555
Author: Cedric Champeau <cchampeau@...>
Date:   2018-05-23T06:35:41Z

Use a reasonable size buffer for generated docs

The default buffer is a 16(!) characters string. Most of the groovydoc
files we generate are over 10k, so this commit adds a reasonable size
buffer for templates, which avoids a lot of buffer resizes.

commit c5832093ff9992537db1856b7f0dae58e9fe0081
Author: Cedric Champeau <cchampeau@...>
Date:   2018-05-23T07:49:38Z

Perform direct lookup in maps

Why the h... we were iterating over the map to check each entry
is beyond my understanding.

commit af7605f5ff84cb7a381696fb0d3da8c4902ff658
Author: Cedric Champeau <cchampeau@...>
Date:   2018-05-23T07:59:59Z

Implement a bit smarter lookup

The code isn't really clear what the inputs/outputs are, so it's
just reordering things to make it faster.

commit f810c805922155988395ee1f996530987b0b71f6
Author: Cedric Champeau <cchampeau@...>
Date:   2018-05-23T09:03:47Z

Optimize StringBuilder#leftShift for GString case

commit a5c49a01678fe13145c8e32b415f68361544d06b
Author: Cedric Champeau <cchampeau@...>
Date:   2018-05-23T09:42:42Z

Don't use exception for control flow

It's extremely slow, as we generate tons of stacktraces for nothing!

commit 12d375852d0c83b5e5924a12d09af6035496aaa2
Author: Cedric Champeau <cchampeau@...>
Date:   2018-05-23T09:58:11Z

Cache classNamed lookups

The calls to `substring` are pretty expensive and done again and again
on the same classes. This is extremely inefficient, so this commit adds
an adhoc cache for this. Note that the relativeness to GroovyClassDoc
seems related to a poorly designed modeled, it can certainly be even
faster.

commit 45e3225485ef44385ff7aa3759c2c63932e088f2
Author: Cedric Champeau <cchampeau@...>
Date:   2018-05-23T10:03:18Z

Precompile some regular expressions

commit 31c93d6755814953e6eb0e92875ffafb8d33b060
Author: Cedric Champeau <cchampeau@...>
Date:   2018-05-23T10:12:21Z

Cache external class lookup




---


[GitHub] groovy pull request #566: Added IgnoreDefaultEqualsAndToString

2018-02-06 Thread melix
Github user melix commented on a diff in the pull request:

https://github.com/apache/groovy/pull/566#discussion_r166246347
  
--- Diff: src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java ---
@@ -12026,6 +12026,9 @@ public static boolean equals(List left, List right) 
{
 if (left == right) {
 return true;
 }
+if( 
left.getClass().getAnnotation(IgnoreDefaultEqualsAndToString.class)!=null && 
right.getClass().getAnnotation(IgnoreDefaultEqualsAndToString.class)!=null ) {
--- End diff --

-1 to this until we have a better idea on the impact on performance. 
Calling `getClass().getAnnotation(...)` is **very** expensive.


---


[GitHub] groovy pull request #:

2017-12-19 Thread melix
Github user melix commented on the pull request:


https://github.com/apache/groovy/commit/a6c82ad08b85ae8746b982a1a19107e93bfdb568#commitcomment-26384969
  
:+1: I apparently missed that!


---


[GitHub] groovy pull request #635: GROOVY-8255: Odd problems with flow typing and gen...

2017-11-14 Thread melix
Github user melix commented on a diff in the pull request:

https://github.com/apache/groovy/pull/635#discussion_r150800145
  
--- Diff: 
src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java ---
@@ -3461,6 +3465,36 @@ public void visitTernaryExpression(final 
TernaryExpression expression) {
 popAssignmentTracking(oldTracker);
 }
 
+// currently just for empty literals, not for e.g. 
Collections.emptyList() at present
+/// it seems attractive to want to do this for more cases but perhaps 
not all cases
+private ClassNode checkForTargetType(final Expression expr, final 
ClassNode type) {
+if (typeCheckingContext.getEnclosingBinaryExpression() != null && 
isEmptyCollection(expr)) {
+int op = 
typeCheckingContext.getEnclosingBinaryExpression().getOperation().getType();
+if (isAssignment(op)) {
+VariableExpression target = (VariableExpression) 
typeCheckingContext.getEnclosingBinaryExpression().getLeftExpression();
+return adjustForTargetType(target.getType(), type);
+}
+}
+return type;
+}
+
+private ClassNode adjustForTargetType(final ClassNode targetType, 
final ClassNode resultType) {
+if (targetType.isUsingGenerics() && 
missesGenericsTypes(resultType)) {
+// unchecked assignment within ternary/elvis
+// examples:
+// List list = existingAs ?: []
+// in that case, the inferred type of the RHS is the type of 
the RHS
+// "completed" with generics type information available in the 
LHS
+return GenericsUtils.parameterizeType(targetType, 
resultType.getPlainNodeReference());
+}
+return resultType;
+}
+
+private boolean isEmptyCollection(Expression expr) {
--- End diff --

Could be static.


---


[GitHub] groovy pull request #:

2017-06-16 Thread melix
Github user melix commented on the pull request:


https://github.com/apache/groovy/commit/6c4fa92328f48c9a0e2c85c4a26e65000dbd1088#commitcomment-22584865
  
Sorry my bad, it's not an API change, it's just that I had the build scan 
recipes plugin applied in an init script, so I didn't realize I had 
accidentally removed it from the build file. This should be fixed now.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---


[GitHub] groovy pull request #472: Macro methods

2017-02-27 Thread melix
Github user melix commented on a diff in the pull request:

https://github.com/apache/groovy/pull/472#discussion_r103271106
  
--- Diff: 
subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroTransformation.java
 ---
@@ -18,42 +18,113 @@
  */
 package org.codehaus.groovy.macro.transform;
 
+import groovy.transform.CompilationUnitAware;
 import org.codehaus.groovy.ast.*;
 import org.codehaus.groovy.ast.expr.*;
+import org.codehaus.groovy.classgen.asm.InvocationWriter;
+import org.codehaus.groovy.control.CompilationUnit;
 import org.codehaus.groovy.control.CompilePhase;
 import org.codehaus.groovy.control.SourceUnit;
+import org.codehaus.groovy.macro.runtime.MacroContext;
+import org.codehaus.groovy.macro.runtime.MacroStub;
+import org.codehaus.groovy.runtime.InvokerHelper;
 import org.codehaus.groovy.transform.GroovyASTTransformation;
+import org.codehaus.groovy.transform.stc.ExtensionMethodNode;
+import org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
- *
  * @author Sergei Egorov <bsid...@gmail.com>
  */
 
 @GroovyASTTransformation(phase = CompilePhase.CONVERSION)
-public class MacroTransformation extends MethodCallTransformation {
+public class MacroTransformation extends MethodCallTransformation 
implements CompilationUnitAware {
+
+private static final ClassNode MACRO_CONTEXT_CLASS_NODE = 
ClassHelper.make(MacroContext.class);
+
+private static final ClassNode MACRO_STUB_CLASS_NODE = 
ClassHelper.make(MacroStub.class);
+
+private static final PropertyExpression MACRO_STUB_INSTANCE = new 
PropertyExpression(new ClassExpression(MACRO_STUB_CLASS_NODE), "INSTANCE");
+
+private static final String MACRO_STUB_METHOD_NAME = "macroMethod";
+
+protected CompilationUnit unit;
 
-public static final String DOLLAR_VALUE = "$v";
-public static final String MACRO_METHOD = "macro";
+@Override
+public void setCompilationUnit(CompilationUnit unit) {
+this.unit = unit;
+}
 
 @Override
-protected GroovyCodeVisitor getTransformer(final ASTNode[] nodes, 
final SourceUnit sourceUnit) {
-final ClassCodeExpressionTransformer trn = new 
ClassCodeExpressionTransformer() {
+protected GroovyCodeVisitor getTransformer(ASTNode[] nodes, final 
SourceUnit sourceUnit) {
+// Macro methods should on a classpath of the compiler because we 
invoke them during the compilation
+final ClassLoader classLoader = this.getClass().getClassLoader();
+return new ClassCodeVisitorSupport() {
+
 @Override
 protected SourceUnit getSourceUnit() {
 return sourceUnit;
 }
 
 @Override
-public Expression transform(final Expression exp) {
-if (exp instanceof ConstructorCallExpression) {
-MethodCallExpression call = 
exp.getNodeMetaData(MacroTransformation.class);
-if (call!=null) {
-return call;
+public void visitMethodCallExpression(MethodCallExpression 
call) {
--- End diff --

This method is very long. Could you split it into smaller focused pieces?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---


[GitHub] groovy pull request #472: Macro methods

2017-02-27 Thread melix
Github user melix commented on a diff in the pull request:

https://github.com/apache/groovy/pull/472#discussion_r103270568
  
--- Diff: 
subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroClassTransformation.java
 ---
@@ -0,0 +1,114 @@
+/*
+ *  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.macro.transform;
+
+import org.codehaus.groovy.ast.*;
+import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.tools.GeneralUtils;
+import org.codehaus.groovy.control.CompilePhase;
+import org.codehaus.groovy.control.SourceUnit;
+import org.codehaus.groovy.macro.methods.MacroGroovyMethods;
+import org.codehaus.groovy.macro.runtime.MacroBuilder;
+import org.codehaus.groovy.transform.GroovyASTTransformation;
+
+import java.util.Iterator;
+import java.util.List;
+
+import static org.codehaus.groovy.ast.tools.GeneralUtils.*;
+
+@GroovyASTTransformation(phase = CompilePhase.CONVERSION)
+public class MacroClassTransformation extends MethodCallTransformation {
+
+private static final String MACRO_METHOD = "macro";
+private static final ClassNode MACROCLASS_TYPE = 
ClassHelper.make(MacroClass.class);
+
+@Override
+protected GroovyCodeVisitor getTransformer(final ASTNode[] nodes, 
final SourceUnit sourceUnit) {
+ClassCodeExpressionTransformer transformer = new 
ClassCodeExpressionTransformer() {
+@Override
+protected SourceUnit getSourceUnit() {
+return sourceUnit;
+}
+
+@Override
+public Expression transform(final Expression exp) {
+if (exp instanceof ConstructorCallExpression) {
+MethodCallExpression call = 
exp.getNodeMetaData(MacroTransformation.class);
+if (call != null) {
+return call;
+}
+}
+return super.transform(exp);
+}
+};
+
+return new TransformingCodeVisitor(transformer) {
--- End diff --

Same here. Could you extract a class for this?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---


[GitHub] groovy pull request #472: Macro methods

2017-02-27 Thread melix
Github user melix commented on a diff in the pull request:

https://github.com/apache/groovy/pull/472#discussion_r103270486
  
--- Diff: 
subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroClassTransformation.java
 ---
@@ -0,0 +1,114 @@
+/*
+ *  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.macro.transform;
+
+import org.codehaus.groovy.ast.*;
+import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.tools.GeneralUtils;
+import org.codehaus.groovy.control.CompilePhase;
+import org.codehaus.groovy.control.SourceUnit;
+import org.codehaus.groovy.macro.methods.MacroGroovyMethods;
+import org.codehaus.groovy.macro.runtime.MacroBuilder;
+import org.codehaus.groovy.transform.GroovyASTTransformation;
+
+import java.util.Iterator;
+import java.util.List;
+
+import static org.codehaus.groovy.ast.tools.GeneralUtils.*;
+
+@GroovyASTTransformation(phase = CompilePhase.CONVERSION)
+public class MacroClassTransformation extends MethodCallTransformation {
+
+private static final String MACRO_METHOD = "macro";
+private static final ClassNode MACROCLASS_TYPE = 
ClassHelper.make(MacroClass.class);
+
+@Override
+protected GroovyCodeVisitor getTransformer(final ASTNode[] nodes, 
final SourceUnit sourceUnit) {
+ClassCodeExpressionTransformer transformer = new 
ClassCodeExpressionTransformer() {
--- End diff --

I think this would benefit from being a static inner class. There's no 
clear interest in keeping a reference back to the transformation itself.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---


[GitHub] groovy pull request #472: Macro methods

2017-02-27 Thread melix
Github user melix commented on a diff in the pull request:

https://github.com/apache/groovy/pull/472#discussion_r103271019
  
--- Diff: 
subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroTransformation.java
 ---
@@ -18,42 +18,113 @@
  */
 package org.codehaus.groovy.macro.transform;
 
+import groovy.transform.CompilationUnitAware;
 import org.codehaus.groovy.ast.*;
 import org.codehaus.groovy.ast.expr.*;
+import org.codehaus.groovy.classgen.asm.InvocationWriter;
+import org.codehaus.groovy.control.CompilationUnit;
 import org.codehaus.groovy.control.CompilePhase;
 import org.codehaus.groovy.control.SourceUnit;
+import org.codehaus.groovy.macro.runtime.MacroContext;
+import org.codehaus.groovy.macro.runtime.MacroStub;
+import org.codehaus.groovy.runtime.InvokerHelper;
 import org.codehaus.groovy.transform.GroovyASTTransformation;
+import org.codehaus.groovy.transform.stc.ExtensionMethodNode;
+import org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
- *
  * @author Sergei Egorov <bsid...@gmail.com>
  */
 
 @GroovyASTTransformation(phase = CompilePhase.CONVERSION)
-public class MacroTransformation extends MethodCallTransformation {
+public class MacroTransformation extends MethodCallTransformation 
implements CompilationUnitAware {
+
+private static final ClassNode MACRO_CONTEXT_CLASS_NODE = 
ClassHelper.make(MacroContext.class);
+
+private static final ClassNode MACRO_STUB_CLASS_NODE = 
ClassHelper.make(MacroStub.class);
+
+private static final PropertyExpression MACRO_STUB_INSTANCE = new 
PropertyExpression(new ClassExpression(MACRO_STUB_CLASS_NODE), "INSTANCE");
+
+private static final String MACRO_STUB_METHOD_NAME = "macroMethod";
+
+protected CompilationUnit unit;
 
-public static final String DOLLAR_VALUE = "$v";
-public static final String MACRO_METHOD = "macro";
+@Override
+public void setCompilationUnit(CompilationUnit unit) {
+this.unit = unit;
+}
 
 @Override
-protected GroovyCodeVisitor getTransformer(final ASTNode[] nodes, 
final SourceUnit sourceUnit) {
-final ClassCodeExpressionTransformer trn = new 
ClassCodeExpressionTransformer() {
+protected GroovyCodeVisitor getTransformer(ASTNode[] nodes, final 
SourceUnit sourceUnit) {
+// Macro methods should on a classpath of the compiler because we 
invoke them during the compilation
+final ClassLoader classLoader = this.getClass().getClassLoader();
+return new ClassCodeVisitorSupport() {
+
 @Override
 protected SourceUnit getSourceUnit() {
 return sourceUnit;
 }
 
 @Override
-public Expression transform(final Expression exp) {
-if (exp instanceof ConstructorCallExpression) {
-MethodCallExpression call = 
exp.getNodeMetaData(MacroTransformation.class);
-if (call!=null) {
-return call;
+public void visitMethodCallExpression(MethodCallExpression 
call) {
+super.visitMethodCallExpression(call);
+
+List methods = 
MacroMethodsCache.get(classLoader).get(call.getMethodAsString());
+
+if (methods == null) {
+// Not a macro call
+return;
+}
+
+List callArguments = 
InvocationWriter.makeArgumentList(call.getArguments()).getExpressions();
+
+ClassNode[] argumentsList = new 
ClassNode[callArguments.size()];
+
+for (int i = 0; i < callArguments.size(); i++) {
+argumentsList[i] = 
ClassHelper.make(callArguments.get(i).getClass());
+}
+
+methods = 
StaticTypeCheckingSupport.chooseBestMethod(MACRO_CONTEXT_CLASS_NODE, methods, 
argumentsList);
+
+for (MethodNode macroMethodNode : methods) {
+if (!(macroMethodNode instanceof ExtensionMethodNode)) 
{
+// TODO is it even possible?
--- End diff --

If you don't know if it's possible, it's probably better to throw an error. 
Then if the case appears we know we need to fix it.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---


[GitHub] groovy pull request #472: Macro methods

2017-02-27 Thread melix
Github user melix commented on a diff in the pull request:

https://github.com/apache/groovy/pull/472#discussion_r103269693
  
--- Diff: 
subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroStub.java
 ---
@@ -0,0 +1,32 @@
+/*
+ *  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.macro.runtime;
+
+/**
+ * Stub for macro calls.
--- End diff --

Would you mind giving more context on this? It might be hard for newcomers 
to figure out.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---


[GitHub] groovy pull request #472: Macro methods

2017-02-27 Thread melix
Github user melix commented on a diff in the pull request:

https://github.com/apache/groovy/pull/472#discussion_r103269312
  
--- Diff: 
subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/Macro.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 org.codehaus.groovy.macro.runtime;
+
+import org.apache.groovy.lang.annotation.Incubating;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author Sergei Egorov <bsid...@gmail.com>
+ */
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+@Incubating
+public @interface Macro {
--- End diff --

Missing `@since`.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---


[GitHub] groovy pull request #:

2016-07-15 Thread melix
Github user melix commented on the pull request:


https://github.com/apache/groovy/commit/a903c9e330af224006380af0f56afa98c0cc6b64#commitcomment-18257989
  
In src/main/groovy/lang/ObjectRange.java:
In src/main/groovy/lang/ObjectRange.java on line 237:
This is a binary breaking change, I think we should avoid this or at least 
discuss on the MLs.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---