| // Test case for issue #1214: |
| // https://github.com/typetools/checker-framework/issues/1214 |
| |
| import org.checkerframework.common.value.qual.*; |
| |
| public class Issue1214 { |
| |
| static void noException() { |
| int n = 0; |
| try { |
| } catch (Exception e) { |
| n = 1; |
| } |
| @IntVal(0) int ok = n; |
| } |
| |
| static void arrayAccess(String[] array) { |
| int n = 0; |
| try { |
| String s = array[0]; |
| } catch (NullPointerException e) { |
| n = 1; |
| } catch (ArrayIndexOutOfBoundsException e) { |
| n = 2; |
| } catch (Exception e) { |
| n = 3; |
| } |
| @IntVal({0, 1, 2}) int ok = n; |
| // :: error: (assignment) |
| @IntVal({0, 1}) int ng1 = n; |
| // :: error: (assignment) |
| @IntVal({0, 2}) int ng2 = n; |
| // :: error: (assignment) |
| @IntVal(0) int ng3 = n; |
| } |
| |
| static void forArray(String[] array) { |
| int n = 0; |
| try { |
| for (String s : array) {} |
| } catch (NullPointerException e) { |
| n = 1; |
| } catch (ArrayIndexOutOfBoundsException e) { |
| n = 2; |
| } catch (Exception e) { |
| n = 3; |
| } |
| @IntVal({0, 1}) int ok = n; |
| // :: error: (assignment) |
| @IntVal(0) int ng = n; |
| } |
| |
| static void forIterable(Iterable<String> itr) { |
| int n = 0; |
| try { |
| for (String s : itr) {} |
| } catch (NullPointerException e) { |
| n = 1; |
| } catch (Exception e) { |
| n = 2; |
| } |
| @IntVal({0, 1, 2}) int ok = n; |
| // :: error: (assignment) |
| @IntVal({0, 1}) int ng1 = n; |
| // :: error: (assignment) |
| @IntVal({0, 2}) int ng2 = n; |
| // :: error: (assignment) |
| @IntVal(0) int ng3 = n; |
| } |
| } |