Skip to content

Commit addadfc

Browse files
committed
HHH-7803 Automatically index @target classes
1 parent f87596a commit addadfc

File tree

6 files changed

+32
-6
lines changed

6 files changed

+32
-6
lines changed

hibernate-core/src/main/java/org/hibernate/metamodel/MetadataSources.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,8 @@
2828
import java.io.FileNotFoundException;
2929
import java.io.IOException;
3030
import java.io.InputStream;
31-
import java.lang.reflect.Field;
32-
import java.lang.reflect.ParameterizedType;
3331
import java.net.URL;
3432
import java.util.ArrayList;
35-
import java.util.Collection;
3633
import java.util.Enumeration;
3734
import java.util.HashSet;
3835
import java.util.LinkedHashSet;
@@ -53,12 +50,14 @@
5350
import org.hibernate.jaxb.spi.SourceType;
5451
import org.hibernate.jaxb.spi.orm.JaxbEntityMappings;
5552
import org.hibernate.metamodel.internal.MetadataBuilderImpl;
53+
import org.hibernate.metamodel.internal.source.annotations.util.HibernateDotNames;
5654
import org.hibernate.metamodel.internal.source.annotations.util.JPADotNames;
5755
import org.hibernate.metamodel.internal.source.annotations.util.JandexHelper;
5856
import org.hibernate.metamodel.internal.source.annotations.xml.mocker.EntityMappingsMocker;
5957
import org.hibernate.metamodel.spi.source.MappingException;
6058
import org.hibernate.metamodel.spi.source.MappingNotFoundException;
6159
import org.hibernate.service.ServiceRegistry;
60+
import org.jboss.jandex.AnnotationInstance;
6261
import org.jboss.jandex.ClassInfo;
6362
import org.jboss.jandex.Index;
6463
import org.jboss.jandex.IndexView;
@@ -512,7 +511,8 @@ private void indexClass(Class clazz, Indexer indexer, Set<Class<?>> processedCla
512511

513512
processedClasses.add( clazz );
514513

515-
indexResource( clazz.getName().replace( '.', '/' ) + ".class", indexer );
514+
ClassInfo classInfo = indexResource(
515+
clazz.getName().replace( '.', '/' ) + ".class", indexer );
516516

517517
// index all super classes of the specified class. Using org.hibernate.cfg.Configuration it was not
518518
// necessary to add all annotated classes. Entities would be enough. Mapped superclasses would be
@@ -538,6 +538,16 @@ private void indexClass(Class clazz, Indexer indexer, Set<Class<?>> processedCla
538538
}
539539
}
540540
}
541+
542+
// Also check for classes within a @Target annotation.
543+
for ( AnnotationInstance targetAnnotation : JandexHelper.getAnnotations(
544+
classInfo, HibernateDotNames.TARGET ) ) {
545+
String targetClassName = targetAnnotation.value().asClass().name()
546+
.toString();
547+
Class<?> targetClass = serviceRegistry.getService(
548+
ClassLoaderService.class ).classForName( targetClassName );
549+
indexClass(targetClass, indexer, processedClasses );
550+
}
541551
}
542552

543553
private ClassInfo indexResource(String resourceName, Indexer indexer) {

hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/annotations/util/JandexHelper.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.io.InputStream;
2929
import java.lang.reflect.Array;
3030
import java.util.ArrayList;
31+
import java.util.Collections;
3132
import java.util.HashMap;
3233
import java.util.Iterator;
3334
import java.util.List;
@@ -186,7 +187,11 @@ else if ( methodName.startsWith( "get" ) ) {
186187
*/
187188
public static List<AnnotationInstance> getAnnotations(
188189
ClassInfo classInfo, DotName annotationName ) {
189-
return classInfo.annotations().get( annotationName );
190+
if ( classInfo.annotations().containsKey( annotationName ) ) {
191+
return classInfo.annotations().get( annotationName );
192+
} else {
193+
return Collections.emptyList();
194+
}
190195
}
191196

192197
/**

hibernate-core/src/test/java/org/hibernate/test/annotations/cid/ParentPk.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
//$Id$
22
package org.hibernate.test.annotations.cid;
33
import java.io.Serializable;
4+
45
import javax.persistence.Column;
6+
import javax.persistence.Embeddable;
57

68
/**
79
* @author Emmanuel Bernard
810
*/
9-
11+
@Embeddable
1012
public class ParentPk implements Serializable {
1113
public String getFirstName() {
1214
return firstName;

hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/EmployeeId.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.hibernate.test.annotations.derivedidentities.e3.a;
22
import java.io.Serializable;
33

4+
import javax.persistence.Embeddable;
5+
46
/**
57
* @author Emmanuel Bernard
68
*/
9+
@Embeddable
710
public class EmployeeId implements Serializable{
811
String firstName;
912
String lastName;

hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/PersonId.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.hibernate.test.annotations.derivedidentities.e5.b;
22
import java.io.Serializable;
33

4+
import javax.persistence.Embeddable;
5+
46
/**
57
* @author Emmanuel Bernard
68
*/
9+
@Embeddable
710
public class PersonId implements Serializable {
811
String firstName;
912
String lastName;

hibernate-core/src/test/java/org/hibernate/test/annotations/strategy/Location.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
//$Id$
22
package org.hibernate.test.annotations.strategy;
33

4+
import javax.persistence.Embeddable;
5+
46

57
/**
68
* @author Emmanuel Bernard
79
*/
10+
@Embeddable
811
public class Location {
912
private String city;
1013
private String country;

0 commit comments

Comments
 (0)