Fix QuasiQuote injection

This commit is contained in:
Rik van der Kleij 2019-11-04 20:37:57 +01:00
parent f864f17e78
commit 0da092e308
2 changed files with 8 additions and 8 deletions

View File

@ -124,6 +124,10 @@ object HaskellElementFactory {
createElement(project, s"$importDecl \n", classOf[HaskellImportDeclaration])
}
def createQuasiQuote(project: Project, quasiQuoteText: String): Option[HaskellQuasiQuote] = {
createElement(project, quasiQuoteText, classOf[HaskellQuasiQuote])
}
private def createElement[C <: PsiElement](project: Project, newName: String, namedElementClass: Class[C]): Option[C] = {
val file = createFileFromText(project, newName)
Option(PsiTreeUtil.findChildOfType(file, namedElementClass))

View File

@ -1,9 +1,9 @@
package intellij.haskell.psi.impl
import com.intellij.openapi.util.TextRange
import com.intellij.psi.{AbstractElementManipulator, PsiFileFactory}
import com.intellij.psi.AbstractElementManipulator
import com.intellij.util.IncorrectOperationException
import intellij.haskell.HaskellLanguage
import intellij.haskell.psi.HaskellElementFactory
import org.jetbrains.annotations.Nullable
/**
@ -17,12 +17,8 @@ class HaskellQuasiQuoteManipulator extends AbstractElementManipulator[HaskellQua
newContent: String): HaskellQuasiQuoteElementImpl = {
val oldText = psi.getText
val newText = oldText.substring(0, range.getStartOffset) + newContent + oldText.substring(range.getEndOffset)
val newElement = PsiFileFactory
.getInstance(psi.getProject)
.createFileFromText("a.hs", HaskellLanguage.Instance, newText, false, false)
.getLastChild
.getLastChild
psi.replace(newElement).asInstanceOf[HaskellQuasiQuoteElementImpl]
val newElement = HaskellElementFactory.createQuasiQuote(psi.getProject, newText)
newElement.map(psi.replace(_).asInstanceOf[HaskellQuasiQuoteElementImpl]).orNull
}
override def getRangeInElement(element: HaskellQuasiQuoteElementImpl): TextRange = {