HHH-18945 Import generated class full qualified name to prevent importing other classes with same simple name
This commit is contained in:
parent
92e29b63db
commit
c882aeb2b8
|
@ -7,7 +7,6 @@ package org.hibernate.processor;
|
||||||
import org.hibernate.processor.annotation.InnerClassMetaAttribute;
|
import org.hibernate.processor.annotation.InnerClassMetaAttribute;
|
||||||
import org.hibernate.processor.model.MetaAttribute;
|
import org.hibernate.processor.model.MetaAttribute;
|
||||||
import org.hibernate.processor.model.Metamodel;
|
import org.hibernate.processor.model.Metamodel;
|
||||||
import org.hibernate.processor.util.StringUtil;
|
|
||||||
|
|
||||||
import javax.annotation.processing.FilerException;
|
import javax.annotation.processing.FilerException;
|
||||||
import javax.lang.model.element.Element;
|
import javax.lang.model.element.Element;
|
||||||
|
@ -23,11 +22,10 @@ import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
|
import static org.hibernate.processor.util.TypeUtils.getGeneratedClassFullyQualifiedName;
|
||||||
import static org.hibernate.processor.util.TypeUtils.isMemberType;
|
import static org.hibernate.processor.util.TypeUtils.isMemberType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -185,20 +183,10 @@ public final class ClassWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getFullyQualifiedClassName(Metamodel entity) {
|
private static String getFullyQualifiedClassName(Metamodel entity) {
|
||||||
final String metaModelPackage = entity.getPackageName();
|
return entity.getElement() instanceof PackageElement packageElement
|
||||||
final String packageNamePrefix = !metaModelPackage.isEmpty() ? metaModelPackage + "." : "";
|
? packageElement.getQualifiedName().toString() + "." + getGeneratedClassName( entity )
|
||||||
final String className;
|
: getGeneratedClassFullyQualifiedName(
|
||||||
if ( entity.getElement().getKind() == ElementKind.PACKAGE ) {
|
(TypeElement) entity.getElement(), entity.getPackageName(), entity.isJakartaDataStyle() );
|
||||||
className = getGeneratedClassName( entity );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
className = Arrays.stream(
|
|
||||||
entity.getQualifiedName().substring( packageNamePrefix.length() ).split( "\\." ) )
|
|
||||||
.map( StringUtil::removeDollar )
|
|
||||||
.map( part -> entity.isJakartaDataStyle() ? '_' + part : part + '_' )
|
|
||||||
.collect( Collectors.joining( "." ) );
|
|
||||||
}
|
|
||||||
return packageNamePrefix + className;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getGeneratedClassName(Metamodel entity) {
|
private static String getGeneratedClassName(Metamodel entity) {
|
||||||
|
|
|
@ -88,6 +88,7 @@ import static org.hibernate.processor.util.TypeUtils.extendsClass;
|
||||||
import static org.hibernate.processor.util.TypeUtils.findMappedSuperElement;
|
import static org.hibernate.processor.util.TypeUtils.findMappedSuperElement;
|
||||||
import static org.hibernate.processor.util.TypeUtils.getAnnotationMirror;
|
import static org.hibernate.processor.util.TypeUtils.getAnnotationMirror;
|
||||||
import static org.hibernate.processor.util.TypeUtils.getAnnotationValue;
|
import static org.hibernate.processor.util.TypeUtils.getAnnotationValue;
|
||||||
|
import static org.hibernate.processor.util.TypeUtils.getGeneratedClassFullyQualifiedName;
|
||||||
import static org.hibernate.processor.util.TypeUtils.hasAnnotation;
|
import static org.hibernate.processor.util.TypeUtils.hasAnnotation;
|
||||||
import static org.hibernate.processor.util.TypeUtils.implementsInterface;
|
import static org.hibernate.processor.util.TypeUtils.implementsInterface;
|
||||||
import static org.hibernate.processor.util.TypeUtils.primitiveClassMatchesKind;
|
import static org.hibernate.processor.util.TypeUtils.primitiveClassMatchesKind;
|
||||||
|
@ -175,6 +176,9 @@ public class AnnotationMetaEntity extends AnnotationMeta {
|
||||||
this.quarkusInjection = context.isQuarkusInjection();
|
this.quarkusInjection = context.isQuarkusInjection();
|
||||||
this.importContext = parent != null ? parent : new ImportContextImpl( getPackageName( context, element ) );
|
this.importContext = parent != null ? parent : new ImportContextImpl( getPackageName( context, element ) );
|
||||||
jakartaDataStaticModel = jakartaDataStaticMetamodel;
|
jakartaDataStaticModel = jakartaDataStaticMetamodel;
|
||||||
|
importContext.importType(
|
||||||
|
getGeneratedClassFullyQualifiedName( element, getPackageName( context, element ),
|
||||||
|
jakartaDataStaticModel ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AnnotationMetaEntity create(TypeElement element, Context context) {
|
public static AnnotationMetaEntity create(TypeElement element, Context context) {
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.processor.util;
|
package org.hibernate.processor.util;
|
||||||
|
|
||||||
|
import jakarta.persistence.AccessType;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.hibernate.processor.Context;
|
import org.hibernate.processor.Context;
|
||||||
import org.hibernate.processor.MetaModelGenerationException;
|
import org.hibernate.processor.MetaModelGenerationException;
|
||||||
|
@ -29,8 +30,6 @@ import javax.lang.model.util.ElementFilter;
|
||||||
import javax.lang.model.util.Elements;
|
import javax.lang.model.util.Elements;
|
||||||
import javax.lang.model.util.SimpleTypeVisitor8;
|
import javax.lang.model.util.SimpleTypeVisitor8;
|
||||||
import javax.tools.Diagnostic;
|
import javax.tools.Diagnostic;
|
||||||
|
|
||||||
import jakarta.persistence.AccessType;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -38,6 +37,7 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static java.beans.Introspector.decapitalize;
|
import static java.beans.Introspector.decapitalize;
|
||||||
|
import static org.hibernate.internal.util.StringHelper.split;
|
||||||
import static org.hibernate.processor.util.AccessTypeInformation.DEFAULT_ACCESS_TYPE;
|
import static org.hibernate.processor.util.AccessTypeInformation.DEFAULT_ACCESS_TYPE;
|
||||||
import static org.hibernate.processor.util.Constants.ACCESS;
|
import static org.hibernate.processor.util.Constants.ACCESS;
|
||||||
import static org.hibernate.processor.util.Constants.BASIC;
|
import static org.hibernate.processor.util.Constants.BASIC;
|
||||||
|
@ -665,6 +665,16 @@ public final class TypeUtils {
|
||||||
return element.getEnclosingElement() instanceof TypeElement;
|
return element.getEnclosingElement() instanceof TypeElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getGeneratedClassFullyQualifiedName(TypeElement element, String packageName, boolean jakartaDataStyle) {
|
||||||
|
final StringBuilder builder = new StringBuilder( !packageName.isEmpty() ? packageName + "." : "" );
|
||||||
|
final int length = builder.length();
|
||||||
|
for ( String s : split( ".", element.getQualifiedName().toString().substring( length ) ) ) {
|
||||||
|
String part = StringUtil.removeDollar( s );
|
||||||
|
builder.append( jakartaDataStyle ? '_' + part : part + '_' );
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
static class EmbeddedAttributeVisitor extends SimpleTypeVisitor8<@Nullable TypeElement, Element> {
|
static class EmbeddedAttributeVisitor extends SimpleTypeVisitor8<@Nullable TypeElement, Element> {
|
||||||
private final Context context;
|
private final Context context;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue