You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2021/07/25 02:21:52 UTC
[groovy] branch master updated: tweak printing expressions
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 4988329 tweak printing expressions
4988329 is described below
commit 49883296965dcc1ee66f0aa9d5ce05edaf57f9c4
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Jul 25 10:21:35 2021 +0800
tweak printing expressions
---
.../console/ui/AstNodeToScriptAdapter.groovy | 79 ++++++++++++----------
.../console/ui/AstNodeToScriptAdapterTest.groovy | 15 ++--
2 files changed, 56 insertions(+), 38 deletions(-)
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/AstNodeToScriptAdapter.groovy b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/AstNodeToScriptAdapter.groovy
index e9c4ee5..dd5be0e 100644
--- a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/AstNodeToScriptAdapter.groovy
+++ b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/AstNodeToScriptAdapter.groovy
@@ -681,11 +681,7 @@ class AstNodeToScriptVisitor implements CompilationUnit.IPrimaryClassNodeOperati
@Override
void visitMethodCallExpression(MethodCallExpression expression) {
Expression objectExpr = expression.objectExpression
- if (objectExpr instanceof VariableExpression) {
- visitVariableExpression(objectExpr, false)
- } else {
- objectExpr.visit(this)
- }
+ printExpression(objectExpr)
if (expression.spreadSafe) {
print '*'
}
@@ -727,19 +723,18 @@ class AstNodeToScriptVisitor implements CompilationUnit.IPrimaryClassNodeOperati
@Override
void visitBinaryExpression(BinaryExpression expression) {
- String opText = expression?.operation?.text
- boolean isInstanceofOp = opText?.endsWith('instanceof')
- boolean isSubscriptOp = opText == '['
- if ((isSubscriptOp || isInstanceofOp) && expression?.leftExpression instanceof VariableExpression) {
+ if (expression !instanceof DeclarationExpression && expression?.leftExpression instanceof VariableExpression) {
visitVariableExpression((VariableExpression) expression?.leftExpression, false)
} else {
expression?.leftExpression?.visit this
}
if (!(expression.rightExpression instanceof EmptyExpression) || expression.operation.type != Types.ASSIGN) {
+ String opText = expression?.operation?.text
+ boolean isSubscriptOp = opText == '['
if (isSubscriptOp) {
print "["
} else {
- print " $expression.operation.text "
+ print " $opText "
}
expression.rightExpression.visit this
if (isSubscriptOp) {
@@ -750,18 +745,26 @@ class AstNodeToScriptVisitor implements CompilationUnit.IPrimaryClassNodeOperati
@Override
void visitPostfixExpression(PostfixExpression expression) {
- print '('
- expression?.expression?.visit this
- print ')'
+ if (expression?.expression instanceof VariableExpression) {
+ visitVariableExpression((VariableExpression) expression?.expression, false)
+ } else {
+ print '('
+ expression?.expression?.visit this
+ print ')'
+ }
print expression?.operation?.text
}
@Override
void visitPrefixExpression(PrefixExpression expression) {
print expression?.operation?.text
- print '('
- expression?.expression?.visit this
- print ')'
+ if (expression?.expression instanceof VariableExpression) {
+ visitVariableExpression((VariableExpression) expression?.expression, false)
+ } else {
+ print '('
+ expression?.expression?.visit this
+ print ')'
+ }
}
@Override
@@ -810,11 +813,7 @@ class AstNodeToScriptVisitor implements CompilationUnit.IPrimaryClassNodeOperati
@Override
void visitPropertyExpression(PropertyExpression expression) {
- if (expression?.objectExpression instanceof VariableExpression) {
- visitVariableExpression((VariableExpression) expression?.objectExpression, false)
- } else {
- expression?.objectExpression?.visit this
- }
+ printExpression(expression?.objectExpression)
if (expression?.spreadSafe) {
print '*'
@@ -923,19 +922,24 @@ class AstNodeToScriptVisitor implements CompilationUnit.IPrimaryClassNodeOperati
@Override
void visitCastExpression(CastExpression expression) {
- print '(('
+ print '('
if (expression?.coerce) {
- expression?.expression?.visit this
- print ') as '
+ boolean isVariableExpressionOrPropertyExpression =
+ expression?.expression instanceof VariableExpression || expression?.expression instanceof PropertyExpression
+ if (!isVariableExpressionOrPropertyExpression) {
+ print '('
+ }
+ printExpression(expression?.expression)
+ if (!isVariableExpressionOrPropertyExpression) {
+ print ')'
+ }
+ print ' as '
visitType(expression?.type)
} else {
+ print '('
visitType(expression?.type)
print ') '
- if (expression?.expression instanceof VariableExpression) {
- visitVariableExpression((VariableExpression) expression?.expression, false)
- } else {
- expression?.expression?.visit this
- }
+ printExpression(expression?.expression)
}
print ')'
}
@@ -1072,11 +1076,7 @@ class AstNodeToScriptVisitor implements CompilationUnit.IPrimaryClassNodeOperati
@Override
void visitBooleanExpression(BooleanExpression expression) {
- if (expression?.expression instanceof VariableExpression) {
- visitVariableExpression((VariableExpression) expression?.expression, false)
- } else {
- expression?.expression?.visit this
- }
+ printExpression(expression?.expression)
}
@Override
@@ -1142,6 +1142,9 @@ class AstNodeToScriptVisitor implements CompilationUnit.IPrimaryClassNodeOperati
expression?.expressions?.each {
if (!first) {
print ';'
+ if (it !instanceof EmptyExpression) {
+ print ' '
+ }
}
first = false
it.visit this
@@ -1208,4 +1211,12 @@ class AstNodeToScriptVisitor implements CompilationUnit.IPrimaryClassNodeOperati
}
return true
}
+
+ private void printExpression(Expression expression) {
+ if (expression instanceof VariableExpression) {
+ visitVariableExpression((VariableExpression) expression, false)
+ } else {
+ expression?.visit this
+ }
+ }
}
diff --git a/subprojects/groovy-console/src/test/groovy/groovy/console/ui/AstNodeToScriptAdapterTest.groovy b/subprojects/groovy-console/src/test/groovy/groovy/console/ui/AstNodeToScriptAdapterTest.groovy
index 199fbf7..b8a9cec 100644
--- a/subprojects/groovy-console/src/test/groovy/groovy/console/ui/AstNodeToScriptAdapterTest.groovy
+++ b/subprojects/groovy-console/src/test/groovy/groovy/console/ui/AstNodeToScriptAdapterTest.groovy
@@ -190,7 +190,7 @@ final class AstNodeToScriptAdapterTest extends GroovyTestCase {
def y = 2
(boolean) !(-x + (+y--)) '''
String result = compileToScript(script, CompilePhase.SEMANTIC_ANALYSIS)
- assert result.contains('((boolean) !(-x + +(( y )--)))')
+ assert result.contains('((boolean) !(-x + +(y--)))')
script = '''boolean x = false
!x'''
@@ -243,7 +243,7 @@ final class AstNodeToScriptAdapterTest extends GroovyTestCase {
}'''
String result = compileToScript(script, CompilePhase.SEMANTIC_ANALYSIS)
- assert result.contains('for (java.lang.Integer x = 0; x < 10;( x )++) {')
+ assert result.contains('for (java.lang.Integer x = 0; x < 10; x++) {')
assert result.contains('continue')
}
@@ -263,7 +263,7 @@ final class AstNodeToScriptAdapterTest extends GroovyTestCase {
String script = '''def x = 1, y = 2
x++ + --y - --x++'''
String result = compileToScript(script, CompilePhase.SEMANTIC_ANALYSIS)
- assert result.contains('( x )++ + --( y ) - --(( x )++)')
+ assert result.contains('x++ + --y - --(x++)')
}
void testMultipleAssignments() {
@@ -629,7 +629,7 @@ final class AstNodeToScriptAdapterTest extends GroovyTestCase {
String result = compileToScript(script, CompilePhase.CANONICALIZATION)
assert result =~ /Lazy\s*private java\.util\.ArrayList .*speakers /
assert result.contains('public java.util.ArrayList getSpeakers() {')
- assert result.contains('if ( $speakers != null) {')
+ assert result.contains('if ($speakers != null) {')
assert result.contains('$speakers = new java.util.ArrayList()')
}
@@ -1017,4 +1017,11 @@ final class AstNodeToScriptAdapterTest extends GroovyTestCase {
String result = compileToScript(script, CompilePhase.SEMANTIC_ANALYSIS)
assert result.contains('if (a instanceof java.lang.String) {')
}
+
+ void testVisitCastExpression() {
+ String script = '''String a = 'foo'
+ a as String'''
+ String result = compileToScript(script, CompilePhase.SEMANTIC_ANALYSIS)
+ assert result.contains('(a as java.lang.String)')
+ }
}