Loading from Java: inner subclass of super's inner.

This commit is contained in:
Evgeny Gerashchenko
2013-03-01 23:09:06 +04:00
parent 3c7d413456
commit e67e992bb0
4 changed files with 64 additions and 2 deletions
@@ -214,8 +214,16 @@ public final class JavaFunctionResolver {
FunctionDescriptor functionDescriptor
) {
for (FunctionDescriptor superFunction : superFunctions) {
TypeSubstitutor substitutor = SubstitutionUtils.buildDeepSubstitutor(
((ClassDescriptor) functionDescriptor.getContainingDeclaration()).getDefaultType());
ClassDescriptor klass = (ClassDescriptor) functionDescriptor.getContainingDeclaration();
List<TypeSubstitution> substitutions = Lists.newArrayList();
while (true) {
substitutions.add(SubstitutionUtils.buildDeepSubstitutor(klass.getDefaultType()).getSubstitution());
if (!klass.isInner()) {
break;
}
klass = (ClassDescriptor) klass.getContainingDeclaration();
}
TypeSubstitutor substitutor = TypeSubstitutor.create(substitutions.toArray(new TypeSubstitution[substitutions.size()]));
FunctionDescriptor superFunctionSubstituted = superFunction.substitute(substitutor);
assert superFunctionSubstituted != null :