Skip to content

Commit 333d16d

Browse files
committed
HHH-18945 Import generated class full qualified name to prevent importing other classes with same simple name
1 parent 3995164 commit 333d16d

File tree

3 files changed

+22
-17
lines changed

3 files changed

+22
-17
lines changed

tooling/metamodel-generator/src/main/java/org/hibernate/processor/ClassWriter.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import org.hibernate.processor.annotation.InnerClassMetaAttribute;
88
import org.hibernate.processor.model.MetaAttribute;
99
import org.hibernate.processor.model.Metamodel;
10-
import org.hibernate.processor.util.StringUtil;
1110

1211
import javax.annotation.processing.FilerException;
1312
import javax.lang.model.element.Element;
@@ -23,11 +22,10 @@
2322
import java.io.StringWriter;
2423
import java.time.OffsetDateTime;
2524
import java.time.format.DateTimeFormatter;
26-
import java.util.Arrays;
2725
import java.util.List;
2826
import java.util.Set;
29-
import java.util.stream.Collectors;
3027

28+
import static org.hibernate.processor.util.TypeUtils.getGeneratedClassFullyQualifiedName;
3129
import static org.hibernate.processor.util.TypeUtils.isMemberType;
3230

3331
/**
@@ -185,20 +183,10 @@ else if ( modifiers.contains( Modifier.PROTECTED ) ) {
185183
}
186184

187185
private static String getFullyQualifiedClassName(Metamodel entity) {
188-
final String metaModelPackage = entity.getPackageName();
189-
final String packageNamePrefix = !metaModelPackage.isEmpty() ? metaModelPackage + "." : "";
190-
final String className;
191-
if ( entity.getElement().getKind() == ElementKind.PACKAGE ) {
192-
className = getGeneratedClassName( entity );
193-
}
194-
else {
195-
className = Arrays.stream(
196-
entity.getQualifiedName().substring( packageNamePrefix.length() ).split( "\\." ) )
197-
.map( StringUtil::removeDollar )
198-
.map( part -> entity.isJakartaDataStyle() ? '_' + part : part + '_' )
199-
.collect( Collectors.joining( "." ) );
200-
}
201-
return packageNamePrefix + className;
186+
return entity.getElement() instanceof PackageElement packageElement
187+
? packageElement.getQualifiedName().toString() + "." + getGeneratedClassName( entity )
188+
: getGeneratedClassFullyQualifiedName(
189+
(TypeElement) entity.getElement(), entity.getPackageName(), entity.isJakartaDataStyle() );
202190
}
203191

204192
private static String getGeneratedClassName(Metamodel entity) {

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
import static org.hibernate.processor.util.TypeUtils.findMappedSuperElement;
8989
import static org.hibernate.processor.util.TypeUtils.getAnnotationMirror;
9090
import static org.hibernate.processor.util.TypeUtils.getAnnotationValue;
91+
import static org.hibernate.processor.util.TypeUtils.getGeneratedClassFullyQualifiedName;
9192
import static org.hibernate.processor.util.TypeUtils.hasAnnotation;
9293
import static org.hibernate.processor.util.TypeUtils.implementsInterface;
9394
import static org.hibernate.processor.util.TypeUtils.primitiveClassMatchesKind;
@@ -175,6 +176,9 @@ public AnnotationMetaEntity(
175176
this.quarkusInjection = context.isQuarkusInjection();
176177
this.importContext = parent != null ? parent : new ImportContextImpl( getPackageName( context, element ) );
177178
jakartaDataStaticModel = jakartaDataStaticMetamodel;
179+
importContext.importType(
180+
getGeneratedClassFullyQualifiedName( element, getPackageName( context, element ),
181+
jakartaDataStaticModel ) );
178182
}
179183

180184
public static AnnotationMetaEntity create(TypeElement element, Context context) {

tooling/metamodel-generator/src/main/java/org/hibernate/processor/util/TypeUtils.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,15 @@
3131
import javax.tools.Diagnostic;
3232

3333
import jakarta.persistence.AccessType;
34+
35+
import java.util.Arrays;
3436
import java.util.HashMap;
3537
import java.util.HashSet;
3638
import java.util.List;
3739
import java.util.Map;
3840
import java.util.Set;
3941
import java.util.function.Function;
42+
import java.util.stream.Collectors;
4043

4144
import static java.beans.Introspector.decapitalize;
4245
import static org.hibernate.processor.util.AccessTypeInformation.DEFAULT_ACCESS_TYPE;
@@ -671,6 +674,16 @@ public static boolean isMemberType(Element element) {
671674
return element.getEnclosingElement() instanceof TypeElement;
672675
}
673676

677+
public static String getGeneratedClassFullyQualifiedName(TypeElement element, String packageName, boolean jakartaDataStyle) {
678+
final String packageNamePrefix = !packageName.isEmpty() ? packageName + "." : "";
679+
final String className = Arrays.stream(
680+
element.getQualifiedName().toString().substring( packageNamePrefix.length() ).split( "\\." ) )
681+
.map( StringUtil::removeDollar )
682+
.map( part -> jakartaDataStyle ? '_' + part : part + '_' )
683+
.collect( Collectors.joining( "." ) );
684+
return packageNamePrefix + className;
685+
}
686+
674687
static class EmbeddedAttributeVisitor extends SimpleTypeVisitor8<@Nullable TypeElement, Element> {
675688
private final Context context;
676689

0 commit comments

Comments
 (0)