Lookupcall and CodeTypePresenter generic issues
Change-Id: I6cc3fe0c2a3d2b1d7d65fac8d43cd5711052c62b
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/CodeTypeProposalPresenter.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/CodeTypeProposalPresenter.java
index 7eb8746..2c632b5 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/CodeTypeProposalPresenter.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/CodeTypeProposalPresenter.java
@@ -11,8 +11,10 @@
package org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeHierarchy;
+import org.eclipse.jdt.core.Signature;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.scout.sdk.extensions.runtime.classes.IRuntimeClasses;
import org.eclipse.scout.sdk.ui.fields.proposal.ProposalTextField;
@@ -77,7 +79,7 @@
* @author Andreas Hoegger
* @since 3.8.0 15.02.2012
*/
- private static final class P_ContentProvider extends AbstractCachedTypeContentProposalProvider {
+ private final class P_ContentProvider extends AbstractCachedTypeContentProposalProvider {
private P_ContentProvider(ILabelProvider labelProvider) {
super(labelProvider);
@@ -89,13 +91,18 @@
String genericSignature = null;
try {
+ String paramName = IRuntimeClasses.TYPE_PARAM_VALUEFIELD__VALUE_TYPE;
+ IMethod defaultMethod = getMethod().getDefaultMethod();
+ String[] typeParameters = Signature.getTypeArguments(defaultMethod.getReturnType());
+ if (typeParameters != null && typeParameters.length == 1) {
+ typeParameters = Signature.getTypeArguments(typeParameters[0]);
+ if (typeParameters != null && typeParameters.length == 1) {
+ paramName = Signature.getSignatureSimpleName(typeParameters[0]);
+ }
+ }
ITypeHierarchy supertypeHierarchy = getType().newSupertypeHierarchy(null);
- if (supertypeHierarchy.contains(TypeUtility.getType(IRuntimeClasses.IValueField))) {
- genericSignature = SignatureUtility.resolveGenericParameterInSuperHierarchy(getType(), supertypeHierarchy, IRuntimeClasses.IValueField, IRuntimeClasses.TYPE_PARAM_VALUEFIELD__VALUE_TYPE);
- }
- else if (supertypeHierarchy.contains(TypeUtility.getType(IRuntimeClasses.IColumn))) {
- genericSignature = SignatureUtility.resolveGenericParameterInSuperHierarchy(getType(), supertypeHierarchy, IRuntimeClasses.IColumn, IRuntimeClasses.TYPE_PARAM_COLUMN_VALUE_TYPE);
- }
+ genericSignature = SignatureUtility.resolveGenericParameterInSuperHierarchy(getType(), supertypeHierarchy, defaultMethod.getDeclaringType().getFullyQualifiedName(), paramName);
+
}
catch (CoreException e) {
ScoutSdkUi.logError(e);
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/LookupCallProposalPresenter.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/LookupCallProposalPresenter.java
index 6a9aa1e..1218136 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/LookupCallProposalPresenter.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/LookupCallProposalPresenter.java
@@ -11,8 +11,10 @@
package org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeHierarchy;
+import org.eclipse.jdt.core.Signature;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.scout.sdk.extensions.runtime.classes.IRuntimeClasses;
import org.eclipse.scout.sdk.ui.fields.proposal.ProposalTextField;
@@ -76,7 +78,7 @@
* @author Andreas Hoegger
* @since 3.8.0 15.02.2012
*/
- private static final class P_ContentProvider extends AbstractCachedTypeContentProposalProvider {
+ private final class P_ContentProvider extends AbstractCachedTypeContentProposalProvider {
private P_ContentProvider(ILabelProvider labelProvider) {
super(labelProvider);
@@ -88,13 +90,17 @@
String genericSignature = null;
try {
+ String paramName = IRuntimeClasses.TYPE_PARAM_VALUEFIELD__VALUE_TYPE;
+ IMethod defaultMethod = getMethod().getDefaultMethod();
+ String[] typeParameters = Signature.getTypeArguments(defaultMethod.getReturnType());
+ if (typeParameters != null && typeParameters.length == 1) {
+ typeParameters = Signature.getTypeArguments(typeParameters[0]);
+ if (typeParameters != null && typeParameters.length == 1) {
+ paramName = Signature.getSignatureSimpleName(typeParameters[0]);
+ }
+ }
ITypeHierarchy supertypeHierarchy = getType().newSupertypeHierarchy(null);
- if (supertypeHierarchy.contains(TypeUtility.getType(IRuntimeClasses.IValueField))) {
- genericSignature = SignatureUtility.resolveGenericParameterInSuperHierarchy(getType(), supertypeHierarchy, IRuntimeClasses.IValueField, IRuntimeClasses.TYPE_PARAM_VALUEFIELD__VALUE_TYPE);
- }
- else if (supertypeHierarchy.contains(TypeUtility.getType(IRuntimeClasses.IColumn))) {
- genericSignature = SignatureUtility.resolveGenericParameterInSuperHierarchy(getType(), supertypeHierarchy, IRuntimeClasses.IColumn, IRuntimeClasses.TYPE_PARAM_COLUMN_VALUE_TYPE);
- }
+ genericSignature = SignatureUtility.resolveGenericParameterInSuperHierarchy(getType(), supertypeHierarchy, defaultMethod.getDeclaringType().getFullyQualifiedName(), paramName);
}
catch (CoreException e) {
ScoutSdkUi.logError(e);