/** Deletes the given exceptions from a method's throws clause. */ public static Fix deleteExceptions( MethodTree tree, final VisitorState state, List<ExpressionTree> toDelete) { List<? extends ExpressionTree> trees = tree.getThrows(); if (toDelete.size() == trees.size()) { return SuggestedFix.replace( getThrowsPosition(tree, state) - 1, state.getEndPosition(getLast(trees)), ""); } String replacement = FluentIterable.from(tree.getThrows()) .filter(Predicates.not(Predicates.in(toDelete))) .transform( new Function<ExpressionTree, String>() { @Override @Nullable public String apply(ExpressionTree input) { return state.getSourceForNode(input); } }) .join(Joiner.on(", ")); return SuggestedFix.replace( ((JCTree) tree.getThrows().get(0)).getStartPosition(), state.getEndPosition(getLast(tree.getThrows())), replacement); }
private void fixThrows(VisitorState state, SuggestedFix.Builder fix) { MethodTree methodTree = state.findEnclosing(MethodTree.class); if (methodTree == null || methodTree.getThrows().isEmpty()) { return; } ImmutableMap.Builder<Type, ExpressionTree> thrown = ImmutableMap.builder(); for (ExpressionTree e : methodTree.getThrows()) { thrown.put(ASTHelpers.getType(e), e); } UnhandledResult<ExpressionTree> result = unhandled(thrown.build(), state); if (result.unhandled.isEmpty()) { return; } List<String> newThrows = new ArrayList<>(); for (Type handle : result.unhandled) { newThrows.add(handle.tsym.getSimpleName().toString()); } Collections.sort(newThrows); fix.postfixWith( Iterables.getLast(methodTree.getThrows()), ", " + Joiner.on(", ").join(newThrows)); // the other exceptions are in java.lang fix.addImport("java.lang.reflect.InvocationTargetException"); }
@Override public Description matchMethod(MethodTree tree, VisitorState state) { if (tree.getThrows().isEmpty()) { return NO_MATCH; } List<ExpressionTree> uncheckedExceptions = new ArrayList<>(); for (ExpressionTree exception : tree.getThrows()) { Type exceptionType = getType(exception); if (isSubtype(exceptionType, state.getSymtab().runtimeExceptionType, state) || isSubtype(exceptionType, state.getSymtab().errorType, state)) { uncheckedExceptions.add(exception); } } if (uncheckedExceptions.isEmpty()) { return NO_MATCH; } return describeMatch( uncheckedExceptions.get(0), SuggestedFixes.deleteExceptions(tree, state, uncheckedExceptions)); } }
@Override public Description matchMethod(MethodTree tree, VisitorState state) { List<? extends ExpressionTree> thrown = tree.getThrows(); if (thrown.isEmpty()) { return NO_MATCH; Iterables.filter(tree.getThrows(), Predicates.in(toRemove))); return buildDescription(delete.get(0)) .setMessage("Redundant throws clause: " + oxfordJoin("; ", messages))
@Override public Void visitThrows(ThrowsTree throwsTree, Void unused) { ReferenceTree exName = throwsTree.getExceptionName(); Type type = (Type) JavacTrees.instance(state.context) .getElement(new DocTreePath(getCurrentPath(), exName)) .asType(); if (type != null && isCheckedException(type)) { if (methodTree.getThrows().stream().noneMatch(t -> isSubtype(type, getType(t), state))) { state.reportMatch( buildDescription(diagnosticPosition(getCurrentPath(), state)) .addFix(Utils.replace(throwsTree, "", state)) .build()); } } return super.visitThrows(throwsTree, null); }
@Override @Nullable public Choice<Unifier> visitMethod(MethodTree decl, @Nullable Unifier unifier) { return getName() .unify(decl.getName(), unifier) .thenChoose(unifications(getReturnType(), decl.getReturnType())) .thenChoose(unifications(getParameters(), decl.getParameters())) .thenChoose(unifications(getThrows(), decl.getThrows())) .thenChoose(unifications(getBody(), decl.getBody())); }
@Override public UMethodDecl visitMethod(MethodTree decl, Void v) { return UMethodDecl.create( visitModifiers(decl.getModifiers(), null), decl.getName(), templateType(decl.getReturnType()), cast(templateStatements(decl.getParameters()), UVariableDecl.class), templateExpressions(decl.getThrows()), (UBlock) template(decl.getBody())); }
@Override public Tree visitMethod(MethodTree tree, Void p) { MethodTree n = make.Method((ModifiersTree) tree.getModifiers(), tree.getName().toString(), (ExpressionTree) tree.getReturnType(), tree.getTypeParameters(), tree.getParameters(), tree.getThrows(), tree.getBody(), (ExpressionTree) tree.getDefaultValue()); comments.copyComments(tree, n); model.setPos(n, model.getPos(tree)); return n; }
private MethodTree modifyMethodTypeParameter(MethodTree method, int index, TypeParameterTree typeParameter, Operation op) { MethodTree copy = Method( method.getModifiers(), method.getName(), method.getReturnType(), c(method.getTypeParameters(), index, typeParameter, op), method.getParameters(), method.getThrows(), method.getBody(), (ExpressionTree) method.getDefaultValue() ); return copy; }
private MethodTree modifyMethodParameter(MethodTree method, int index, VariableTree parameter, Operation op) { MethodTree copy = Method( method.getModifiers(), method.getName(), method.getReturnType(), method.getTypeParameters(), c(method.getParameters(), index, parameter, op), method.getThrows(), method.getBody(), (ExpressionTree) method.getDefaultValue() ); return copy; }
private MethodTree modifyMethodThrows(MethodTree method, int index, ExpressionTree throwz, Operation op) { MethodTree copy = Method( method.getModifiers(), method.getName(), method.getReturnType(), method.getTypeParameters(), method.getParameters(), c(method.getThrows(), index, throwz, op), method.getBody(), (ExpressionTree) method.getDefaultValue() ); return copy; }
@Override @Nullable public Choice<Unifier> visitMethod(MethodTree decl, @Nullable Unifier unifier) { return getName() .unify(decl.getName(), unifier) .thenChoose(unifications(getReturnType(), decl.getReturnType())) .thenChoose(unifications(getParameters(), decl.getParameters())) .thenChoose(unifications(getThrows(), decl.getThrows())) .thenChoose(unifications(getBody(), decl.getBody())); }
@Override public Boolean visitMethod(MethodTree node, Stack<Tree> p) { scan(node.getModifiers(), p); scan(node.getReturnType(), p); scan(node.getTypeParameters(), p); scan(node.getParameters(), p); scan(node.getThrows(), p); return scan(node.getBody(), p); }
public R visitMethod(MethodTree node, P p) { R r = scan(node.getModifiers(), p); r = scanAndReduce(node.getReturnType(), p, r); r = scanAndReduce(node.getTypeParameters(), p, r); r = scanAndReduce(node.getParameters(), p, r); r = scanAndReduce(node.getThrows(), p, r); r = scanAndReduce(node.getBody(), p, r); return r; }
public R visitMethod(MethodTree node, P p) { R r = scan(node.getModifiers(), p); r = scanAndReduce(node.getReturnType(), p, r); r = scanAndReduce(node.getTypeParameters(), p, r); r = scanAndReduce(node.getParameters(), p, r); r = scanAndReduce(node.getThrows(), p, r); r = scanAndReduce(node.getBody(), p, r); return r; }
@Override public UMethodDecl visitMethod(MethodTree decl, Void v) { return UMethodDecl.create( visitModifiers(decl.getModifiers(), null), decl.getName(), templateType(decl.getReturnType()), cast(templateStatements(decl.getParameters()), UVariableDecl.class), templateExpressions(decl.getThrows()), (UBlock) template(decl.getBody())); }
public Object run(WorkingCopy wc) { TreeMaker make = wc.getTreeMaker(); ExecutableElement execElement = execElementHandle.resolve(wc); MethodTree methodTree = wc.getTrees().getTree(execElement); MethodTree newMethodTree = wc.getTreeMaker().Method(methodTree.getModifiers(), methodTree.getName(), methodTree.getReturnType(), methodTree.getTypeParameters(), methodTree.getParameters(), methodTree.getThrows(), "{" + bodyText + "}", (ExpressionTree)methodTree.getDefaultValue()); wc.rewrite(methodTree, newMethodTree); return null; } }, javaClass.getFileObject());
public R visitMethod(MethodTree node, P p) { R r = scan(node.getModifiers(), p); r = scanAndReduce(node.getReturnType(), p, r); r = scanAndReduce(node.getTypeParameters(), p, r); r = scanAndReduce(node.getParameters(), p, r); r = scanAndReduce(node.getReceiverParameter(), p, r); r = scanAndReduce(node.getThrows(), p, r); r = scanAndReduce(node.getBody(), p, r); r = scanAndReduce(node.getDefaultValue(), p, r); return r; }
public R visitMethod(MethodTree node, P p) { R r = scan(node.getModifiers(), p); r = scanAndReduce(node.getReturnType(), p, r); r = scanAndReduce(node.getTypeParameters(), p, r); r = scanAndReduce(node.getParameters(), p, r); r = scanAndReduce(node.getReceiverParameter(), p, r); r = scanAndReduce(node.getThrows(), p, r); r = scanAndReduce(node.getBody(), p, r); r = scanAndReduce(node.getDefaultValue(), p, r); return r; }