1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
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
}
}
|