Bug 455478 - FormData generation: error with Table Template with Generic
parameter.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=455478

Fix for missing type parameter in declaring sub hierarchy.
diff --git a/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/util/signature/SignatureUtilityTest.java b/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/util/signature/SignatureUtilityTest.java
index 4d0d808..a89c642 100644
--- a/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/util/signature/SignatureUtilityTest.java
+++ b/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/util/signature/SignatureUtilityTest.java
@@ -256,7 +256,7 @@
     String templateUse = "signature.tests.generic.context.TemplateUse.ConcreteTemplateUse";
     IType concreteClass = TypeUtility.getType(templateUse);
 
-    Deque<IType> declaringTypesWithParameters = ScoutTypeUtility.getDeclaringTypesWithSuperTypeParams(concreteClass);
+    Deque<IType> declaringTypesWithParameters = ScoutTypeUtility.getDeclaringTypes(concreteClass);
     Assert.assertEquals(2, declaringTypesWithParameters.size());
 
     String resolvedParamSig = SignatureUtility.resolveTypeParameter(innerTemplateClass, null, IRuntimeClasses.IColumn, IRuntimeClasses.TYPE_PARAM_COLUMN_VALUE_TYPE, declaringTypesWithParameters);
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
index 9ace197..6d69e8e 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
@@ -833,19 +833,23 @@
     return null;
   }
 
-  public static Deque<IType> getDeclaringTypesWithSuperTypeParams(IType startType) throws JavaModelException {
+  /**
+   * Gets all declaring types of the given start type until a static type is found or there is no declaring type
+   * anymore.
+   *
+   * @param startType
+   *          The type to start (inclusive)
+   * @return A {@link Deque} containing all declaring types of the given type. The given type itself is always part of
+   *         the result.
+   * @throws JavaModelException
+   */
+  public static Deque<IType> getDeclaringTypes(IType startType) throws JavaModelException {
     Deque<IType> result = new LinkedList<IType>();
     IType t = startType;
     while (TypeUtility.exists(t)) {
+      result.add(t);
       if (Flags.isStatic(t.getFlags())) {
-        break; // cancel on static declaring types
-      }
-      String superclassTypeSignature = t.getSuperclassTypeSignature();
-      if (superclassTypeSignature != null) {
-        String[] typeArguments = Signature.getTypeArguments(superclassTypeSignature);
-        if (typeArguments.length > 0) {
-          result.add(t);
-        }
+        return result; // cancel on static declaring types
       }
       t = t.getDeclaringType();
     }
@@ -859,8 +863,8 @@
 
     String columnValueTypeSig = SignatureUtility.resolveTypeParameter(column, columnHierarchy, IRuntimeClasses.IColumn, IRuntimeClasses.TYPE_PARAM_COLUMN_VALUE_TYPE);
     if (columnValueTypeSig != null && TypeUtility.exists(lowestLevelColumnContainer) && Signature.getTypeSignatureKind(columnValueTypeSig) == Signature.TYPE_VARIABLE_SIGNATURE) {
-      // it resolved to a type variable. it must have been defined in a declaring type -> try to resolve with context
-      Deque<IType> declaringContextInToOut = getDeclaringTypesWithSuperTypeParams(lowestLevelColumnContainer);
+      // it resolved to a type variable. it must have been defined in a declaring type -> try to resolve with declaring context
+      Deque<IType> declaringContextInToOut = getDeclaringTypes(lowestLevelColumnContainer);
       columnValueTypeSig = SignatureUtility.resolveTypeParameter(column, columnHierarchy, IRuntimeClasses.IColumn, IRuntimeClasses.TYPE_PARAM_COLUMN_VALUE_TYPE, declaringContextInToOut);
     }
     return columnValueTypeSig;