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:
@@ -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"
|
||||
}
|
||||
+10
@@ -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")
|
||||
|
||||
+8
-7
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user