Skip to content
Snippets Groups Projects
Commit 766587e7 authored by Dongyue Mou's avatar Dongyue Mou
Browse files

fixed dangling reference problem when save the project after deleting a component

fixed consturctor exception from SIL-Plugin
added transform action for table specification
refs 1030
parent abe9e8b6
No related branches found
No related tags found
No related merge requests found
......@@ -27,6 +27,7 @@ import org.fortiss.tooling.base.model.element.IConnector;
import org.fortiss.tooling.base.model.element.IHierarchicElement;
import org.fortiss.tooling.base.model.element.IHierarchicElementContainer;
import org.fortiss.tooling.base.model.element.IModelElement;
import org.fortiss.tooling.base.model.element.IModelElementReference;
import org.fortiss.tooling.base.model.element.IModelElementSpecification;
import org.fortiss.tooling.kernel.extension.IElementCompositor;
import org.fortiss.tooling.kernel.service.IConnectionCompositorService;
......@@ -69,8 +70,9 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
if(!iterateDecomposeSpecifications((IModelElement)contained)) {
return false;
}
// TODO (CD): https://af3.fortiss.org/issues/389
// handle reference removal
if(!iterateDecomposeReference((IModelElement)contained)) {
return false;
}
}
if(contained instanceof IHierarchicElementContainer) {
if(!iterateDecomposeSubelements((IHierarchicElementContainer)contained)) {
......@@ -101,6 +103,21 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
return decomposeSpecific(contained);
}
/**
* Iterates over references of given {@link IModelElement} and performs
* decomposition.
*/
private boolean iterateDecomposeReference(IModelElement me) {
ArrayList<IModelElementReference> list =
new ArrayList<IModelElementReference>(me.getReferencedByList());
for(IModelElementReference ref : list) {
if(!decomposeReference(ref)) {
return false;
}
}
return true;
}
/**
* Iterates over specifications of given {@link IModelElement} and performs
* decomposition.
......@@ -171,10 +188,13 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
return true;
}
/** Base implementation yet empty. */
protected boolean decomposeReferences(@SuppressWarnings("unused") EObject element) {
// TODO (FH): https://af3.fortiss.org/issues/389
// implement reference removal
/**
* Base implementation uses element compositor service's decomposition by
* default and returns <code>true</code>. Subclasses may override.
*/
protected boolean decomposeReference(IModelElementReference element) {
element.setReference(null);
EcoreUtil.delete(element);
return true;
}
......@@ -202,6 +222,11 @@ public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElem
return false;
}
}
if(IElementCompositorService.INSTANCE.canDecompose(element)) {
return IElementCompositorService.INSTANCE.decompose(element);
}
EcoreUtil.delete(element);
return true;
}
......
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