HHH-8068 Suggestion for improvement.

This commit is contained in:
ammachado 2013-03-13 14:42:39 -03:00 committed by Brett Meyer
parent 9ee5392456
commit d0a7a017a5
1 changed files with 15 additions and 1 deletions

View File

@ -39,6 +39,7 @@ import org.hibernate.internal.util.StringHelper;
import org.hibernate.transform.AliasToBeanConstructorResultTransformer; import org.hibernate.transform.AliasToBeanConstructorResultTransformer;
import org.hibernate.transform.ResultTransformer; import org.hibernate.transform.ResultTransformer;
import org.hibernate.transform.Transformers; import org.hibernate.transform.Transformers;
import org.hibernate.type.PrimitiveType;
import org.hibernate.type.Type; import org.hibernate.type.Type;
/** /**
@ -184,10 +185,23 @@ public class ConstructorNode extends SelectExpressionList implements AggregatedS
catch ( PropertyNotFoundException e ) { catch ( PropertyNotFoundException e ) {
// this is the exception returned by ReflectHelper.getConstructor() if it cannot // this is the exception returned by ReflectHelper.getConstructor() if it cannot
// locate an appropriate constructor // locate an appropriate constructor
throw new DetailedSemanticException( "Unable to locate appropriate constructor on class [" + className + "]", e ); String formattedMessage = formatMissingContructorExceptionMessage(className);
throw new DetailedSemanticException( formattedMessage, e );
} }
} }
private String formatMissingContructorExceptionMessage(String className) {
String[] params = new String[constructorArgumentTypes.length];
for ( int j = 0; j < constructorArgumentTypes.length; j++ ) {
params[j] = constructorArgumentTypes[j] instanceof PrimitiveType ?
( ( PrimitiveType ) constructorArgumentTypes[j] ).getPrimitiveClass().getName() :
constructorArgumentTypes[j].getReturnedClass().getName();
}
String formattedList = params.length == 0 ? "no arguments constructor" : StringHelper.join(", ", params);
return String.format( "Unable to locate appropriate constructor on class [%s]. Expected types are: %s",
className, formattedList );
}
public Constructor getConstructor() { public Constructor getConstructor() {
return constructor; return constructor;
} }