use of org.yakindu.sct.model.sgraph.Entry in project statecharts by Yakindu.
the class STextValidationModelUtils method getRegionsWithoutDefaultEntry.
/**
* If a {@link Region} contains no 'default' named {@link entry} it is added
* as key to a map with a list of all entries of the region.
*
* @param elements
* - a list with {@link Region} elements.
* @return a map with a region (key) which contains no default {@link entry}
* and a list of all {@link entry} elements of the {@link Region}
* (value).
*/
public static Map<Region, List<Entry>> getRegionsWithoutDefaultEntry(List<Region> elements) {
Map<Region, List<Entry>> regions = new HashMap<Region, List<Entry>>();
for (Region region : elements) {
boolean hasDefaultEntry = false;
final List<Entry> entries = getEntries(region.eContents());
for (Entry entry : entries) {
if (isDefault(entry)) {
hasDefaultEntry = true;
break;
}
}
if (!hasDefaultEntry) {
regions.put(region, entries);
}
}
return regions;
}
use of org.yakindu.sct.model.sgraph.Entry in project statecharts by Yakindu.
the class SGraphJavaValidator method vertexNotReachable.
@Check(CheckType.FAST)
public void vertexNotReachable(final Vertex vertex) {
if (!(vertex instanceof Entry)) {
final Set<Object> stateScopeSet = new HashSet<>();
for (EObject obj : EcoreUtil2.eAllContents(vertex)) {
stateScopeSet.add(obj);
}
stateScopeSet.add(vertex);
final List<Object> externalPredecessors = new ArrayList<>();
DFS dfs = new DFS() {
@Override
public Iterator<Object> getElementLinks(Object element) {
List<Object> elements = new ArrayList<>();
if (element instanceof org.yakindu.sct.model.sgraph.State) {
if (!stateScopeSet.contains(element)) {
externalPredecessors.add(element);
} else {
elements.addAll(((org.yakindu.sct.model.sgraph.State) element).getRegions());
elements.addAll(((org.yakindu.sct.model.sgraph.State) element).getIncomingTransitions());
}
} else if (element instanceof Region) {
elements.addAll(((Region) element).getVertices());
} else if (element instanceof Entry) {
if (!stateScopeSet.contains(element)) {
externalPredecessors.add(element);
} else {
elements.addAll(((Entry) element).getIncomingTransitions());
}
} else if (element instanceof Vertex) {
elements.addAll(((Vertex) element).getIncomingTransitions());
} else if (element instanceof Transition) {
elements.add(((Transition) element).getSource());
}
return elements.iterator();
}
};
dfs.perform(vertex);
if (externalPredecessors.size() == 0) {
error(ISSUE_NODE_NOT_REACHABLE, vertex, null, -1);
}
}
}
Aggregations