Skip to content

Commit e32410b

Browse files
committed
#74 - Add the ability to display a ClassDetails (including its MemberDetails) with its AnnotationUsages
1 parent b158650 commit e32410b

File tree

7 files changed

+94
-2
lines changed

7 files changed

+94
-2
lines changed

src/main/java/org/hibernate/models/internal/AbstractTypeDescriptor.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import org.hibernate.models.spi.AnnotationDescriptor;
1212
import org.hibernate.models.spi.AttributeDescriptor;
13+
import org.hibernate.models.spi.RenderingCollector;
1314
import org.hibernate.models.spi.SourceModelBuildingContext;
1415
import org.hibernate.models.spi.ValueTypeDescriptor;
1516
import org.hibernate.models.spi.ValueWrapper;
@@ -42,6 +43,16 @@ public V createValue(
4243
return valueWrapper.wrap( defaultValue, context );
4344
}
4445

46+
@Override
47+
public void render(RenderingCollector collector, String name, Object attributeValue) {
48+
collector.addLine( "%s = %s", name, attributeValue );
49+
}
50+
51+
@Override
52+
public void render(RenderingCollector collector, Object attributeValue) {
53+
collector.addLine( "%s = %s", attributeValue );
54+
}
55+
4556
@Override
4657
public String toString() {
4758
return String.format(

src/main/java/org/hibernate/models/internal/ArrayTypeDescriptor.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@
88

99
import java.lang.annotation.Annotation;
1010
import java.lang.reflect.Array;
11-
import java.util.Collections;
1211
import java.util.List;
1312

1413
import org.hibernate.models.internal.jandex.ArrayValueExtractor;
1514
import org.hibernate.models.internal.jandex.ArrayValueWrapper;
16-
import org.hibernate.models.internal.util.CollectionHelper;
1715
import org.hibernate.models.spi.AnnotationDescriptor;
1816
import org.hibernate.models.spi.AttributeDescriptor;
17+
import org.hibernate.models.spi.RenderingCollector;
1918
import org.hibernate.models.spi.SourceModelBuildingContext;
2019
import org.hibernate.models.spi.ValueExtractor;
2120
import org.hibernate.models.spi.ValueTypeDescriptor;
@@ -132,4 +131,28 @@ public Object unwrap(List<V> value) {
132131
}
133132
return result;
134133
}
134+
135+
@Override
136+
public void render(RenderingCollector collector, String name, Object attributeValue) {
137+
//noinspection unchecked
138+
final List<V> values = (List<V>) attributeValue;
139+
140+
collector.addLine( "%s = {", name );
141+
collector.indent( 2 );
142+
values.forEach( (value) -> elementTypeDescriptor.render( collector, value ) );
143+
collector.unindent( 2 );
144+
collector.addLine( "}" );
145+
}
146+
147+
@Override
148+
public void render(RenderingCollector collector, Object attributeValue) {
149+
//noinspection unchecked
150+
final List<V> values = (List<V>) attributeValue;
151+
152+
collector.addLine( "{" );
153+
collector.indent( 2 );
154+
values.forEach( (value) -> elementTypeDescriptor.render( collector, value ) );
155+
collector.unindent( 2 );
156+
collector.addLine( "}" );
157+
}
135158
}

src/main/java/org/hibernate/models/internal/ClassTypeDescriptor.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.hibernate.models.internal.jandex.ClassValueExtractor;
1212
import org.hibernate.models.internal.jandex.ClassValueWrapper;
1313
import org.hibernate.models.spi.ClassDetails;
14+
import org.hibernate.models.spi.RenderingCollector;
1415
import org.hibernate.models.spi.SourceModelBuildingContext;
1516
import org.hibernate.models.spi.ValueExtractor;
1617
import org.hibernate.models.spi.ValueWrapper;
@@ -55,4 +56,14 @@ public ValueExtractor<Annotation, ClassDetails> createJdkExtractor(SourceModelBu
5556
public Object unwrap(ClassDetails value) {
5657
return value.toJavaClass();
5758
}
59+
60+
@Override
61+
public void render(RenderingCollector collector, String name, Object attributeValue) {
62+
super.render( collector, name, ( (ClassDetails) attributeValue ).getName() );
63+
}
64+
65+
@Override
66+
public void render(RenderingCollector collector, Object attributeValue) {
67+
super.render( collector, ( (ClassDetails) attributeValue ).getName() );
68+
}
5869
}

