Make all nested inlined closure classes public

#KT-6987 Fixed
This commit is contained in:
Denis Zharkov
2016-01-13 13:00:09 +03:00
parent 328169cd2e
commit b8c79e689b
6 changed files with 46 additions and 2 deletions
@@ -39,7 +39,6 @@ import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.load.java.JavaVisibilities;
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap;
import org.jetbrains.kotlin.resolve.DeprecationUtilKt;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt;
@@ -269,7 +268,7 @@ public class AsmUtil {
}
public static int getVisibilityAccessFlagForAnonymous(@NotNull ClassDescriptor descriptor) {
return InlineUtil.isInline(descriptor.getContainingDeclaration()) ? ACC_PUBLIC : NO_FLAG_PACKAGE_PRIVATE;
return InlineUtil.isInlineOrContainingInline(descriptor.getContainingDeclaration()) ? ACC_PUBLIC : NO_FLAG_PACKAGE_PRIVATE;
}
public static int calculateInnerClassAccessFlags(@NotNull ClassDescriptor innerClass) {
@@ -42,6 +42,12 @@ public class InlineUtil {
return descriptor instanceof SimpleFunctionDescriptor && getInlineStrategy(descriptor).isInline();
}
public static boolean isInlineOrContainingInline(@Nullable DeclarationDescriptor descriptor) {
if (isInline(descriptor)) return true;
if (descriptor == null) return false;
return isInlineOrContainingInline(descriptor.getContainingDeclaration());
}
@NotNull
public static InlineStrategy getInlineStrategy(@NotNull DeclarationDescriptor descriptor) {
if (descriptor instanceof FunctionDescriptor &&
@@ -0,0 +1,10 @@
import test.*
fun box(): String {
val x1 = foo1()()
if (x1 != "OK") return "fail 1: $x1"
foo2()().run()
return test.sideEffects
}
@@ -0,0 +1,17 @@
package test
inline fun foo1() = run {
{
"OK"
}
}
var sideEffects = "fail"
inline fun foo2() = run {
{
Runnable {
sideEffects = "OK"
}
}
}
@@ -643,6 +643,12 @@ public class BlackBoxInlineCodegenTestGenerated extends AbstractBlackBoxInlineCo
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxInline/innerClasses"), Pattern.compile("^(.+)\\.1.kt$"), true);
}
@TestMetadata("innerLambda.1.kt")
public void testInnerLambda() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/innerClasses/innerLambda.1.kt");
doTestMultiFileWithInlineCheck(fileName);
}
@TestMetadata("kt10259.1.kt")
public void testKt10259() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/innerClasses/kt10259.1.kt");
@@ -643,6 +643,12 @@ public class CompileKotlinAgainstInlineKotlinTestGenerated extends AbstractCompi
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxInline/innerClasses"), Pattern.compile("^(.+)\\.1.kt$"), true);
}
@TestMetadata("innerLambda.1.kt")
public void testInnerLambda() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/innerClasses/innerLambda.1.kt");
doBoxTestWithInlineCheck(fileName);
}
@TestMetadata("kt10259.1.kt")
public void testKt10259() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/innerClasses/kt10259.1.kt");