diff options
Diffstat (limited to 'javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/CatchClauseContext.java')
-rw-r--r-- | javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/CatchClauseContext.java | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/CatchClauseContext.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/CatchClauseContext.java new file mode 100644 index 000000000..4683f272a --- /dev/null +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/CatchClauseContext.java @@ -0,0 +1,54 @@ +package com.github.javaparser.symbolsolver.javaparsermodel.contexts; + +import com.github.javaparser.ast.stmt.CatchClause; +import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration; +import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration; +import com.github.javaparser.resolution.types.ResolvedType; +import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory; +import com.github.javaparser.symbolsolver.model.resolution.SymbolReference; +import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; +import com.github.javaparser.symbolsolver.model.resolution.Value; +import com.github.javaparser.symbolsolver.resolution.SymbolDeclarator; + +import java.util.List; +import java.util.Optional; + +/** + * @author Fred Lefévère-Laoide + */ +public class CatchClauseContext extends AbstractJavaParserContext<CatchClause> { + + public CatchClauseContext(CatchClause wrappedNode, TypeSolver typeSolver) { + super(wrappedNode, 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); + } + + @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 SymbolReference<ResolvedMethodDeclaration> solveMethod( + String name, List<ResolvedType> argumentsTypes, boolean staticOnly, TypeSolver typeSolver) { + return getParent().solveMethod(name, argumentsTypes, false, typeSolver); + } +} |