[577546] Fix transitive superclasses
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/InheritanceAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/InheritanceAnalysis.java
index 9d7985e..a86d46a 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/InheritanceAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/InheritanceAnalysis.java
@@ -79,13 +79,23 @@
 		for (org.eclipse.ocl.pivot.@NonNull Package asPackage : asPackages) {
 			CompletePackage completePackage = completeModel.getCompletePackage(asPackage);
 			for (@NonNull CompleteClass completeClass : ClassUtil.nullFree(completePackage.getOwnedCompleteClasses())) {
-				class2allSuperClasses.put(completeClass, Sets.newHashSet(completeClass.getProperSuperCompleteClasses()));
-				class2allSelfAndSubClasses.put(completeClass, Sets.newHashSet(completeClass));
+				computeCompleteSuperClasses(completeClass);
 			}
 			computeCompleteSuperClasses(ClassUtil.nullFree(asPackage.getOwnedPackages()));
 		}
 	}
 
+	private void computeCompleteSuperClasses(@NonNull CompleteClass completeClass) {
+		if (!class2allSelfAndSubClasses.containsKey(completeClass)) {
+			class2allSelfAndSubClasses.put(completeClass, Sets.newHashSet(completeClass));
+			Iterable<@NonNull CompleteClass> properSuperCompleteClasses = completeClass.getProperSuperCompleteClasses();
+			class2allSuperClasses.put(completeClass, Sets.newHashSet(properSuperCompleteClasses));
+			for (@NonNull CompleteClass superCompleteClass : properSuperCompleteClasses) {
+				computeCompleteSuperClasses(superCompleteClass);
+			}
+		}
+	}
+
 	/**
 	 * Register completeClass as a sub-class of all its super-classes. (It is already a sub-class ot itself.)
 	 */