Skip to content

#133 Move constant class TypeDetails from interface to dedicated class #135

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import java.util.Collection;

import org.hibernate.models.spi.ClassBasedTypeDetails;
import org.hibernate.models.spi.ClassDetails;
import org.hibernate.models.spi.ClassTypeDetails;
import org.hibernate.models.spi.ParameterizedTypeDetails;
Expand All @@ -15,6 +14,8 @@
import org.hibernate.models.spi.TypeVariableReferenceDetails;
import org.hibernate.models.spi.WildcardTypeDetails;

import static org.hibernate.models.spi.StandardTypeDetails.OBJECT_TYPE_DETAILS;

/**
* Used to determine the type details for a Collection element - see {@linkplain #extractCollectionElementType(TypeDetails)}
*
Expand Down Expand Up @@ -45,7 +46,7 @@ public static TypeDetails extractCollectionElementType(TypeDetails memberType) {
}

// otherwise, assume Object
return ClassBasedTypeDetails.OBJECT_TYPE_DETAILS;
return OBJECT_TYPE_DETAILS;
}

private final TypeDetails memberTypeDetails;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import java.util.Map;

import org.hibernate.models.spi.ClassBasedTypeDetails;
import org.hibernate.models.spi.ClassDetails;
import org.hibernate.models.spi.ClassTypeDetails;
import org.hibernate.models.spi.ParameterizedTypeDetails;
Expand All @@ -15,6 +14,8 @@
import org.hibernate.models.spi.TypeVariableReferenceDetails;
import org.hibernate.models.spi.WildcardTypeDetails;

import static org.hibernate.models.spi.StandardTypeDetails.OBJECT_TYPE_DETAILS;

/**
* Used to determine the type details for a Map key - see {@linkplain #extractMapKeyType(TypeDetails)}
*
Expand Down Expand Up @@ -45,7 +46,7 @@ public static TypeDetails extractMapKeyType(TypeDetails memberType) {
}

// otherwise, assume Object
return ClassBasedTypeDetails.OBJECT_TYPE_DETAILS;
return OBJECT_TYPE_DETAILS;
}

private final TypeDetails memberTypeDetails;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import java.util.Map;

import org.hibernate.models.spi.ClassBasedTypeDetails;
import org.hibernate.models.spi.ClassDetails;
import org.hibernate.models.spi.ClassTypeDetails;
import org.hibernate.models.spi.ParameterizedTypeDetails;
Expand All @@ -15,6 +14,8 @@
import org.hibernate.models.spi.TypeVariableReferenceDetails;
import org.hibernate.models.spi.WildcardTypeDetails;

import static org.hibernate.models.spi.StandardTypeDetails.OBJECT_TYPE_DETAILS;

/**
* Used to determine the type details for a Map value - see {@linkplain #extractMapValueType(TypeDetails)}
*
Expand Down Expand Up @@ -45,7 +46,7 @@ public static TypeDetails extractMapValueType(TypeDetails memberType) {
}

// otherwise, assume Object
return ClassBasedTypeDetails.OBJECT_TYPE_DETAILS;
return OBJECT_TYPE_DETAILS;
}

private final TypeDetails memberTypeDetails;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
*/
package org.hibernate.models.internal;

import org.hibernate.models.spi.ClassTypeDetails;
import org.hibernate.models.spi.TypeDetails;
import org.hibernate.models.spi.TypeVariableDetails;
import org.hibernate.models.spi.WildcardTypeDetails;

import static org.hibernate.models.spi.StandardTypeDetails.OBJECT_TYPE_DETAILS;

