KT-3812 Can't work with akka via kotlin - java.lang.AssertionError: Couldn't resolve class *$

KT-4036 Couldn't resolve inner class akka.io.Tcp.Command.class

 #KT-3812 Fixed
 #KT-4036 FIxed
This commit is contained in:
Mikhael Bogdanov
2013-10-31 13:35:17 +04:00
parent c325dfffd9
commit 7857dc5ba9
6 changed files with 44 additions and 7 deletions
@@ -0,0 +1,8 @@
public class kt3812 {
public class Inner {
}
public class Inner$ {
}
}
@@ -0,0 +1,5 @@
fun box(): String {
kt3812().Inner()
kt3812().`Inner$`()
return "OK"
}
@@ -0,0 +1,8 @@
public class kt4036 {
public class Inner1$class {
}
public class Inner2$class {
}
}
@@ -0,0 +1,5 @@
fun box(): String {
kt4036().`Inner1$class`()
kt4036().`Inner2$class`()
return "OK"
}
@@ -140,6 +140,16 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege
doTestWithJava("compiler/testData/codegen/boxWithJava/innerClass/kt3532.kt");
}
@TestMetadata("kt3812.kt")
public void testKt3812() throws Exception {
doTestWithJava("compiler/testData/codegen/boxWithJava/innerClass/kt3812.kt");
}
@TestMetadata("kt4036.kt")
public void testKt4036() throws Exception {
doTestWithJava("compiler/testData/codegen/boxWithJava/innerClass/kt4036.kt");
}
}
@TestMetadata("compiler/testData/codegen/boxWithJava/property")
@@ -208,7 +208,7 @@ public final class JavaClassResolver {
return alreadyResolved;
}
ClassOrNamespaceDescriptor containingDeclaration = resolveParentDescriptor(qualifiedName, javaClass.getOuterClass() != null);
ClassOrNamespaceDescriptor containingDeclaration = resolveParentDescriptor(qualifiedName, javaClass.getOuterClass());
// class may be resolved during resolution of parent
ClassDescriptor cachedDescriptor = classDescriptorCache.get(javaClassToKotlinFqName(qualifiedName));
if (cachedDescriptor != null) {
@@ -374,16 +374,17 @@ public final class JavaClassResolver {
}
@NotNull
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, boolean isInnerClass) {
FqName parentFqName = childClassFQName.parent();
if (isInnerClass) {
ClassDescriptor parentClass = resolveClass(parentFqName, INCLUDE_KOTLIN_SOURCES);
if (parentClass == null) {
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, JavaClass parentClass) {
if (parentClass != null) {
FqName parentFqName = parentClass.getFqName();
ClassDescriptor parentClassDescriptor = resolveClass(parentFqName, INCLUDE_KOTLIN_SOURCES);
if (parentClassDescriptor == null) {
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);
}
return parentClass;
return parentClassDescriptor;
}
else {
FqName parentFqName = childClassFQName.parent();
NamespaceDescriptor parentNamespace = namespaceResolver.resolveNamespace(parentFqName, INCLUDE_KOTLIN_SOURCES);
if (parentNamespace == null) {
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);