@@ -14,10 +14,10 @@ public class HaxeTypeCompatible {
14
14
15
15
//TODO mlo: add some kind of recursion guard (implicit cast can loop around)?
16
16
17
- private static final AssignEvaluationSettings DEFAULT_SETTINGS = new AssignEvaluationSettings (false , true ,true , false , false );
18
- private static final AssignEvaluationSettings DEFAULT_STRICT_SETTINGS = new AssignEvaluationSettings (true , false , false , false , false );
19
- private static final AssignEvaluationSettings CONTRAVARIANCE_SETTINGS = new AssignEvaluationSettings (false , true , true , true , false );
20
- private static final AssignEvaluationSettings CALL_EXPRESSION_SETTINGS = new AssignEvaluationSettings (false , true , true , false , true );
17
+ private static final AssignEvaluationSettings DEFAULT_SETTINGS = new AssignEvaluationSettings (false , true ,true , false , false , false );
18
+ private static final AssignEvaluationSettings DEFAULT_STRICT_SETTINGS = new AssignEvaluationSettings (true , false , false , false , false , false );
19
+ private static final AssignEvaluationSettings CONTRAVARIANCE_SETTINGS = new AssignEvaluationSettings (false , true , true , true , false , false );
20
+ private static final AssignEvaluationSettings CALL_EXPRESSION_SETTINGS = new AssignEvaluationSettings (false , true , true , false , true , false );
21
21
22
22
/**
23
23
* Regular can assign will allow Dynamic to be assigned to anything and also check implicit casts (@:to/@From) and handle special annotation rules
@@ -34,7 +34,7 @@ static public boolean canAssignToFromReference(HaxeAssignEvaluation context, @Nu
34
34
35
35
static public boolean canAssignToFromReference (@ Nullable SpecificTypeReference to , @ Nullable SpecificTypeReference from , boolean checkDirectCasts , boolean checkImplicitCasts ) {
36
36
if (to == null || from == null ) return false ;
37
- AssignEvaluationSettings settings = new AssignEvaluationSettings (false , checkDirectCasts , checkImplicitCasts , false , false );
37
+ AssignEvaluationSettings settings = new AssignEvaluationSettings (false , checkDirectCasts , checkImplicitCasts , false , false , false );
38
38
return canAssignToFromEvaluation (to .createHolder (), from .createHolder (), settings , null ).result ;
39
39
}
40
40
@@ -54,9 +54,9 @@ static public boolean canAssignToFromContravariance(@Nullable ResultHolder to, @
54
54
return canAssignToFromEvaluation (to , from , CONTRAVARIANCE_SETTINGS , null ).result ;
55
55
}
56
56
57
- static public boolean canAssignToFromContravariance (@ Nullable ResultHolder to , @ Nullable ResultHolder from , boolean checkDirectCasts , boolean checkImplicitCasts ) {
57
+ static public boolean canAssignToFromContravariance (@ Nullable ResultHolder to , @ Nullable ResultHolder from , boolean checkDirectCasts , boolean checkImplicitCasts , boolean implicitTypeMustMatchUnderlying ) {
58
58
if (to == null || from == null ) return false ;
59
- AssignEvaluationSettings settings = new AssignEvaluationSettings (false , checkDirectCasts , checkImplicitCasts , true , false );
59
+ AssignEvaluationSettings settings = new AssignEvaluationSettings (false , checkDirectCasts , checkImplicitCasts , true , false , implicitTypeMustMatchUnderlying );
60
60
return canAssignToFromEvaluation (to , from , settings , null ).result ;
61
61
}
62
62
@@ -70,7 +70,7 @@ static public HaxeAssignEvaluation evaluateAssignToFromForNewAndCallExpression(@
70
70
71
71
static public boolean canAssignToFromReference (@ Nullable ResultHolder to , @ Nullable ResultHolder from , boolean checkDirectCasts , boolean checkImplicitCasts , boolean contravariance ) {
72
72
if (to == null || from == null ) return false ;
73
- AssignEvaluationSettings settings = new AssignEvaluationSettings (false , checkDirectCasts , checkImplicitCasts , contravariance , false );
73
+ AssignEvaluationSettings settings = new AssignEvaluationSettings (false , checkDirectCasts , checkImplicitCasts , contravariance , false , false );
74
74
return canAssignToFromEvaluation (to , from , false , checkDirectCasts , checkImplicitCasts , contravariance ).result ;
75
75
}
76
76
@@ -104,12 +104,12 @@ static public HaxeAssignEvaluation evaluateAssignToFrom(@NotNull ResultHolder to
104
104
*/
105
105
static public boolean canAssignToFromTypeParameter (@ Nullable ResultHolder to , @ Nullable ResultHolder from ) {
106
106
if (to == null || from == null ) return false ;
107
- return canAssignToFromTypeParameter (null , to , from , false );
107
+ return canAssignToFromTypeParameter (null , to , from , false , false );
108
108
}
109
109
110
- static public boolean canAssignToFromTypeParameter (HaxeAssignEvaluation context , @ Nullable ResultHolder to , @ Nullable ResultHolder from , boolean ignoreFromConstraints ) {
110
+ static public boolean canAssignToFromTypeParameter (HaxeAssignEvaluation context , @ Nullable ResultHolder to , @ Nullable ResultHolder from , boolean ignoreFromConstraints , boolean implicitTypeMustMatchUnderlying ) {
111
111
if (to == null || from == null ) return false ;
112
- return canAssignToFromStrictEvaluation (context , to , from , ignoreFromConstraints ).result ;
112
+ return canAssignToFromStrictEvaluation (context , to , from , ignoreFromConstraints , implicitTypeMustMatchUnderlying ).result ;
113
113
}
114
114
115
115
/**
@@ -121,9 +121,9 @@ private static HaxeAssignEvaluation canAssignToFromStrictEvaluation(HaxeAssignEv
121
121
return canAssignToFromEvaluation (to , from , DEFAULT_STRICT_SETTINGS , context );
122
122
}
123
123
124
- private static HaxeAssignEvaluation canAssignToFromStrictEvaluation (HaxeAssignEvaluation context , @ NotNull ResultHolder to , @ NotNull ResultHolder from , boolean ignoreFromConstraints ) {
124
+ private static HaxeAssignEvaluation canAssignToFromStrictEvaluation (HaxeAssignEvaluation context , @ NotNull ResultHolder to , @ NotNull ResultHolder from , boolean ignoreFromConstraints , boolean implicitTypeMustMatchUnderlying ) {
125
125
// Note: There's a hack in abstract canAssign that allow assign when abstracts underlying type is Dynamic and it got direct "from Dynamic" cast
126
- AssignEvaluationSettings settings = new AssignEvaluationSettings (true , false , false , false , ignoreFromConstraints );
126
+ AssignEvaluationSettings settings = new AssignEvaluationSettings (true , true , false , false , ignoreFromConstraints , implicitTypeMustMatchUnderlying );
127
127
return canAssignToFromEvaluation (to , from , settings , context );
128
128
}
129
129
@@ -163,7 +163,7 @@ static public HaxeAssignEvaluation canAssignToFromEvaluation(@NotNull ResultHold
163
163
boolean contravariance ,
164
164
@ Nullable HaxeAssignEvaluation parent
165
165
) {
166
- AssignEvaluationSettings settings = new AssignEvaluationSettings (strictBasicCheck , checkDirectCasts , checkImplicitCasts , contravariance , false );
166
+ AssignEvaluationSettings settings = new AssignEvaluationSettings (strictBasicCheck , checkDirectCasts , checkImplicitCasts , contravariance , false , false );
167
167
return canAssignToFromEvaluation (to ,from , settings , parent );
168
168
}
169
169
static public HaxeAssignEvaluation canAssignToFromEvaluation (@ NotNull ResultHolder to , @ NotNull ResultHolder from ,
@@ -189,7 +189,7 @@ static public HaxeAssignEvaluation canAssignToFromEvaluation(@NotNull ResultHold
189
189
if (!evaluation .completed ) evaluation .testEnumAssignRules ();
190
190
if (!evaluation .completed ) evaluation .testFunctionAssignRules ();
191
191
if (!evaluation .completed ) evaluation .testAnonymousAssignRules ();
192
- if (!evaluation .completed ) evaluation .testAbstractAssignRules (settings .checkDirectCasts (), settings .checkImplicitCasts ());
192
+ if (!evaluation .completed ) evaluation .testAbstractAssignRules (settings .checkDirectCasts (), settings .checkImplicitCasts (), settings . implicitTypeMustMatchUnderlying () );
193
193
if (!evaluation .completed ) evaluation .testTypeParameterConstraints (settings .checkDirectCasts (), settings .checkImplicitCasts ());
194
194
return true ;
195
195
});
0 commit comments