Introduce a quick fix for deprecated jre artifact in gradle (KT-20947)

#KT-20947 In Progress
This commit is contained in:
Nikolay Krasko
2017-11-22 14:23:02 +03:00
parent 23afa07e55
commit 0f1e169bd7
2 changed files with 50 additions and 1 deletions
@@ -25,6 +25,7 @@ import com.intellij.util.text.VersionComparatorUtil
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator
import org.jetbrains.kotlin.idea.configuration.allModules
import org.jetbrains.kotlin.idea.configuration.getWholeModuleGroup
import org.jetbrains.kotlin.idea.inspections.ReplaceStringInDocumentFix
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.plugins.gradle.codeInspection.GradleBaseInspection
@@ -110,7 +111,7 @@ class GradleDependencyInspection : GradleBaseInspection() {
registerError(
reportOnElement, outdatedInfo.message,
arrayOf(),
arrayOf(ReplaceStringInDocumentFix(reportOnElement, outdatedInfo.old.name, outdatedInfo.new.name)),
ProblemHighlightType.LIKE_DEPRECATED)
break
@@ -0,0 +1,48 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.inspections
import com.intellij.codeInspection.LocalQuickFix
import com.intellij.codeInspection.ProblemDescriptor
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.SmartPointerManager
class ReplaceStringInDocumentFix(element: PsiElement, private val oldString: String, private val newString: String) : LocalQuickFix {
private val elementRef = SmartPointerManager.getInstance(element.project).createSmartPsiElementPointer(element)
override fun applyFix(project: Project, problemDescriptor: ProblemDescriptor) {
val element = elementRef.element ?: return
val virtualFile = element.containingFile?.virtualFile ?: return
val document = FileDocumentManager.getInstance().getDocument(virtualFile) ?: return
val text = element.text
val index = text.indexOf(oldString)
if (index < 0) return
val start = element.textOffset + index
val end = start + oldString.length
val documentText = document.text
if (end > documentText.length) return
if (documentText.substring(start, end) != oldString) return
document.replaceString(start, end, newString)
}
override fun getFamilyName() = "Replace '$oldString' with $newString"
}