forked from javaparser/javaparser
-
Notifications
You must be signed in to change notification settings - Fork 0
/
InstanceOfExprContext.java
67 lines (51 loc) · 2.52 KB
/
InstanceOfExprContext.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.github.javaparser.symbolsolver.javaparsermodel.contexts;
import com.github.javaparser.ast.expr.InstanceOfExpr;
import com.github.javaparser.ast.expr.PatternExpr;
import com.github.javaparser.resolution.Context;
import com.github.javaparser.resolution.TypeSolver;
import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration;
import com.github.javaparser.resolution.model.SymbolReference;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserPatternDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* @author Roger Howell
*/
public class InstanceOfExprContext extends AbstractJavaParserContext<InstanceOfExpr> {
public InstanceOfExprContext(InstanceOfExpr wrappedNode, TypeSolver typeSolver) {
super(wrappedNode, typeSolver);
}
@Override
public SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name) {
Optional<PatternExpr> optionalPatternExpr = wrappedNode.getPattern();
if(optionalPatternExpr.isPresent()) {
if(optionalPatternExpr.get().getNameAsString().equals(name)) {
JavaParserPatternDeclaration decl = JavaParserSymbolDeclaration.patternVar(optionalPatternExpr.get(), typeSolver);
return SymbolReference.solved(decl);
}
}
Optional<Context> optionalParentContext = getParent();
if (!optionalParentContext.isPresent()) {
return SymbolReference.unsolved();
}
Context parentContext = optionalParentContext.get();
if(parentContext instanceof BinaryExprContext) {
Optional<PatternExpr> optionalPatternExpr1 = parentContext.patternExprInScope(name);
if(optionalPatternExpr1.isPresent()) {
JavaParserPatternDeclaration decl = JavaParserSymbolDeclaration.patternVar(optionalPatternExpr1.get(), typeSolver);
return SymbolReference.solved(decl);
}
} // TODO: Also consider unary expr context
// if nothing is found we should ask the parent context
return solveSymbolInParentContext(name);
}
@Override
public List<PatternExpr> patternExprsExposedFromChildren() {
List<PatternExpr> results = new ArrayList<>();
// If this instanceof expression has a pattern, add it to the list.
wrappedNode.getPattern().ifPresent(results::add);
return results;
}
}