From 29458c24f1c5d194c50e7bc4ae6b51479f0a49af Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Fri, 9 Mar 2018 12:49:14 +0000 Subject: [PATCH] ComponentArchitectureTransformationBase.transform() Ensure that in architectures derived from ComponentArchitectures, annotation are instantiated. AnnotationUtils: Resurrect instantiateAnnotationsRecursive() refs 3328 --- .../org/fortiss/tooling/base/utils/.ratings | 2 +- .../tooling/base/utils/AnnotationUtils.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/utils/.ratings b/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/utils/.ratings index 37e3cb9b8..c67b1dccd 100644 --- a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/utils/.ratings +++ b/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/utils/.ratings @@ -1,5 +1,5 @@ AngleUtils.java 6aaf8e974481e9bd5c0d813302c1f08d10d1c00d GREEN -AnnotationUtils.java 941cfdbc8c871da64f8e873ce50ed19c8f9c4b7e GREEN +AnnotationUtils.java 169d98287f1af1ace01b49f4ab0975e427a1263e YELLOW BaseMathUtils.java 7d0e7113af72677b0a7e44fcc40e874624d3bee6 GREEN BaseModelElementUtils.java fc0596156b9f5761759ab3a9974fe0302e9889e9 GREEN ConstraintsBaseUtils.java ae80d8f4ad3b821b5025ef24ce34a4e6185cc67e GREEN diff --git a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/utils/AnnotationUtils.java b/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/utils/AnnotationUtils.java index 9d8aeb70d..78553ce6d 100644 --- a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/utils/AnnotationUtils.java +++ b/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/utils/AnnotationUtils.java @@ -16,6 +16,7 @@ package org.fortiss.tooling.base.utils; import static org.fortiss.tooling.base.utils.BaseMathUtils.convertNumber; +import static org.fortiss.tooling.kernel.utils.EcoreUtils.getChildrenWithType; import static org.fortiss.tooling.kernel.utils.EcoreUtils.getEClassForClass; import static org.fortiss.tooling.kernel.utils.EcoreUtils.getParentsWithType; import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickFirstInstanceOf; @@ -33,6 +34,7 @@ import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.util.EcoreUtil; import org.fortiss.tooling.base.ToolingBaseActivator; +import org.fortiss.tooling.base.annotation.IAnnotationValueService; import org.fortiss.tooling.base.annotation.valueprovider.AnnotationInstSpec; import org.fortiss.tooling.base.annotation.valueprovider.EStructuralFeatureDescriptor; import org.fortiss.tooling.base.annotation.valueprovider.IAnnotationValueProvider; @@ -43,6 +45,7 @@ import org.fortiss.tooling.base.annotation.valueprovider.IAnnotationValueProvide import org.fortiss.tooling.base.annotation.valueprovider.IAnnotationValueProvider.AnnotationActionParameters; import org.fortiss.tooling.base.annotation.valueprovider.IAnnotationValueProvider.AnnotationActionReqInputParameter; import org.fortiss.tooling.base.annotation.valueprovider.IAnnotationValueProvider.AnnotationActionReqInputParameters; +import org.fortiss.tooling.base.compose.HierarchicElementCompositorBase; import org.fortiss.tooling.base.model.element.IAnnotatedSpecification; import org.fortiss.tooling.base.model.element.IModelElement; import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; @@ -247,4 +250,23 @@ public class AnnotationUtils { return new AnnotationAction<T>(randValuePropDescriptor, randomValuePropagation); } + + /** + * Recursively instantiates the annotations for a given {@link IModelElement} and its offspring. + * This is useful to ensure that all annotations are available for programmatically created + * models. While the {@link HierarchicElementCompositorBase} could be used to ensure the + * instantiation of annotations in model-transformations, too, this is not always possible (or + * convenient). + * + * @param element + * {@link IModelElement} for which annotations should be instantiated recursively. + */ + public static void instantiateAnnotationsRecursive(IModelElement element) { + IAnnotationValueService as = IAnnotationValueService.getInstance(); + as.instantiateAnnotations(element); + for(IModelElement child : getChildrenWithType(element, IModelElement.class)) { + as.instantiateAnnotations(child); + } + } + } -- GitLab