panacekcz / checker-framework

Pluggable type-checking for Java
http://checkerframework.org/
Other
0 stars 0 forks source link

Infer MinLen(1) after checking !isEmpty() #27

Closed panacekcz closed 6 years ago

panacekcz commented 6 years ago

After checking that !s.isEmpty(), s can be @MinLen(1).

Code:

import org.checkerframework.common.value.qual.MinLen;

public class IsEmptyMinLen {
    public void m1(String s) {
        if(!s.isEmpty()) {
            char c = s.charAt(0);           
        }
    }

    public void m2(String s) {
        if(!s.isEmpty()) {
            @MinLen(1) String t = s;            
        }
    }
}

Output:

IsEmptyMinLen.java:6: error: [argument.type.incompatible] incompatible types in argument.
            char c = s.charAt(0);           
                              ^
  found   : @UpperBoundUnknown int
  required: @LTLengthOf(value="s", offset={}) int
IsEmptyMinLen.java:12: error: [assignment.type.incompatible] incompatible types in assignment.
            @MinLen(1) String t = s;            
                                  ^
  found   : @UnknownVal String
  required: @ArrayLenRange(from=1, to=2147483647) String
2 errors
panacekcz commented 6 years ago

Closed in favor of kelloggm#201