From 1d134ffc722e73260e10f63e14776fa6c1cbee9e Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Fri, 7 Apr 2017 18:30:42 +0300 Subject: [PATCH] Register Android api quickfixes for inlined api inspection #KT-14857 Fixed --- .../AndroidLintQuickfixTestGenerated.java | 18 ++++++++++++++++++ .../requiresApi/inlinedConstant.kt | 9 +++++++++ .../requiresApi/inlinedConstant.kt.expected | 13 +++++++++++++ .../lintQuickfix/targetApi/inlinedConstant.kt | 8 ++++++++ .../targetApi/inlinedConstant.kt.expected | 12 ++++++++++++ .../targetVersionCheck/inlinedConstant.kt | 8 ++++++++ .../inlinedConstant.kt.expected | 12 ++++++++++++ .../AndroidLintInspectionToolProvider.java | 10 ++++++++++ 8 files changed, 90 insertions(+) create mode 100644 idea/testData/android/lintQuickfix/requiresApi/inlinedConstant.kt create mode 100644 idea/testData/android/lintQuickfix/requiresApi/inlinedConstant.kt.expected create mode 100644 idea/testData/android/lintQuickfix/targetApi/inlinedConstant.kt create mode 100644 idea/testData/android/lintQuickfix/targetApi/inlinedConstant.kt.expected create mode 100644 idea/testData/android/lintQuickfix/targetVersionCheck/inlinedConstant.kt create mode 100644 idea/testData/android/lintQuickfix/targetVersionCheck/inlinedConstant.kt.expected diff --git a/idea/idea-android/tests/org/jetbrains/kotlin/android/quickfix/AndroidLintQuickfixTestGenerated.java b/idea/idea-android/tests/org/jetbrains/kotlin/android/quickfix/AndroidLintQuickfixTestGenerated.java index 2998a9cf61a..00a1db76a16 100644 --- a/idea/idea-android/tests/org/jetbrains/kotlin/android/quickfix/AndroidLintQuickfixTestGenerated.java +++ b/idea/idea-android/tests/org/jetbrains/kotlin/android/quickfix/AndroidLintQuickfixTestGenerated.java @@ -74,6 +74,12 @@ public class AndroidLintQuickfixTestGenerated extends AbstractAndroidLintQuickfi doTest(fileName); } + @TestMetadata("inlinedConstant.kt") + public void testInlinedConstant() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/lintQuickfix/requiresApi/inlinedConstant.kt"); + doTest(fileName); + } + @TestMetadata("method.kt") public void testMethod() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/lintQuickfix/requiresApi/method.kt"); @@ -194,6 +200,12 @@ public class AndroidLintQuickfixTestGenerated extends AbstractAndroidLintQuickfi doTest(fileName); } + @TestMetadata("inlinedConstant.kt") + public void testInlinedConstant() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/lintQuickfix/targetApi/inlinedConstant.kt"); + doTest(fileName); + } + @TestMetadata("method.kt") public void testMethod() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/lintQuickfix/targetApi/method.kt"); @@ -257,6 +269,12 @@ public class AndroidLintQuickfixTestGenerated extends AbstractAndroidLintQuickfi doTest(fileName); } + @TestMetadata("inlinedConstant.kt") + public void testInlinedConstant() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/lintQuickfix/targetVersionCheck/inlinedConstant.kt"); + doTest(fileName); + } + @TestMetadata("method.kt") public void testMethod() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/lintQuickfix/targetVersionCheck/method.kt"); diff --git a/idea/testData/android/lintQuickfix/requiresApi/inlinedConstant.kt b/idea/testData/android/lintQuickfix/requiresApi/inlinedConstant.kt new file mode 100644 index 00000000000..ee42d761ab0 --- /dev/null +++ b/idea/testData/android/lintQuickfix/requiresApi/inlinedConstant.kt @@ -0,0 +1,9 @@ +// INTENTION_TEXT: Add @RequiresApi(KITKAT) Annotation +// INSPECTION_CLASS: org.jetbrains.android.inspections.klint.AndroidLintInspectionToolProvider$AndroidKLintInlinedApiInspection +// DEPENDENCY: RequiresApi.java -> android/support/annotation/RequiresApi.java + +class Test { + fun foo(): Int { + return android.R.attr.windowTranslucentStatus + } +} \ No newline at end of file diff --git a/idea/testData/android/lintQuickfix/requiresApi/inlinedConstant.kt.expected b/idea/testData/android/lintQuickfix/requiresApi/inlinedConstant.kt.expected new file mode 100644 index 00000000000..c94e41a56aa --- /dev/null +++ b/idea/testData/android/lintQuickfix/requiresApi/inlinedConstant.kt.expected @@ -0,0 +1,13 @@ +import android.os.Build +import android.support.annotation.RequiresApi + +// INTENTION_TEXT: Add @RequiresApi(KITKAT) Annotation +// INSPECTION_CLASS: org.jetbrains.android.inspections.klint.AndroidLintInspectionToolProvider$AndroidKLintInlinedApiInspection +// DEPENDENCY: RequiresApi.java -> android/support/annotation/RequiresApi.java + +class Test { + @RequiresApi(Build.VERSION_CODES.KITKAT) + fun foo(): Int { + return android.R.attr.windowTranslucentStatus + } +} \ No newline at end of file diff --git a/idea/testData/android/lintQuickfix/targetApi/inlinedConstant.kt b/idea/testData/android/lintQuickfix/targetApi/inlinedConstant.kt new file mode 100644 index 00000000000..ed8cd3c35d9 --- /dev/null +++ b/idea/testData/android/lintQuickfix/targetApi/inlinedConstant.kt @@ -0,0 +1,8 @@ +// INTENTION_TEXT: Add @TargetApi(KITKAT) Annotation +// INSPECTION_CLASS: org.jetbrains.android.inspections.klint.AndroidLintInspectionToolProvider$AndroidKLintInlinedApiInspection + +class Test { + fun foo(): Int { + return android.R.attr.windowTranslucentStatus + } +} \ No newline at end of file diff --git a/idea/testData/android/lintQuickfix/targetApi/inlinedConstant.kt.expected b/idea/testData/android/lintQuickfix/targetApi/inlinedConstant.kt.expected new file mode 100644 index 00000000000..5e788aca384 --- /dev/null +++ b/idea/testData/android/lintQuickfix/targetApi/inlinedConstant.kt.expected @@ -0,0 +1,12 @@ +import android.annotation.TargetApi +import android.os.Build + +// INTENTION_TEXT: Add @TargetApi(KITKAT) Annotation +// INSPECTION_CLASS: org.jetbrains.android.inspections.klint.AndroidLintInspectionToolProvider$AndroidKLintInlinedApiInspection + +class Test { + @TargetApi(Build.VERSION_CODES.KITKAT) + fun foo(): Int { + return android.R.attr.windowTranslucentStatus + } +} \ No newline at end of file diff --git a/idea/testData/android/lintQuickfix/targetVersionCheck/inlinedConstant.kt b/idea/testData/android/lintQuickfix/targetVersionCheck/inlinedConstant.kt new file mode 100644 index 00000000000..febb06d9b65 --- /dev/null +++ b/idea/testData/android/lintQuickfix/targetVersionCheck/inlinedConstant.kt @@ -0,0 +1,8 @@ +// INTENTION_TEXT: Surround with if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) { ... } +// INSPECTION_CLASS: org.jetbrains.android.inspections.klint.AndroidLintInspectionToolProvider$AndroidKLintInlinedApiInspection + +class Test { + fun foo(): Int { + return android.R.attr.windowTranslucentStatus + } +} \ No newline at end of file diff --git a/idea/testData/android/lintQuickfix/targetVersionCheck/inlinedConstant.kt.expected b/idea/testData/android/lintQuickfix/targetVersionCheck/inlinedConstant.kt.expected new file mode 100644 index 00000000000..0634eeb5fe6 --- /dev/null +++ b/idea/testData/android/lintQuickfix/targetVersionCheck/inlinedConstant.kt.expected @@ -0,0 +1,12 @@ +import android.os.Build + +// INTENTION_TEXT: Surround with if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) { ... } +// INSPECTION_CLASS: org.jetbrains.android.inspections.klint.AndroidLintInspectionToolProvider$AndroidKLintInlinedApiInspection + +class Test { + fun foo(): Int { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + return android.R.attr.windowTranslucentStatus + } + } +} \ No newline at end of file diff --git a/plugins/lint/lint-idea/src/org/jetbrains/android/inspections/klint/AndroidLintInspectionToolProvider.java b/plugins/lint/lint-idea/src/org/jetbrains/android/inspections/klint/AndroidLintInspectionToolProvider.java index 631b1c9ef32..b23aea18ce3 100644 --- a/plugins/lint/lint-idea/src/org/jetbrains/android/inspections/klint/AndroidLintInspectionToolProvider.java +++ b/plugins/lint/lint-idea/src/org/jetbrains/android/inspections/klint/AndroidLintInspectionToolProvider.java @@ -383,6 +383,11 @@ public class AndroidLintInspectionToolProvider { @NotNull @Override public AndroidLintQuickFix[] getQuickFixes(@NotNull PsiElement startElement, @NotNull PsiElement endElement, @NotNull String message) { + return getApiQuickFixes(startElement, endElement, message); + } + + @NotNull + public static AndroidLintQuickFix[] getApiQuickFixes(@NotNull PsiElement startElement, @NotNull PsiElement endElement, @NotNull String message) { int api = ApiDetector.getRequiredVersion(TextFormat.RAW.toText(message)); if (api == -1) { return AndroidLintQuickFix.EMPTY_ARRAY; @@ -409,6 +414,11 @@ public class AndroidLintInspectionToolProvider { super(AndroidBundle.message("android.lint.inspections.inlined.api"), ApiDetector.INLINED); } + @NotNull + @Override + public AndroidLintQuickFix[] getQuickFixes(@NotNull PsiElement startElement, @NotNull PsiElement endElement, @NotNull String message) { + return AndroidKLintNewApiInspection.getApiQuickFixes(startElement, endElement, message); + } } public static class AndroidKLintOverrideInspection extends AndroidLintInspectionBase {