From 30e921fa8914eda2ac09c7186d48886abda9bc33 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Fri, 25 Apr 2014 11:48:12 +0400 Subject: [PATCH] Diagnostic: support anonymous objects in inline functions --- .../resolve/extension/InlineAnalyzerExtension.java | 12 ++++++++++-- .../diagnostics/tests/inline/anonymousObjects.kt | 12 ++++++++++++ .../tests/inline/unsupportedConstruction.kt | 8 -------- .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ 4 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/inline/anonymousObjects.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/extension/InlineAnalyzerExtension.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/extension/InlineAnalyzerExtension.java index 2ed47229108..2e31c6e9d0c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/extension/InlineAnalyzerExtension.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/extension/InlineAnalyzerExtension.java @@ -63,12 +63,20 @@ public class InlineAnalyzerExtension implements FunctionAnalyzerExtension.Analyz @Override public void visitObjectDeclaration(@NotNull JetObjectDeclaration declaration) { - trace.report(Errors.NOT_YET_SUPPORTED_IN_INLINE.on(declaration, declaration, descriptor)); + if (declaration.getParent() instanceof JetObjectLiteralExpression) { + super.visitObjectDeclaration(declaration); + } else { + trace.report(Errors.NOT_YET_SUPPORTED_IN_INLINE.on(declaration, declaration, descriptor)); + } } @Override public void visitNamedFunction(@NotNull JetNamedFunction function) { - trace.report(Errors.NOT_YET_SUPPORTED_IN_INLINE.on(function, function, descriptor)); + if (function.getParent().getParent() instanceof JetObjectDeclaration) { + super.visitNamedFunction(function); + } else { + trace.report(Errors.NOT_YET_SUPPORTED_IN_INLINE.on(function, function, descriptor)); + } } }; diff --git a/compiler/testData/diagnostics/tests/inline/anonymousObjects.kt b/compiler/testData/diagnostics/tests/inline/anonymousObjects.kt new file mode 100644 index 00000000000..126946fb0bd --- /dev/null +++ b/compiler/testData/diagnostics/tests/inline/anonymousObjects.kt @@ -0,0 +1,12 @@ +// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE + +inline fun inlineFun(p: () -> R) { + val s = object { + + val z = p() + + fun a() { + p() + } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inline/unsupportedConstruction.kt b/compiler/testData/diagnostics/tests/inline/unsupportedConstruction.kt index 3e3b3277637..3cb86a2fbe4 100644 --- a/compiler/testData/diagnostics/tests/inline/unsupportedConstruction.kt +++ b/compiler/testData/diagnostics/tests/inline/unsupportedConstruction.kt @@ -12,14 +12,6 @@ inline fun unsupported() { object BInner {} } - val s = object { - fun a() { - val sInner = object { - fun aInner() {} - } - } - } - fun local() { fun localInner() {} } diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 04037b5dda0..fe692c12988 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -4191,6 +4191,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/diagnostics/tests/inline"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("anonymousObjects.kt") + public void testAnonymousObjects() throws Exception { + doTest("compiler/testData/diagnostics/tests/inline/anonymousObjects.kt"); + } + @TestMetadata("assignment.kt") public void testAssignment() throws Exception { doTest("compiler/testData/diagnostics/tests/inline/assignment.kt");