[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.)
*/