diff --git a/annotations/com/intellij/psi/impl/source/annotations.xml b/annotations/com/intellij/psi/impl/source/annotations.xml new file mode 100644 index 00000000000..4b14ea4b748 --- /dev/null +++ b/annotations/com/intellij/psi/impl/source/annotations.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.java deleted file mode 100644 index d4a90c35102..00000000000 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.java +++ /dev/null @@ -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(); - } -} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.kt new file mode 100644 index 00000000000..bf845984f96 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.kt @@ -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.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.getViewProvider() +}