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.testFramework.LightVirtualFile
import org.jetbrains.jet.plugin.JetFileType
import java.util.HashSet
public abstract class JetCodeFragment(
val _project: Project,
@@ -31,15 +32,20 @@ public abstract class JetCodeFragment(
text: CharSequence,
elementType: IElementType,
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)
}
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?) {
_resolveScope = scope
@@ -58,12 +64,51 @@ public abstract class JetCodeFragment(
override fun clone(): JetCodeFragment {
val clone = cloneImpl(calcTreeElement().clone() as FileElement) as JetCodeFragment
clone.setOriginalFile(this)
val fileManager = (PsiManager.getInstance(_project) as PsiManagerEx).getFileManager()
val cloneViewProvider = fileManager.createFileViewProvider(LightVirtualFile(getName(), JetFileType.INSTANCE, getText()), true) as SingleRootFileViewProvider
cloneViewProvider.forceCachedPsi(clone)
clone._viewProvider = cloneViewProvider
clone._myImports = _myImports
clone._viewProvider = SingleRootFileViewProvider(PsiManager.getInstance(_project), LightVirtualFile(getName(), JetFileType.INSTANCE, getText()), true)
clone._viewProvider.forceCachedPsi(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,
text: CharSequence,
context: PsiElement?
) : JetCodeFragment(project, name, text, JetNodeTypes.EXPRESSION_CODE_FRAGMENT, context), JavaCodeFragment {
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
}
) : JetCodeFragment(project, name, text, JetNodeTypes.EXPRESSION_CODE_FRAGMENT, context) {
fun getExpression(): JetExpression? {
var resultingExpression: JetExpression? = null
@@ -86,8 +43,4 @@ public class JetExpressionCodeFragment(
}, null)
return resultingExpression
}
class object {
val IMPORT_SEPARATOR = ","
}
}