InlineOnly annotation suppresses NOTHING_TO_INLINE diagnostics.

This commit is contained in:
Ilya Gorbunov
2016-01-27 21:40:00 +03:00
parent 0f1e6ba8be
commit 911940d458
4 changed files with 56 additions and 1 deletions
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.BindingTrace;
import org.jetbrains.kotlin.resolve.FunctionAnalyzerExtension;
import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt;
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
import java.util.List;
@@ -125,7 +126,7 @@ public class InlineAnalyzerExtension implements FunctionAnalyzerExtension.Analyz
hasInlinable |= InlineUtil.containsReifiedTypeParameters(functionDescriptor);
if (!hasInlinable) {
if (!hasInlinable && !AnnotationUtilKt.isInlineOnly(functionDescriptor)) {
KtModifierList modifierList = function.getModifierList();
PsiElement inlineModifier = modifierList == null ? null : modifierList.getModifier(KtTokens.INLINE_KEYWORD);
PsiElement reportOn = inlineModifier == null ? function : inlineModifier;
@@ -0,0 +1,31 @@
// !DIAGNOSTICS: -INVISIBLE_MEMBER -INVISIBLE_REFERENCE -UNUSED_PARAMETER -NULLABLE_INLINE_PARAMETER
@kotlin.internal.InlineOnly
inline fun test() {
}
@kotlin.internal.InlineOnly
inline fun test3(noinline s : (Int) -> Int) {
}
@kotlin.internal.InlineOnly
inline fun test4(noinline s : Int.() -> Int) {
}
@kotlin.internal.InlineOnly
inline fun Function1<Int, Int>?.test5() {
}
@kotlin.internal.InlineOnly
inline fun Function1<Int, Int>?.test6() {
}
@kotlin.internal.InlineOnly
inline fun test2(s : ((Int) -> Int)?) {
}
@@ -0,0 +1,8 @@
package
@kotlin.internal.InlineOnly() public inline fun test(): kotlin.Unit
@kotlin.internal.InlineOnly() public inline fun test2(/*0*/ s: ((kotlin.Int) -> kotlin.Int)?): kotlin.Unit
@kotlin.internal.InlineOnly() public inline fun test3(/*0*/ noinline s: (kotlin.Int) -> kotlin.Int): kotlin.Unit
@kotlin.internal.InlineOnly() public inline fun test4(/*0*/ noinline s: kotlin.Int.() -> kotlin.Int): kotlin.Unit
@kotlin.internal.InlineOnly() public inline fun ((kotlin.Int) -> kotlin.Int)?.test5(): kotlin.Unit
@kotlin.internal.InlineOnly() public inline fun ((kotlin.Int) -> kotlin.Int)?.test6(): kotlin.Unit
@@ -824,6 +824,21 @@ public class DiagnosticsTestWithStdLibGenerated extends AbstractDiagnosticsTestW
}
}
@TestMetadata("compiler/testData/diagnostics/testsWithStdLib/inline")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Inline extends AbstractDiagnosticsTestWithStdLib {
public void testAllFilesPresentInInline() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithStdLib/inline"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("inlineOnlySuppressesNothingToInline.kt")
public void testInlineOnlySuppressesNothingToInline() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/inline/inlineOnlySuppressesNothingToInline.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/diagnostics/testsWithStdLib/kt7585")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)