Skip to content
Snippets Groups Projects
Commit 7df02a29 authored by Simon Barner's avatar Simon Barner
Browse files

isAvailableObject(): Exclude elements nested IProjectRoot elements

* E.g., elements in DSE ModelSnapshots

Issue-Ref: 4092
Issue-Url: af3#4092




Signed-off-by: default avatarSimon Barner <barner@fortiss.org>
parent c7f8269f
No related branches found
No related tags found
1 merge request!1474092: Implement a JFX controller for the creation and visualization of reference lists
This commit is part of merge request !147. Comments created here will be created in the context of that merge request.
AnnotationInstSpec.java 7a6cb55bfa9cafa9ead1f72089e554ee8142e8bf GREEN AnnotationInstSpec.java 7a6cb55bfa9cafa9ead1f72089e554ee8142e8bf GREEN
DerivedAnnotationValueProviderBase.java afedd21d3469127bbb20adb34c191b5c9c980f6c GREEN DerivedAnnotationValueProviderBase.java afedd21d3469127bbb20adb34c191b5c9c980f6c GREEN
EStructuralFeatureDescriptor.java 9665d0d3040278243dd37591535e411a90fa63bf GREEN EStructuralFeatureDescriptor.java 169ece3fc0740c6ca1e5dde06a1be577d7cb9f80 YELLOW
EStructuralFeatureValueProviderBase.java 287facbbce47c16d892bae82a214f64ceeef2263 GREEN EStructuralFeatureValueProviderBase.java 287facbbce47c16d892bae82a214f64ceeef2263 GREEN
IAnnotationValueProvider.java 08e0e5f66dc97865e9ac03e1ac646af332845e14 GREEN IAnnotationValueProvider.java 08e0e5f66dc97865e9ac03e1ac646af332845e14 GREEN
ValueProviderBase.java e4e866840845346ec99a4304048f5327c4890996 GREEN ValueProviderBase.java e4e866840845346ec99a4304048f5327c4890996 GREEN
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
+--------------------------------------------------------------------------*/ +--------------------------------------------------------------------------*/
package org.fortiss.tooling.base.annotation.valueprovider; package org.fortiss.tooling.base.annotation.valueprovider;
import static org.fortiss.tooling.kernel.utils.KernelModelElementUtils.getParentElement;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -29,6 +31,7 @@ import org.eclipse.emf.ecore.EStructuralFeature; ...@@ -29,6 +31,7 @@ import org.eclipse.emf.ecore.EStructuralFeature;
import org.fortiss.tooling.base.model.element.IAnnotatedSpecification; import org.fortiss.tooling.base.model.element.IAnnotatedSpecification;
import org.fortiss.tooling.base.model.element.IDerivedAnnotation; import org.fortiss.tooling.base.model.element.IDerivedAnnotation;
import org.fortiss.tooling.base.model.element.IModelElement; import org.fortiss.tooling.base.model.element.IModelElement;
import org.fortiss.tooling.kernel.model.IProjectRootElement;
/** /**
* Description of a {@link EStructuralFeature} managed by a * Description of a {@link EStructuralFeature} managed by a
...@@ -150,9 +153,43 @@ public class EStructuralFeatureDescriptor { ...@@ -150,9 +153,43 @@ public class EStructuralFeatureDescriptor {
*/ */
public boolean isAvailableObject(EObject obj, IAnnotatedSpecification specification, public boolean isAvailableObject(EObject obj, IAnnotatedSpecification specification,
EObject modelElement) { EObject modelElement) {
// Prevent elements at are contained in nested IProjectRoot elements from being listed
// (e.g., elements in DSE ModelSnapshots).
boolean rootElementSeen = false;
while(obj != null) {
if(obj instanceof IProjectRootElement) {
if(rootElementSeen) {
return false;
}
rootElementSeen = true;
}
obj = obj.eContainer();
}
return true; return true;
} }
/**
* For the given {@link IModelElement}, return the model element used as the scope to provide
* reference values.
*/
public EObject getValueRootElement(IModelElement modelElement) {
switch(getEReferenceScope()) {
case PROJECT:
IProjectRootElement rootElement =
getParentElement(modelElement, IProjectRootElement.class, true);
return rootElement != null ? rootElement.eContainer() : null;
case MODEL:
return getParentElement(modelElement, IProjectRootElement.class, true);
case SUB_MODEL:
case STRICT_SUB_MODEL:
return modelElement;
default:
throw new RuntimeException("Unsupported reference scope: " + getEReferenceScope());
}
}
/** /**
* Returns the type of the structural feature managed by this * Returns the type of the structural feature managed by this
* {@link EStructuralFeatureDescriptor}. * {@link EStructuralFeatureDescriptor}.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment