Deserialize constructors of static nested classes correctly
Similar to what is done in TopDownAnalyzer #KT-4081 Fixed
This commit is contained in:
@@ -290,6 +290,13 @@ public class CodegenUtil {
|
||||
//TODO: It's best to use this code also for compilation against sources
|
||||
// but sometimes structures that have expectedThisObject (bug?) mapped to static classes
|
||||
ReceiverParameterDescriptor expectedThisObject = descriptor.getExpectedThisObject();
|
||||
return expectedThisObject != null ? (ClassDescriptor) expectedThisObject.getContainingDeclaration() : null;
|
||||
if (expectedThisObject != null) {
|
||||
ClassDescriptor expectedThisClass = (ClassDescriptor) expectedThisObject.getContainingDeclaration();
|
||||
if (!expectedThisClass.getKind().isObject()) {
|
||||
return expectedThisClass;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -25,11 +25,11 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.*;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorFactory;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.storage.StorageManager;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||
import org.jetbrains.jet.lang.types.Variance;
|
||||
import org.jetbrains.jet.storage.StorageManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -267,7 +267,7 @@ public class DescriptorDeserializer {
|
||||
classDescriptor.getTypeConstructor().getParameters(),
|
||||
local.valueParameters(proto.getValueParameterList()),
|
||||
visibility(Flags.VISIBILITY.get(proto.getFlags())),
|
||||
!classDescriptor.isInner()
|
||||
DescriptorUtils.isConstructorOfStaticNestedClass(descriptor)
|
||||
);
|
||||
descriptor.setReturnType(local.typeDeserializer.type(proto.getReturnType()));
|
||||
return descriptor;
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package a
|
||||
|
||||
object CartRoutes {
|
||||
class RemoveOrderItem()
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import a.CartRoutes
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val r = CartRoutes.RemoveOrderItem()
|
||||
}
|
||||
@@ -16,14 +16,17 @@
|
||||
|
||||
package org.jetbrains.jet.codegen;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.test.InnerTestClasses;
|
||||
import org.jetbrains.jet.test.TestMetadata;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
import org.jetbrains.jet.codegen.AbstractBytecodeTextTest;
|
||||
|
||||
/** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
|
||||
+5
@@ -36,6 +36,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/compileKotlinAgainstKotlin"), Pattern.compile("^(.+)\\.A.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("ClassInObject.A.kt")
|
||||
public void testClassInObject() throws Exception {
|
||||
doTest("compiler/testData/compileKotlinAgainstKotlin/ClassInObject.A.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ClassObjectMember.A.kt")
|
||||
public void testClassObjectMember() throws Exception {
|
||||
doTest("compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.A.kt");
|
||||
|
||||
Reference in New Issue
Block a user