src/main/java/org/hibernate/models/internal/NestedTypeDescriptor.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.hibernate.models.internal.jdk.AnnotationDescriptorImpl;
1515
import org.hibernate.models.spi.AnnotationDescriptor;
1616
import org.hibernate.models.spi.AnnotationUsage;
17+
import org.hibernate.models.spi.RenderingCollector;
1718
import org.hibernate.models.spi.SourceModelBuildingContext;
1819
import org.hibernate.models.spi.ValueExtractor;
1920
import org.hibernate.models.spi.ValueWrapper;
@@ -109,6 +110,20 @@ public ValueExtractor<Annotation, AnnotationUsage<A>> resolveJdkExtractor(Source
109110
return jdkExtractor;
110111
}
111112

113+
@Override
114+
public void render(RenderingCollector collector, String name, Object attributeValue) {
115+
//noinspection unchecked
116+
final AnnotationUsage<A> nested = (AnnotationUsage<A>) attributeValue;
117+
nested.renderAttributeValue( name, collector );
118+
}
119+
120+
@Override
121+
public void render(RenderingCollector collector, Object attributeValue) {
122+
//noinspection unchecked
123+
final AnnotationUsage<A> nested = (AnnotationUsage<A>) attributeValue;
124+
nested.render( collector );
125+
}
126+
112127
@Override
113128
public String toString() {
114129
return String.format(

src/main/java/org/hibernate/models/internal/StringTypeDescriptor.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.hibernate.models.internal.jandex.StringValueExtractor;
1212
import org.hibernate.models.internal.jandex.StringValueWrapper;
1313
import org.hibernate.models.internal.jdk.PassThruExtractor;
14+
import org.hibernate.models.spi.RenderingCollector;
1415
import org.hibernate.models.spi.SourceModelBuildingContext;
1516
import org.hibernate.models.spi.ValueExtractor;
1617
import org.hibernate.models.spi.ValueWrapper;
@@ -59,4 +60,14 @@ public ValueExtractor<Annotation, String> createJdkExtractor(SourceModelBuilding
5960
public Object unwrap(String value) {
6061
return value;
6162
}
63+
64+
@Override
65+
public void render(RenderingCollector collector, String name, Object attributeValue) {
66+
super.render( collector, name, "\"" + attributeValue + "\"" );
67+
}
68+
69+
@Override
70+
public void render(RenderingCollector collector, Object attributeValue) {
71+
super.render( collector, attributeValue );
72+
}
6273
}

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,23 @@ default void render(RenderingCollector collector) {
153153
collector.addLine( ")" );
154154
}
155155
}
156+
157+
default void renderAttributeValue(String name, RenderingCollector collector) {
158+
final List<AttributeDescriptor<?>> attributes = getAnnotationDescriptor().getAttributes();
159+
if ( attributes.isEmpty() ) {
160+
collector.addLine( "%s = @%s", name, getAnnotationType().getName() );
161+
}
162+
else {
163+
collector.addLine( "%s = @%s(", name, getAnnotationType().getName() );
164+
collector.indent( 2 );
165+
attributes.forEach( (attribute) -> attribute.getTypeDescriptor().render(
166+
collector,
167+
attribute.getName(),
168+
getAttributeValue( attribute.getName() )
169+
) );
170+
171+
collector.unindent( 2 );
172+
collector.addLine( ")" );
173+
}
174+
}
156175
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,6 @@ public interface ValueTypeDescriptor<V> {
4646
default void render(RenderingCollector collector, String name, Object attributeValue) {
4747
collector.addLine( "%s=%s", name, "..." );
4848
}
49+
50+
void render(RenderingCollector collector, Object attributeValue);
4951
}

0 commit comments

Comments
 (0)