/**
* @author Steve Ebersole
*/
Expand Down Expand Up @@ -42,7 +43,7 @@ public boolean isExtends() {
* @return the upper bound, or {@code Object} if this wildcard has a lower bound
*/
@Override public TypeDetails getExtendsBound() {
return isExtends ? bound : ClassTypeDetails.OBJECT_TYPE_DETAILS;
return isExtends ? bound : OBJECT_TYPE_DETAILS;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@

import static org.hibernate.models.internal.jdk.JdkBuilders.isVoid;
import static org.hibernate.models.internal.util.CollectionHelper.arrayList;
import static org.hibernate.models.spi.StandardTypeDetails.OBJECT_TYPE_DETAILS;

/**
* @author Steve Ebersole
Expand Down Expand Up @@ -83,14 +84,14 @@ public WildcardTypeDetails caseWildcardType(WildcardType wildcardType) {
final int numberOfBounds = CollectionHelper.length( wildcardType.getUpperBounds() );
final TypeDetails upper = numberOfBounds == 1
? switcher.switchType( wildcardType.getUpperBounds()[0] )
: ClassBasedTypeDetails.OBJECT_TYPE_DETAILS;
: OBJECT_TYPE_DETAILS;
return new WildcardTypeDetailsImpl( upper, true );
}

final int numberOfBounds = CollectionHelper.length( lowerBounds );
final TypeDetails lower = numberOfBounds == 1
? switcher.switchType( lowerBounds[0] )
: ClassBasedTypeDetails.OBJECT_TYPE_DETAILS;
: OBJECT_TYPE_DETAILS;
return new WildcardTypeDetailsImpl( lower, false );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,12 @@
*/
package org.hibernate.models.spi;

import org.hibernate.models.internal.ClassTypeDetailsImpl;

/**
* Types which are expressible as a {@linkplain #getClassDetails class}
*
* @author Steve Ebersole
*/
public interface ClassBasedTypeDetails extends TypeDetails {
/**
* Type details for Object
*/
ClassTypeDetails OBJECT_TYPE_DETAILS = new ClassTypeDetailsImpl( ClassDetails.OBJECT_CLASS_DETAILS, Kind.CLASS );

/**
* Details for {@code Class.class}
*/
TypeDetails CLASS_TYPE_DETAILS = new ClassTypeDetailsImpl( ClassDetails.CLASS_CLASS_DETAILS, Kind.CLASS );

/**
* Details for {@code void.class}
*/
TypeDetails VOID_TYPE_DETAILS = new ClassTypeDetailsImpl( ClassDetails.VOID_CLASS_DETAILS, Kind.VOID );

/**
* Details for {@code Void.class}
*/
TypeDetails VOID_OBJECT_TYPE_DETAILS = new ClassTypeDetailsImpl( ClassDetails.VOID_CLASS_DETAILS, Kind.VOID );

ClassDetails getClassDetails();

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
package org.hibernate.models.spi;

import org.hibernate.models.internal.ClassTypeDetailsImpl;
import org.hibernate.models.internal.WildcardTypeDetailsImpl;

/**
* Container for constant static {@link TypeDetails} references used often.
*/
public final class StandardTypeDetails {
/**
* Type details for Object
*/
public static final ClassTypeDetails OBJECT_TYPE_DETAILS = new ClassTypeDetailsImpl(
ClassDetails.OBJECT_CLASS_DETAILS,
TypeDetails.Kind.CLASS
);

/**
* Details for {@code Class.class}
*/
public static final TypeDetails CLASS_TYPE_DETAILS = new ClassTypeDetailsImpl(
ClassDetails.CLASS_CLASS_DETAILS,
TypeDetails.Kind.CLASS
);

/**
* Details for {@code void.class}
*/
public static final TypeDetails VOID_TYPE_DETAILS = new ClassTypeDetailsImpl(
ClassDetails.VOID_CLASS_DETAILS,
TypeDetails.Kind.VOID
);

/**
* Details for {@code Void.class}
*/
public static final TypeDetails VOID_OBJECT_TYPE_DETAILS = new ClassTypeDetailsImpl(
ClassDetails.VOID_CLASS_DETAILS,
TypeDetails.Kind.VOID
);

/**
* A wildcard without a bound. In other words, {@code ?}.
*/
WildcardTypeDetails UNBOUNDED = new WildcardTypeDetailsImpl( null, true );

// restrict instantiation
private StandardTypeDetails() {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import org.hibernate.models.internal.util.CollectionHelper;

import static org.hibernate.models.internal.util.CollectionHelper.arrayList;
import static org.hibernate.models.spi.ClassBasedTypeDetails.OBJECT_TYPE_DETAILS;
import static org.hibernate.models.spi.StandardTypeDetails.OBJECT_TYPE_DETAILS;

/**
* Helper utilities for dealing with {@linkplain TypeDetails}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
*/
package org.hibernate.models.spi;

import org.hibernate.models.internal.WildcardTypeDetailsImpl;

/**
* Models a wildcard type declaration.
*
Expand All @@ -14,11 +12,6 @@
* @author Steve Ebersole
*/
public interface WildcardTypeDetails extends TypeDetails {
/**
* A wildcard without a bound. In other words, {@code ?}.
*/
WildcardTypeDetails UNBOUNDED = new WildcardTypeDetailsImpl( null, true );

TypeDetails getBound();

boolean isExtends();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*/
package org.hibernate.models.testing.tests.classes;

import org.hibernate.models.spi.ClassBasedTypeDetails;
import org.hibernate.models.spi.ClassDetails;
import org.hibernate.models.spi.ClassDetailsRegistry;
import org.hibernate.models.spi.ModelsContext;
Expand All @@ -17,6 +16,7 @@
import jakarta.persistence.MappedSuperclass;

import static org.assertj.core.api.Assertions.assertThat;
import static org.hibernate.models.spi.StandardTypeDetails.OBJECT_TYPE_DETAILS;
import static org.hibernate.models.testing.TestHelper.buildModelContext;

/**
Expand Down Expand Up @@ -44,7 +44,7 @@ void testWrappedId() {
assertThat( wrappedType.getTypeKind() ).isEqualTo( TypeDetails.Kind.TYPE_VARIABLE );
assertThat( wrappedType.asTypeVariable().getIdentifier() ).isEqualTo( "T" );
assertThat( wrappedType.asTypeVariable().getBounds() ).hasSize( 1 );
assertThat( wrappedType.asTypeVariable().getBounds() ).contains( ClassBasedTypeDetails.OBJECT_TYPE_DETAILS );
assertThat( wrappedType.asTypeVariable().getBounds() ).contains( OBJECT_TYPE_DETAILS );
assertThat( wrappedType.isResolved() ).isFalse();
assertThat( wrappedType.determineRawClass().isResolved() ).isTrue();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;
import static org.hibernate.models.spi.StandardTypeDetails.OBJECT_TYPE_DETAILS;
import static org.hibernate.models.testing.TestHelper.createModelContext;

/**
Expand All @@ -21,7 +22,7 @@
public class BaselineTests {
@Test
void testObjectUse() {
assertThat( ClassTypeDetails.OBJECT_TYPE_DETAILS.asClassType().getClassDetails() ).isSameAs( ClassDetails.OBJECT_CLASS_DETAILS );
assertThat( OBJECT_TYPE_DETAILS.asClassType().getClassDetails() ).isSameAs( ClassDetails.OBJECT_CLASS_DETAILS );
}

@Test
Expand Down