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 2017/03/21 12:15:26 UTC
[1/2] groovy git commit: tweak build to report snapshot dependencies
found during non-snapshot release
Repository: groovy
Updated Branches:
refs/heads/GROOVY_2_5_X 6f3827c36 -> b9a6f4159
tweak build to report snapshot dependencies found during non-snapshot release
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/81ed19f9
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/81ed19f9
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/81ed19f9
Branch: refs/heads/GROOVY_2_5_X
Commit: 81ed19f9a7c71d4fad3b2359294e7c3fd7ac780c
Parents: 6f3827c
Author: paulk <pa...@asert.com.au>
Authored: Tue Mar 21 21:06:51 2017 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Tue Mar 21 22:15:01 2017 +1000
----------------------------------------------------------------------
gradle/assemble.gradle | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/81ed19f9/gradle/assemble.gradle
----------------------------------------------------------------------
diff --git a/gradle/assemble.gradle b/gradle/assemble.gradle
index f83e2e6..57a0bbb 100644
--- a/gradle/assemble.gradle
+++ b/gradle/assemble.gradle
@@ -586,6 +586,22 @@ task installGroovy(type: Sync, dependsOn: [checkCompatibility, distBin]) {
into installDir
}
+task checkNoSnapshotVersions {
+ doLast {
+ if (project.isReleaseVersion) {
+ // TODO use modules() and exclusions as per distSpec
+ allprojects {
+ project.configurations.runtime.resolvedConfiguration.resolvedArtifacts.each {
+ if (it.moduleVersion.id.version.endsWith("-SNAPSHOT")) {
+ throw new GradleException("Found snapshot dependency for non-snapshot Groovy: " + it.moduleVersion)
+ }
+ }
+ }
+ }
+ }
+}
+distBin.dependsOn checkNoSnapshotVersions
+
import org.gradle.api.file.DuplicatesStrategy
task dist(type: Zip, dependsOn: [checkCompatibility, distBin, distSrc, distDoc, syncDoc]) {
[2/2] groovy git commit: Simplify MacroGroovy substitutions'
implementation (closes #443)
Posted by pa...@apache.org.
Simplify MacroGroovy substitutions' implementation (closes #443)
Assume the order of substitutions, so we can use a list instead of a map to pass the context. Fixes some related issues to Antlr4 migration.
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/b9a6f415
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/b9a6f415
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/b9a6f415
Branch: refs/heads/GROOVY_2_5_X
Commit: b9a6f4159d32d92a7b6cc710bfa4d70697752ad4
Parents: 81ed19f
Author: Sergei Egorov <se...@zeroturnaround.com>
Authored: Sat Oct 8 20:19:12 2016 +0300
Committer: paulk <pa...@asert.com.au>
Committed: Tue Mar 21 22:15:10 2017 +1000
----------------------------------------------------------------------
.../groovy/macro/runtime/MacroBuilder.java | 23 ++---
.../macro/runtime/MacroSubstitutionKey.java | 99 --------------------
.../macro/transform/MacroInvocationTrap.java | 23 ++---
.../org/codehaus/groovy/macro/MacroTest.groovy | 23 +++++
4 files changed, 39 insertions(+), 129 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/b9a6f415/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java
index ab4c4f3..d7cc5ce 100644
--- a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java
+++ b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java
@@ -33,8 +33,8 @@ import org.codehaus.groovy.control.SourceUnit;
import org.codehaus.groovy.macro.transform.MacroInvocationTrap;
import org.codehaus.groovy.macro.transform.MacroTransformation;
+import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
/**
@@ -44,27 +44,25 @@ import java.util.concurrent.atomic.AtomicInteger;
public enum MacroBuilder {
INSTANCE;
- public <T> T macro(String source, final Map<MacroSubstitutionKey, Closure<Expression>> context, Class<T> resultClass) {
+ public <T> T macro(String source, final List<Closure<Expression>> context, Class<T> resultClass) {
return macro(false, source, context, resultClass);
}
- public <T> T macro(boolean asIs, String source, final Map<MacroSubstitutionKey, Closure<Expression>> context, Class<T> resultClass) {
+ public <T> T macro(boolean asIs, String source, final List<Closure<Expression>> context, Class<T> resultClass) {
return macro(CompilePhase.CONVERSION, asIs, source, context, resultClass);
}
- public <T> T macro(CompilePhase compilePhase, String source, final Map<MacroSubstitutionKey, Closure<Expression>> context, Class<T> resultClass) {
+ public <T> T macro(CompilePhase compilePhase, String source, final List<Closure<Expression>> context, Class<T> resultClass) {
return macro(compilePhase, false, source, context, resultClass);
}
private final static AtomicInteger COUNTER = new AtomicInteger();
@SuppressWarnings("unchecked")
- public <T> T macro(CompilePhase compilePhase, boolean asIs, String source, final Map<MacroSubstitutionKey, Closure<Expression>> context, Class<T> resultClass) {
+ public <T> T macro(CompilePhase compilePhase, boolean asIs, String source, final List<Closure<Expression>> context, Class<T> resultClass) {
boolean isClosure = source.startsWith("{");
final String label = isClosure ?"__synthesized__label__" + COUNTER.incrementAndGet() + "__:":"";
final String labelledSource = label + source;
- final int linesOffset = 1;
- final int columnsOffset = label.length() + (isClosure?1:0); // +1 because of {
List<ASTNode> nodes = (new AstBuilder()).buildFromString(compilePhase, true, labelledSource);
@@ -75,21 +73,22 @@ public enum MacroBuilder {
if (!statements.isEmpty()) {
BlockStatement closureBlock = (BlockStatement) statements.get(0);
- performSubstitutions(linesOffset, columnsOffset, context, closureBlock);
+ performSubstitutions(context, closureBlock);
return (T) getMacroValue(closureBlock, asIs);
}
}
if (node instanceof ClassNode) {
- performSubstitutions(linesOffset, columnsOffset, context, node);
+ performSubstitutions(context, node);
return (T) node;
}
}
return null;
}
- private static void performSubstitutions(final int linesOffset, final int columnsOffset, final Map<MacroSubstitutionKey, Closure<Expression>> context, final ASTNode astNode) {
+ private static void performSubstitutions(final List<Closure<Expression>> context, final ASTNode astNode) {
+ final Iterator<Closure<Expression>> iterator = context.iterator();
ClassCodeExpressionTransformer trn = new ClassCodeExpressionTransformer() {
public Expression transform(Expression expression) {
if (!(expression instanceof MethodCallExpression)) {
@@ -102,9 +101,7 @@ public enum MacroBuilder {
return super.transform(expression);
}
- MacroSubstitutionKey key = new MacroSubstitutionKey(call, linesOffset, columnsOffset);
-
- return context.get(key).call();
+ return iterator.next().call();
}
@Override
http://git-wip-us.apache.org/repos/asf/groovy/blob/b9a6f415/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroSubstitutionKey.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroSubstitutionKey.java b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroSubstitutionKey.java
deleted file mode 100644
index 5b382e5..0000000
--- a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroSubstitutionKey.java
+++ /dev/null
@@ -1,99 +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.macro.runtime;
-
-import org.codehaus.groovy.ast.ClassHelper;
-import org.codehaus.groovy.ast.expr.ArgumentListExpression;
-import org.codehaus.groovy.ast.expr.ConstantExpression;
-import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
-import org.codehaus.groovy.ast.expr.Expression;
-
-/**
- *
- * @author Sergei Egorov <bs...@gmail.com>
- */
-public class MacroSubstitutionKey {
-
- private final int startLine;
- private final int startColumn;
- private final int endLine;
- private final int endColumn;
-
- public MacroSubstitutionKey(int startLine, int startColumn, int endLine, int endColumn) {
- this.startLine = startLine;
- this.startColumn = startColumn;
- this.endLine = endLine;
- this.endColumn = endColumn;
- }
-
- public MacroSubstitutionKey(Expression expression, int linesOffset, int columnsOffset) {
- this(
- expression.getLineNumber() - linesOffset,
- expression.getColumnNumber() - (expression.getLineNumber() == linesOffset ? columnsOffset : 0),
- expression.getLastLineNumber() - linesOffset,
- expression.getLastColumnNumber() - (expression.getLastLineNumber() == linesOffset ? columnsOffset : 0)
- );
- }
-
- public ConstructorCallExpression toConstructorCallExpression() {
- return new ConstructorCallExpression(
- ClassHelper.make(this.getClass()),
- new ArgumentListExpression(new Expression[] {
- new ConstantExpression(startLine),
- new ConstantExpression(startColumn),
- new ConstantExpression(endLine),
- new ConstantExpression(endColumn)
- })
- );
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- MacroSubstitutionKey that = (MacroSubstitutionKey) o;
-
- if (endColumn != that.endColumn) return false;
- if (endLine != that.endLine) return false;
- if (startColumn != that.startColumn) return false;
- if (startLine != that.startLine) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = startLine;
- result = 31 * result + startColumn;
- result = 31 * result + endLine;
- result = 31 * result + endColumn;
- return result;
- }
-
- @Override
- public String toString() {
- return "SubstitutionKey{" +
- "startLine=" + startLine +
- ", startColumn=" + startColumn +
- ", endLine=" + endLine +
- ", endColumn=" + endColumn +
- '}';
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/b9a6f415/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroInvocationTrap.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroInvocationTrap.java b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroInvocationTrap.java
index a8cac37..73c14db 100644
--- a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroInvocationTrap.java
+++ b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroInvocationTrap.java
@@ -30,7 +30,7 @@ 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.Expression;
-import org.codehaus.groovy.ast.expr.MapExpression;
+import org.codehaus.groovy.ast.expr.ListExpression;
import org.codehaus.groovy.ast.expr.MethodCallExpression;
import org.codehaus.groovy.ast.expr.PropertyExpression;
import org.codehaus.groovy.ast.expr.TupleExpression;
@@ -40,13 +40,10 @@ import org.codehaus.groovy.ast.tools.GeneralUtils;
import org.codehaus.groovy.control.SourceUnit;
import org.codehaus.groovy.control.io.ReaderSource;
import org.codehaus.groovy.macro.runtime.MacroBuilder;
-import org.codehaus.groovy.macro.runtime.MacroSubstitutionKey;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
import static org.codehaus.groovy.ast.expr.VariableExpression.THIS_EXPRESSION;
@@ -126,8 +123,6 @@ public class MacroInvocationTrap extends MethodInvocationTrap {
return true;
}
- final MapExpression mapExpression = buildSubstitutionMap(closureExpression);
-
String source = convertClosureToSource(closureExpression);
BlockStatement closureBlock = (BlockStatement) closureExpression.getCode();
@@ -159,7 +154,7 @@ public class MacroInvocationTrap extends MethodInvocationTrap {
macroArgumentsExpressions.remove(macroArgumentsExpressions.size() - 1);
macroArgumentsExpressions.add(new ConstantExpression(source));
- macroArgumentsExpressions.add(mapExpression);
+ macroArgumentsExpressions.add(buildSubstitutionMap(closureExpression));
macroArgumentsExpressions.add(new ClassExpression(ClassHelper.makeWithoutCaching(MacroBuilder.getMacroValue(closureBlock, asIs).getClass(), false)));
macroCall.setObjectExpression(new PropertyExpression(new ClassExpression(ClassHelper.makeWithoutCaching(MacroBuilder.class, false)), "INSTANCE"));
@@ -170,9 +165,8 @@ public class MacroInvocationTrap extends MethodInvocationTrap {
return true;
}
- private MapExpression buildSubstitutionMap(final ASTNode expr) {
- final Map<MacroSubstitutionKey, ClosureExpression> map = new HashMap<MacroSubstitutionKey, ClosureExpression>();
- final MapExpression mapExpression = new MapExpression();
+ private ListExpression buildSubstitutionMap(final ASTNode expr) {
+ final ListExpression listExpression = new ListExpression();
ClassCodeVisitorSupport visitor = new ClassCodeVisitorSupport() {
@Override
@@ -206,9 +200,7 @@ public class MacroInvocationTrap extends MethodInvocationTrap {
((BlockStatement) code).setVariableScope(null);
}
- MacroSubstitutionKey key = new MacroSubstitutionKey(call, expr.getLineNumber(), expr.getColumnNumber());
-
- map.put(key, substitutionClosureExpression);
+ listExpression.addExpression(substitutionClosureExpression);
}
}
};
@@ -217,10 +209,7 @@ public class MacroInvocationTrap extends MethodInvocationTrap {
} else {
expr.visit(visitor);
}
- for (Map.Entry<MacroSubstitutionKey, ClosureExpression> entry : map.entrySet()) {
- mapExpression.addMapEntryExpression(entry.getKey().toConstructorCallExpression(), entry.getValue());
- }
- return mapExpression;
+ return listExpression;
}
@Override
http://git-wip-us.apache.org/repos/asf/groovy/blob/b9a6f415/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/MacroTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/MacroTest.groovy b/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/MacroTest.groovy
index 3b740c9..1febbfa 100644
--- a/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/MacroTest.groovy
+++ b/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/MacroTest.groovy
@@ -186,4 +186,27 @@ class MacroTest extends GroovyTestCase {
AstAssert.assertSyntaxTree([expected], [getReturnStatement()]);
'''
}
+
+ void testMultipleSubstitutions() {
+ assertScript '''
+ import org.codehaus.groovy.ast.expr.*;
+ import org.codehaus.groovy.ast.stmt.*;
+ import org.codehaus.groovy.ast.ClassHelper;
+ import org.codehaus.groovy.ast.builder.AstAssert;
+
+ import static org.codehaus.groovy.ast.tools.GeneralUtils.*;
+
+ def var1 = new VariableExpression("a")
+ def var2 = new VariableExpression("b")
+ def var3 = new VariableExpression("c")
+
+ ReturnStatement result = macro {
+ return new NonExistingClass($v{var1}, $v{var2}) + $v{var3}
+ }
+
+ def expected = returnS(plusX(ctorX(ClassHelper.make("NonExistingClass"), args(var1, var2)), var3))
+
+ AstAssert.assertSyntaxTree([expected], [result])
+'''
+ }
}