use of org.eclipse.n4js.flowgraphs.dataflow.guards.GuardAssertion in project n4js by eclipse.
the class FlowgraphsXpectMethod method instanceofguard.
/**
* This xpect method can evaluate the control flow container of a given {@link ControlFlowElement}.
*/
@ParameterParser(syntax = "('of' arg1=OFFSET)? (arg2=STRING)?")
@Xpect
public void instanceofguard(@N4JSCommaSeparatedValuesExpectation IN4JSCommaSeparatedValuesExpectation expectation, IEObjectCoveringRegion offset, String holdsName) {
ControlFlowElement cfe = getCFE(offset);
GuardAssertion assertion = null;
if (holdsName != null) {
assertion = GuardAssertion.valueOf(holdsName);
}
InstanceofGuardAnalyser iga = new InstanceofGuardAnalyser();
N4JSFlowAnalyser flowAnalyzer = getFlowAnalyzer(cfe);
flowAnalyzer.accept(iga);
Collection<InstanceofGuard> ioGuards = null;
if (assertion == GuardAssertion.MayHolds) {
ioGuards = iga.getMayHoldingTypes(cfe);
} else if (assertion == GuardAssertion.NeverHolds) {
ioGuards = iga.getNeverHoldingTypes(cfe);
} else {
ioGuards = iga.getAlwaysHoldingTypes(cfe);
}
List<String> commonPredStrs = new LinkedList<>();
for (InstanceofGuard ioGuard : ioGuards) {
String symbolText = FGUtils.getSourceText(ioGuard.symbolCFE);
String typeText = FGUtils.getSourceText(ioGuard.typeIdentifier);
commonPredStrs.add(symbolText + "<:" + typeText);
}
expectation.assertEquals(commonPredStrs);
}
Aggregations