@Override public void visit(CatchClause n, Void arg) { out.println("CatchClause: " + (extended ? n : n.getParameter())); super.visit(n, arg); }
@Override public CatchClause doMerge(CatchClause first, CatchClause second) { CatchClause cc = new CatchClause(); cc.setCatchBlock(mergeSingle(first.getCatchBlock(),second.getCatchBlock())); cc.setExcept(mergeSingle(first.getExcept(),second.getExcept())); return cc; }
@Override public List<Parameter> parametersExposedToChild(Node child) { if (child == getWrappedNode().getBody()) { return Collections.singletonList(getWrappedNode().getParameter()); } return Collections.emptyList(); } }
@Override public boolean doIsEquals(CatchClause first, CatchClause second) { if(!isEqualsUseMerger(first.getExcept(),second.getExcept())) return false; if(!isEqualsUseMerger(first.getCatchBlock(),second.getCatchBlock())) return false; return true; } }
@Override public void visit(CatchClause n, A arg) { MultiTypeParameter multiTypeParameter = n.getExcept(); HashSet<String> blockVariables = newHashSet(); this.localVariables.addLast(blockVariables); try { blockVariables.add(multiTypeParameter.getId().getName()); for (AnnotationExpr annotationExpr : emptyIfNull(multiTypeParameter.getAnnotations())) { annotationExpr.accept(this, arg); } BlockStmt body = n.getCatchBlock(); if (body != null) { visit(body, arg); } } finally { this.localVariables.removeLast(); } }
@Override public final Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) { SymbolDeclarator sb = JavaParserFactory.getSymbolDeclarator(wrappedNode.getParameter(), typeSolver); Optional<Value> symbolReference = solveWithAsValue(sb, name, typeSolver); if (symbolReference.isPresent()) { // Perform parameter type substitution as needed return symbolReference; } // if nothing is found we should ask the parent context return getParent().solveSymbolAsValue(name, typeSolver); }
@Override public final Optional<Value> solveSymbolAsValue(String name) { SymbolDeclarator sb = JavaParserFactory.getSymbolDeclarator(wrappedNode.getParameter(), typeSolver); Optional<Value> symbolReference = solveWithAsValue(sb, name); if (symbolReference.isPresent()) { // Perform parameter type substitution as needed return symbolReference; } // if nothing is found we should ask the parent context return getParent().solveSymbolAsValue(name); }
@Override public final Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) { SymbolDeclarator sb = JavaParserFactory.getSymbolDeclarator(wrappedNode.getParameter(), typeSolver); Optional<Value> symbolReference = solveWithAsValue(sb, name, typeSolver); if (symbolReference.isPresent()) { // Perform parameter type substitution as needed return symbolReference; } // if nothing is found we should ask the parent context return getParent().solveSymbolAsValue(name, typeSolver); }
public final SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) { SymbolDeclarator sb = JavaParserFactory.getSymbolDeclarator(wrappedNode.getParameter(), typeSolver); SymbolReference<? extends ResolvedValueDeclaration> symbolReference = AbstractJavaParserContext.solveWith(sb, name); if (symbolReference.isSolved()) { return symbolReference; } // if nothing is found we should ask the parent context return getParent().solveSymbol(name, typeSolver); }
public final SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) { SymbolDeclarator sb = JavaParserFactory.getSymbolDeclarator(wrappedNode.getParameter(), typeSolver); SymbolReference<? extends ResolvedValueDeclaration> symbolReference = AbstractJavaParserContext.solveWith(sb, name); if (symbolReference.isSolved()) { return symbolReference; } // if nothing is found we should ask the parent context return getParent().solveSymbol(name, typeSolver); }
public final SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name) { SymbolDeclarator sb = JavaParserFactory.getSymbolDeclarator(wrappedNode.getParameter(), typeSolver); SymbolReference<? extends ResolvedValueDeclaration> symbolReference = AbstractJavaParserContext.solveWith(sb, name); if (symbolReference.isSolved()) { return symbolReference; } // if nothing is found we should ask the parent context return getParent().solveSymbol(name); }
@Test public void solveMultiCatchType() { String code = "class A {\n" + " public void foo() {\n" + " try {\n" + " \n" + " } catch (IllegalStateException | IllegalArgumentException e) {\n" + " \n" + " }\n" + " }\n" + " }"; CompilationUnit cu = parseWithTypeSolver(code); CatchClause catchClause = Navigator.findNodeOfGivenClass(cu, CatchClause.class); Type jpType = catchClause.getParameter().getType(); ResolvedType jssType = jpType.resolve(); assertEquals(true, jssType instanceof ResolvedUnionType); } }