Skip to content

Commit a30b969

Browse files
committed
#59 - Add safe cast methods
1 parent 3cf203b commit a30b969

File tree

2 files changed

+104
-130
lines changed

2 files changed

+104
-130
lines changed

src/main/java/org/hibernate/models/spi/AnnotationUsage.java

Lines changed: 1 addition & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import java.lang.annotation.Annotation;
1010
import java.util.List;
11-
import java.util.function.Supplier;
1211

1312
/**
1413
* Describes the usage of an {@linkplain AnnotationDescriptor annotation class} on one of its
@@ -77,30 +76,6 @@ default <V> V getAttributeValue(String name) {
7776
return (V) value;
7877
}
7978

80-
/**
81-
* The value of the named annotation attribute
82-
*/
83-
default <V> V getAttributeValue(String name, V defaultValue) {
84-
final Object attributeValue = getAttributeValue( name );
85-
if ( attributeValue == null ) {
86-
return defaultValue;
87-
}
88-
//noinspection unchecked
89-
return (V) attributeValue;
90-
}
91-
92-
/**
93-
* The value of the named annotation attribute
94-
*/
95-
default <V> V getAttributeValue(String name, Supplier<V> defaultValueSupplier) {
96-
final Object attributeValue = getAttributeValue( name );
97-
if ( attributeValue == null ) {
98-
return defaultValueSupplier.get();
99-
}
100-
//noinspection unchecked
101-
return (V) attributeValue;
102-
}
103-
10479
default <V> V getAttributeValue(AttributeDescriptor<V> attributeDescriptor) {
10580
return getAttributeValue( attributeDescriptor.getName() );
10681
}
@@ -109,155 +84,51 @@ default String getString(String name) {
10984
return getAttributeValue( name );
11085
}
11186

112-
default String getString(String name, String defaultValue) {
113-
return getAttributeValue( name, defaultValue );
114-
}
115-
116-
default String getString(String name, Supplier<String> defaultValueSupplier) {
117-
return getAttributeValue( name, defaultValueSupplier );
118-
}
119-
12087
default Boolean getBoolean(String name) {
12188
return getAttributeValue( name );
12289
}
12390

124-
default Boolean getBoolean(String name, boolean defaultValue) {
125-
return getAttributeValue( name, defaultValue );
126-
}
127-
128-
default Boolean getBoolean(String name, Supplier<Boolean> defaultValueSupplier) {
129-
return getAttributeValue( name, defaultValueSupplier );
130-
}
131-
13291
default Byte getByte(String name) {
13392
return getAttributeValue( name );
13493
}
13594

136-
default Byte getByte(String name, Byte defaultValue) {
137-
return getAttributeValue( name, defaultValue );
138-
}
139-
140-
default Byte getByte(String name, Supplier<Byte> defaultValueSupplier) {
141-
return getAttributeValue( name, defaultValueSupplier );
142-
}
143-
14495
default Short getShort(String name) {
14596
return getAttributeValue( name );
14697
}
14798

148-
default Short getShort(String name, Short defaultValue) {
149-
return getAttributeValue( name, defaultValue );
150-
}
151-
152-
default Short getShort(String name, Supplier<Short> defaultValueSupplier) {
153-
return getAttributeValue( name, defaultValueSupplier );
154-
}
155-
15699
default Integer getInteger(String name) {
157100
return getAttributeValue( name );
158101
}
159102

160-
default Integer getInteger(String name, Integer defaultValue) {
161-
return getAttributeValue( name, defaultValue );
162-
}
163-
164-
default Integer getInteger(String name, Supplier<Integer> defaultValueSupplier) {
165-
return getAttributeValue( name, defaultValueSupplier );
166-
}
167-
168103
default Long getLong(String name) {
169104
return getAttributeValue( name );
170105
}
171106

172-
default Long getLong(String name, Long defaultValue) {
173-
return getAttributeValue( name, defaultValue );
174-
}
175-
176-
default Long getLong(String name, Supplier<Long> defaultValueSupplier) {
177-
return getAttributeValue( name, defaultValueSupplier );
178-
}
179-
180107
default Float getFloat(String name) {
181108
return getAttributeValue( name );
182109
}
183110

