Skip to content

Commit a48655f

Browse files
committed
perf(hibernate processor): fix nullable things in util package
1 parent 959d71c commit a48655f

File tree

2 files changed

+36
-25
lines changed

2 files changed

+36
-25
lines changed

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import jakarta.persistence.AccessType;
4646
import org.jspecify.annotations.Nullable;
4747

48+
import static java.util.Objects.requireNonNull;
4849
import static org.hibernate.processor.util.StringUtil.determineFullyQualifiedClassName;
4950
import static org.hibernate.processor.util.StringUtil.packageNameFromFullyQualifiedName;
5051

@@ -261,7 +262,7 @@ private FileTimeStampChecker loadTimeStampCache() {
261262

262263
private void parseEntities(List<JaxbEntityImpl> entities, String defaultPackageName) {
263264
for ( JaxbEntityImpl entity : entities ) {
264-
String fqcn = determineFullyQualifiedClassName( defaultPackageName, entity.getClazz() );
265+
String fqcn = determineFullyQualifiedClassName( defaultPackageName, requireNonNull( entity.getClazz() ) );
265266

266267
if ( !xmlMappedTypeExists( fqcn ) ) {
267268
context.logMessage(
@@ -288,7 +289,7 @@ private void parseEmbeddable(
288289
List<JaxbEmbeddableImpl> embeddables,
289290
String defaultPackageName) {
290291
for ( JaxbEmbeddableImpl embeddable : embeddables ) {
291-
String fqcn = determineFullyQualifiedClassName( defaultPackageName, embeddable.getClazz() );
292+
String fqcn = determineFullyQualifiedClassName( defaultPackageName, requireNonNull( embeddable.getClazz() ) );
292293
// we have to extract the package name from the fqcn. Maybe the entity was setting a fqcn directly
293294
String pkg = packageNameFromFullyQualifiedName( fqcn );
294295

@@ -316,7 +317,7 @@ private void parseMappedSuperClass(
316317
String defaultPackageName) {
317318
for ( JaxbMappedSuperclassImpl mappedSuperClass : mappedSuperClasses ) {
318319
String fqcn = determineFullyQualifiedClassName(
319-
defaultPackageName, mappedSuperClass.getClazz()
320+
defaultPackageName, requireNonNull( mappedSuperClass.getClazz() )
320321
);
321322
// we have to extract the package name from the fqcn. Maybe the entity was setting a fqcn directly
322323
String pkg = packageNameFromFullyQualifiedName( fqcn );
@@ -352,7 +353,7 @@ private TypeElement getXmlMappedType(String fullyQualifiedClassName) {
352353
return utils.getTypeElement( fullyQualifiedClassName );
353354
}
354355

355-
private AccessType determineEntityAccessType(JaxbEntityMappingsImpl mappings) {
356+
private @Nullable AccessType determineEntityAccessType(JaxbEntityMappingsImpl mappings) {
356357
final AccessType contextAccessType = context.getPersistenceUnitDefaultAccessType();
357358
final AccessType mappingsAccess = mappings.getAccess();
358359
if ( mappingsAccess != null ) {
@@ -368,23 +369,23 @@ private void determineXmlAccessTypes() {
368369
AccessType defaultAccessType = determineEntityAccessType( mappings );
369370

370371
for ( JaxbEntityImpl entity : mappings.getEntities() ) {
371-
final String name = entity.getClazz();
372+
final String name = requireNonNull( entity.getClazz() );
372373
fqcn = determineFullyQualifiedClassName( packageName, name );
373374
final AccessType explicitAccessType = entity.getAccess();
374375
final AccessTypeInformation accessInfo = new AccessTypeInformation( fqcn, explicitAccessType, defaultAccessType );
375376
context.addAccessTypeInformation( fqcn, accessInfo );
376377
}
377378

378379
for ( JaxbMappedSuperclassImpl mappedSuperClass : mappings.getMappedSuperclasses() ) {
379-
final String name = mappedSuperClass.getClazz();
380+
final String name = requireNonNull( mappedSuperClass.getClazz() );
380381
fqcn = determineFullyQualifiedClassName( packageName, name );
381382
final AccessType explicitAccessType = mappedSuperClass.getAccess();
382383
final AccessTypeInformation accessInfo = new AccessTypeInformation( fqcn, explicitAccessType, defaultAccessType );
383384
context.addAccessTypeInformation( fqcn, accessInfo );
384385
}
385386

386387
for ( JaxbEmbeddableImpl embeddable : mappings.getEmbeddables() ) {
387-
final String name = embeddable.getClazz();
388+
final String name = requireNonNull( embeddable.getClazz() );
388389
fqcn = determineFullyQualifiedClassName( packageName, name );
389390
final AccessType explicitAccessType = embeddable.getAccess();
390391
final AccessTypeInformation accessInfo = new AccessTypeInformation( fqcn, explicitAccessType, defaultAccessType );
@@ -399,7 +400,7 @@ private void determineAnnotationAccessTypes() {
399400
String packageName = mappings.getPackage();
400401

401402
for ( JaxbEntityImpl entity : mappings.getEntities() ) {
402-
String name = entity.getClazz();
403+
String name = requireNonNull( entity.getClazz() );
403404
fqcn = determineFullyQualifiedClassName( packageName, name );
404405
TypeElement element = context.getTypeElementForFullyQualifiedName( fqcn );
405406
if ( element != null ) {
@@ -408,7 +409,7 @@ private void determineAnnotationAccessTypes() {
408409
}
409410

410411
for ( JaxbMappedSuperclassImpl mappedSuperClass : mappings.getMappedSuperclasses() ) {
411-
String name = mappedSuperClass.getClazz();
412+
String name = requireNonNull( mappedSuperClass.getClazz() );
412413
fqcn = determineFullyQualifiedClassName( packageName, name );
413414
TypeElement element = context.getTypeElementForFullyQualifiedName( fqcn );
414415
if ( element != null ) {

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

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848

4949
import static jakarta.persistence.AccessType.FIELD;
5050
import static java.util.Collections.emptyList;
51+
import static java.util.Objects.requireNonNull;
5152
import static org.hibernate.processor.util.StringUtil.classNameFromFullyQualifiedName;
5253
import static org.hibernate.processor.util.StringUtil.determineFullyQualifiedClassName;
5354
import static org.hibernate.processor.util.StringUtil.isFullyQualified;
@@ -74,7 +75,7 @@ public class XmlMetaEntity implements Metamodel {
7475

7576
private @Nullable JaxbAttributesContainerImpl attributes;
7677
private @Nullable JaxbEmbeddableAttributesContainerImpl embeddableAttributes;
77-
private AccessTypeInformation accessTypeInfo;
78+
private @Nullable AccessTypeInformation accessTypeInfo;
7879

7980
/**
8081
* Whether the members of this type have already been initialized or not.
@@ -90,7 +91,7 @@ public class XmlMetaEntity implements Metamodel {
9091
private boolean initialized;
9192

9293
XmlMetaEntity(JaxbEntityImpl ormEntity, String defaultPackageName, TypeElement element, Context context) {
93-
this( ormEntity.getClazz(), defaultPackageName, element, context, ormEntity.isMetadataComplete() );
94+
this( requireNonNull( ormEntity.getClazz() ), defaultPackageName, element, context, ormEntity.isMetadataComplete() );
9495
this.attributes = ormEntity.getAttributes();
9596
this.embeddableAttributes = null;
9697
}
@@ -104,7 +105,7 @@ static XmlMetaEntity create(JaxbEntityImpl ormEntity, String defaultPackageName,
104105

105106
XmlMetaEntity(JaxbMappedSuperclassImpl mappedSuperclass, String defaultPackageName, TypeElement element, Context context) {
106107
this(
107-
mappedSuperclass.getClazz(),
108+
requireNonNull( mappedSuperclass.getClazz() ),
108109
defaultPackageName,
109110
element,
110111
context,
@@ -115,12 +116,12 @@ static XmlMetaEntity create(JaxbEntityImpl ormEntity, String defaultPackageName,
115116
}
116117

117118
XmlMetaEntity(JaxbEmbeddableImpl embeddable, String defaultPackageName, TypeElement element, Context context) {
118-
this( embeddable.getClazz(), defaultPackageName, element, context, embeddable.isMetadataComplete() );
119+
this( requireNonNull( embeddable.getClazz() ), defaultPackageName, element, context, embeddable.isMetadataComplete() );
119120
this.attributes = null;
120121
this.embeddableAttributes = embeddable.getAttributes();
121122
}
122123

123-
private XmlMetaEntity(String clazz, String defaultPackageName, TypeElement element, Context context, Boolean metaComplete) {
124+
private XmlMetaEntity(String clazz, String defaultPackageName, TypeElement element, Context context, @Nullable Boolean metaComplete) {
124125
this.defaultPackageName = defaultPackageName;
125126
String className = clazz;
126127
String pkg = defaultPackageName;
@@ -210,11 +211,14 @@ public String toString() {
210211
return sb.toString();
211212
}
212213

213-
private static boolean initIsMetaComplete(Context context, Boolean metadataComplete) {
214+
private static boolean initIsMetaComplete(Context context, @Nullable Boolean metadataComplete) {
214215
return context.isFullyXmlConfigured() || Boolean.TRUE.equals( metadataComplete );
215216
}
216217

217-
private @Nullable String @Nullable[] getCollectionTypes(String propertyName, String explicitTargetEntity, @Nullable String explicitMapKeyClass, ElementKind expectedElementKind) {
218+
private @Nullable String @Nullable[] getCollectionTypes(String propertyName,
219+
@Nullable String explicitTargetEntity,
220+
@Nullable String explicitMapKeyClass,
221+
ElementKind expectedElementKind) {
218222
for ( Element elem : element.getEnclosedElements() ) {
219223
if ( !expectedElementKind.equals( elem.getKind() ) ) {
220224
continue;
@@ -251,7 +255,10 @@ else if ( elem.asType() instanceof ExecutableType ) {
251255
return type;
252256
}
253257

254-
private @Nullable String[] determineTypes(String propertyName, String explicitTargetEntity, @Nullable String explicitMapKeyClass, DeclaredType type) {
258+
private @Nullable String[] determineTypes(String propertyName,
259+
@Nullable String explicitTargetEntity,
260+
@Nullable String explicitMapKeyClass,
261+
DeclaredType type) {
255262
@Nullable String[] types = new String[3];
256263
determineTargetType( type, propertyName, explicitTargetEntity, types );
257264
if ( determineCollectionType( type, types ).equals( Constants.MAP_ATTRIBUTE ) ) {
@@ -273,7 +280,10 @@ private String determineCollectionType(DeclaredType type, @Nullable String[] typ
273280
return NullnessUtil.castNonNull( types[1] = Constants.COLLECTIONS.get( type.asElement().toString() ) );
274281
}
275282

276-
private void determineTargetType(DeclaredType type, String propertyName, String explicitTargetEntity, @Nullable String[] types) {
283+
private void determineTargetType(DeclaredType type,
284+
String propertyName,
285+
@Nullable String explicitTargetEntity,
286+
@Nullable String[] types) {
277287
List<? extends TypeMirror> typeArguments = type.getTypeArguments();
278288

279289
if ( typeArguments.isEmpty() && explicitTargetEntity == null ) {
@@ -362,7 +372,7 @@ private void determineTargetType(DeclaredType type, String propertyName, String
362372
context.logMessage(
363373
Diagnostic.Kind.WARNING,
364374
"Unable to determine type for property " + propertyName + " of class " + getQualifiedName()
365-
+ " using access type " + accessTypeInfo.getDefaultAccessType()
375+
+ " using access type " + requireNonNull( accessTypeInfo ).getDefaultAccessType()
366376
);
367377
return null;
368378
}
@@ -498,15 +508,15 @@ private void parseEmbedded(JaxbEmbeddedImpl embedded) {
498508
}
499509
}
500510

501-
private String determineExplicitTargetEntity(String targetClass) {
502-
String explicitTargetClass = targetClass;
503-
if ( explicitTargetClass != null ) {
511+
private @Nullable String determineExplicitTargetEntity(@Nullable String targetClass) {
512+
String explicitTargetClass = null;
513+
if ( targetClass != null ) {
504514
explicitTargetClass = determineFullyQualifiedClassName( defaultPackageName, targetClass );
505515
}
506516
return explicitTargetClass;
507517
}
508518

509-
private @Nullable String determineExplicitMapKeyClass(JaxbMapKeyClassImpl mapKeyClass) {
519+
private @Nullable String determineExplicitMapKeyClass(@Nullable JaxbMapKeyClassImpl mapKeyClass) {
510520
String explicitMapKey = null;
511521
if ( mapKeyClass != null ) {
512522
explicitMapKey = determineFullyQualifiedClassName( defaultPackageName, mapKeyClass.getClazz() );
@@ -616,9 +626,9 @@ private void logMetaModelException(String name, MetaModelGenerationException e)
616626
);
617627
}
618628

619-
private ElementKind getElementKind(AccessType accessType) {
629+
private ElementKind getElementKind(@Nullable AccessType accessType) {
620630
// if no explicit access type was specified in xml we use the entity access type
621-
if ( accessType == null ) {
631+
if ( accessType == null && accessTypeInfo != null ) {
622632
return getElementKindForAccessType( accessTypeInfo.getAccessType() );
623633
}
624634
return FIELD.equals( accessType ) ? ElementKind.FIELD : ElementKind.METHOD;

0 commit comments

Comments
 (0)