From f8815d9450b34a1967b892a1f7c4e072871efd13 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 10 Jul 2015 16:04:13 +0300 Subject: [PATCH] Test visibility of anonymous classes for callable references --- .../codegen/PropertyReferenceCodegen.kt | 2 +- .../visibility/functionReference.kt | 9 ++++ .../functionReferenceInInlineFunction.kt | 9 ++++ .../visibility/propertyReference.kt | 9 ++++ .../propertyReferenceInInlineFunction.kt | 9 ++++ .../flags/WriteFlagsTestGenerated.java | 42 +++++++++++++++++++ 6 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/writeFlags/callableReference/visibility/functionReference.kt create mode 100644 compiler/testData/writeFlags/callableReference/visibility/functionReferenceInInlineFunction.kt create mode 100644 compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt create mode 100644 compiler/testData/writeFlags/callableReference/visibility/propertyReferenceInInlineFunction.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt index c7918316638..be819795dc8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt @@ -65,7 +65,7 @@ public class PropertyReferenceCodegen( v.defineClass( element, V1_6, - ACC_FINAL or ACC_SUPER or AsmUtil.getVisibilityAccessFlagForAnonymous(classDescriptor), // TODO: test inline + ACC_FINAL or ACC_SUPER or AsmUtil.getVisibilityAccessFlagForAnonymous(classDescriptor), asmType.getInternalName(), null, superAsmType.getInternalName(), diff --git a/compiler/testData/writeFlags/callableReference/visibility/functionReference.kt b/compiler/testData/writeFlags/callableReference/visibility/functionReference.kt new file mode 100644 index 00000000000..6ff451d264e --- /dev/null +++ b/compiler/testData/writeFlags/callableReference/visibility/functionReference.kt @@ -0,0 +1,9 @@ +class A { + fun foo() {} + + val bar = A::foo +} + +// TESTED_OBJECT_KIND: class +// TESTED_OBJECTS: A$bar$1 +// FLAGS: ACC_FINAL, ACC_SUPER diff --git a/compiler/testData/writeFlags/callableReference/visibility/functionReferenceInInlineFunction.kt b/compiler/testData/writeFlags/callableReference/visibility/functionReferenceInInlineFunction.kt new file mode 100644 index 00000000000..ac3186c0552 --- /dev/null +++ b/compiler/testData/writeFlags/callableReference/visibility/functionReferenceInInlineFunction.kt @@ -0,0 +1,9 @@ +class A { + fun foo() {} + + inline fun bar() = A::foo +} + +// TESTED_OBJECT_KIND: class +// TESTED_OBJECTS: A$bar$1 +// FLAGS: ACC_FINAL, ACC_PUBLIC, ACC_SUPER diff --git a/compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt b/compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt new file mode 100644 index 00000000000..8f737e2a173 --- /dev/null +++ b/compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt @@ -0,0 +1,9 @@ +class A { + val foo = "" + + val bar = A::foo +} + +// TESTED_OBJECT_KIND: class +// TESTED_OBJECTS: A$bar$1 +// FLAGS: ACC_FINAL, ACC_SUPER diff --git a/compiler/testData/writeFlags/callableReference/visibility/propertyReferenceInInlineFunction.kt b/compiler/testData/writeFlags/callableReference/visibility/propertyReferenceInInlineFunction.kt new file mode 100644 index 00000000000..261fa973e3e --- /dev/null +++ b/compiler/testData/writeFlags/callableReference/visibility/propertyReferenceInInlineFunction.kt @@ -0,0 +1,9 @@ +class A { + val foo = "" + + inline fun bar() = A::foo +} + +// TESTED_OBJECT_KIND: class +// TESTED_OBJECTS: A$bar$1 +// FLAGS: ACC_FINAL, ACC_PUBLIC, ACC_SUPER diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java index e94cfa19831..41638666d1d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java @@ -35,6 +35,48 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("compiler/testData/writeFlags/callableReference") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class CallableReference extends AbstractWriteFlagsTest { + public void testAllFilesPresentInCallableReference() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/callableReference"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("compiler/testData/writeFlags/callableReference/visibility") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Visibility extends AbstractWriteFlagsTest { + public void testAllFilesPresentInVisibility() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/callableReference/visibility"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("functionReference.kt") + public void testFunctionReference() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/writeFlags/callableReference/visibility/functionReference.kt"); + doTest(fileName); + } + + @TestMetadata("functionReferenceInInlineFunction.kt") + public void testFunctionReferenceInInlineFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/writeFlags/callableReference/visibility/functionReferenceInInlineFunction.kt"); + doTest(fileName); + } + + @TestMetadata("propertyReference.kt") + public void testPropertyReference() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt"); + doTest(fileName); + } + + @TestMetadata("propertyReferenceInInlineFunction.kt") + public void testPropertyReferenceInInlineFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/writeFlags/callableReference/visibility/propertyReferenceInInlineFunction.kt"); + doTest(fileName); + } + } + } + @TestMetadata("compiler/testData/writeFlags/class") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)