diff options
author | Ed Willink | 2021-11-30 21:20:25 +0000 |
---|---|---|
committer | Ed Willink | 2021-12-16 10:58:13 +0000 |
commit | 49300ac5ba3a6ae4b1f4e83043309725665eb9b9 (patch) | |
tree | b08b89d41ef4bc0f30fa30bb4e82686e0b6230ff | |
parent | 939b9c30b5f0d33257cfec5d37aa37614b328b9b (diff) | |
download | org.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.java | 14 |
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.) */ |