Make default methods for inlineOnly and reified functions package private

This commit is contained in:
Michael Bogdanov
2016-10-27 11:02:46 +03:00
parent 455fef90c0
commit 0910f166a5
4 changed files with 33 additions and 1 deletions
@@ -50,6 +50,7 @@ import org.jetbrains.kotlin.psi.KtParameter;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt;
import org.jetbrains.kotlin.resolve.calls.util.UnderscoreUtilKt;
import org.jetbrains.kotlin.resolve.constants.ArrayValue;
import org.jetbrains.kotlin.resolve.constants.ConstantValue;
@@ -847,7 +848,9 @@ public class FunctionCodegen {
// $default methods are never private to be accessible from other class files (e.g. inner) without the need of synthetic accessors
// $default methods are never protected to be accessible from subclass nested classes
int visibilityFlag = Visibilities.isPrivate(functionDescriptor.getVisibility()) ? AsmUtil.NO_FLAG_PACKAGE_PRIVATE : Opcodes.ACC_PUBLIC;
int visibilityFlag = Visibilities.isPrivate(functionDescriptor.getVisibility()) ||
AnnotationUtilKt.isInlineOnlyOrReified(functionDescriptor) ?
AsmUtil.NO_FLAG_PACKAGE_PRIVATE : Opcodes.ACC_PUBLIC;
int flags = visibilityFlag | getDeprecatedAccessFlag(functionDescriptor) | ACC_SYNTHETIC;
if (!(functionDescriptor instanceof ConstructorDescriptor)) {
flags |= ACC_STATIC | ACC_BRIDGE;
@@ -0,0 +1,10 @@
class MyClass() {
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.internal.InlineOnly
inline fun test(s: String = "") {
}
}
// TESTED_OBJECT_KIND: function
// TESTED_OBJECTS: MyClass, test$default
// FLAGS: ACC_STATIC, ACC_BRIDGE, ACC_SYNTHETIC
@@ -0,0 +1,7 @@
class MyClass() {
inline fun <reified T> test(s: String = "") {}
}
// TESTED_OBJECT_KIND: function
// TESTED_OBJECTS: MyClass, test$default
// FLAGS: ACC_STATIC, ACC_BRIDGE, ACC_SYNTHETIC
@@ -555,6 +555,18 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
doTest(fileName);
}
@TestMetadata("inlineOnlyFunInClass.kt")
public void testInlineOnlyFunInClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/function/withDefaultArguments/inlineOnlyFunInClass.kt");
doTest(fileName);
}
@TestMetadata("reifiedFunInClass.kt")
public void testReifiedFunInClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/function/withDefaultArguments/reifiedFunInClass.kt");
doTest(fileName);
}
@TestMetadata("topLevelFun.kt")
public void testTopLevelFun() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/function/withDefaultArguments/topLevelFun.kt");