Skip to content

Commit

Permalink
Consistently use canonical annotation names in string representations
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrannen committed Mar 10, 2024
1 parent 5345a13 commit 4c246b7
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ void validate(Annotation annotation) {
}
catch (Throwable ex) {
throw new IllegalStateException("Could not obtain annotation attribute value for " +
get(i).getName() + " declared on " + annotation.annotationType(), ex);
get(i).getName() + " declared on @" + getName(annotation.annotationType()), ex);
}
}
}
Expand Down Expand Up @@ -300,4 +300,9 @@ static String describe(@Nullable Class<?> annotationType, @Nullable String attri
return "attribute '" + attributeName + "'" + in;
}

private static String getName(Class<?> clazz) {
String canonicalName = clazz.getCanonicalName();
return (canonicalName != null ? canonicalName : clazz.getName());
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 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.
Expand Down Expand Up @@ -211,7 +211,7 @@ private Object getAttributeValue(Method method) {
Class<?> type = ClassUtils.resolvePrimitiveIfNecessary(method.getReturnType());
return this.annotation.getValue(attributeName, type).orElseThrow(
() -> new NoSuchElementException("No value found for attribute named '" + attributeName +
"' in merged annotation " + this.annotation.getType().getName()));
"' in merged annotation " + getName(this.annotation.getType())));
});

// Clone non-empty arrays so that users cannot alter the contents of values in our cache.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -546,12 +546,16 @@ public int hashCode() {
public String toString() {
StringBuilder builder = new StringBuilder();
for (Annotation ann : getAnnotations()) {
builder.append('@').append(ann.annotationType().getName()).append(' ');
builder.append('@').append(getName(ann.annotationType())).append(' ');
}
builder.append(getResolvableType());
return builder.toString();
}

private static String getName(Class<?> clazz) {
String canonicalName = clazz.getCanonicalName();
return (canonicalName != null ? canonicalName : clazz.getName());
}

/**
* Create a new type descriptor for an object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1960,7 +1960,7 @@ private void testMissingTextAttribute(Map<String, Object> attributes) {
assertThatExceptionOfType(NoSuchElementException.class).isThrownBy(() ->
MergedAnnotation.of(AnnotationWithoutDefaults.class, attributes).synthesize().text())
.withMessage("No value found for attribute named 'text' in merged annotation " +
AnnotationWithoutDefaults.class.getName());
AnnotationWithoutDefaults.class.getCanonicalName());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ void indexIntoGenericPropertyContainingMap() {
SpelExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("property");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.util.HashMap<?, ?>", FieldAnnotation.class.getName());
.isEqualTo("@%s java.util.HashMap<?, ?>", FieldAnnotation.class.getCanonicalName());
assertThat(expression.getValue(this)).isEqualTo(property);
assertThat(expression.getValue(this, Map.class)).isEqualTo(property);
expression = parser.parseExpression("property['foo']");
Expand Down Expand Up @@ -106,7 +106,7 @@ void setGenericPropertyContainingMap() {
SpelExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("property");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.util.HashMap<?, ?>", FieldAnnotation.class.getName());
.isEqualTo("@%s java.util.HashMap<?, ?>", FieldAnnotation.class.getCanonicalName());
assertThat(expression.getValue(this)).isEqualTo(property);
expression = parser.parseExpression("property['foo']");
assertThat(expression.getValue(this)).isEqualTo("bar");
Expand Down Expand Up @@ -151,7 +151,7 @@ void indexIntoGenericPropertyContainingList() {
SpelExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("property");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getName());
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getCanonicalName());
assertThat(expression.getValue(this)).isEqualTo(property);
expression = parser.parseExpression("property[0]");
assertThat(expression.getValue(this)).isEqualTo("bar");
Expand All @@ -165,7 +165,7 @@ void setGenericPropertyContainingList() {
SpelExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("property");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getName());
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getCanonicalName());
assertThat(expression.getValue(this)).isEqualTo(property);
expression = parser.parseExpression("property[0]");
assertThat(expression.getValue(this)).isEqualTo(3);
Expand All @@ -180,7 +180,7 @@ void setGenericPropertyContainingListAutogrow() {
SpelExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true));
Expression expression = parser.parseExpression("property");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getName());
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getCanonicalName());
assertThat(expression.getValue(this)).isEqualTo(property);

Expression indexExpression = parser.parseExpression("property[0]");
Expand Down Expand Up @@ -257,7 +257,7 @@ void indexIntoGenericPropertyContainingNullList() {
SpelExpressionParser parser = new SpelExpressionParser(configuration);
Expression expression = parser.parseExpression("property");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.lang.Object", FieldAnnotation.class.getName());
.isEqualTo("@%s java.lang.Object", FieldAnnotation.class.getCanonicalName());
assertThat(expression.getValue(this)).isNull();

Expression indexExpression = parser.parseExpression("property[0]");
Expand All @@ -274,7 +274,7 @@ void indexIntoGenericPropertyContainingGrowingList() {
SpelExpressionParser parser = new SpelExpressionParser(configuration);
Expression expression = parser.parseExpression("property");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getName());
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getCanonicalName());
assertThat(expression.getValue(this)).isEqualTo(property);

Expression indexExpression = parser.parseExpression("property[0]");
Expand Down Expand Up @@ -306,7 +306,7 @@ void indexIntoGenericPropertyContainingArray() {
SpelExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("property");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.lang.String[]", FieldAnnotation.class.getName());
.isEqualTo("@%s java.lang.String[]", FieldAnnotation.class.getCanonicalName());
assertThat(expression.getValue(this)).isEqualTo(property);
expression = parser.parseExpression("property[0]");
assertThat(expression.getValue(this)).isEqualTo("bar");
Expand All @@ -330,7 +330,7 @@ void resolveCollectionElementType() {
SpelExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("listNotGeneric");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getName());
.isEqualTo("@%s java.util.ArrayList<?>", FieldAnnotation.class.getCanonicalName());
assertThat(expression.getValue(this, String.class)).isEqualTo("5,6");
}

Expand All @@ -339,7 +339,7 @@ void resolveCollectionElementTypeNull() {
SpelExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("listNotGeneric");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.util.List<?>", FieldAnnotation.class.getName());
.isEqualTo("@%s java.util.List<?>", FieldAnnotation.class.getCanonicalName());
}

@SuppressWarnings("unchecked")
Expand All @@ -351,7 +351,7 @@ void resolveMapKeyValueTypes() {
SpelExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("mapNotGeneric");
assertThat(expression.getValueTypeDescriptor(this)).asString()
.isEqualTo("@%s java.util.HashMap<?, ?>", FieldAnnotation.class.getName());
.isEqualTo("@%s java.util.HashMap<?, ?>", FieldAnnotation.class.getCanonicalName());
}

@Test
Expand Down

0 comments on commit 4c246b7

Please sign in to comment.