@Override public CtRole getRoleInParent() { if (isParentInitialized()) { EarlyTerminatingScanner<CtRole> ets = new EarlyTerminatingScanner<CtRole>() { @Override public void scan(CtRole role, CtElement element) { if (element == CtElementImpl.this) { setResult(role); terminate(); } //do not call super.scan, because we do not want scan children } }; getParent().accept(ets); return ets.getResult(); } return null; }
/** * @return true if `element` still exist in the printed model. false if it was removed or was never there */ public boolean isElementExists(SourcePositionHolder element) { if (element instanceof CtExtendedModifier) { CtExtendedModifier modifier = (CtExtendedModifier) element; if (this.element instanceof CtModifiable) { return ((CtModifiable) this.element).hasModifier(modifier.getKind()); } } EarlyTerminatingScanner<Boolean> scanner = new EarlyTerminatingScanner<Boolean>() { @Override protected void enter(CtElement e) { if (element == e) { setResult(Boolean.TRUE); terminate(); } } }; scanner.scan(this.element); return scanner.getResult() == Boolean.TRUE; }
private CtElement getTarget() { CtType type = factory.Type().get(patch.getSourceLocation().getRootClassName()); EarlyTerminatingScanner<CtElement> targetFinder = new EarlyTerminatingScanner<CtElement>() { @Override protected void enter(CtElement e) { if (e.getPosition() instanceof NoSourcePosition) { return; } if (e.getPosition().getSourceStart() == patch.getSourceLocation().getBeginSource() && e.getPosition().getSourceEnd() == patch.getSourceLocation().getEndSource() && e.isImplicit() == false) { if (patch.getType() == RepairType.CONDITIONAL && e instanceof CtIf) { setResult(((CtIf) e).getCondition()); } else { setResult(e); } terminate(); return; } if (e.getPosition().getSourceStart() <= patch.getSourceLocation().getBeginSource() && e.getPosition().getSourceEnd() >= patch.getSourceLocation().getEndSource()) { super.enter(e); } } }; type.accept(targetFinder); return targetFinder.getResult(); }