From 9f16e4f709acd1b6b7f29023c8ffa778bcb25569 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 9 Jul 2018 17:35:10 +0300 Subject: [PATCH] Report jre deprecated warning when version is set implicitly (KT-26933) #KT-26933 Fixed --- .../DeprecatedGradleDependencyInspection.kt | 7 +++- .../gradle/GradleInspectionTest.kt | 39 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/inspections/gradle/DeprecatedGradleDependencyInspection.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/inspections/gradle/DeprecatedGradleDependencyInspection.kt index a288e85956a..c7359c0f367 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/inspections/gradle/DeprecatedGradleDependencyInspection.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/inspections/gradle/DeprecatedGradleDependencyInspection.kt @@ -37,7 +37,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlo import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrCallExpression -private val LibInfo.gradleMarker get() = "$groupId:$name:" +private val LibInfo.gradleMarker get() = "$groupId:$name" class DeprecatedGradleDependencyInspection : GradleBaseInspection() { override fun buildVisitor(): BaseInspectionVisitor = DependencyFinder() @@ -62,6 +62,11 @@ class DeprecatedGradleDependencyInspection : GradleBaseInspection() { val libMarker = outdatedInfo.old.gradleMarker if (dependencyText.contains(libMarker)) { + val afterMarkerChar = dependencyText.substringAfter(libMarker).getOrNull(0) + if (!(afterMarkerChar == '\'' || afterMarkerChar == '"' || afterMarkerChar == ':')) { + continue + } + val libVersion = DifferentStdlibGradleVersionInspection.getResolvedLibVersion( dependencyStatement.containingFile, outdatedInfo.old.groupId, listOf(outdatedInfo.old.name) diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleInspectionTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleInspectionTest.kt index 1404089ed61..23051b48ca3 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleInspectionTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleInspectionTest.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.idea.inspections.gradle.DifferentKotlinGradleVersion import org.jetbrains.kotlin.idea.inspections.gradle.DifferentStdlibGradleVersionInspection import org.jetbrains.kotlin.idea.inspections.gradle.GradleKotlinxCoroutinesDeprecationInspection import org.jetbrains.kotlin.idea.inspections.runInspection +import org.jetbrains.plugins.gradle.tooling.annotation.TargetVersions import org.junit.Assert import org.junit.Test @@ -344,6 +345,44 @@ class GradleInspectionTest : GradleImportingTestCase() { ) } + @TargetVersions("4.9+") + @Test + fun testJreIsDeprecatedWithoutImplicitVersion() { + val localFile = createProjectSubFile( + "build.gradle", """ + group 'Again' + version '1.0-SNAPSHOT' + + buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.0") + } + } + + apply plugin: 'kotlin' + + dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib-jre8" + } + """ + ) + + importProject() + + val tool = DeprecatedGradleDependencyInspection() + val problems = getInspectionResult(tool, localFile) + + Assert.assertTrue(problems.size == 1) + Assert.assertEquals( + "kotlin-stdlib-jre8 is deprecated since 1.2.0 and should be replaced with kotlin-stdlib-jdk8", + problems.single() + ) + } + @Test fun testObsoleteCoroutinesUsage() { val localFile = createProjectSubFile(