Равиль Губайдуллин - Annotation processing

22
Annotation processing

Transcript of Равиль Губайдуллин - Annotation processing

Page 1: Равиль Губайдуллин - Annotation processing

Annotation processing

Page 2: Равиль Губайдуллин - Annotation processing

Равиль Губайдуллин

Digital Zone

[email protected]

e-LegionGDG Kazan

Page 3: Равиль Губайдуллин - Annotation processing

https://vk.com/gdgkazan

Page 4: Равиль Губайдуллин - Annotation processing

Метапрограммирование

Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы (в частности, на стадии компиляции их исходного кода), либо программ, которые меняют себя во время выполнения. © Wikipedia метапрограммирования

Page 5: Равиль Губайдуллин - Annotation processing
Page 6: Равиль Губайдуллин - Annotation processing

findViewBy

setOnClickListener

Реализация интерфейса Parceable

Работа с sharedPreference

И т. д.

Page 7: Равиль Губайдуллин - Annotation processing

Библиотеки

Butterknife

Dagger 2

Parceler

И т.д.

Page 8: Равиль Губайдуллин - Annotation processing

Аннотации

Page 9: Равиль Губайдуллин - Annotation processing

Аннотации

Java-аннотация — в языке Java специальная форма синтаксических метаданных, которая может

быть добавлена в исходный код.

Аннотации используются для анализа кода, компиляции или выполнения. Аннотируемы пакеты,

классы, методы, переменные и параметры.

Выглядит как @ИмяАннотации, предваряющее определение переменной, параметра, метода,

класса, пакета. © Wikipedia

Page 10: Равиль Губайдуллин - Annotation processing

Применение

Дает необходимую информацию для компилятора

Для обработки во время компиляции (compile - time)

Для обработки во время выполнения (runtime)

Page 11: Равиль Губайдуллин - Annotation processing

Создание и использование

● Создание

public @interface MyAnnotation {}

Использование

@MyAnnotationpublic class MyClass {}

Page 12: Равиль Губайдуллин - Annotation processing

Аргументы

public @interface MyAnnotation {String arg1();int arg2() default 1;

}

@MyAnnotation(arg1=”value”)public class MyClass {}

Page 13: Равиль Губайдуллин - Annotation processing

@Retention

RetentionPolicy.SOURCE

RetentionPolicy.CLASS

RetentionPolicy.RUNTIME

Page 14: Равиль Губайдуллин - Annotation processing

@Target

ElementType.ANNOTATION_TYPE

ElementType.CONSTRUCTOR

ElementType.FIELD

ElementType.LOCAL_VARIABLE

ElementType.METHOD

Page 15: Равиль Губайдуллин - Annotation processing

Annotation Processor

Page 16: Равиль Губайдуллин - Annotation processing

Annotation processor

Page 17: Равиль Губайдуллин - Annotation processing

Code generation

Page 18: Равиль Губайдуллин - Annotation processing

Java poet

https://github.com/square/javapoet

Page 19: Равиль Губайдуллин - Annotation processing

Example

Page 21: Равиль Губайдуллин - Annotation processing

Структура проекта

api (java-module)

app

processor (java-module)

settings-core (android-module)

Page 22: Равиль Губайдуллин - Annotation processing

Спасибо за внимание !