From d57cc09ba2a1cb5460a53d0f06a8c4f0804845b1 Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 18 Jul 2019 14:43:19 +0100 Subject: [PATCH] Fix incorrect use of explicit super type when calling indirect super methods. --- .../analysis/opgraph/Op02WithProcessedDataAndRefs.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/org/benf/cfr/reader/bytecode/analysis/opgraph/Op02WithProcessedDataAndRefs.java b/src/org/benf/cfr/reader/bytecode/analysis/opgraph/Op02WithProcessedDataAndRefs.java index 01c9dd5f1..e2f7a87fc 100644 --- a/src/org/benf/cfr/reader/bytecode/analysis/opgraph/Op02WithProcessedDataAndRefs.java +++ b/src/org/benf/cfr/reader/bytecode/analysis/opgraph/Op02WithProcessedDataAndRefs.java @@ -339,8 +339,13 @@ private Statement buildInvoke(Method thisCallerMethod) { boolean superOnInterface = false; if (isSuper) { JavaTypeInstance superContainer = function.getClassEntry().getTypeInstance().getDeGenerifiedType(); - JavaTypeInstance baseType = thisCallerMethod.getClassFile().getBaseClassType().getDeGenerifiedType(); - superOnInterface = !baseType.equals(superContainer); + if (superContainer instanceof JavaRefTypeInstance) { + ClassFile classFile = ((JavaRefTypeInstance) superContainer).getClassFile(); + if (classFile != null && classFile.isInterface()) { + JavaTypeInstance baseType = thisCallerMethod.getClassFile().getBaseClassType().getDeGenerifiedType(); + superOnInterface = !baseType.equals(superContainer); + } + } } JavaTypeInstance bestType = object.getInferredJavaType().getJavaTypeInstance();