public CrossReference getCrossReference() { if (element == null) return null; return GrammarUtil.containingCrossReference(element); }
public void acceptAssignedCrossRefTerminal(RuleCall rc, String token, EObject value, int index, ILeafNode node) { writeSemantic(GrammarUtil.containingCrossReference(rc), token); }
public void acceptAssignedCrossRefDatatype(RuleCall rc, String token, EObject value, int index, ICompositeNode node) { writeSemantic(GrammarUtil.containingCrossReference(rc), token); }
public void acceptAssignedCrossRefKeyword(Keyword kw, String token, EObject value, int index, ILeafNode node) { writeSemantic(GrammarUtil.containingCrossReference(kw), token); }
public void acceptAssignedCrossRefEnum(RuleCall enumRC, String token, EObject value, int index, ICompositeNode node) { writeSemantic(GrammarUtil.containingCrossReference(enumRC), token); }
protected Iterable<AbstractElement> findValidAssignmentsForCrossRef(EObject semanticObj, Iterable<AbstractElement> assignedElements, EObject value, INode node) { List<AbstractElement> result = Lists.newArrayList(); for (AbstractElement ass : assignedElements) { CrossReference crossref = GrammarUtil.containingCrossReference(ass); EReference eref = GrammarUtil.getReference(crossref, semanticObj.eClass()); if (EcoreUtil2.isAssignableFrom(eref.getEReferenceType(), value.eClass()) && crossRefSerializer.isValid(semanticObj, crossref, value, node, null)) result.add(ass); } return result; }
protected void acceptKeyword(Assignment ass, Keyword keyword, Object value, String token, int index, ILeafNode node) { CrossReference crossRef = GrammarUtil.containingCrossReference(keyword); if (crossRef != null) sequenceAcceptor.acceptAssignedCrossRefKeyword(keyword, token, (EObject) value, index, node); else sequenceAcceptor.acceptAssignedKeyword(keyword, token, value, index, node); }
protected String getToken(Keyword keyword, Object value, ILeafNode node) { CrossReference crossRef = GrammarUtil.containingCrossReference(keyword); if (crossRef != null) return provider.crossRefSerializer.serializeCrossRef(semanticObject, crossRef, (EObject) value, node, errorAcceptor); return provider.keywordSerializer.serializeAssignedKeyword(semanticObject, keyword, value, node, errorAcceptor); }
public EClass getCrossReferenceType() { if (element == null) return null; CrossReference cr = GrammarUtil.containingCrossReference(element); if (cr == null) return null; return (EClass) cr.getType().getClassifier(); }
protected boolean isContentValidationNeeded(Collection<AbstractElement> ass) { if (ass == null || ass.size() < 2) return false; Iterator<AbstractElement> it = ass.iterator(); AbstractElement first = it.next(); CrossReference firstRef = GrammarUtil.containingCrossReference(first); while (it.hasNext()) { AbstractElement next = it.next(); if (next instanceof Action) return true; if (!EcoreUtil.equals(first, next)) return true; if (firstRef != null) { CrossReference nextRef = GrammarUtil.containingCrossReference(next); if (nextRef != null && nextRef.getType().getClassifier() != firstRef.getType().getClassifier()) return true; } } return false; } }
protected List<AbstractElement> getAbstractElements(EObject obj) { if (obj instanceof AbstractElement) return Collections.singletonList((AbstractElement) obj); if (obj instanceof AbstractRule) { AbstractRule rule = (AbstractRule) obj; if (rule.getType().getClassifier() instanceof EClass) return Collections.singletonList(rule.getAlternatives()); List<AbstractElement> result = Lists.newArrayList(); for (RuleCall rc : grammarAccess.findRuleCalls(rule)) { CrossReference cr = GrammarUtil.containingCrossReference(rc); result.add(cr == null ? rc : cr); } return result; } return null; }
protected String addCrossRef(String result, AbstractElement ele) { if (!showAssignment) return result; CrossReference cr = GrammarUtil.containingCrossReference(ele); if (cr == null) return result; String name = cr.getType() != null && cr.getType().getClassifier() != null ? cr.getType().getClassifier() .getName() : "null"; return "[" + name + "|" + result + "]"; }
protected String getToken(RuleCall rc, Object value, INode node) { CrossReference crossRef = GrammarUtil.containingCrossReference(rc); Assignment assignment = GrammarUtil.containingAssignment(rc); if (crossRef != null) return provider.crossRefSerializer.serializeCrossRef(semanticObject, crossRef, (EObject) value, node, errorAcceptor); else if (GrammarUtil.isEObjectRuleCall(rc) || GrammarUtil.isBooleanAssignment(assignment)) return null; else if (GrammarUtil.isEnumRuleCall(rc)) return provider.enumLiteralSerializer.serializeAssignedEnumLiteral(semanticObject, rc, value, node, errorAcceptor); else return provider.valueSerializer.serializeAssignedValue(semanticObject, rc, value, node, errorAcceptor); } }
protected IUpdatableReference createUpdatableReference(ISemanticRegion current) { EReference ref = (EReference) current.getContainingFeature(); CrossReference crossRef = GrammarUtil.containingCrossReference(current.getGrammarElement()); EObject owner = current.getContainingRegion().getSemanticElement(); Object value = owner.eGet(ref); if (value instanceof List<?>) { List<?> targets = (List<?>) value; int i = current.getIndexInContainingFeature(); EObject t = (EObject) targets.get(i); if (t != null && !t.eIsProxy()) { return new UpdatableReference(owner, ref, i, t, crossRef, current); } } else if (value instanceof EObject) { EObject t = (EObject) value; if (!t.eIsProxy()) { return new UpdatableReference(owner, ref, -1, t, crossRef, current); } } else { throw new IllegalStateException(); } return null; }
CrossReference cr = GrammarUtil.containingCrossReference(grammarElement); if (cr != null) { EObject target = (EObject) value;
} else if (ele instanceof Group || ele instanceof UnorderedGroup) { return ConstraintElementType.GROUP; } else if (GrammarUtil.containingCrossReference(ele) != null) { if (ele instanceof RuleCall) { RuleCall rc = (RuleCall) ele;
else return SynStateType.ASSIGNED_ACTION_CALL; } else if (GrammarUtil.containingCrossReference(ele) != null) { if (ele instanceof RuleCall) { RuleCall rc = (RuleCall) ele;
} else if (GrammarUtil.containingCrossReference(ele) != null) { if (ele instanceof RuleCall) { RuleCall rc = (RuleCall) ele;
protected void acceptRuleCall(RuleCall rc, Object value, String token, int index, INode node) { CrossReference crossRef = GrammarUtil.containingCrossReference(rc); if (crossRef != null) { if (rc.getRule() instanceof ParserRule) sequenceAcceptor.acceptAssignedCrossRefDatatype(rc, token, (EObject) value, index, getCompositeNode(node)); else if (rc.getRule() instanceof TerminalRule) sequenceAcceptor.acceptAssignedCrossRefTerminal(rc, token, (EObject) value, index, getLeafNode(node)); else if (rc.getRule() instanceof EnumRule) sequenceAcceptor.acceptAssignedCrossRefEnum(rc, token, (EObject) value, index, getCompositeNode(node)); } else { if (rc.getRule() instanceof ParserRule) { if (rc.getRule().getType().getClassifier() instanceof EClass) acceptEObjectRuleCall(rc, (EObject) value, getCompositeNode(node)); else sequenceAcceptor.acceptAssignedDatatype(rc, token, value, index, getCompositeNode(node)); } else if (rc.getRule() instanceof TerminalRule) sequenceAcceptor.acceptAssignedTerminal(rc, token, value, index, getLeafNode(node)); else if (rc.getRule() instanceof EnumRule) sequenceAcceptor.acceptAssignedEnum(rc, token, value, index, getCompositeNode(node)); } }
public void createSequence(EObject context, EObject semanticObject) { SemanticNodeIterator ni = new SemanticNodeIterator(semanticObject); while (ni.hasNext()) { Triple<INode, AbstractElement, EObject> node = ni.next(); if (node.getSecond() instanceof RuleCall) { RuleCall rc = (RuleCall) node.getSecond(); if (rc.getRule().getType().getClassifier() instanceof EClass) acceptSemantic(semanticObject, rc, node.getThird(), node.getFirst()); else if (GrammarUtil.containingCrossReference(node.getSecond()) != null) { EStructuralFeature feature = FeatureFinderUtil .getFeature(node.getSecond(), semanticObject.eClass()); acceptSemantic(semanticObject, rc, semanticObject.eGet(feature), node.getFirst()); } else { String strVal = NodeModelUtils.getTokenText(node.getFirst()); Object val = valueConverter.toValue(strVal, rc.getRule().getName(), node.getFirst()); acceptSemantic(semanticObject, rc, val, node.getFirst()); } } else if (node.getSecond() instanceof Keyword) acceptSemantic(semanticObject, node.getSecond(), node.getFirst().getText(), node.getFirst()); else if (node.getSecond() instanceof Action) { acceptSemantic(semanticObject, node.getSecond(), semanticObject, node.getFirst()); } } }