You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When a boxed primitive is refined, that refinement is only stored with the un-boxed value, not with the original boxed primitive:
> cat Demo.java
class Demo {
void foo(Integer i) {
int x = i > 5 ? i : 5;
}
}
> ./checker/bin/javac -processor value Demo.java
Demo.java:3: error: [conditional.type.incompatible] incompatible types in conditional expression.
int x = i > 5 ? i : 5;
^
found : Integer
required: @IntRange(from=5, to=2147483647) int
1 error
> cat Demo.java
import org.checkerframework.common.value.qual.IntVal;
class Demo {
@IntVal(5) int foo(Integer i) {
if (i == 5) {
return i;
} else {
return 5;
}
}
}
wdietl@beryl ~/w/e/checker-framework-hacking (master)> ./checker/bin/javac -processor value Demo.java
Demo.java:6: error: [return.type.incompatible] incompatible types in return.
return i;
^
type of expression: Integer
method return type: @IntVal(5L) int
1 error
Both examples pass if the parameter i is changed to int.
When a boxed primitive is refined, that refinement is only stored with the un-boxed value, not with the original boxed primitive:
Both examples pass if the parameter
i
is changed toint
.Thanks @thomaskirz for the report!
The text was updated successfully, but these errors were encountered: