Author: scabanovich
Date: 2011-09-22 15:39:17 -0400 (Thu, 22 Sep 2011)
New Revision: 34972
Modified:
trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/java/ParametedType.java
trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/java/ParametedTypeFactory.java
Log:
JBIDE-9763
https://issues.jboss.org/browse/JBIDE-9763
When building inheritance for parameted types, resolved parameters are reused from base
types.
Modified:
trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/java/ParametedType.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/java/ParametedType.java 2011-09-22
19:02:46 UTC (rev 34971)
+++
trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/java/ParametedType.java 2011-09-22
19:39:17 UTC (rev 34972)
@@ -180,7 +180,7 @@
sc = arrayPrefix + sc;
}
- superType = getFactory().getParametedType(type, sc);
+ superType = getFactory().getParametedType(type, this, sc);
if(superType != null) {
if(provider != null) {
String scn = type.getSuperclassName();
@@ -197,7 +197,7 @@
if(is != null) for (int i = 0; i < is.length; i++) {
String p = resolveParameters(is[i]);
if(arrayPrefix.length() > 0) p = arrayPrefix + p;
- ParametedType t = getFactory().getParametedType(type, p);
+ ParametedType t = getFactory().getParametedType(type, this, p);
if(t != null) {
if(provider != null) {
String scn = type.getSuperInterfaceNames()[i];
@@ -263,26 +263,39 @@
}
public String findParameterSignature(String paramName) {
- if(type == null) {
- return null;
- }
- ITypeParameter[] ps = null;
- try {
- ps = type.getTypeParameters();
- } catch (JavaModelException e) {
- return null;
- }
- if(ps != null) for (int i = 0; i < ps.length; i++) {
- if(ps[i].getElementName().equals(paramName)) {
+ buildParameters();
+ return signaturesByName.get(paramName);
+ }
+
+ Map<String, String> signaturesByName = null;
+ Map<String, ParametedType> parametersBySignature = null;
+
+ void buildParameters() {
+ if(signaturesByName == null && type != null) {
+ signaturesByName = new HashMap<String, String>();
+ parametersBySignature = new HashMap<String, ParametedType>();
+ ITypeParameter[] ps = null;
+ try {
+ ps = type.getTypeParameters();
+ } catch (JavaModelException e) {
+ return;
+ }
+ if(ps != null) for (int i = 0; i < ps.length; i++) {
+ String paramName = ps[i].getElementName();
if(parameterTypes.size() > i) {
ParametedType p = parameterTypes.get(i);
- return p.getSignature();
+ signaturesByName.put(paramName, p.getSignature());
+ parametersBySignature.put(p.getSignature(), p);
}
}
}
- return null;
}
+ public ParametedType findParameter(String signature) {
+ buildParameters();
+ return parametersBySignature.get(signature);
+ }
+
public Set<IParametedType> getAllTypes() {
if(allInheritedTypes == null) {
allInheritedTypes = buildAllTypes(new HashSet<String>(), this, new
HashSet<IParametedType>());
@@ -365,13 +378,6 @@
primitives.put("Float", "float");
primitives.put("Double", "double");
primitives.put("Boolean", "boolean");
- primitives.put("Integer[]", "int[]");
- primitives.put("Short[]", "short[]");
- primitives.put("Long[]", "long[]");
- primitives.put("Character[]", "char[]");
- primitives.put("Float[]", "float[]");
- primitives.put("Double[]", "double[]");
- primitives.put("Boolean[]", "boolean[]");
}
/*
@@ -380,7 +386,18 @@
*/
public String getSimpleName() {
if(getSignature()!=null) {
- return
isPrimitive()?primitives.get(Signature.getSignatureSimpleName(getSignature())):Signature.getSignatureSimpleName(getSignature());
+ if(isPrimitive()) {
+ int array = arrayPrefix.length();
+ StringBuilder result = new
StringBuilder(primitives.get(Signature.getSignatureSimpleName(getSignature().substring(array))));
+ if(array > 0) {
+ for (int i = 0; i < array; i++) {
+ result.append("[]");
+ }
+ }
+ return result.toString();
+ } else {
+ return Signature.getSignatureSimpleName(getSignature());
+ }
}
return "";
}
Modified:
trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/java/ParametedTypeFactory.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/java/ParametedTypeFactory.java 2011-09-22
19:02:46 UTC (rev 34971)
+++
trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/java/ParametedTypeFactory.java 2011-09-22
19:39:17 UTC (rev 34972)
@@ -76,7 +76,15 @@
}
public ParametedType getParametedType(IMember context, String typeSignature) throws
JavaModelException {
+ return getParametedType(context, null, typeSignature);
+ }
+
+ public ParametedType getParametedType(IMember context, IParametedType basetype, String
typeSignature) throws JavaModelException {
if(typeSignature == null) return null;
+ if(basetype != null) {
+ ParametedType param = ((ParametedType)basetype).findParameter(typeSignature);
+ if(param != null) return param;
+ }
IType contextType = context instanceof IType ? (IType)context :
context.getDeclaringType();
@@ -153,7 +161,7 @@
CommonPlugin.getDefault().logError(e);
}
if(paramSignatures != null) for (String paramSignature: paramSignatures) {
- ParametedType param = getParametedType(context, paramSignature);
+ ParametedType param = getParametedType(context, basetype, paramSignature);
if(param == null) {
param = new ParametedType();
param.setSignature(paramSignature);