Skip to content

Commit

Permalink
support GrStringContent
Browse files Browse the repository at this point in the history
  • Loading branch information
siosio committed Sep 10, 2018
1 parent 2bd01c5 commit 6f3e3b7
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 20 deletions.
8 changes: 3 additions & 5 deletions src/main/java/siosio/DependencyText.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,17 @@ import siosio.searcher.*
class DependencyText(val text: String?) {

val isShort: Boolean = text?.length ?: 0 < 2

private val splitText = text?.split(":") ?: emptyList()

fun getGroupId() = splitText.getOrElse(0) { "" }
fun getArtifactId() = splitText.getOrElse(1) { "" }
val groupId = splitText.getOrElse(0) { "" }
val artifactId = splitText.getOrElse(1) { "" }

fun addCompletions(resultSet: CompletionResultSet) {
when (splitText.size) {
3 -> VersionSearcher(this)
2 -> ArtifactSearcher(this)
else -> DefaultSearcher(this)
}.find(resultSet)

}

}
27 changes: 18 additions & 9 deletions src/main/java/siosio/GradleDependenciesCompletionContributor.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package siosio

import com.intellij.codeInsight.completion.*
import com.intellij.codeInsight.completion.impl.*
import com.intellij.codeInsight.lookup.*
import com.intellij.patterns.*
import com.intellij.patterns.PlatformPatterns.psiElement
import com.intellij.patterns.PlatformPatterns.*
import com.intellij.patterns.StandardPatterns.string
import com.intellij.psi.*
import com.intellij.util.*
Expand All @@ -15,12 +13,21 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.*
class GradleDependenciesCompletionContributor : AbstractGradleCompletionContributor() {

init {
val containsDependencies = string().contains("dependencies")
extend(CompletionType.SMART,
psiElement(PsiElement::class.java)
.and(psiElement().inFile(PlatformPatterns.psiFile().withName(StandardPatterns.string().endsWith(".gradle"))))
.withParent(GrLiteral::class.java)
.withSuperParent(5, psiElement(GrMethodCallExpression::class.java)
.withText(string().contains("dependencies"))), CompletionParametersCompletionProvider())
.andOr(
psiElement()
.withParent(GrLiteral::class.java)
.withSuperParent(5, psiElement(GrMethodCallExpression::class.java)
.withText(containsDependencies)),
psiElement()
.withParent(GrStringContent::class.java)
.withSuperParent(6, psiElement(GrMethodCallExpression::class.java)
.withText(containsDependencies))

), CompletionParametersCompletionProvider())
}

private class CompletionParametersCompletionProvider : CompletionProvider<CompletionParameters>() {
Expand All @@ -30,9 +37,11 @@ class GradleDependenciesCompletionContributor : AbstractGradleCompletionContribu
context: ProcessingContext,
resultSet: CompletionResultSet) {

val position = parameters.originalPosition ?: return

DependencyText(trimQuote(position.text))
val originalElement = parameters.originalPosition ?: return
if (originalElement.isValid.not()) {
return
}
DependencyText(trimQuote(originalElement.text))
.takeUnless { it.isShort }
?.addCompletions(resultSet)
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/siosio/searcher/ArtifactSearcher.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ class ArtifactSearcher(override val dependencyText: DependencyText) : CentralSea

override fun find(resultSet: CompletionResultSet) {
val text = Client.get(
"https://search.maven.org/solrsearch/select?q=g:${dependencyText.getGroupId()}" +
"https://search.maven.org/solrsearch/select?q=g:${dependencyText.groupId}" +
"&rows=200&wt=json")

resultSet.restartCompletionOnPrefixChange(dependencyText.text)
resultSet.restartCompletionOnPrefixChange(dependencyText.text.orEmpty())
resultSet.withRelevanceSorter(
CompletionSorter.emptySorter().weigh(PreferStartMatching())
).addAllElements(ARTIFACT_PATTERN.findAll(text)
Expand All @@ -21,7 +21,7 @@ class ArtifactSearcher(override val dependencyText: DependencyText) : CentralSea
}
.distinct()
.map {
LookupElementBuilder.create("${dependencyText.getGroupId()}:$it")
LookupElementBuilder.create("${dependencyText.groupId}:$it")
}.toList())
}

Expand Down
19 changes: 17 additions & 2 deletions src/main/java/siosio/searcher/VersionSearcher.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ package siosio.searcher

import com.intellij.codeInsight.completion.*
import com.intellij.codeInsight.lookup.*
import com.intellij.openapi.util.*
import siosio.*

class VersionSearcher(override val dependencyText: DependencyText) : CentralSearcher {

override fun find(resultSet: CompletionResultSet) {
val text = Client.get(
"https://search.maven.org/solrsearch/select?q=g:${dependencyText.getGroupId()}+AND+a:${dependencyText.getArtifactId()}" +
"https://search.maven.org/solrsearch/select?q=g:${dependencyText.groupId}+AND+a:${dependencyText.artifactId}" +
"&rows=100&core=gav&wt=json")


val versions = VERSION_PATTERN.findAll(text).mapNotNull {
it.groups[1]?.value
}.distinct().toList()
Expand All @@ -26,6 +26,21 @@ class VersionSearcher(override val dependencyText: DependencyText) : CentralSear
)
withRelevanceSorter.addAllElements(versions.map {
LookupElementBuilder.create(it)
.withInsertHandler { context, _ ->
val editor = context.editor
val document = editor.document
val offset = editor.caretModel.offset
val char = document.getText(TextRange(offset, offset + 1))
if (char != "$") {
return@withInsertHandler
}
val allText = document.text
val indexOf = allText.indexOf('"', offset)
if (document.getLineNumber(indexOf) != document.getLineNumber(offset)) {
return@withInsertHandler
}
document.deleteString(offset, indexOf)
}
})
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<idea-plugin>
<id>GradleDependenciesHelper</id>
<name>Gradle Dependencies Helper</name>
<version>1.11</version>
<version>1.12</version>
<vendor email="siosio12@gmail.com" url="https://github.com/siosio/GradleDependenciesHelperPlugin">siosio</vendor>
<depends>org.jetbrains.plugins.gradle</depends>
<depends>org.intellij.groovy</depends>
Expand Down

0 comments on commit 6f3e3b7

Please sign in to comment.