Author: scabanovich
Date: 2010-05-24 10:08:59 -0400 (Mon, 24 May 2010)
New Revision: 22283
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMember.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/ParametedTypeFactory.java
Log:
https://jira.jboss.org/browse/JBIDE-6263
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMember.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMember.java 2010-05-24
14:05:12 UTC (rev 22282)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMember.java 2010-05-24
14:08:59 UTC (rev 22283)
@@ -41,7 +41,7 @@
String returnType = member instanceof IField ? ((IField)member).getTypeSignature()
: member instanceof IMethod ? ((IMethod)member).getReturnType() : null;
if(returnType != null) {
- ParametedType p =
getCDIProject().getNature().getTypeFactory().getParametedType(member.getDeclaringType(),
returnType);
+ ParametedType p =
getCDIProject().getNature().getTypeFactory().getParametedType(member, returnType);
if(p != null) {
int offset = -1;
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java 2010-05-24
14:05:12 UTC (rev 22282)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java 2010-05-24
14:08:59 UTC (rev 22283)
@@ -89,7 +89,7 @@
ParameterDefinition pd = new ParameterDefinition();
- ParametedType type =
context.getProject().getTypeFactory().getParametedType(contextType, ps[i]);
+ ParametedType type = context.getProject().getTypeFactory().getParametedType(method,
ps[i]);
pd.methodDefinition = this;
pd.name = parameterNames[i];
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/ParametedTypeFactory.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/ParametedTypeFactory.java 2010-05-24
14:05:12 UTC (rev 22282)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/ParametedTypeFactory.java 2010-05-24
14:08:59 UTC (rev 22283)
@@ -6,8 +6,11 @@
import java.util.StringTokenizer;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeParameter;
import org.eclipse.jdt.core.JavaModelException;
import org.jboss.tools.cdi.internal.core.impl.ParametedType;
import org.jboss.tools.cdi.internal.core.impl.TypeDeclaration;
@@ -46,10 +49,12 @@
return parametedType;
}
- public ParametedType getParametedType(IType context, String typeSignature) throws
JavaModelException {
+ public ParametedType getParametedType(IMember context, String typeSignature) throws
JavaModelException {
if(typeSignature == null) return null;
+
+ IType contextType = context instanceof IType ? (IType)context :
context.getDeclaringType();
- String key = context == null || context.isBinary() ||
"QObject;".equals(typeSignature) ? typeSignature :
context.getFullyQualifiedName() + "+" + typeSignature;
+ String key = context == null || context.isBinary() ||
"QObject;".equals(typeSignature) ? typeSignature :
contextType.getFullyQualifiedName() + "+" + typeSignature;
if(cache.containsKey(key)) return cache.get(key);
ParametedType result = new ParametedType();
result.setFactory(this);
@@ -64,7 +69,7 @@
int startToken = typeSignature.indexOf('<');
if(startToken < 0) {
- String resovedTypeName = EclipseJavaUtil.resolveTypeAsString(context, typeSignature);
+ String resovedTypeName = EclipseJavaUtil.resolveTypeAsString(contextType,
typeSignature);
if(resovedTypeName == null) return null;
if(!context.isBinary()) {
result.setSignature(result.getArrayPrefix() + "Q" + resovedTypeName +
";");
@@ -75,13 +80,25 @@
cache.put(key, result);
return result;
}
- String[] ps = context.getTypeParameterSignatures();
+ if(context instanceof IMethod) {
+ String[] ps = ((IMethod)context).getTypeParameterSignatures();
+ for (int i = 0; i < ps.length; i++) {
+ String t = ps[i];
+ if(t.endsWith(":")) t = t.substring(0, t.length() - 1);
+ t = "Q" + t + ";";
+ if(t.equals(result.getSignature())) {
+ cache.put(key, result);
+ return result;
+ }
+ }
+ }
+ String[] ps = contextType.getTypeParameterSignatures();
for (int i = 0; i < ps.length; i++) {
String t = ps[i];
if(t.endsWith(":")) t = t.substring(0, t.length() - 1);
t = "Q" + t + ";";
if(t.equals(result.getSignature())) {
- cache. put(key, result);
+ cache.put(key, result);
return result;
}
}
@@ -90,7 +107,7 @@
if(endToken < startToken) return null;
String typeName = typeSignature.substring(0, startToken) +
typeSignature.substring(endToken + 1);
String params = typeSignature.substring(startToken + 1, endToken);
- String resovedTypeName = EclipseJavaUtil.resolveTypeAsString(context, typeName);
+ String resovedTypeName = EclipseJavaUtil.resolveTypeAsString(contextType, typeName);
if(resovedTypeName == null) return null;
IType type = EclipseJavaUtil.findType(context.getJavaProject(), resovedTypeName);
if(type != null) {