From 83261a249be679b6882e9d6d62cdbd72e07c7262 Mon Sep 17 00:00:00 2001 From: "hisaaki.sioiri" Date: Sun, 16 Feb 2020 06:24:53 +0900 Subject: [PATCH] add support for kotlin DSL fix #19 --- build.gradle.kts | 6 ++-- .../siosio/DependenciesCompletionProvider.kt | 23 ++++++++++++ ...GradleDependenciesCompletionContributor.kt | 18 +--------- ...dleKtsDependenciesCompletionContributor.kt | 35 +++++++++++++++++++ .../java/siosio/OpenMavenCentralProvider.kt | 6 ++-- src/main/resources/META-INF/kts.xml | 6 ++++ src/main/resources/META-INF/plugin.xml | 3 +- 7 files changed, 73 insertions(+), 24 deletions(-) create mode 100644 src/main/java/siosio/DependenciesCompletionProvider.kt create mode 100644 src/main/java/siosio/GradleKtsDependenciesCompletionContributor.kt create mode 100644 src/main/resources/META-INF/kts.xml diff --git a/build.gradle.kts b/build.gradle.kts index f134e15..716bfc0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ plugins { apply(plugin = "java") apply(plugin = "kotlin") -version = "1.15" +version = "1.16" dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61") @@ -24,9 +24,9 @@ dependencies { intellij { pluginName = "Gradle Dependencies Helper" - version = "IC-2019.3.1" + version = "LATEST-EAP-SNAPSHOT" updateSinceUntilBuild = false - setPlugins("java", "Groovy", "gradle", "gradle-java") + setPlugins("java", "Groovy", "gradle", "gradle-java", "Kotlin") } configure { diff --git a/src/main/java/siosio/DependenciesCompletionProvider.kt b/src/main/java/siosio/DependenciesCompletionProvider.kt new file mode 100644 index 0000000..6db2cb1 --- /dev/null +++ b/src/main/java/siosio/DependenciesCompletionProvider.kt @@ -0,0 +1,23 @@ +package siosio + +import com.intellij.codeInsight.completion.CompletionParameters +import com.intellij.codeInsight.completion.CompletionProvider +import com.intellij.codeInsight.completion.CompletionResultSet +import com.intellij.util.ProcessingContext + +class DependenciesCompletionProvider : CompletionProvider() { + + override fun addCompletions( + parameters: CompletionParameters, + context: ProcessingContext, + resultSet: CompletionResultSet) { + + val originalElement = parameters.originalPosition ?: return + if (originalElement.isValid.not()) { + return + } + DependencyText(trimQuote(originalElement.text)) + .takeUnless { it.isShort } + ?.addCompletions(resultSet) + } +} diff --git a/src/main/java/siosio/GradleDependenciesCompletionContributor.kt b/src/main/java/siosio/GradleDependenciesCompletionContributor.kt index f3c694f..1cfdb0a 100644 --- a/src/main/java/siosio/GradleDependenciesCompletionContributor.kt +++ b/src/main/java/siosio/GradleDependenciesCompletionContributor.kt @@ -29,24 +29,8 @@ class GradleDependenciesCompletionContributor : AbstractGradleCompletionContribu .withSuperParent(6, psiElement(GrMethodCallExpression::class.java) .withText(containsDependencies)) - ), CompletionParametersCompletionProvider()) + ), DependenciesCompletionProvider()) } - private class CompletionParametersCompletionProvider : CompletionProvider() { - - override fun addCompletions( - parameters: CompletionParameters, - context: ProcessingContext, - resultSet: CompletionResultSet) { - - val originalElement = parameters.originalPosition ?: return - if (originalElement.isValid.not()) { - return - } - DependencyText(trimQuote(originalElement.text)) - .takeUnless { it.isShort } - ?.addCompletions(resultSet) - } - } } diff --git a/src/main/java/siosio/GradleKtsDependenciesCompletionContributor.kt b/src/main/java/siosio/GradleKtsDependenciesCompletionContributor.kt new file mode 100644 index 0000000..4e92e08 --- /dev/null +++ b/src/main/java/siosio/GradleKtsDependenciesCompletionContributor.kt @@ -0,0 +1,35 @@ +package siosio + +import com.intellij.codeInsight.completion.CompletionContributor +import com.intellij.codeInsight.completion.CompletionParameters +import com.intellij.codeInsight.completion.CompletionProvider +import com.intellij.codeInsight.completion.CompletionResultSet +import com.intellij.codeInsight.completion.CompletionType +import com.intellij.patterns.PlatformPatterns.* +import com.intellij.patterns.StandardPatterns +import com.intellij.psi.PsiElement +import com.intellij.util.ProcessingContext +import org.jetbrains.kotlin.KtNodeTypes +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.psi.KtCallExpression +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtStringTemplateExpression +import org.jetbrains.kotlin.psi.KtValueArgument +import org.jetbrains.plugins.gradle.codeInsight.AbstractGradleCompletionContributor + +class GradleKtsDependenciesCompletionContributor : CompletionContributor() { + init { + val containsDependencies = string().contains("dependencies") + extend(CompletionType.SMART, + psiElement(KtTokens.REGULAR_STRING_PART) + .and(psiElement().inFile(psiFile().withName(StandardPatterns.string().endsWith(".gradle.kts")))) + .and( + psiElement() + .andOr( + psiElement().withSuperParent(10, psiElement(KtCallExpression::class.java).withText(containsDependencies)), + psiElement().withSuperParent(13, psiElement(KtCallExpression::class.java).withText(containsDependencies)) + ) + ), + DependenciesCompletionProvider()) + } +} \ No newline at end of file diff --git a/src/main/java/siosio/OpenMavenCentralProvider.kt b/src/main/java/siosio/OpenMavenCentralProvider.kt index 78e53cf..d65f9d1 100644 --- a/src/main/java/siosio/OpenMavenCentralProvider.kt +++ b/src/main/java/siosio/OpenMavenCentralProvider.kt @@ -9,8 +9,8 @@ class OpenMavenCentralProvider : DocumentationProvider { companion object { - private const val GROUP_AND_ARTIFACT: String = "http://search.maven.org/#search|gav|1|g:\"%s\" AND a:\"%s\"" - private const val GROUP: String = "http://search.maven.org/#search|gav|1|g:\"%s\"" + private const val GROUP_AND_ARTIFACT: String = "https://search.maven.org/#search|gav|1|g:\"%s\" AND a:\"%s\"" + private const val GROUP: String = "https://search.maven.org/#search|gav|1|g:\"%s\"" } override fun getQuickNavigateInfo(element: PsiElement?, element1: PsiElement?): String? { @@ -22,7 +22,7 @@ class OpenMavenCentralProvider : DocumentationProvider { return null } - return split(trimQuote(element.text)).let { + return split(trimQuote(element?.text ?: "")).let { listOf( if (it.size > 2) { GROUP_AND_ARTIFACT.format(it[0], it[1]) diff --git a/src/main/resources/META-INF/kts.xml b/src/main/resources/META-INF/kts.xml new file mode 100644 index 0000000..d9b873d --- /dev/null +++ b/src/main/resources/META-INF/kts.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 89dffd0..09df82c 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -5,6 +5,7 @@ com.intellij.gradle com.intellij.modules.gradle.java org.intellij.groovy + org.jetbrains.kotlin - +