@@ -23,10 +23,14 @@ newtype JavaRelatedLocationType =
2323 MethodDoc ( ) or
2424 ClassDoc ( )
2525
26+ newtype TFrameworkModeEndpoint =
27+ TExplicitParameter ( Parameter p ) or
28+ TQualifier ( Callable c )
29+
2630/**
2731 * A framework mode endpoint.
2832 */
29- abstract class FrameworkModeEndpoint extends Top {
33+ abstract class FrameworkModeEndpoint extends TFrameworkModeEndpoint {
3034 /**
3135 * Returns the parameter index of the endpoint.
3236 */
@@ -41,22 +45,48 @@ abstract class FrameworkModeEndpoint extends Top {
4145 * Returns the callable that contains the endpoint.
4246 */
4347 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+ }
4458}
4559
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 ) }
4864
49- override string getParamName ( ) { result = this . ( Parameter ) . getName ( ) }
65+ override int getIndex ( ) { result = param . getPosition ( ) }
5066
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+ }
5274}
5375
54- class QualifierEndpoint extends FrameworkModeEndpoint instanceof Callable {
76+ class QualifierEndpoint extends FrameworkModeEndpoint , TQualifier {
77+ Callable callable ;
78+
79+ QualifierEndpoint ( ) { this = TQualifier ( callable ) }
80+
5581 override int getIndex ( ) { result = - 1 }
5682
5783 override string getParamName ( ) { result = "this" }
5884
59- override Callable getEnclosingCallable ( ) { result = this }
85+ override Callable getEnclosingCallable ( ) { result = callable }
86+
87+ override Top asTop ( ) {
88+ result = callable
89+ }
6090}
6191
6292/**
@@ -82,7 +112,7 @@ module FrameworkCandidatesImpl implements SharedCharacteristics::CandidateSig {
82112 // Sanitizers are currently not modeled in MaD. TODO: check if this has large negative impact.
83113 predicate isSanitizer ( Endpoint e , EndpointType t ) { none ( ) }
84114
85- RelatedLocation asLocation ( Endpoint e ) { result = e }
115+ RelatedLocation asLocation ( Endpoint e ) { result = e . asTop ( ) }
86116
87117 predicate isKnownKind = AutomodelJavaUtil:: isKnownKind / 2 ;
88118
@@ -232,7 +262,7 @@ private class NotAModelApiParameter extends CharacteristicsImpl::UninterestingTo
232262 NotAModelApiParameter ( ) { this = "not a model API parameter" }
233263
234264 override predicate appliesToEndpoint ( Endpoint e ) {
235- not exists ( ModelExclusions:: ModelApi api | api .getAParameter ( ) = e )
265+ not exists ( ModelExclusions:: ModelApi api | api .getAParameter ( ) = e . asTop ( ) )
236266 }
237267}
238268
0 commit comments