/** * @return all xbase check() or eval() expressions in the pattern */ public static Collection<XExpression> getAllTopLevelXBaseExpressions(EObject patternOrBody) { final List<XExpression> result = new ArrayList<XExpression>(); final TreeIterator<EObject> eAllContents = patternOrBody.eAllContents(); while (eAllContents.hasNext()) { final EObject content = eAllContents.next(); if (content instanceof XExpression) { result.add((XExpression) content); // do not include subexpressions eAllContents.prune(); } } return result; }
/** * @return all xbase check() or eval() expressions in the pattern */ public static Collection<XExpression> getAllTopLevelXBaseExpressions(EObject patternOrBody) { final List<XExpression> result = new ArrayList<>(); final TreeIterator<EObject> eAllContents = patternOrBody.eAllContents(); while (eAllContents.hasNext()) { final EObject content = eAllContents.next(); if (content instanceof XExpression) { result.add((XExpression) content); // do not include subexpressions eAllContents.prune(); } } return result; }
@Override public Iterable<JvmDeclaredType> getLocallyDefinedTypes(XtextResource resource) { final List<JvmDeclaredType> locallyDefinedTypes = newArrayList(); for (TreeIterator<EObject> i = resource.getAllContents(); i.hasNext();) { EObject next = i.next(); if (next instanceof JvmDeclaredType) { JvmDeclaredType declaredType = (JvmDeclaredType) next; locallyDefinedTypes.add(declaredType); addInnerTypes(declaredType, new IAcceptor<JvmDeclaredType>() { @Override public void accept(JvmDeclaredType t) { locallyDefinedTypes.add(t); } }); i.prune(); } if(next instanceof XExpression) { i.prune(); } } return locallyDefinedTypes; }
public List<EAnnotation> getAllNestedAnnotations(EAnnotation eAnnotation) { List<EAnnotation> result = new ArrayList<EAnnotation>(); for (TreeIterator<?> i = eAnnotation.eAllContents(); i.hasNext();) { Object content = i.next(); if (content instanceof EAnnotation) { result.add((EAnnotation)content); } else { i.prune(); } } return result; }
public List<EAnnotation> getAllNestedAnnotations(EAnnotation eAnnotation) { List<EAnnotation> result = new ArrayList<EAnnotation>(); for (TreeIterator<?> i = eAnnotation.eAllContents(); i.hasNext();) { Object content = i.next(); if (content instanceof EAnnotation) { result.add((EAnnotation)content); } else { i.prune(); } } return result; }
public List<EAnnotation> getAllAnnotations() { List<EAnnotation> result = new UniqueEList<EAnnotation>(); EPackage ePackage = getEcorePackage(); for (TreeIterator<?> i = ePackage.eAllContents(); i.hasNext(); ) { Object object = i.next(); if (object instanceof EPackage) { i.prune(); } else if (object instanceof EAnnotation) { result.add((EAnnotation)object); i.prune(); } } return result; }
public List<EAnnotation> getAllAnnotations() { List<EAnnotation> result = new UniqueEList<EAnnotation>(); EPackage ePackage = getEcorePackage(); for (TreeIterator<?> i = ePackage.eAllContents(); i.hasNext(); ) { Object object = i.next(); if (object instanceof EPackage) { i.prune(); } else if (object instanceof EAnnotation) { result.add((EAnnotation)object); i.prune(); } } return result; }
@Override public void collectThrownExceptions(XExpression expression) { if (expression != null) { TreeIterator<EObject> iterator = EcoreUtil2.eAll(expression); while(iterator.hasNext()) { if (!collector.doSwitch(iterator.next())) { iterator.prune(); } } } }
protected void highlightElementRecursively(EObject element, IHighlightedPositionAcceptor acceptor, CancelIndicator cancelIndicator) { TreeIterator<EObject> iterator = EcoreUtil2.eAll(element); while (iterator.hasNext()) { EObject object = iterator.next(); if (highlightElement(object, acceptor, cancelIndicator)) { iterator.prune(); } } }
private EPackage findEPackageInResource(String packageUri, Resource resource) { if (resource instanceof DerivedStateAwareResource && !((DerivedStateAwareResource) resource).isFullyInitialized()) { return null; } TreeIterator<EObject> it = resource.getAllContents(); while (it.hasNext()) { EObject obj = it.next(); if (obj instanceof EPackage) { if (Objects.equals(((EPackage) obj).getNsURI(), packageUri)) { return (EPackage) obj; } } else { it.prune(); } } return null; }
private EPackage findEPackageInResource(String packageUri, Resource resource) { if (resource instanceof DerivedStateAwareResource && !((DerivedStateAwareResource) resource).isFullyInitialized()) { return null; } TreeIterator<EObject> it = resource.getAllContents(); while (it.hasNext()) { EObject obj = it.next(); if (obj instanceof EPackage) { if (((EPackage) obj).getNsURI().equals(packageUri)) { return (EPackage) obj; } } else { it.prune(); } } return null; }
private void initializeLocalTypes(JvmFeature feature, XExpression expression) { if (expression != null) { TreeIterator<EObject> iterator = EcoreUtil2.getAllNonDerivedContents(expression, true); String nameStub = "__" + feature.getDeclaringType().getSimpleName(); while(iterator.hasNext()) { EObject next = iterator.next(); if (next.eClass() == XtendPackage.Literals.ANONYMOUS_CLASS) { inferLocalClass((AnonymousClass) next, nameStub, feature); iterator.prune(); } } } }
/** * Collects all Xtend type declarations and adds them to the list. The types are added * from the innermost to the outermost type declaration. That is, nested classes are * added before their declarators are added. This greatly simplifies the implementation of * {@code isHandled} in the concrete {@link org.eclipse.xtext.xbase.typesystem.internal.AbstractRootedReentrantTypeResolver}. */ private void addXtendTypes(XtendTypeDeclaration declaration, List<EObject> result) { for(XtendMember member: declaration.getMembers()) { TreeIterator<EObject> iterator = EcoreUtil2.getAllNonDerivedContents(member, true); while(iterator.hasNext()) { EObject next = iterator.next(); if (next instanceof XtendTypeDeclaration) { addXtendTypes((XtendTypeDeclaration) next, result); iterator.prune(); } } } result.add(declaration); }
protected boolean ruleContainsRecursiveUnassignedRuleCall(AbstractRule rule, Set<AbstractRule> visited) { if (!visited.add(rule)) return true; TreeIterator<EObject> i = rule.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (o instanceof Assignment) i.prune(); else if (o instanceof RuleCall && isParserRule(((RuleCall) o).getRule())) { if (ruleContainsRecursiveUnassignedRuleCall(((RuleCall) o).getRule(), visited)) return true; } } return false; }
protected boolean canCompileToJavaLambda(XClosure closure, LightweightTypeReference typeRef, JvmOperation operation) { if (!typeRef.isInterfaceType()) return false; if (!operation.getTypeParameters().isEmpty()) return false; TreeIterator<EObject> iterator = closure.eAllContents(); JvmType jvmType = typeRef.getType(); while (iterator.hasNext()) { EObject obj = iterator.next(); if (obj instanceof XClosure) { iterator.prune(); } else if (obj instanceof XFeatureCall && isReferenceToSelf((XFeatureCall) obj, jvmType)) { return false; } } return true; }
/** * Compute the map of cross references. */ protected void crossReference() { for (TreeIterator<Notifier> contents = newContentsIterator(); contents.hasNext();) { Object content = contents.next(); if (content instanceof EObject) { EObject eObject = (EObject)content; if (containment(eObject)) { handleCrossReference(eObject); } else { contents.prune(); } } } }
protected boolean ruleContainsAssignedAction(AbstractRule rule, Set<AbstractRule> visited) { if (!visited.add(rule)) return false; TreeIterator<EObject> i = rule.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (o instanceof Action && ((Action) o).getFeature() != null) return true; else if (o instanceof Assignment) i.prune(); else if (o instanceof RuleCall && isParserRule(((RuleCall) o).getRule())) { if (ruleContainsAssignedAction(((RuleCall) o).getRule(), visited)) return true; } } return false; }
protected List<IReferenceDescription> computeReferenceDescriptions() { final List<IReferenceDescription> referenceDescriptions = Lists.newArrayList(); IAcceptor<IReferenceDescription> acceptor = new IAcceptor<IReferenceDescription>() { public void accept(IReferenceDescription referenceDescription) { referenceDescriptions.add(referenceDescription); } }; EcoreUtil2.resolveLazyCrossReferences(resource, CancelIndicator.NullImpl); Map<EObject, IEObjectDescription> eObject2exportedEObjects = createEObject2ExportedEObjectsMap(getExportedObjects()); TreeIterator<EObject> contents = EcoreUtil.getAllProperContents(this.resource, true); while (contents.hasNext()) { EObject eObject = contents.next(); URI exportedContainerURI = findExportedContainerURI(eObject, eObject2exportedEObjects); if (!strategy.createReferenceDescriptions(eObject, exportedContainerURI, acceptor)) contents.prune(); } return referenceDescriptions; }
/** Initialize the local class to the given expression. * * @param context the generation context. * @param feature the feature which contains the expression. * @param expression the expression which contains the local class. */ protected void initializeLocalTypes(GenerationContext context, JvmFeature feature, XExpression expression) { if (expression != null) { int localTypeIndex = context.getLocalTypeIndex(); final TreeIterator<EObject> iterator = EcoreUtil2.getAllNonDerivedContents(expression, true); final String nameStub = "__" + feature.getDeclaringType().getSimpleName() + "_"; //$NON-NLS-1$ //$NON-NLS-2$ while (iterator.hasNext()) { final EObject next = iterator.next(); if (next.eClass() == XtendPackage.Literals.ANONYMOUS_CLASS) { inferLocalClass((AnonymousClass) next, nameStub + localTypeIndex, feature); iterator.prune(); ++localTypeIndex; } } context.setLocalTypeIndex(localTypeIndex); } }
protected void computeObjectFolding(XtextResource xtextResource, IFoldingRegionAcceptor<ITextRegion> foldingRegionAcceptor) { IParseResult parseResult = xtextResource.getParseResult(); if(parseResult != null){ EObject rootASTElement = parseResult.getRootASTElement(); if(rootASTElement != null){ TreeIterator<EObject> allContents = rootASTElement.eAllContents(); while (allContents.hasNext()) { EObject eObject = allContents.next(); if (isHandled(eObject)) { computeObjectFolding(eObject, foldingRegionAcceptor); } if (!shouldProcessContent(eObject)) { allContents.prune(); } } } } }