Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2021-11-30 21:20:25 +0000
committerEd Willink2021-12-16 10:58:13 +0000
commit49300ac5ba3a6ae4b1f4e83043309725665eb9b9 (patch)
treeb08b89d41ef4bc0f30fa30bb4e82686e0b6230ff
parent939b9c30b5f0d33257cfec5d37aa37614b328b9b (diff)
downloadorg.eclipse.qvtd-49300ac5ba3a6ae4b1f4e83043309725665eb9b9.tar.gz
org.eclipse.qvtd-49300ac5ba3a6ae4b1f4e83043309725665eb9b9.tar.xz
org.eclipse.qvtd-49300ac5ba3a6ae4b1f4e83043309725665eb9b9.zip
[577546] Fix transitive superclasses
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtb2qvts/InheritanceAnalysis.java14
1 files changed, 12 insertions, 2 deletions
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 9d7985e03..a86d46a8c 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 @@ public class InheritanceAnalysis
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.)
*/

Back to the top