| import java.util.LinkedList; |
| import java.util.List; |
| import qual.Encrypted; |
| |
| abstract class EncryptionDemo { |
| |
| public @Encrypted String encrypt(String text) { |
| byte[] b = text.getBytes(); |
| for (int i = 0; i < b.length; b[i++]++) { |
| // side effect is in increment expression of for loop |
| } |
| // :: warning: (cast.unsafe) |
| return (@Encrypted String) new String(b); |
| } |
| |
| // Only send encrypted data! |
| abstract void sendOverTheInternet(@Encrypted String msg); |
| |
| void sendText() { |
| @Encrypted String s = encrypt("foo"); // valid |
| sendOverTheInternet(s); // valid |
| |
| String t = encrypt("bar"); // valid (subtype) |
| sendOverTheInternet(t); // valid (flow) |
| |
| List<@Encrypted String> lst = new LinkedList<@Encrypted String>(); |
| lst.add(s); |
| lst.add(t); |
| |
| for (String str : lst) // valid |
| sendOverTheInternet(str); |
| } |
| |
| void sendPassword() { |
| String password = "unencrypted"; |
| sendOverTheInternet(password); // invalid |
| } |
| } |