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");
|
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")
|
@TestMetadata("compiler/testData/codegen/boxWithJava/property")
|
||||||
|
|||||||
+8
-7
@@ -208,7 +208,7 @@ public final class JavaClassResolver {
|
|||||||
return alreadyResolved;
|
return alreadyResolved;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassOrNamespaceDescriptor containingDeclaration = resolveParentDescriptor(qualifiedName, javaClass.getOuterClass() != null);
|
ClassOrNamespaceDescriptor containingDeclaration = resolveParentDescriptor(qualifiedName, javaClass.getOuterClass());
|
||||||
// class may be resolved during resolution of parent
|
// class may be resolved during resolution of parent
|
||||||
ClassDescriptor cachedDescriptor = classDescriptorCache.get(javaClassToKotlinFqName(qualifiedName));
|
ClassDescriptor cachedDescriptor = classDescriptorCache.get(javaClassToKotlinFqName(qualifiedName));
|
||||||
if (cachedDescriptor != null) {
|
if (cachedDescriptor != null) {
|
||||||
@@ -374,16 +374,17 @@ public final class JavaClassResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, boolean isInnerClass) {
|
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, JavaClass parentClass) {
|
||||||
FqName parentFqName = childClassFQName.parent();
|
if (parentClass != null) {
|
||||||
if (isInnerClass) {
|
FqName parentFqName = parentClass.getFqName();
|
||||||
ClassDescriptor parentClass = resolveClass(parentFqName, INCLUDE_KOTLIN_SOURCES);
|
ClassDescriptor parentClassDescriptor = resolveClass(parentFqName, INCLUDE_KOTLIN_SOURCES);
|
||||||
if (parentClass == null) {
|
if (parentClassDescriptor == null) {
|
||||||
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);
|
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);
|
||||||
}
|
}
|
||||||
return parentClass;
|
return parentClassDescriptor;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
FqName parentFqName = childClassFQName.parent();
|
||||||
NamespaceDescriptor parentNamespace = namespaceResolver.resolveNamespace(parentFqName, INCLUDE_KOTLIN_SOURCES);
|
NamespaceDescriptor parentNamespace = namespaceResolver.resolveNamespace(parentFqName, INCLUDE_KOTLIN_SOURCES);
|
||||||
if (parentNamespace == null) {
|
if (parentNamespace == null) {
|
||||||
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);
|
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);
|
||||||
|
|||||||
Reference in New Issue
Block a user