@@ -900,87 +900,72 @@ public boolean isAssignable(Map<String, BaseType> typeBounds, ObjectType left, O
900900 }
901901 }
902902
903- private ObjectType searchSuperParameterizedType (long superHashCode , String superInternalTypeName , ObjectType objectType ) {
904- if (objectType .equals (TYPE_OBJECT )) {
903+ private ObjectType searchSuperParameterizedType (long leftHashCode , String leftInternalTypeName , ObjectType right ) {
904+ if (right .equals (TYPE_OBJECT )) {
905905 return null ;
906906 }
907907
908- Long key = Long .valueOf (superHashCode + objectType .hashCode ());
908+ Long key = Long .valueOf (leftHashCode + right .hashCode ());
909909
910910 if (superParameterizedObjectTypes .containsKey (key )) {
911911 return superParameterizedObjectTypes .get (key );
912912 }
913913
914- String rightInternalName = objectType .getInternalName ();
914+ String rightInternalTypeName = right .getInternalName ();
915915
916- if (superInternalTypeName .equals (rightInternalName )) {
917- superParameterizedObjectTypes .put (key , objectType );
918- return objectType ;
916+ if (leftInternalTypeName .equals (rightInternalTypeName )) {
917+ superParameterizedObjectTypes .put (key , right );
918+ return right ;
919919 }
920920
921- TypeTypes rightTypeTypes = makeTypeTypes (rightInternalName );
921+ TypeTypes rightTypeTypes = makeTypeTypes (rightInternalTypeName );
922922
923923 if (rightTypeTypes != null ) {
924- if ((rightTypeTypes .typeParameters == null ) || (objectType .getTypeArguments () == null )) {
925- if (rightTypeTypes .superType != null ) {
926- ObjectType ot = searchSuperParameterizedType (superHashCode , superInternalTypeName , rightTypeTypes .superType .createType (null ));
924+ BindTypesToTypesVisitor bindTypesToTypesVisitor = new BindTypesToTypesVisitor ();
925+ Map <String , TypeArgument > bindings ;
927926
928- if (ot != null ) {
929- superParameterizedObjectTypes .put (key , ot );
930- return ot ;
931- }
932- }
933- if (rightTypeTypes .interfaces != null ) {
934- for (Type interfaze : rightTypeTypes .interfaces ) {
935- ObjectType ot = searchSuperParameterizedType (superHashCode , superInternalTypeName , ((ObjectType )interfaze ).createType (null ));
936-
937- if (ot != null ) {
938- superParameterizedObjectTypes .put (key , ot );
939- return ot ;
940- }
941- }
942- }
927+ if ((rightTypeTypes .typeParameters == null ) || (right .getTypeArguments () == null )) {
928+ bindings = Collections .emptyMap ();
943929 } else {
944- BindTypesToTypesVisitor bindTypesToTypesVisitor = new BindTypesToTypesVisitor ();
945- HashMap <String , TypeArgument > bindings = new HashMap <>();
930+ bindings = new HashMap <>();
946931
947- if (rightTypeTypes .typeParameters .isList () && objectType .getTypeArguments ().isTypeArgumentList ()) {
932+ if (rightTypeTypes .typeParameters .isList () && right .getTypeArguments ().isTypeArgumentList ()) {
948933 Iterator <TypeParameter > iteratorTypeParameter = rightTypeTypes .typeParameters .iterator ();
949- Iterator <TypeArgument > iteratorTypeArgument = objectType .getTypeArguments ().getTypeArgumentList ().iterator ();
934+ Iterator <TypeArgument > iteratorTypeArgument = right .getTypeArguments ().getTypeArgumentList ().iterator ();
950935
951936 while (iteratorTypeParameter .hasNext ()) {
952937 bindings .put (iteratorTypeParameter .next ().getIdentifier (), iteratorTypeArgument .next ());
953938 }
954939 } else {
955- bindings .put (rightTypeTypes .typeParameters .getFirst ().getIdentifier (), objectType .getTypeArguments ().getTypeArgumentFirst ());
940+ bindings .put (rightTypeTypes .typeParameters .getFirst ().getIdentifier (), right .getTypeArguments ().getTypeArgumentFirst ());
956941 }
942+ }
957943
958- bindTypesToTypesVisitor .setBindings (bindings );
944+ bindTypesToTypesVisitor .setBindings (bindings );
945+
946+ if (rightTypeTypes .superType != null ) {
947+ bindTypesToTypesVisitor .init ();
948+ rightTypeTypes .superType .accept (bindTypesToTypesVisitor );
949+ ObjectType ot = (ObjectType ) bindTypesToTypesVisitor .getType ();
950+ ot = searchSuperParameterizedType (leftHashCode , leftInternalTypeName , ot );
959951
960- if (rightTypeTypes .superType != null ) {
952+ if (ot != null ) {
953+ superParameterizedObjectTypes .put (key , ot );
954+ return ot ;
955+ }
956+ }
957+ if (rightTypeTypes .interfaces != null ) {
958+ for (Type interfaze : rightTypeTypes .interfaces ) {
961959 bindTypesToTypesVisitor .init ();
962- rightTypeTypes . superType .accept (bindTypesToTypesVisitor );
960+ interfaze .accept (bindTypesToTypesVisitor );
963961 ObjectType ot = (ObjectType ) bindTypesToTypesVisitor .getType ();
964- ot = searchSuperParameterizedType (superHashCode , superInternalTypeName , ot );
962+ ot = searchSuperParameterizedType (leftHashCode , leftInternalTypeName , ot );
965963
966964 if (ot != null ) {
967965 superParameterizedObjectTypes .put (key , ot );
968966 return ot ;
969967 }
970968 }
971- if (rightTypeTypes .interfaces != null ) {
972- for (Type interfaze : rightTypeTypes .interfaces ) {
973- bindTypesToTypesVisitor .init ();
974- interfaze .accept (bindTypesToTypesVisitor );
975- ObjectType ot = (ObjectType ) bindTypesToTypesVisitor .getType ();
976- ot = searchSuperParameterizedType (superHashCode , superInternalTypeName , ot );
977-
978- if (ot != null ) {
979- superParameterizedObjectTypes .put (key , ot );
980- return ot ;
981- }
982- }
983- }
984969 }
985970 }
986971
0 commit comments