Convert JetCodeFragment to Kotlin

This commit is contained in:
Natalia Ukhorskaya
2014-04-24 17:25:26 +04:00
parent eb8b5c0823
commit 8bbbe8f0f6
3 changed files with 74 additions and 99 deletions
@@ -0,0 +1,5 @@
<root>
<item name='com.intellij.psi.impl.source.PsiFileImpl com.intellij.psi.impl.source.tree.FileElement calcTreeElement()'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -1,99 +0,0 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.lang.psi;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.psi.impl.file.impl.FileManager;
import com.intellij.psi.impl.source.tree.FileElement;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.tree.IElementType;
import com.intellij.testFramework.LightVirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.plugin.JetFileType;
public abstract class JetCodeFragment extends JetFile implements PsiCodeFragment {
private final Project project;
protected PsiElement context;
private GlobalSearchScope resolveScope;
public JetCodeFragment(Project project, String name, CharSequence text, IElementType elementType, PsiElement context) {
super(((PsiManagerEx) PsiManager.getInstance(project)).getFileManager().createFileViewProvider(
new LightVirtualFile(name, JetFileType.INSTANCE, text), true), false);
((SingleRootFileViewProvider)getViewProvider()).forceCachedPsi(this);
init(TokenType.CODE_FRAGMENT, elementType);
this.project = project;
this.context = context;
}
@Override
public void forceResolveScope(GlobalSearchScope scope) {
resolveScope = scope;
}
@Override
public GlobalSearchScope getForcedResolveScope() {
return resolveScope;
}
@Override
public boolean isPhysical() {
return true;
}
@Override
public boolean isValid() {
return true;
}
@Override
public PsiElement getContext() {
return context;
}
@Override
@NotNull
public GlobalSearchScope getResolveScope() {
if (resolveScope != null) return resolveScope;
return super.getResolveScope();
}
@Override
protected JetCodeFragment clone() {
JetCodeFragment clone = (JetCodeFragment)cloneImpl((FileElement)calcTreeElement().clone());
clone.myOriginalFile = this;
FileManager fileManager = ((PsiManagerEx) PsiManager.getInstance(project)).getFileManager();
SingleRootFileViewProvider cloneViewProvider = (SingleRootFileViewProvider)fileManager.createFileViewProvider(new LightVirtualFile(
getName(),
JetFileType.INSTANCE,
getText()), true);
cloneViewProvider.forceCachedPsi(clone);
clone.myViewProvider = cloneViewProvider;
return clone;
}
private FileViewProvider myViewProvider = null;
@Override
@NotNull
public FileViewProvider getViewProvider() {
if (myViewProvider != null) return myViewProvider;
return super.getViewProvider();
}
}
@@ -0,0 +1,69 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.lang.psi
import com.intellij.openapi.project.Project
import com.intellij.psi.*
import com.intellij.psi.impl.PsiManagerEx
import com.intellij.psi.impl.source.tree.FileElement
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.tree.IElementType
import com.intellij.testFramework.LightVirtualFile
import org.jetbrains.jet.plugin.JetFileType
public abstract class JetCodeFragment(
val _project: Project,
name: String,
text: CharSequence,
elementType: IElementType,
val _context: PsiElement?
): JetFile((PsiManager.getInstance(_project) as PsiManagerEx).getFileManager().createFileViewProvider(LightVirtualFile(name, JetFileType.INSTANCE, text), true), false), PsiCodeFragment {
{
(getViewProvider() as SingleRootFileViewProvider).forceCachedPsi(this)
init(TokenType.CODE_FRAGMENT, elementType)
}
private var _resolveScope: GlobalSearchScope? = null
private var _viewProvider: FileViewProvider? = null
override fun forceResolveScope(scope: GlobalSearchScope?) {
_resolveScope = scope
}
override fun getForcedResolveScope() = _resolveScope
override fun isPhysical() = true
override fun isValid() = true
override fun getContext() = _context
override fun getResolveScope() = _resolveScope ?: super<JetFile>.getResolveScope()
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
return clone
}
override fun getViewProvider() = _viewProvider ?: super<JetFile>.getViewProvider()
}