Getting decompiled file content through getPsi() doesn't work for local class files
Decompiler view providers are created with EmptyFileManager (see ClassFileDecompiler.decompile()). This makes impossible to create psi file for virtual class file in local file system because parent directory is null in SingleRootFileViewProvider.createFile() pre-check.
This commit is contained in:
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledText
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledText
|
||||
import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue
|
||||
|
||||
public class JetClsFile(provider: FileViewProvider) : KotlinClsFileBase(provider) {
|
||||
public class JetClsFile(provider: KotlinClassFileViewProvider) : KotlinClsFileBase(provider) {
|
||||
protected override val decompiledText: LockedClearableLazyValue<DecompiledText> = LockedClearableLazyValue(Any()) {
|
||||
buildDecompiledText(getVirtualFile())
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.psi.JetDeclaration
|
||||
import org.jetbrains.kotlin.psi.JetFile
|
||||
import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue
|
||||
|
||||
public abstract class KotlinClsFileBase(provider: FileViewProvider) : JetFile(provider, true) {
|
||||
public abstract class KotlinClsFileBase(val provider: KotlinClassFileViewProvider) : JetFile(provider, true) {
|
||||
protected abstract val decompiledText: LockedClearableLazyValue<DecompiledText>
|
||||
|
||||
public fun getDeclarationForDescriptor(descriptor: DeclarationDescriptor): JetDeclaration? {
|
||||
@@ -67,6 +67,7 @@ public abstract class KotlinClsFileBase(provider: FileViewProvider) : JetFile(pr
|
||||
override fun onContentReload() {
|
||||
super.onContentReload()
|
||||
|
||||
provider.content.drop()
|
||||
decompiledText.drop()
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledTextFromJ
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledText
|
||||
import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue
|
||||
|
||||
public class KotlinJavascriptMetaFile(provider: FileViewProvider) : KotlinClsFileBase(provider) {
|
||||
public class KotlinJavascriptMetaFile(provider: KotlinClassFileViewProvider) : KotlinClsFileBase(provider) {
|
||||
protected override val decompiledText: LockedClearableLazyValue<DecompiledText> = LockedClearableLazyValue(Any()) {
|
||||
buildDecompiledTextFromJsMetadata(getVirtualFile())
|
||||
}
|
||||
|
||||
+15
-1
@@ -33,7 +33,21 @@ abstract class KotlinClassFileViewProvider(
|
||||
manager: PsiManager,
|
||||
file: VirtualFile,
|
||||
physical: Boolean) : SingleRootFileViewProvider(manager, file, physical, JetLanguage.INSTANCE) {
|
||||
override fun getContents(): CharSequence = getPsi(JetLanguage.INSTANCE)?.getText() ?: ""
|
||||
val content : LockedClearableLazyValue<String> = LockedClearableLazyValue(Any()) {
|
||||
val psiFile = createFile(manager.getProject(), file, JetFileType.INSTANCE)
|
||||
val text = psiFile?.getText() ?: ""
|
||||
|
||||
(psiFile as? PsiFileImpl)?.markInvalidated()
|
||||
|
||||
text
|
||||
}
|
||||
|
||||
override fun createFile(project: Project, file: VirtualFile, fileType: FileType): PsiFile? {
|
||||
// Workaround for KT-8344
|
||||
return super.createFile(project, file, fileType)
|
||||
}
|
||||
|
||||
override fun getContents() = content.get()
|
||||
}
|
||||
|
||||
public class JetClassFileViewProvider(
|
||||
|
||||
Reference in New Issue
Block a user