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 2016/05/31 04:35:53 UTC
[3/3] groovy git commit: GROOVY-7846: A trait that defines a static
method that uses generic return types throws "BUG! Type is null"
(comments/trivial formatting - closes #340)
GROOVY-7846: A trait that defines a static method that uses generic return types throws "BUG! Type is null" (comments/trivial formatting - closes #340)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/3a5189e8
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/3a5189e8
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/3a5189e8
Branch: refs/heads/GROOVY_2_4_X
Commit: 3a5189e8d2cfd66034c1430b511b43e69909daa8
Parents: 8ab58a5
Author: paulk <pa...@asert.com.au>
Authored: Tue May 31 14:34:47 2016 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Tue May 31 14:34:47 2016 +1000
----------------------------------------------------------------------
.../groovy/transform/trait/TraitComposer.java | 22 +++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/3a5189e8/src/main/org/codehaus/groovy/transform/trait/TraitComposer.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/trait/TraitComposer.java b/src/main/org/codehaus/groovy/transform/trait/TraitComposer.java
index afcc0fd..b65855c 100644
--- a/src/main/org/codehaus/groovy/transform/trait/TraitComposer.java
+++ b/src/main/org/codehaus/groovy/transform/trait/TraitComposer.java
@@ -59,7 +59,16 @@ import org.codehaus.groovy.transform.sc.StaticCompileTransformation;
import org.objectweb.asm.Opcodes;
import java.lang.reflect.Modifier;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
import static org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse;
@@ -141,7 +150,7 @@ public abstract class TraitComposer {
System.arraycopy(methodNode.getParameters(), 1, params, 0, params.length);
Map<String,ClassNode> methodGenericsSpec = new LinkedHashMap<String, ClassNode>(genericsSpec);
MethodNode originalMethod = trait.getMethod(name, params);
- // Original method may be null in case of a private method
+ // Original method may be null for the case of private or static methods
if (originalMethod!=null) {
methodGenericsSpec = GenericsUtils.addMethodGenerics(originalMethod, methodGenericsSpec);
}
@@ -284,7 +293,6 @@ public abstract class TraitComposer {
ClassNode[] exceptionNodes = correctToGenericsSpecRecurse(genericsSpec, copyExceptions(helperMethod.getExceptions()));
ClassNode fixedReturnType = correctToGenericsSpecRecurse(genericsSpec, helperMethod.getReturnType());
-
Expression forwardExpression = genericsSpec.isEmpty()?mce:new CastExpression(fixedReturnType,mce);
int access = helperMethod.getModifiers();
// we could rely on the first parameter name ($static$self) but that information is not
@@ -312,14 +320,14 @@ public abstract class TraitComposer {
if (!copied.isEmpty()) {
forwarder.addAnnotations(copied);
}
- if (originalMethod!=null) {
+ if (originalMethod != null) {
GenericsType[] newGt = GenericsUtils.applyGenericsContextToPlaceHolders(genericsSpec, originalMethod.getGenericsTypes());
newGt = removeNonPlaceHolders(newGt);
forwarder.setGenericsTypes(newGt);
- }
- else {
+ } else {
+ // null indicates a static method which may still need generics correction
GenericsType[] genericsTypes = helperMethod.getGenericsTypes();
- if(genericsTypes != null) {
+ if (genericsTypes != null) {
Map<String,ClassNode> methodSpec = new HashMap<String, ClassNode>();
methodSpec = GenericsUtils.addMethodGenerics(helperMethod,methodSpec);