Skip to content

Commit 5707b2b

Browse files
author
emmanue1
committed
Fix generic cast missing
1 parent 05ab0ac commit 5707b2b

File tree

1 file changed

+33
-48
lines changed
  • src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/util

1 file changed

+33
-48
lines changed

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/util/TypeMaker.java

Lines changed: 33 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)