Содержание
- 2. Это тулза для статик-анализа JDK уже разруливает кейсы типа int count = "hello"; IDE подсказывает больше,
- 3. Чем же хорош Checker Framework? Недостатки типизации Java компенсируются аннотациями; Он модульный, как конструктор, и расширяем
- 4. Checker совместим с Вашим любимым сборщиком: ►Maven ►Gradle ►Ant Вашей незаменимой IDE: IntelliJ IDEA◄ Eclipse◄ NetBeans◄
- 5. Встроенные анализаторы Nullness Checker for null pointer errors Initialization Checker to ensure all fields are set
- 6. Простейший пример Nullness Checker [ERROR] /D:/Coding/acs-server-stub/src/main/java/com/vtb/acs/AcsController.java:[189,28] [dereference.of.nullable] dereference of possibly-null reference o [ERROR] /D:/Coding/acs-server-stub/src/main/java/com/vtb/acs/AcsController.java:[193,26] [argument.type.incompatible] incompatible
- 7. Еще пример для Nullness Checker public class BaseClass { public @NonNull Object nnobj; public BaseClass() {
- 8. Я использую внешние библиотеки, там нет этих ваших аннотаций Фреймворк поддерживает механизм внешнего аннотирования библиотек; Уже
- 9. Subtyping Checker public class Person { private String id; private String jobId; public Person(String id, String
- 10. Subtyping Checker public class Person { private @PersonGuid String id; private @JobGuid String jobId; public Person(String
- 11. Subtyping Checker void main() { Person p = new Person("a", "b"); getStatistics(p.getId(), p.getJobId()); getStatistics(p.getId(), p.getJobId(), "c");
- 12. Альтернативное решение без чекера public class PersonGuid extends ValueHolder { public PersonGuid(String value) { super(value); }
- 13. Альтернативное решение без чекера void main() { Person p = new Person("a", "b"); getStatistics(p.getId(), p.getJobId()); getStatistics(p.getId(),
- 14. Fake Enum Checker @SuppressWarnings("assignment.type.incompatible") public class AuthChoice { @Fenum("AuthChoice1") public static final String AUTH_CHOICE_CORRECT = "CORRECT";
- 15. Interning Checker – простейший пример @Interned String foo = "foo"; @Interned String bar = "bar"; if
- 16. Interning Checker public class ActionType { private static final Map actionsMap = new ConcurrentHashMap (); private
- 17. Initialization Checker public abstract class BaseController { private List defaultPuppets; public BaseController() { defaultPuppets = new
- 18. Lock Checker private final ReentrantLock requestsMapLock = new ReentrantLock(); @GuardedBy("requestsMapLock") protected Map requests = new HashMap
- 19. Tainting Checker public class BusinessObject { private String sensitiveData; public Request(String sensitiveData) { this.sensitiveData = sensitiveData;
- 20. Tainting Checker public class BusinessObject { private String sensitiveData; public Request(@Untainted String sensitiveData) { this.sensitiveData =
- 21. Regex Checker Pattern.compile(".*"); // Ловит IDE, если что не так Pattern.compile(or(parenthesize("a*"), parenthesize("b*"))); // IDE уже не
- 22. Internationalization & Format String Checkers void printFloatAndInt(@Format({FLOAT, INT}) String fs) { System.out.printf(fs, 3.1415, 42); } printFloatAndInt("Float
- 23. Map Key Checker private void processKey(String extKey) { Map map = new HashMap (); Collection coll
- 24. Units Checker @m int meters = 5 * UnitsTools.m; @s int secs = 2 * UnitsTools.s;
- 25. GUI Effect Checker public void calledFromBackgroundThread() { jLabel.setText("Foo"); // Ошибка } @SafeEffect @UIEffect private void calledFromUIThread()
- 26. Aliasing Checker Метод testPlanet никак не должен менять earth! [ERROR] Reference annotated as @Unique is leaked.
- 27. Чекеры от сторонних разработчиков Они есть, да.
- 28. Я не использую Java 8 Компилятор фреймворка обработает и List
- 29. У меня куча легаси без этих ваших аннотаций! Начинаем помаленьку, отдельные чекеры, отдельные ветви проекта; Думайте
- 31. Скачать презентацию