diff --git a/core-java-modules/core-java-annotations/pom.xml b/core-java-modules/core-java-annotations/pom.xml index a718c43eef..a87baa6204 100644 --- a/core-java-modules/core-java-annotations/pom.xml +++ b/core-java-modules/core-java-annotations/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-annotations 0.1.0-SNAPSHOT @@ -14,6 +14,19 @@ 0.0.1-SNAPSHOT + + + org.assertj + assertj-core + ${assertj-core.version} + test + + + + + 3.10.0 + + core-java-annotations diff --git a/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/ClassWithAnnotations.java b/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/ClassWithAnnotations.java new file mode 100644 index 0000000000..6e6cd4ad6c --- /dev/null +++ b/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/ClassWithAnnotations.java @@ -0,0 +1,9 @@ +package com.baeldung.readannotations; + +public class ClassWithAnnotations { + + @FirstAnnotation + @SecondAnnotation + @ThirdAnnotation + private String classMember; +} diff --git a/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/FirstAnnotation.java b/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/FirstAnnotation.java new file mode 100644 index 0000000000..9193b46873 --- /dev/null +++ b/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/FirstAnnotation.java @@ -0,0 +1,8 @@ +package com.baeldung.readannotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface FirstAnnotation { +} diff --git a/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/SecondAnnotation.java b/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/SecondAnnotation.java new file mode 100644 index 0000000000..83c7ab1d6c --- /dev/null +++ b/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/SecondAnnotation.java @@ -0,0 +1,8 @@ +package com.baeldung.readannotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface SecondAnnotation { +} diff --git a/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/ThirdAnnotation.java b/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/ThirdAnnotation.java new file mode 100644 index 0000000000..24ccdb31b4 --- /dev/null +++ b/core-java-modules/core-java-annotations/src/main/java/com/baeldung/readannotations/ThirdAnnotation.java @@ -0,0 +1,8 @@ +package com.baeldung.readannotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.SOURCE) +public @interface ThirdAnnotation { +} diff --git a/core-java-modules/core-java-annotations/src/test/java/com/baeldung/readannotations/ClassWithAnnotationsUnitTest.java b/core-java-modules/core-java-annotations/src/test/java/com/baeldung/readannotations/ClassWithAnnotationsUnitTest.java new file mode 100644 index 0000000000..710e0a5f57 --- /dev/null +++ b/core-java-modules/core-java-annotations/src/test/java/com/baeldung/readannotations/ClassWithAnnotationsUnitTest.java @@ -0,0 +1,34 @@ +package com.baeldung.readannotations; + +import org.junit.Test; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ClassWithAnnotationsUnitTest { + + @Test + public void whenCallingGetDeclaredAnnotations_thenOnlyRuntimeAnnotationsAreAvailable() throws NoSuchFieldException { + Field classMemberField = ClassWithAnnotations.class.getDeclaredField("classMember"); + Annotation[] annotations = classMemberField.getDeclaredAnnotations(); + assertThat(annotations).hasSize(2); + } + + @Test + public void whenCallingIsAnnotationPresent_thenOnlyRuntimeAnnotationsAreAvailable() throws NoSuchFieldException { + Field classMemberField = ClassWithAnnotations.class.getDeclaredField("classMember"); + assertThat(classMemberField.isAnnotationPresent(FirstAnnotation.class)).isTrue(); + assertThat(classMemberField.isAnnotationPresent(SecondAnnotation.class)).isTrue(); + assertThat(classMemberField.isAnnotationPresent(ThirdAnnotation.class)).isFalse(); + } + + @Test + public void whenCallingGetDeclaredAnnotationsOrGetAnnotations_thenSameAnnotationsAreReturned() throws NoSuchFieldException { + Field classMemberField = ClassWithAnnotations.class.getDeclaredField("classMember"); + Annotation[] declaredAnnotations = classMemberField.getDeclaredAnnotations(); + Annotation[] annotations = classMemberField.getAnnotations(); + assertThat(declaredAnnotations).containsExactly(annotations); + } +}