Make JetCodeFragment implements JavaCodeFragment

This commit is contained in:
Natalia Ukhorskaya
2014-04-24 17:36:52 +04:00
parent 876878a54c
commit 54cc5d1440
4 changed files with 58 additions and 58 deletions
@@ -24,6 +24,7 @@ import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.tree.IElementType import com.intellij.psi.tree.IElementType
import com.intellij.testFramework.LightVirtualFile import com.intellij.testFramework.LightVirtualFile
import org.jetbrains.jet.plugin.JetFileType import org.jetbrains.jet.plugin.JetFileType
import java.util.HashSet
public abstract class JetCodeFragment( public abstract class JetCodeFragment(
val _project: Project, val _project: Project,
@@ -31,15 +32,20 @@ public abstract class JetCodeFragment(
text: CharSequence, text: CharSequence,
elementType: IElementType, elementType: IElementType,
val _context: PsiElement? val _context: PsiElement?
): JetFile((PsiManager.getInstance(_project) as PsiManagerEx).getFileManager().createFileViewProvider(LightVirtualFile(name, JetFileType.INSTANCE, text), true), false), PsiCodeFragment { ): JetFile((PsiManager.getInstance(_project) as PsiManagerEx).getFileManager().createFileViewProvider(LightVirtualFile(name, JetFileType.INSTANCE, text), true), false), JavaCodeFragment {
private var _viewProvider = super<JetFile>.getViewProvider() as SingleRootFileViewProvider
private var _myImports = HashSet<String>();
{ {
(getViewProvider() as SingleRootFileViewProvider).forceCachedPsi(this) getViewProvider().forceCachedPsi(this)
init(TokenType.CODE_FRAGMENT, elementType) init(TokenType.CODE_FRAGMENT, elementType)
} }
private var _resolveScope: GlobalSearchScope? = null private var _resolveScope: GlobalSearchScope? = null
private var _viewProvider: FileViewProvider? = null private var _thisType: PsiType? = null
private var _superType: PsiType? = null
private var _exceptionHandler: JavaCodeFragment.ExceptionHandler? = null
override fun forceResolveScope(scope: GlobalSearchScope?) { override fun forceResolveScope(scope: GlobalSearchScope?) {
_resolveScope = scope _resolveScope = scope
@@ -58,12 +64,51 @@ public abstract class JetCodeFragment(
override fun clone(): JetCodeFragment { override fun clone(): JetCodeFragment {
val clone = cloneImpl(calcTreeElement().clone() as FileElement) as JetCodeFragment val clone = cloneImpl(calcTreeElement().clone() as FileElement) as JetCodeFragment
clone.setOriginalFile(this) clone.setOriginalFile(this)
val fileManager = (PsiManager.getInstance(_project) as PsiManagerEx).getFileManager() clone._myImports = _myImports
val cloneViewProvider = fileManager.createFileViewProvider(LightVirtualFile(getName(), JetFileType.INSTANCE, getText()), true) as SingleRootFileViewProvider clone._viewProvider = SingleRootFileViewProvider(PsiManager.getInstance(_project), LightVirtualFile(getName(), JetFileType.INSTANCE, getText()), true)
cloneViewProvider.forceCachedPsi(clone) clone._viewProvider.forceCachedPsi(clone)
clone._viewProvider = cloneViewProvider
return clone return clone
} }
override fun getViewProvider() = _viewProvider ?: super<JetFile>.getViewProvider() override fun getViewProvider() = _viewProvider
override fun getThisType() = _thisType
override fun setThisType(psiType: PsiType?) {
_thisType = psiType
}
override fun getSuperType() = _superType
override fun setSuperType(superType: PsiType?) {
_superType = superType
}
override fun importsToString(): String {
return _myImports.makeString(IMPORT_SEPARATOR)
}
override fun addImportsFromString(imports: String?) {
if (imports == null) return
_myImports.addAll(imports.split(IMPORT_SEPARATOR))
}
override fun setVisibilityChecker(checker: JavaCodeFragment.VisibilityChecker?) { }
override fun getVisibilityChecker() = JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE
override fun setExceptionHandler(checker: JavaCodeFragment.ExceptionHandler?) {
_exceptionHandler = checker
}
override fun getExceptionHandler() = _exceptionHandler
override fun importClass(aClass: PsiClass?): Boolean {
return true
}
class object {
val IMPORT_SEPARATOR = ","
}
} }
@@ -28,50 +28,7 @@ public class JetExpressionCodeFragment(
name: String, name: String,
text: CharSequence, text: CharSequence,
context: PsiElement? context: PsiElement?
) : JetCodeFragment(project, name, text, JetNodeTypes.EXPRESSION_CODE_FRAGMENT, context), JavaCodeFragment { ) : JetCodeFragment(project, name, text, JetNodeTypes.EXPRESSION_CODE_FRAGMENT, context) {
private var _thisType: PsiType? = null
private var _superType: PsiType? = null
private var _exceptionHandler: JavaCodeFragment.ExceptionHandler? = null
private val myImports: MutableSet<String> = hashSetOf()
override fun getThisType() = _thisType
override fun setThisType(psiType: PsiType?) {
_thisType = psiType
}
override fun getSuperType() = _superType
override fun setSuperType(superType: PsiType?) {
_superType = superType
}
override fun importsToString(): String {
return myImports.makeString(IMPORT_SEPARATOR)
}
override fun addImportsFromString(imports: String?) {
if (imports == null) return
myImports.addAll(imports.split(IMPORT_SEPARATOR))
}
override fun setVisibilityChecker(checker: JavaCodeFragment.VisibilityChecker?) {
}
override fun getVisibilityChecker() = JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE
override fun setExceptionHandler(checker: JavaCodeFragment.ExceptionHandler?) {
_exceptionHandler = checker
}
override fun getExceptionHandler() = _exceptionHandler
override fun importClass(aClass: PsiClass?): Boolean {
return true
}
fun getExpression(): JetExpression? { fun getExpression(): JetExpression? {
var resultingExpression: JetExpression? = null var resultingExpression: JetExpression? = null
@@ -86,8 +43,4 @@ public class JetExpressionCodeFragment(
}, null) }, null)
return resultingExpression return resultingExpression
} }
class object {
val IMPORT_SEPARATOR = ","
}
} }
@@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.psi.JetOperationExpression
import org.jetbrains.jet.lang.psi.JetExpression import org.jetbrains.jet.lang.psi.JetExpression
import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment
import org.jetbrains.jet.lang.psi.JetSuperExpression import org.jetbrains.jet.lang.psi.JetSuperExpression
import org.jetbrains.jet.lang.psi.JetCodeFragment
class KotlinEditorTextProvider : EditorTextProvider { class KotlinEditorTextProvider : EditorTextProvider {
override fun getEditorText(elementAtCaret: PsiElement): TextWithImports? { override fun getEditorText(elementAtCaret: PsiElement): TextWithImports? {
@@ -55,7 +56,7 @@ class KotlinEditorTextProvider : EditorTextProvider {
return containingFile.getImportList()?.getImports() return containingFile.getImportList()?.getImports()
?.map { it.getText() } ?.map { it.getText() }
?.makeString(JetExpressionCodeFragment.IMPORT_SEPARATOR) ?: "" ?.makeString(JetCodeFragment.IMPORT_SEPARATOR) ?: ""
} }
fun findExpressionInner(element: PsiElement): JetExpression? { fun findExpressionInner(element: PsiElement): JetExpression? {
@@ -65,6 +65,7 @@ import org.jetbrains.jet.OutputFileCollection
import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment
import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment
import org.jetbrains.jet.plugin.caches.resolve.getAnalysisResults import org.jetbrains.jet.plugin.caches.resolve.getAnalysisResults
import org.jetbrains.jet.lang.psi.JetCodeFragment
object KotlinEvaluationBuilder: EvaluatorBuilder { object KotlinEvaluationBuilder: EvaluatorBuilder {
override fun build(codeFragment: PsiElement, position: SourcePosition?): ExpressionEvaluator { override fun build(codeFragment: PsiElement, position: SourcePosition?): ExpressionEvaluator {
@@ -222,7 +223,7 @@ private fun createFileForDebugger(codeFragment: JetExpressionCodeFragment,
): JetFile { ): JetFile {
var fileText = template.replace("!IMPORT_LIST!", var fileText = template.replace("!IMPORT_LIST!",
codeFragment.importsToString() codeFragment.importsToString()
.split(JetExpressionCodeFragment.IMPORT_SEPARATOR) .split(JetCodeFragment.IMPORT_SEPARATOR)
.makeString("\n")) .makeString("\n"))
fileText = fileText.replace("!FUNCTION!", extractedFunction.getText()) fileText = fileText.replace("!FUNCTION!", extractedFunction.getText())