From 6cf14f5500a71921d9cb55a68c694eceaaf74b98 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 14 Nov 2014 17:32:56 +0300 Subject: [PATCH] Update JetClassFileViewProvider: JetClsFile is Kotlin compiled file --- .../decompiler/JetClassFileViewProvider.kt | 2 +- .../jet/plugin/decompiler/JetClsFile.kt | 44 ++-- .../JetDummyClassFileViewProvider.java | 193 ------------------ 3 files changed, 17 insertions(+), 222 deletions(-) delete mode 100644 idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetDummyClassFileViewProvider.java diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetClassFileViewProvider.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetClassFileViewProvider.kt index 10ce0875916..e87c0880b08 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetClassFileViewProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetClassFileViewProvider.kt @@ -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 diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetClsFile.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetClsFile.kt index b7401e52006..7117bfa6375 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetClsFile.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetClsFile.kt @@ -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()) - } - else { - null - } + val range = decompiledText.get().renderedDescriptorsToRange[key] + return if (range != null) { + PsiTreeUtil.findElementOfClassAtRange(this, range.getStartOffset(), range.getEndOffset(), javaClass()) + } + else { + null } } - override fun onContentReload() { - super.onContentReload() + override fun getText(): String? { + return decompiledText.get().text + } - synchronized (mirrorLock) { - decompiledText.drop() - mirrorFile.drop() - } + override fun onContentReload() { + super.onContentReload() + + decompiledText.drop() } TestOnly diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetDummyClassFileViewProvider.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetDummyClassFileViewProvider.java deleted file mode 100644 index bc3b02cffc2..00000000000 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/decompiler/JetDummyClassFileViewProvider.java +++ /dev/null @@ -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 getLanguages() { - return Collections.singleton(getBaseLanguage()); - } - - @Override - public JetFile getPsi(@NotNull Language target) { - if (JetLanguage.INSTANCE != target) { - return null; - } - return jetFile; - } - - @Override - @NotNull - public List getAllFiles() { - return Collections.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 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); - } -}