184-
default Float getFloat(String name, Float defaultValue) {
185-
return getAttributeValue( name, defaultValue );
186-
}
187-
188-
default Float getFloat(String name, Supplier<Float> defaultValueSupplier) {
189-
return getAttributeValue( name, defaultValueSupplier );
190-
}
191-
192111
default Double getDouble(String name) {
193112
return getAttributeValue( name );
194113
}
195114

196-
default Double getDouble(String name, Double defaultValue) {
197-
return getAttributeValue( name, defaultValue );
198-
}
199-
200-
default Double getDouble(String name, Supplier<Double> defaultValueSupplier) {
201-
return getAttributeValue( name, defaultValueSupplier );
202-
}
203-
204115
default <E extends Enum<E>> E getEnum(String name) {
205116
return getAttributeValue( name );
206117
}
207118

208-
default <E extends Enum<E>> E getEnum(String name, Class<E> type) {
119+
default <E extends Enum<E>> E getEnum(String name, @SuppressWarnings("unused") Class<E> type) {
209120
return getAttributeValue( name );
210121
}
211122

212-
default <E extends Enum<E>> E getEnum(String name, E defaultValue) {
213-
return getAttributeValue( name, defaultValue );
214-
}
215-
216-
default <E extends Enum<E>> E getEnum(String name, Supplier<E> defaultValueSupplier) {
217-
return getAttributeValue( name, defaultValueSupplier );
218-
}
219-
220-
default <E extends Enum<E>> E getEnum(String name, E defaultValue, Class<E> type) {
221-
return getAttributeValue( name, defaultValue );
222-
}
223-
224-
default <E extends Enum<E>> E getEnum(String name, Supplier<E> defaultValueSupplier, Class<E> type) {
225-
return getAttributeValue( name, defaultValueSupplier );
226-
}
227-
228123
default ClassDetails getClassDetails(String name) {
229124
return getAttributeValue( name );
230125
}
231126

232-
default ClassDetails getClassDetails(String name, ClassDetails defaultValue) {
233-
return getAttributeValue( name, defaultValue );
234-
}
235-
236-
default ClassDetails getClassDetails(String name, Supplier<ClassDetails> defaultValue) {
237-
return getAttributeValue( name, defaultValue );
238-
}
239-
240127
default <X extends Annotation> AnnotationUsage<X> getNestedUsage(String name) {
241128
return getAttributeValue( name );
242129
}
243130

244-
default <X extends Annotation> AnnotationUsage<X> getNestedUsage(String name, AnnotationUsage<X> defaultValue) {
245-
return getAttributeValue( name, defaultValue );
246-
}
247-
248-
default <X extends Annotation> AnnotationUsage<X> getNestedUsage(String name, Supplier<AnnotationUsage<X>> defaultValueSupplier) {
249-
return getAttributeValue( name, defaultValueSupplier );
250-
}
251-
252131
default <E> List<E> getList(String name) {
253132
return getAttributeValue( name );
254133
}
255-
256-
default <E> List<E> getList(String name, List<E> defaultValue) {
257-
return getAttributeValue( name, defaultValue );
258-
}
259-
260-
default <E> List<E> getList(String name, Supplier<List<E>> defaultValueSupplier) {
261-
return getAttributeValue( name, defaultValueSupplier );
262-
}
263134
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
* Copyright: Red Hat Inc. and Hibernate Authors
6+
*/
7+
8+
package org.hibernate.models.annotations;
9+
10+
import java.lang.annotation.ElementType;
11+
import java.lang.annotation.Retention;
12+
import java.lang.annotation.RetentionPolicy;
13+
import java.lang.annotation.Target;
14+
15+
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
16+
import org.hibernate.models.spi.AnnotationUsage;
17+
import org.hibernate.models.spi.ClassDetails;
18+
19+
import org.junit.jupiter.api.Test;
20+
21+
import org.jboss.jandex.Index;
22+
23+
import static org.assertj.core.api.Assertions.assertThat;
24+
import static org.hibernate.models.SourceModelTestHelper.createBuildingContext;
25+
26+
/**
27+
* @author Steve Ebersole
28+
*/
29+
public class AttributeAccessTests {
30+
@Test
31+
void testAttributeAccess() {
32+
final SourceModelBuildingContextImpl buildingContext = createBuildingContext( (Index) null, TheClass.class );
33+
final ClassDetails classDetails = buildingContext.getClassDetailsRegistry().getClassDetails( TheClass.class.getName() );
34+
final AnnotationUsage<EverythingBagel> annotationUsage = classDetails.getAnnotationUsage( EverythingBagel.class );
35+
36+
assertThat( annotationUsage.<String>getAttributeValue( "theString" ) ).isEqualTo( "hello" );
37+
assertThat( annotationUsage.<Status>getAttributeValue( "theEnum" ) ).isEqualTo( Status.ACTIVE );
38+
assertThat( annotationUsage.<Boolean>getAttributeValue( "theBoolean" ) ).isEqualTo( true );
39+
assertThat( annotationUsage.<Byte>getAttributeValue( "theByte" ) ).isEqualTo( (byte) 1 );
40+
assertThat( annotationUsage.<Short>getAttributeValue( "theShort" ) ).isEqualTo( (short) 2 );
41+
assertThat( annotationUsage.<Integer>getAttributeValue( "theInteger" ) ).isEqualTo( 3 );
42+
assertThat( annotationUsage.<Long>getAttributeValue( "theLong" ) ).isEqualTo( 4L );
43+
assertThat( annotationUsage.<Float>getAttributeValue( "theFloat" ) ).isEqualTo( 5.1F );
44+
assertThat( annotationUsage.<Double>getAttributeValue( "theDouble" ) ).isEqualTo( 6.2 );
45+
46+
assertThat( annotationUsage.getString( "theString" ) ).isEqualTo( "hello" );
47+
assertThat( annotationUsage.getEnum( "theEnum" ).name() ).isEqualTo( Status.ACTIVE.name() );
48+
assertThat( annotationUsage.getEnum( "theEnum", Status.class ) ).isEqualTo( Status.ACTIVE );
49+
assertThat( annotationUsage.getBoolean( "theBoolean" ) ).isEqualTo( true );
50+
assertThat( annotationUsage.getByte( "theByte" ) ).isEqualTo( (byte) 1 );
51+
assertThat( annotationUsage.getShort( "theShort" ) ).isEqualTo( (short) 2 );
52+
assertThat( annotationUsage.getInteger( "theInteger" ) ).isEqualTo( 3 );
53+
assertThat( annotationUsage.getLong( "theLong" ) ).isEqualTo( 4L );
54+
assertThat( annotationUsage.getFloat( "theFloat" ) ).isEqualTo( 5.1F );
55+
assertThat( annotationUsage.getDouble( "theDouble" ) ).isEqualTo( 6.2 );
56+
57+
assertThat( annotationUsage.getClassDetails( "theClass" ).toJavaClass() ).isEqualTo( TheClass.class );
58+
assertThat( annotationUsage.getNestedUsage( "theNested" ) ).isNotNull();
59+
assertThat( annotationUsage.getList( "theStrings" ) ).containsExactly( "a", "b", "c" );
60+
}
61+
62+
@EverythingBagel(
63+
theString = "hello",
64+
theEnum = Status.ACTIVE,
65+
theBoolean = true,
66+
theByte = 1,
67+
theShort = 2,
68+
theInteger = 3,
69+
theLong = 4L,
70+
theFloat = 5.1F,
71+
theDouble = 6.2,
72+
theClass = TheClass.class,
73+
theNested = @Nested(),
74+
theStrings = {"a", "b", "c"}
75+
)
76+
public static class TheClass {
77+
78+
}
79+
80+
public enum Status { ACTIVE }
81+
82+
@Target(ElementType.TYPE)
83+
@Retention(RetentionPolicy.RUNTIME)
84+
public @interface Nested {
85+
}
86+
87+
@Target(ElementType.TYPE)
88+
@Retention(RetentionPolicy.RUNTIME)
89+
public @interface EverythingBagel {
90+
String theString();
91+
Status theEnum();
92+
boolean theBoolean();
93+
byte theByte();
94+
short theShort();
95+
int theInteger();
96+
long theLong();
97+
float theFloat();
98+
double theDouble();
99+
Class<?> theClass();
100+
Nested theNested();
101+
String[] theStrings();
102+
}
103+
}

0 commit comments

Comments
 (0)