/
TypeDeclaration.java
47 lines (36 loc) · 1.52 KB
/
TypeDeclaration.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
package me.tomassetti.symbolsolver.model.declarations;
import com.github.javaparser.ast.Node;
import me.tomassetti.symbolsolver.model.Context;
import me.tomassetti.symbolsolver.model.FieldDeclaration;
import me.tomassetti.symbolsolver.model.SymbolReference;
import me.tomassetti.symbolsolver.model.TypeSolver;
import me.tomassetti.symbolsolver.model.usages.MethodUsage;
import me.tomassetti.symbolsolver.model.usages.TypeUsage;
import java.util.List;
import java.util.Optional;
/**
* @author Federico Tomassetti
*/
public interface TypeDeclaration extends Declaration, TypeParametrized {
String getQualifiedName();
Context getContext();
default SymbolReference<MethodDeclaration> solveMethod(String name, List<TypeUsage> parameterTypes, TypeSolver typeSolver) {
return getContext().solveMethod(name, parameterTypes, typeSolver);
}
/**
* Get how the type is used in the given context.
* @param node
* @return
*/
TypeUsage getUsage(Node node);
boolean isAssignableBy(TypeUsage typeUsage);
boolean isTypeVariable();
FieldDeclaration getField(String name);
boolean hasField(String name);
default Optional<MethodUsage> solveMethodAsUsage(String name, List<TypeUsage> parameterTypes, TypeSolver typeSolver, Context invokationContext) {
return getContext().solveMethodAsUsage(name, parameterTypes, typeSolver);
}
default boolean canBeAssignedBy(TypeDeclaration other) {
throw new UnsupportedOperationException(this.getClass().getCanonicalName());
}
}