public static EReference getReference(CrossReference crossRef) { EClassifier referenceOwner = findCurrentType(crossRef); if (referenceOwner instanceof EClass) return getReference(crossRef, (EClass) referenceOwner); return null; }
public void collectAbstractElements(Grammar grammar, EStructuralFeature feature, IFollowElementAcceptor followElementAcceptor) { for (Grammar superGrammar : grammar.getUsedGrammars()) { collectAbstractElements(superGrammar, feature, followElementAcceptor); } EClass declarator = feature.getEContainingClass(); for (ParserRule rule : GrammarUtil.allParserRules(grammar)) { for (Assignment assignment : GrammarUtil.containedAssignments(rule)) { if (assignment.getFeature().equals(feature.getName())) { EClassifier classifier = GrammarUtil.findCurrentType(assignment); EClassifier compType = EcoreUtil2.getCompatibleType(declarator, classifier); if (compType == declarator) { followElementAcceptor.accept(assignment); } } } } }
protected void getLocallyAssignedContainmentReferences(final Grammar grammar, final Multimap<EClass, EReference> type2ref) { List<Assignment> _containedAssignments = GrammarUtil.containedAssignments(grammar); for (final Assignment assignment : _containedAssignments) { { final EClassifier type = GrammarUtil.findCurrentType(assignment); if ((type instanceof EClass)) { final EStructuralFeature feature = ((EClass)type).getEStructuralFeature(assignment.getFeature()); if (((feature instanceof EReference) && ((EReference) feature).isContainment())) { type2ref.put(((EClass)type), ((EReference) feature)); } } } } List<Action> _containedActions = GrammarUtil.containedActions(grammar); for (final Action action : _containedActions) { { final String featureName = action.getFeature(); if ((featureName != null)) { final EClassifier type = action.getType().getClassifier(); if ((type instanceof EClass)) { final EStructuralFeature feature = ((EClass)type).getEStructuralFeature(featureName); if (((feature instanceof EReference) && ((EReference) feature).isContainment())) { type2ref.put(((EClass)type), ((EReference) feature)); } } } } } }