Skip to content

Commit

Permalink
HV-1763 Improve performances of ExecutableHelper#getSignature()
Browse files Browse the repository at this point in the history
  • Loading branch information
gsmet committed Apr 10, 2020
1 parent 32e58c9 commit 69100d8
Showing 1 changed file with 33 additions and 8 deletions.
Expand Up @@ -14,8 +14,6 @@
import java.lang.reflect.Modifier;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.hibernate.validator.internal.properties.Callable;
import org.hibernate.validator.internal.util.classhierarchy.Filters;
Expand Down Expand Up @@ -181,10 +179,26 @@ public static String getSignature(Executable executable) {
return getSignature( getSimpleName( executable ), executable.getParameterTypes() );
}

/**
* This method needs to be fast.
* <p>
* The purpose of it is to get uniqueness, we don't really care about prettiness.
*/
public static String getSignature(String name, Class<?>[] parameterTypes) {
return Stream.of( parameterTypes )
.map( t -> t.getName() )
.collect( Collectors.joining( ",", name + "(", ")" ) );
StringBuilder signature = new StringBuilder( name.length() + 2 + parameterTypes.length * 25 );
signature.append( name ).append( '(' );
boolean separator = false;
for ( Class<?> parameterType : parameterTypes ) {
if ( separator ) {
signature.append( ',' );
}
else {
separator = true;
}
signature.append( parameterType.getName() );
}
signature.append( ')' );
return signature.toString();
}

/**
Expand All @@ -197,9 +211,20 @@ public static String getSignature(String name, Class<?>[] parameterTypes) {
* @return A string representation of the given executable.
*/
public static String getExecutableAsString(String name, Class<?>... parameterTypes) {
return Stream.of( parameterTypes )
.map( t -> t.getSimpleName() )
.collect( Collectors.joining( ", ", name + "(", ")" ) );
StringBuilder signature = new StringBuilder( name.length() + 2 + parameterTypes.length * 25 );
signature.append( name ).append( '(' );
boolean separator = false;
for ( Class<?> parameterType : parameterTypes ) {
if ( separator ) {
signature.append( ", " );
}
else {
separator = true;
}
signature.append( parameterType.getSimpleName() );
}
signature.append( ')' );
return signature.toString();
}

public static ElementType getElementType(Executable executable) {
Expand Down

0 comments on commit 69100d8

Please sign in to comment.