Pull Up: Initial support

#KT-7330 Fixed
This commit is contained in:
Alexey Sedunov
2015-07-16 16:08:20 +03:00
parent e303a38f9e
commit 39ff3c3000
47 changed files with 1709 additions and 23 deletions
@@ -16,14 +16,17 @@
package org.jetbrains.kotlin.test.util
import com.intellij.codeInspection.SmartHashMap
import com.intellij.testFramework.fixtures.CodeInsightTestFixture
import com.intellij.openapi.util.io.FileUtil
import com.intellij.psi.PsiComment
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiWhiteSpace
import com.intellij.psi.util.PsiTreeUtil
import com.intellij.util.SmartFMap
import org.jetbrains.kotlin.psi.*
import java.io.File
import java.util.*
public fun String.trimTrailingWhitespacesAndAddNewlineAtEOF(): String =
this.split('\n').map { it.trimEnd() }.joinToString(separator = "\n").let {
@@ -74,28 +77,29 @@ public fun String.trimIndent(): String {
}.joinToString(separator = "\n")
}
public fun JetFile.findElementByComment(commentText: String): JetElement? {
var result: JetElement? = null
public fun JetFile.findElementByCommentPrefix(commentText: String): JetElement? =
findElementsByCommentPrefix(commentText).keySet().singleOrNull()
public fun JetFile.findElementsByCommentPrefix(prefix: String): Map<JetElement, String> {
var result = SmartFMap.emptyMap<JetElement, String>()
accept(
object : JetTreeVisitorVoid() {
override fun visitComment(comment: PsiComment) {
if (comment.getText() == commentText) {
val commentText = comment.getText()
if (commentText.startsWith(prefix)) {
val parent = comment.getParent()
if (parent is JetDeclaration) {
result = parent
}
else {
result = PsiTreeUtil.skipSiblingsForward(
val elementToAdd = when (parent) {
is JetDeclaration -> parent
else -> PsiTreeUtil.skipSiblingsForward(
comment,
javaClass<PsiWhiteSpace>(),
javaClass<PsiComment>(),
javaClass<JetPackageDirective>()
) as? JetElement
}
javaClass<PsiWhiteSpace>(), javaClass<PsiComment>(), javaClass<JetPackageDirective>()
)
} as? JetElement ?: return
result = result.plus(elementToAdd, commentText.substring(prefix.length()).trim())
}
}
}
)
return result
}