Update JetClassFileViewProvider: JetClsFile is Kotlin compiled file
This commit is contained in:
+1
-1
@@ -37,7 +37,7 @@ public class JetClassFileViewProvider(
|
||||
}
|
||||
|
||||
override fun getContents(): CharSequence {
|
||||
return if (!isInternal) jetClsFile!!.getText() else ""
|
||||
return jetClsFile?.getText() ?: ""
|
||||
}
|
||||
|
||||
override fun createFile(project: Project, file: VirtualFile, fileType: FileType): PsiFile? = jetClsFile
|
||||
|
||||
@@ -26,45 +26,33 @@ import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.jet.plugin.decompiler.textBuilder.buildDecompiledText
|
||||
import org.jetbrains.jet.plugin.decompiler.textBuilder.descriptorToKey
|
||||
import org.jetbrains.jet.utils.concurrent.block.LockedClearableLazyValue
|
||||
import org.jetbrains.jet.lang.psi.JetFile
|
||||
|
||||
public class JetClsFile(val provider: JetClassFileViewProvider) : ClsFileImpl(provider) {
|
||||
private val mirrorLock = Any()
|
||||
|
||||
private val mirrorFile = LockedClearableLazyValue(mirrorLock) {
|
||||
JetDummyClassFileViewProvider.createJetFile(
|
||||
provider.getManager(),
|
||||
getVirtualFile(),
|
||||
decompiledText.get().text)!!
|
||||
}
|
||||
|
||||
private val decompiledText = LockedClearableLazyValue(mirrorLock) {
|
||||
public class JetClsFile(val provider: JetClassFileViewProvider) : JetFile(provider, true) {
|
||||
private val decompiledText = LockedClearableLazyValue(Any()) {
|
||||
buildDecompiledText(getVirtualFile())
|
||||
}
|
||||
|
||||
override fun getMirror(): PsiElement? = mirrorFile.get()
|
||||
|
||||
public fun getDeclarationForDescriptor(descriptor: DeclarationDescriptor): JetDeclaration? {
|
||||
val key = descriptorToKey(descriptor.getOriginal())
|
||||
|
||||
return synchronized(mirrorLock) {
|
||||
val range = decompiledText.get().renderedDescriptorsToRange[key]
|
||||
if (range != null) {
|
||||
PsiTreeUtil.findElementOfClassAtRange(
|
||||
mirrorFile.get(), range.getStartOffset(), range.getEndOffset(), javaClass<JetDeclaration>())
|
||||
}
|
||||
else {
|
||||
null
|
||||
}
|
||||
val range = decompiledText.get().renderedDescriptorsToRange[key]
|
||||
return if (range != null) {
|
||||
PsiTreeUtil.findElementOfClassAtRange(this, range.getStartOffset(), range.getEndOffset(), javaClass<JetDeclaration>())
|
||||
}
|
||||
else {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
override fun onContentReload() {
|
||||
super<ClsFileImpl>.onContentReload()
|
||||
override fun getText(): String? {
|
||||
return decompiledText.get().text
|
||||
}
|
||||
|
||||
synchronized (mirrorLock) {
|
||||
decompiledText.drop()
|
||||
mirrorFile.drop()
|
||||
}
|
||||
override fun onContentReload() {
|
||||
super.onContentReload()
|
||||
|
||||
decompiledText.drop()
|
||||
}
|
||||
|
||||
TestOnly
|
||||
|
||||
-193
@@ -1,193 +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.plugin.decompiler;
|
||||
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.util.UserDataHolderBase;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.SharedPsiElementImplUtil;
|
||||
import com.intellij.psi.impl.source.tree.LeafElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.plugin.JetLanguage;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
class JetDummyClassFileViewProvider extends UserDataHolderBase implements FileViewProvider {
|
||||
private final String text;
|
||||
private final PsiManager manager;
|
||||
private JetFile jetFile = null;
|
||||
private final VirtualFile virtualFile;
|
||||
|
||||
public JetDummyClassFileViewProvider(@NotNull PsiManager manager, @NotNull VirtualFile file, String text) {
|
||||
this.manager = manager;
|
||||
virtualFile = file;
|
||||
this.text = text;
|
||||
|
||||
jetFile = new JetFile(this, true) {
|
||||
@Override
|
||||
public VirtualFile getVirtualFile() {
|
||||
return virtualFile; // overridden to return not-null; original method returns null when isEventSystemEnabled() = false
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiManager getManager() {
|
||||
return manager;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Document getDocument() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public String getContents() {
|
||||
return text;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public VirtualFile getVirtualFile() {
|
||||
return virtualFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Language getBaseLanguage() {
|
||||
return JetLanguage.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Set<Language> getLanguages() {
|
||||
return Collections.singleton(getBaseLanguage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public JetFile getPsi(@NotNull Language target) {
|
||||
if (JetLanguage.INSTANCE != target) {
|
||||
return null;
|
||||
}
|
||||
return jetFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public List<PsiFile> getAllFiles() {
|
||||
return Collections.<PsiFile>singletonList(jetFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeContentsSynchronized() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void contentsSynchronized() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEventSystemEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPhysical() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getModificationStamp() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsIncrementalReparse(@NotNull Language rootLanguage) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rootChanged(@NotNull PsiFile psiFile) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileViewProvider clone(){
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiReference findReferenceAt(int offset) {
|
||||
return SharedPsiElementImplUtil.findReferenceAt(getPsi(getBaseLanguage()), offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public PsiElement findElementAt(int offset, @NotNull Language language) {
|
||||
return language == getBaseLanguage() ? findElementAt(offset) : null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public PsiElement findElementAt(int offset, @NotNull Class<? extends Language> lang) {
|
||||
if (JetLanguage.class != lang) {
|
||||
return null;
|
||||
}
|
||||
return findElementAt(offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement findElementAt(int offset) {
|
||||
LeafElement element = jetFile.calcTreeElement().findLeafElementAt(offset);
|
||||
return element != null ? element.getPsi() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiReference findReferenceAt(int offsetInElement, @NotNull Language language) {
|
||||
if (JetLanguage.INSTANCE != language) {
|
||||
return null;
|
||||
}
|
||||
return findReferenceAt(offsetInElement);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public FileViewProvider createCopy(@NotNull VirtualFile copy) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiFile getStubBindingRoot() {
|
||||
PsiFile psi = getPsi(getBaseLanguage());
|
||||
assert psi != null;
|
||||
return psi;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JetFile createJetFile(PsiManager psiManager, VirtualFile file, String text) {
|
||||
return new JetDummyClassFileViewProvider(psiManager, file, text).getPsi(JetLanguage.INSTANCE);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user