use of spoon.reflect.code.CtCatch in project spoon by INRIA.
the class CtTryImpl method setCatchers.
@Override
public <T extends CtTry> T setCatchers(List<CtCatch> catchers) {
if (catchers == null || catchers.isEmpty()) {
this.catchers = CtElementImpl.emptyList();
return (T) this;
}
getFactory().getEnvironment().getModelChangeListener().onListDeleteAll(this, CATCH, this.catchers, new ArrayList<>(this.catchers));
this.catchers.clear();
for (CtCatch c : catchers) {
addCatcher(c);
}
return (T) this;
}
use of spoon.reflect.code.CtCatch in project spoon by INRIA.
the class DefaultJavaPrettyPrinter method visitCtTryWithResource.
@Override
public void visitCtTryWithResource(CtTryWithResource tryWithResource) {
enterCtStatement(tryWithResource);
printer.writeKeyword("try").writeSpace();
if (tryWithResource.getResources() != null && !tryWithResource.getResources().isEmpty()) {
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, "(", false, false, ";", false, false, ")")) {
for (CtLocalVariable<?> r : tryWithResource.getResources()) {
lp.printSeparatorIfAppropriate();
scan(r);
}
}
}
printer.writeSpace();
scan(tryWithResource.getBody());
for (CtCatch c : tryWithResource.getCatchers()) {
scan(c);
}
if (tryWithResource.getFinalizer() != null) {
printer.writeSpace().writeKeyword("finally").writeSpace();
scan(tryWithResource.getFinalizer());
}
}
use of spoon.reflect.code.CtCatch in project spoon by INRIA.
the class DefaultJavaPrettyPrinter method visitCtTry.
@Override
public void visitCtTry(CtTry tryBlock) {
enterCtStatement(tryBlock);
printer.writeKeyword("try").writeSpace();
scan(tryBlock.getBody());
for (CtCatch c : tryBlock.getCatchers()) {
scan(c);
}
if (tryBlock.getFinalizer() != null) {
printer.writeSpace().writeKeyword("finally").writeSpace();
scan(tryBlock.getFinalizer());
}
}
use of spoon.reflect.code.CtCatch in project spoon by INRIA.
the class AccessibleVariablesFinder method getVariable.
private List<CtVariable> getVariable(final CtElement parent) {
final List<CtVariable> variables = new ArrayList<>();
if (parent == null) {
return variables;
}
class VariableScanner extends CtInheritanceScanner {
@Override
public void visitCtStatementList(CtStatementList e) {
for (int i = 0; i < e.getStatements().size(); i++) {
CtStatement ctStatement = e.getStatements().get(i);
if (ctStatement.getPosition() == null) {
}
if (ctStatement.getPosition() != null && ctStatement.getPosition().getSourceStart() > expression.getPosition().getSourceEnd()) {
break;
}
if (ctStatement instanceof CtVariable) {
variables.add((CtVariable) ctStatement);
}
}
super.visitCtStatementList(e);
}
@Override
public <T> void scanCtType(CtType<T> type) {
List<CtField<?>> fields = type.getFields();
for (int i = 0; i < fields.size(); i++) {
CtField<?> ctField = fields.get(i);
if (ctField.hasModifier(ModifierKind.PUBLIC) || ctField.hasModifier(ModifierKind.PROTECTED)) {
variables.add(ctField);
} else if (ctField.hasModifier(ModifierKind.PRIVATE)) {
if (expression.hasParent(type)) {
variables.add(ctField);
}
} else if (expression.getParent(CtPackage.class).equals(type.getParent(CtPackage.class))) {
// default visibility
variables.add(ctField);
}
}
CtTypeReference<?> superclass = type.getSuperclass();
if (superclass != null) {
variables.addAll(getVariable(superclass.getTypeDeclaration()));
}
Set<CtTypeReference<?>> superInterfaces = type.getSuperInterfaces();
for (Iterator<CtTypeReference<?>> iterator = superInterfaces.iterator(); iterator.hasNext(); ) {
CtTypeReference<?> typeReference = iterator.next();
variables.addAll(getVariable(typeReference.getTypeDeclaration()));
}
super.scanCtType(type);
}
@Override
public void visitCtTryWithResource(CtTryWithResource e) {
variables.addAll(e.getResources());
super.visitCtTryWithResource(e);
}
@Override
public void scanCtExecutable(CtExecutable e) {
variables.addAll(e.getParameters());
super.scanCtExecutable(e);
}
@Override
public void visitCtFor(CtFor e) {
for (CtStatement ctStatement : e.getForInit()) {
this.scan(ctStatement);
}
super.visitCtFor(e);
}
@Override
public void visitCtForEach(CtForEach e) {
variables.add(e.getVariable());
super.visitCtForEach(e);
}
@Override
public void visitCtMethod(CtMethod e) {
this.scan(e.getBody());
super.visitCtMethod(e);
}
@Override
public void visitCtLocalVariable(CtLocalVariable e) {
variables.add(e);
super.visitCtLocalVariable(e);
}
@Override
public void visitCtCatch(CtCatch e) {
variables.add(e.getParameter());
super.visitCtCatch(e);
}
}
new VariableScanner().scan(parent);
return variables;
}
use of spoon.reflect.code.CtCatch in project spoon by INRIA.
the class CtBodyHolderTest method testTryCatch.
@Test
public void testTryCatch() throws Exception {
Factory factory = build(ClassWithBodies.class, CWBStatementTemplate.class);
CtClass<?> cwbClass = (CtClass<?>) factory.Type().get(ClassWithBodies.class);
assertEquals(2, cwbClass.getMethods().size());
CtMethod<?> method = cwbClass.getMethod("method2");
CtBlock<?> methodBody = method.getBody();
assertTrue(methodBody.getStatement(0) instanceof CtTry);
CtTry tryStmnt = (CtTry) methodBody.getStatement(0);
checkCtBody(tryStmnt, "try_body", 0);
assertEquals(1, tryStmnt.getCatchers().size());
assertTrue(tryStmnt.getCatchers().get(0) instanceof CtCatch);
checkCtBody(tryStmnt.getCatchers().get(0), "catch_body", 0);
}
Aggregations