Make all nested inlined closure classes public
#KT-6987 Fixed
This commit is contained in:
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
@@ -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");
|
||||
|
||||
+6
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user