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 201d1e654a0..8a9a638bdbf 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 @@ -128,11 +128,21 @@ public class InlineAnalyzerExtension implements FunctionAnalyzerExtension.Analyz hasInlinable |= checkInlinableParameter(receiverParameter, receiver, functionDescriptor, trace); } + hasInlinable |= containsReifiedTypeParameters(functionDescriptor); + if (!hasInlinable) { trace.report(Errors.NOTHING_TO_INLINE.on(function, functionDescriptor)); } } + private static boolean containsReifiedTypeParameters(@NotNull FunctionDescriptor descriptor) { + for (TypeParameterDescriptor typeParameterDescriptor : descriptor.getTypeParameters()) { + if (typeParameterDescriptor.isReified()) return true; + } + + return false; + } + public static boolean checkInlinableParameter( @NotNull CallableDescriptor parameter, @NotNull JetElement expression, diff --git a/compiler/testData/diagnostics/tests/generics/tpAsReified/Conventions.kt b/compiler/testData/diagnostics/tests/generics/tpAsReified/Conventions.kt index 797d5cdff9e..bb0546bf698 100644 --- a/compiler/testData/diagnostics/tests/generics/tpAsReified/Conventions.kt +++ b/compiler/testData/diagnostics/tests/generics/tpAsReified/Conventions.kt @@ -1,4 +1,4 @@ -// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER +// !DIAGNOSTICS: -UNUSED_PARAMETER inline fun T.plus(p: T): T = this diff --git a/compiler/testData/diagnostics/tests/generics/tpAsReified/InFunction.kt b/compiler/testData/diagnostics/tests/generics/tpAsReified/InFunction.kt index 34157dc067a..e673b9e1fa5 100644 --- a/compiler/testData/diagnostics/tests/generics/tpAsReified/InFunction.kt +++ b/compiler/testData/diagnostics/tests/generics/tpAsReified/InFunction.kt @@ -1,4 +1,4 @@ -// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER +// !DIAGNOSTICS: -UNUSED_PARAMETER inline fun f(): T = throw UnsupportedOperationException() diff --git a/compiler/testData/diagnostics/tests/generics/tpAsReified/InlineableReified.kt b/compiler/testData/diagnostics/tests/generics/tpAsReified/InlineableReified.kt index a4fdc6c2574..d8c35c93cd3 100644 --- a/compiler/testData/diagnostics/tests/generics/tpAsReified/InlineableReified.kt +++ b/compiler/testData/diagnostics/tests/generics/tpAsReified/InlineableReified.kt @@ -1,4 +1,4 @@ -// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER +// !DIAGNOSTICS: -UNUSED_PARAMETER inline fun bar(x: T1, y: T2): T2 = y inline fun foo(z: R): R = bar(1, z) diff --git a/compiler/testData/diagnostics/tests/generics/tpAsReified/LocalFun.kt b/compiler/testData/diagnostics/tests/generics/tpAsReified/LocalFun.kt index 2af48e7f4cf..6892134bc2d 100644 --- a/compiler/testData/diagnostics/tests/generics/tpAsReified/LocalFun.kt +++ b/compiler/testData/diagnostics/tests/generics/tpAsReified/LocalFun.kt @@ -1,4 +1,4 @@ -// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER -NOT_YET_SUPPORTED_IN_INLINE +// !DIAGNOSTICS: -UNUSED_PARAMETER -NOT_YET_SUPPORTED_IN_INLINE inline fun foo(x: T) { fun<reified R> bar() { diff --git a/compiler/testData/diagnostics/tests/inline/inlineReified.kt b/compiler/testData/diagnostics/tests/inline/inlineReified.kt new file mode 100644 index 00000000000..c6a4332e529 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inline/inlineReified.kt @@ -0,0 +1,2 @@ +inline fun foo(): T3 = null!! + diff --git a/compiler/testData/diagnostics/tests/inline/inlineReified.txt b/compiler/testData/diagnostics/tests/inline/inlineReified.txt new file mode 100644 index 00000000000..49aa4c98e7f --- /dev/null +++ b/compiler/testData/diagnostics/tests/inline/inlineReified.txt @@ -0,0 +1,3 @@ +package + +kotlin.inline() internal fun foo(): T3 diff --git a/compiler/testData/diagnostics/testsWithStdLib/reified/arrayConstruction.kt b/compiler/testData/diagnostics/testsWithStdLib/reified/arrayConstruction.kt index bd06668ac46..791c1aee9f7 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/reified/arrayConstruction.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/reified/arrayConstruction.kt @@ -1,4 +1,3 @@ -// !DIAGNOSTICS: -NOTHING_TO_INLINE fun fail1(): Array = Array(1) { null!! } fun ok1(block: () -> Array): Array = block() diff --git a/compiler/testData/diagnostics/testsWithStdLib/reified/arrayOfNullsReified.kt b/compiler/testData/diagnostics/testsWithStdLib/reified/arrayOfNullsReified.kt index cf6b8df0e93..83e9bfe9ceb 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/reified/arrayOfNullsReified.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/reified/arrayOfNullsReified.kt @@ -1,4 +1,4 @@ -// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_VARIABLE +// !DIAGNOSTICS: -UNUSED_VARIABLE fun foo() { val x = arrayOfNulls(5) diff --git a/compiler/testData/diagnostics/testsWithStdLib/reified/reifiedNothingSubstitution.kt b/compiler/testData/diagnostics/testsWithStdLib/reified/reifiedNothingSubstitution.kt index 81219aaf2f6..13751a433b8 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/reified/reifiedNothingSubstitution.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/reified/reifiedNothingSubstitution.kt @@ -1,4 +1,4 @@ -// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_VARIABLE -REIFIED_TYPE_PARAMETER_NO_INLINE +// !DIAGNOSTICS: -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_VARIABLE inline fun foo(block: () -> T): String = block().toString() diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 49f45a31c00..4e3d4cc23bb 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -5597,6 +5597,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("inlineReified.kt") + public void testInlineReified() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inline/inlineReified.kt"); + doTest(fileName); + } + @TestMetadata("invoke.kt") public void testInvoke() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inline/invoke.kt");