@@ -23,10 +23,14 @@ newtype JavaRelatedLocationType =
23
23
MethodDoc ( ) or
24
24
ClassDoc ( )
25
25
26
+ newtype TFrameworkModeEndpoint =
27
+ TExplicitParameter ( Parameter p ) or
28
+ TQualifier ( Callable c )
29
+
26
30
/**
27
31
* A framework mode endpoint.
28
32
*/
29
- abstract class FrameworkModeEndpoint extends Top {
33
+ abstract class FrameworkModeEndpoint extends TFrameworkModeEndpoint {
30
34
/**
31
35
* Returns the parameter index of the endpoint.
32
36
*/
@@ -41,22 +45,48 @@ abstract class FrameworkModeEndpoint extends Top {
41
45
* Returns the callable that contains the endpoint.
42
46
*/
43
47
abstract Callable getEnclosingCallable ( ) ;
48
+
49
+ abstract Top asTop ( ) ;
50
+
51
+ string toString ( ) {
52
+ result = this .asTop ( ) .toString ( )
53
+ }
54
+
55
+ Location getLocation ( ) {
56
+ result = this .asTop ( ) .getLocation ( )
57
+ }
44
58
}
45
59
46
- class ParameterEndpoint extends FrameworkModeEndpoint instanceof Parameter {
47
- override int getIndex ( ) { result = this .( Parameter ) .getPosition ( ) }
60
+ class ExplicitParameterEndpoint extends FrameworkModeEndpoint , TExplicitParameter {
61
+ Parameter param ;
62
+
63
+ ExplicitParameterEndpoint ( ) { this = TExplicitParameter ( param ) }
48
64
49
- override string getParamName ( ) { result = this . ( Parameter ) . getName ( ) }
65
+ override int getIndex ( ) { result = param . getPosition ( ) }
50
66
51
- override Callable getEnclosingCallable ( ) { result = this .( Parameter ) .getCallable ( ) }
67
+ override string getParamName ( ) { result = param .getName ( ) }
68
+
69
+ override Callable getEnclosingCallable ( ) { result = param .getCallable ( ) }
70
+
71
+ override Top asTop ( ) {
72
+ result = param
73
+ }
52
74
}
53
75
54
- class QualifierEndpoint extends FrameworkModeEndpoint instanceof Callable {
76
+ class QualifierEndpoint extends FrameworkModeEndpoint , TQualifier {
77
+ Callable callable ;
78
+
79
+ QualifierEndpoint ( ) { this = TQualifier ( callable ) }
80
+
55
81
override int getIndex ( ) { result = - 1 }
56
82
57
83
override string getParamName ( ) { result = "this" }
58
84
59
- override Callable getEnclosingCallable ( ) { result = this }
85
+ override Callable getEnclosingCallable ( ) { result = callable }
86
+
87
+ override Top asTop ( ) {
88
+ result = callable
89
+ }
60
90
}
61
91
62
92
/**
@@ -82,7 +112,7 @@ module FrameworkCandidatesImpl implements SharedCharacteristics::CandidateSig {
82
112
// Sanitizers are currently not modeled in MaD. TODO: check if this has large negative impact.
83
113
predicate isSanitizer ( Endpoint e , EndpointType t ) { none ( ) }
84
114
85
- RelatedLocation asLocation ( Endpoint e ) { result = e }
115
+ RelatedLocation asLocation ( Endpoint e ) { result = e . asTop ( ) }
86
116
87
117
predicate isKnownKind = AutomodelJavaUtil:: isKnownKind / 2 ;
88
118
@@ -232,7 +262,7 @@ private class NotAModelApiParameter extends CharacteristicsImpl::UninterestingTo
232
262
NotAModelApiParameter ( ) { this = "not a model API parameter" }
233
263
234
264
override predicate appliesToEndpoint ( Endpoint e ) {
235
- not exists ( ModelExclusions:: ModelApi api | api .getAParameter ( ) = e )
265
+ not exists ( ModelExclusions:: ModelApi api | api .getAParameter ( ) = e . asTop ( ) )
236
266
}
237
267
}
238
268
0 commit comments