From ada4498968f95ad83f7c50717f44b5a70b06568b Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 26 Jan 2017 15:00:05 +0100 Subject: [PATCH] DATACMNS-1273 - Consider merged annotations when populating for annotation cache. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now consider property annotations as merged annotations when initially scanning for annotations in a property declaration. Composed annotations such as declared outside our code are captured correctly because they use an own type that is not queried by users of PersistentProperty. Own, revised annotations, using @AliasFor providing an alias for annotation values require merged annotation processing. Previously, annotations were cached as-is without resolving @AliasFor. This caused a later lookup via findAnnotation(…) to return the cached annotation without aliasing. Because the annotation was cached, no further lookup via AnnotatedElementUtils.findMergedAnnotation(…) was attempted. @Retention(RetentionPolicy.RUNTIME) @Target(value = { FIELD, METHOD }) public @interface RevisedAnnnotationWithAliasFor { @AliasFor("value") String name() default ""; @AliasFor("name") String value() default ""; } public class Person { @RevisedAnnnotationWithAliasFor(value = "spring") String firstname; } PersistentProperty firstname = … property.findAnnotation(…) returned previously @RevisedAnnnotationWithAliasFor(value = "spring", name = "") now we return @RevisedAnnnotationWithAliasFor(value = "spring", name = "spring") Original ticket: DATACMNS-981. Java 6 compatible backport of 2da5acc55354a246e3c08fc93b8be0ccc80854ec. --- .../AnnotationBasedPersistentProperty.java | 7 ++-- ...ationBasedPersistentPropertyUnitTests.java | 37 +++++++++++++++---- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java b/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java index e41782663..f8168a7cd 100644 --- a/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 the original author or authors. + * Copyright 2011-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,6 +43,7 @@ import org.springframework.util.Assert; * * @author Oliver Gierke * @author Christoph Strobl + * @author Mark Paluch */ public abstract class AnnotationBasedPersistentProperty

> extends AbstractPersistentProperty

{ @@ -99,7 +100,7 @@ public abstract class AnnotationBasedPersistentProperty

> { @@ -197,6 +199,16 @@ public class AnnotationBasedPersistentPropertyUnitTests

, Annotation> getAnnotationCache(SamplePersistentProperty property) { return (Map, Annotation>) ReflectionTestUtils.getField(property, "annotationCache"); @@ -220,7 +232,7 @@ public class AnnotationBasedPersistentPropertyUnitTests