JVM_IR: make constructors of named local classes public
They are accessible through reflection
This commit is contained in:
@@ -17,6 +17,8 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
|||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.util.PatchDeclarationParentsVisitor
|
import org.jetbrains.kotlin.ir.util.PatchDeclarationParentsVisitor
|
||||||
|
import org.jetbrains.kotlin.ir.util.isAnonymousObject
|
||||||
|
import org.jetbrains.kotlin.ir.util.parentAsClass
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||||
@@ -122,7 +124,10 @@ internal val localDeclarationsPhase = makeIrFilePhase<CommonBackendContext>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun forConstructor(declaration: IrConstructor, inInlineFunctionScope: Boolean): Visibility =
|
override fun forConstructor(declaration: IrConstructor, inInlineFunctionScope: Boolean): Visibility =
|
||||||
scopedVisibility(inInlineFunctionScope)
|
if (declaration.parentAsClass.isAnonymousObject)
|
||||||
|
scopedVisibility(inInlineFunctionScope)
|
||||||
|
else
|
||||||
|
declaration.visibility
|
||||||
|
|
||||||
private fun scopedVisibility(inInlineFunctionScope: Boolean): Visibility =
|
private fun scopedVisibility(inInlineFunctionScope: Boolean): Visibility =
|
||||||
if (inInlineFunctionScope) Visibilities.PUBLIC else JavaVisibilities.PACKAGE_VISIBILITY
|
if (inInlineFunctionScope) Visibilities.PUBLIC else JavaVisibilities.PACKAGE_VISIBILITY
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
class Foo {
|
||||||
|
fun a() {
|
||||||
|
class S
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TESTED_OBJECT_KIND: function
|
||||||
|
// TESTED_OBJECTS: Foo$a$S, <init>
|
||||||
|
// FLAGS: ACC_PUBLIC
|
||||||
+5
@@ -477,6 +477,11 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
|
|||||||
runTest("compiler/testData/writeFlags/function/constructors/enum.kt");
|
runTest("compiler/testData/writeFlags/function/constructors/enum.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("localClass.kt")
|
||||||
|
public void testLocalClass() throws Exception {
|
||||||
|
runTest("compiler/testData/writeFlags/function/constructors/localClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("objectInClass.kt")
|
@TestMetadata("objectInClass.kt")
|
||||||
public void testObjectInClass() throws Exception {
|
public void testObjectInClass() throws Exception {
|
||||||
runTest("compiler/testData/writeFlags/function/constructors/objectInClass.kt");
|
runTest("compiler/testData/writeFlags/function/constructors/objectInClass.kt");
|
||||||
|
|||||||
+5
@@ -477,6 +477,11 @@ public class IrWriteFlagsTestGenerated extends AbstractIrWriteFlagsTest {
|
|||||||
runTest("compiler/testData/writeFlags/function/constructors/enum.kt");
|
runTest("compiler/testData/writeFlags/function/constructors/enum.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("localClass.kt")
|
||||||
|
public void testLocalClass() throws Exception {
|
||||||
|
runTest("compiler/testData/writeFlags/function/constructors/localClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("objectInClass.kt")
|
@TestMetadata("objectInClass.kt")
|
||||||
public void testObjectInClass() throws Exception {
|
public void testObjectInClass() throws Exception {
|
||||||
runTest("compiler/testData/writeFlags/function/constructors/objectInClass.kt");
|
runTest("compiler/testData/writeFlags/function/constructors/objectInClass.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user