Skip to content

Commit 7a98df5

Browse files
committed
GROOVY-11374
1 parent 776e02f commit 7a98df5

File tree

3 files changed

+120
-9
lines changed

3 files changed

+120
-9
lines changed

base/org.codehaus.groovy30/src/org/codehaus/groovy/ast/expr/MethodCallExpression.java

+40-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import java.util.Collections;
2929
import java.util.List;
3030

31+
import static org.codehaus.groovy.tools.Utilities.isJavaIdentifier;
32+
3133
/**
3234
* A method call on an object or class.
3335
*/
@@ -43,7 +45,6 @@ public class MethodCallExpression extends Expression implements MethodCall {
4345

4446
// type spec for generics
4547
private GenericsType[] genericsTypes;
46-
private boolean usesGenerics;
4748

4849
private MethodNode target;
4950

@@ -132,12 +133,49 @@ public ASTNode getReceiver() {
132133
}
133134

134135
public String getText() {
136+
/* GRECLIPSE edit -- GROOVY-11374
135137
String object = objectExpression.getText();
136138
String meth = method.getText();
137139
String args = arguments.getText();
138140
String spread = spreadSafe ? "*" : "";
139141
String dereference = safe ? "?" : "";
140142
return object + spread + dereference + "." + meth + args;
143+
*/
144+
StringBuilder builder = new StringBuilder( 64 );
145+
builder.append(getObjectExpression().getText());
146+
if (isSpreadSafe()) builder.append('*');
147+
if (isSafe()) builder.append('?');
148+
builder.append('.');
149+
150+
if (isUsingGenerics()) {
151+
builder.append('<');
152+
boolean first = true;
153+
for (GenericsType t : getGenericsTypes()) {
154+
if (!first) builder.append(", ");
155+
else first = false;
156+
builder.append(t);
157+
}
158+
builder.append('>');
159+
}
160+
161+
Expression method = getMethod();
162+
if (method instanceof GStringExpression) {
163+
builder.append('"').append(method.getText()).append('"');
164+
} else if (!(method instanceof ConstantExpression)) {
165+
builder.append('(').append(method.getText()).append(')');
166+
} else {
167+
Object value = ((ConstantExpression) method).getValue();
168+
if (!(value instanceof String) || !isJavaIdentifier((String) value)) {
169+
builder.append("'").append(value).append("'");
170+
} else {
171+
builder.append((String) value);
172+
}
173+
}
174+
175+
builder.append(getArguments().getText());
176+
177+
return builder.toString();
178+
// GRECLIPSE end
141179
}
142180

143181
/**
@@ -178,12 +216,11 @@ public GenericsType[] getGenericsTypes() {
178216
}
179217

180218
public void setGenericsTypes(GenericsType[] genericsTypes) {
181-
usesGenerics = usesGenerics || genericsTypes != null;
182219
this.genericsTypes = genericsTypes;
183220
}
184221

185222
public boolean isUsingGenerics() {
186-
return usesGenerics;
223+
return (genericsTypes != null && genericsTypes.length > 0);
187224
}
188225

189226
/**

base/org.codehaus.groovy40/src/org/codehaus/groovy/ast/expr/MethodCallExpression.java

+40-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import java.util.Collections;
2929
import java.util.List;
3030

31+
import static org.codehaus.groovy.tools.Utilities.isJavaIdentifier;
32+
3133
/**
3234
* A method call on an object or class.
3335
*/
@@ -43,7 +45,6 @@ public class MethodCallExpression extends Expression implements MethodCall {
4345

4446
// type spec for generics
4547
private GenericsType[] genericsTypes;
46-
private boolean usesGenerics;
4748

4849
private MethodNode target;
4950

@@ -138,12 +139,49 @@ public ASTNode getReceiver() {
138139

139140
@Override
140141
public String getText() {
142+
/* GRECLIPSE edit -- GROOVY-11374
141143
String object = objectExpression.getText();
142144
String meth = method.getText();
143145
String args = arguments.getText();
144146
String spread = spreadSafe ? "*" : "";
145147
String dereference = safe ? "?" : "";
146148
return object + spread + dereference + "." + meth + args;
149+
*/
150+
StringBuilder builder = new StringBuilder( 64 );
151+
builder.append(getObjectExpression().getText());
152+
if (isSpreadSafe()) builder.append('*');
153+
if (isSafe()) builder.append('?');
154+
builder.append('.');
155+
156+
if (isUsingGenerics()) {
157+
builder.append('<');
158+
boolean first = true;
159+
for (GenericsType t : getGenericsTypes()) {
160+
if (!first) builder.append(", ");
161+
else first = false;
162+
builder.append(t);
163+
}
164+
builder.append('>');
165+
}
166+
167+
Expression method = getMethod();
168+
if (method instanceof GStringExpression) {
169+
builder.append('"').append(method.getText()).append('"');
170+
} else if (!(method instanceof ConstantExpression)) {
171+
builder.append('(').append(method.getText()).append(')');
172+
} else {
173+
Object value = ((ConstantExpression) method).getValue();
174+
if (!(value instanceof String) || !isJavaIdentifier((String) value)) {
175+
builder.append("'").append(value).append("'");
176+
} else {
177+
builder.append((String) value);
178+
}
179+
}
180+
181+
builder.append(getArguments().getText());
182+
183+
return builder.toString();
184+
// GRECLIPSE end
147185
}
148186

149187
/**
@@ -184,12 +222,11 @@ public GenericsType[] getGenericsTypes() {
184222
}
185223

186224
public void setGenericsTypes(GenericsType[] genericsTypes) {
187-
usesGenerics = usesGenerics || genericsTypes != null;
188225
this.genericsTypes = genericsTypes;
189226
}
190227

191228
public boolean isUsingGenerics() {
192-
return usesGenerics;
229+
return (genericsTypes != null && genericsTypes.length > 0);
193230
}
194231

195232
/**

base/org.codehaus.groovy50/src/org/codehaus/groovy/ast/expr/MethodCallExpression.java

+40-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import java.util.Collections;
2929
import java.util.List;
3030

31+
import static org.codehaus.groovy.tools.Utilities.isJavaIdentifier;
32+
3133
/**
3234
* A method call on an object or class.
3335
*/
@@ -43,7 +45,6 @@ public class MethodCallExpression extends Expression implements MethodCall {
4345

4446
// type spec for generics
4547
private GenericsType[] genericsTypes;
46-
private boolean usesGenerics;
4748

4849
private MethodNode target;
4950

@@ -138,12 +139,49 @@ public ASTNode getReceiver() {
138139

139140
@Override
140141
public String getText() {
142+
/* GRECLIPSE edit -- GROOVY-11374
141143
String object = objectExpression.getText();
142144
String meth = method.getText();
143145
String args = arguments.getText();
144146
String spread = spreadSafe ? "*" : "";
145147
String dereference = safe ? "?" : "";
146148
return object + spread + dereference + "." + meth + args;
149+
*/
150+
StringBuilder builder = new StringBuilder( 64 );
151+
builder.append(getObjectExpression().getText());
152+
if (isSpreadSafe()) builder.append('*');
153+
if (isSafe()) builder.append('?');
154+
builder.append('.');
155+
156+
if (isUsingGenerics()) {
157+
builder.append('<');
158+
boolean first = true;
159+
for (GenericsType t : getGenericsTypes()) {
160+
if (!first) builder.append(", ");
161+
else first = false;
162+
builder.append(t);
163+
}
164+
builder.append('>');
165+
}
166+
167+
Expression method = getMethod();
168+
if (method instanceof GStringExpression) {
169+
builder.append('"').append(method.getText()).append('"');
170+
} else if (!(method instanceof ConstantExpression)) {
171+
builder.append('(').append(method.getText()).append(')');
172+
} else {
173+
Object value = ((ConstantExpression) method).getValue();
174+
if (!(value instanceof String) || !isJavaIdentifier((String) value)) {
175+
builder.append("'").append(value).append("'");
176+
} else {
177+
builder.append((String) value);
178+
}
179+
}
180+
181+
builder.append(getArguments().getText());
182+
183+
return builder.toString();
184+
// GRECLIPSE end
147185
}
148186

149187
/**
@@ -184,12 +222,11 @@ public GenericsType[] getGenericsTypes() {
184222
}
185223

186224
public void setGenericsTypes(GenericsType[] genericsTypes) {
187-
usesGenerics = usesGenerics || genericsTypes != null;
188225
this.genericsTypes = genericsTypes;
189226
}
190227

191228
public boolean isUsingGenerics() {
192-
return usesGenerics;
229+
return (genericsTypes != null && genericsTypes.length > 0);
193230
}
194231

195232
/**

0 commit comments

Comments
 (0)