Do not store psi in CopiedCode
It is transferable and can exist even if project is closed
This commit is contained in:
+4
-3
@@ -33,6 +33,7 @@ import java.awt.datatransfer.Transferable
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager
|
||||
import org.jetbrains.jet.plugin.j2k.J2kPostProcessor;
|
||||
import com.intellij.lang.java.JavaLanguage
|
||||
|
||||
public class ConvertJavaCopyPastePostProcessor() : CopyPastePostProcessor<TextBlockTransferableData>() {
|
||||
|
||||
@@ -51,8 +52,7 @@ public class ConvertJavaCopyPastePostProcessor() : CopyPastePostProcessor<TextBl
|
||||
public override fun collectTransferableData(file: PsiFile, editor: Editor, startOffsets: IntArray, endOffsets: IntArray): List<TextBlockTransferableData> {
|
||||
if (file !is PsiJavaFile) return listOf()
|
||||
|
||||
val lightFile = PsiFileFactory.getInstance(file.getProject()).createFileFromText(file.getText()!!, file)
|
||||
return listOf(CopiedCode(lightFile as? PsiJavaFile, startOffsets, endOffsets))
|
||||
return listOf(CopiedCode(file.getName(), file.getText()!!, startOffsets, endOffsets))
|
||||
}
|
||||
|
||||
public override fun processTransferableData(project: Project, editor: Editor, bounds: RangeMarker, caretOffset: Int, indented: Ref<Boolean>, values: List<TextBlockTransferableData>) {
|
||||
@@ -62,7 +62,8 @@ public class ConvertJavaCopyPastePostProcessor() : CopyPastePostProcessor<TextBl
|
||||
|
||||
if (value !is CopiedCode) return
|
||||
|
||||
val sourceFile = value.file ?: return
|
||||
val sourceFile = PsiFileFactory.getInstance(project).
|
||||
createFileFromText(value.fileName, JavaLanguage.INSTANCE, value.fileText) as? PsiJavaFile ?: return
|
||||
|
||||
val targetFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument())
|
||||
if (targetFile !is JetFile) return
|
||||
|
||||
@@ -21,7 +21,7 @@ import com.intellij.psi.PsiJavaFile
|
||||
|
||||
import java.awt.datatransfer.DataFlavor
|
||||
|
||||
class CopiedCode(val file: PsiJavaFile?, val startOffsets: IntArray, val endOffsets: IntArray) : TextBlockTransferableData {
|
||||
class CopiedCode(val fileName: String, val fileText: String, val startOffsets: IntArray, val endOffsets: IntArray) : TextBlockTransferableData {
|
||||
|
||||
override fun getFlavor() = DATA_FLAVOR
|
||||
override fun getOffsetCount() = 0
|
||||
|
||||
Reference in New Issue
Block a user