Buggy code:
public final class ClassReflectionIndex < T > { private final Class < T > indexedClass ; private final Map < String , Field > fields ; private final Map < ClassReflectionIndex . ParamList , Constructor < T > > constructors ; private final Map < ClassReflectionIndex . ParamNameList , Constructor < T > > constructorsByTypeName ; private final Map < String , Map < ClassReflectionIndex . ParamList , Map < Class < ? > , Method > > > methods ; private final Map < String , Map < ClassReflectionIndex . ParamNameList , Map < String , Method > > > methodsByTypeName ; @ SuppressWarnings ( { "unchecked" } ) ClassReflectionIndex ( final Class < T > indexedClass , final DeploymentReflectionIndex deploymentReflectionIndex ) { } private static final ClassReflectionIndex . ParamList EMPTY = new ClassReflectionIndex . ParamList ( new Class < ? > [ 0 ] ) ; private static final ClassReflectionIndex . ParamNameList EMPTY_NAMES = new ClassReflectionIndex . ParamNameList ( new String [ 0 ] ) ; private static void addMethod ( Map < String , Map < ClassReflectionIndex . ParamList , Map < Class < ? > , Method > > > methods , Method method ) { } private static void addMethodByTypeName ( Map < String , Map < ClassReflectionIndex . ParamNameList , Map < String , Method > > > methodsByTypeName , Method method ) { } private static ClassReflectionIndex . ParamNameList createParamNameList ( final Class < ? > [ ] types ) { } private static ClassReflectionIndex . ParamNameList createParamNameList ( final String [ ] typeNames ) { } private static ClassReflectionIndex . ParamList createParamList ( final Class < ? > [ ] types ) { } public Class < T > getIndexedClass ( ) { } public Field getField ( String name ) { } public Collection < Field > getFields ( ) { } public Method getMethod ( Class < ? > returnType , String name , Class < ? > ... paramTypes ) { } public Method getMethod ( Method method ) { } public Method getMethod ( String returnType , String name , String ... paramTypeNames ) { } public Method getMethod ( MethodIdentifier methodIdentifier ) { } public Collection < Method > getMethods ( String name , Class < ? > ... paramTypes ) { } public Collection < Method > getMethods ( String name , String ... paramTypeNames ) { } public Collection < Method > getAllMethods ( String name ) { } public Collection < Method > getAllMethods ( String name , int paramCount ) { } public Collection < Method > getMethods ( ) { } public Collection < Constructor < T > > getConstructors ( ) { } public Constructor < T > getConstructor ( Class < ? > ... paramTypes ) { } public Constructor < T > getConstructor ( String ... paramTypeNames ) { } private static final class ParamList { private final Class < ? > [ ] types ; private final int hashCode ; ParamList ( final Class < ? > [ ] types ) { } Class < ? > [ ] getTypes ( ) { } public boolean equals ( Object other ) { return ( other instanceof ClassReflectionIndex . ParamList ) && ( equals ( ( ( ClassReflectionIndex . ParamList ) ( other ) ) ) ) ; } public boolean equals ( ClassReflectionIndex . ParamList other ) { } public int hashCode ( ) { } } private static final class ParamNameList { private final String [ ] types ; private final int hashCode ; ParamNameList ( final String [ ] types ) { } String [ ] getTypes ( ) { } public boolean equals ( Object other ) { <START_BUG> return ( other instanceof ClassReflectionIndex . ParamList ) && ( equals ( ( ( ClassReflectionIndex . ParamList ) ( other ) ) ) ) ; <END_BUG> } public boolean equals ( ClassReflectionIndex . ParamNameList other ) { } public int hashCode ( ) { } } }

Fix:
return ( other instanceof ClassReflectionIndex . ParamNameList ) && ( equals ( ( ( ClassReflectionIndex . ParamNameList ) ( other ) ) ) ) ;