protected void collectTypesForContext(TypeFinderState state, Set<EClass> types, boolean allowLocal,
boolean hasAssignment, Set<Object> visited) {
hasAssignment = hasAssignment || state.getGrammarElement() instanceof Assignment;
if (allowLocal) {
if (state.getGrammarElement() instanceof Action) {
types.add((EClass) ((Action) state.getGrammarElement()).getType().getClassifier());
return;
}
}
if (state.isEndState() && !GrammarUtil.isUnassignedEObjectRuleCall(state.getGrammarElement())) {
if (hasAssignment)
types.add((EClass) GrammarUtil.containingRule(state.getGrammarElement()).getType().getClassifier());
else
types.add(null);
}
if (!visited.add(state))
return;
for (TypeFinderTransition t : state.getAllOutgoing())
if (!(t.isRuleCall() && state.getGrammarElement() instanceof Assignment))
collectTypesForContext(t.getTarget(), types, true, hasAssignment, visited);
}