Create file must return new file, as old one can be invalidated (KT-8266)
Invalidation in SingleRootFileViewProvider.getPsiInner() #KT-8266 Fixed
This commit is contained in:
+38
-16
@@ -16,33 +16,55 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.decompiler
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.fileTypes.FileType
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.FileIndexFacade
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.SingleRootFileViewProvider
|
||||
import com.intellij.psi.impl.source.PsiFileImpl
|
||||
import org.jetbrains.kotlin.idea.JetFileType
|
||||
import org.jetbrains.kotlin.idea.JetLanguage
|
||||
import kotlin.properties.Delegates
|
||||
import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue
|
||||
|
||||
abstract class KotlinClassFileViewProvider(
|
||||
manager: PsiManager,
|
||||
file: VirtualFile,
|
||||
physical: Boolean) : SingleRootFileViewProvider(manager, file, physical, JetLanguage.INSTANCE) {
|
||||
override fun getContents(): CharSequence = getPsi(JetLanguage.INSTANCE)?.getText() ?: ""
|
||||
}
|
||||
|
||||
public class JetClassFileViewProvider(
|
||||
manager: PsiManager,
|
||||
file: VirtualFile,
|
||||
physical: Boolean,
|
||||
val isInternal: Boolean) : KotlinClassFileViewProvider(manager, file, physical) {
|
||||
|
||||
override fun createFile(project: Project, file: VirtualFile, fileType: FileType): PsiFile? {
|
||||
val fileIndex = ServiceManager.getService(project, javaClass<FileIndexFacade>())
|
||||
if (!fileIndex.isInLibraryClasses(file) && fileIndex.isInSource(file)) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (isInternal) return null
|
||||
|
||||
return JetClsFile(this)
|
||||
}
|
||||
|
||||
override fun createCopy(copy: VirtualFile) = JetClassFileViewProvider(getManager(), copy, false, isInternal)
|
||||
}
|
||||
|
||||
public class KotlinJavascriptMetaFileViewProvider (
|
||||
manager: PsiManager,
|
||||
val file: VirtualFile,
|
||||
physical: Boolean,
|
||||
val isInternal: Boolean) : SingleRootFileViewProvider(manager, file, physical, JetLanguage.INSTANCE) {
|
||||
val isInternal: Boolean) : KotlinClassFileViewProvider(manager, file, physical) {
|
||||
|
||||
val jetClsFile by Delegates.blockingLazy(this) {
|
||||
//TODO: check index that file is library file, as in ClassFileViewProvider
|
||||
if (!isInternal) JetClsFile(this) else null
|
||||
}
|
||||
//TODO: check index that file is library file, as in ClassFileViewProvider
|
||||
override fun createFile(project: Project, file: VirtualFile, fileType: FileType) =
|
||||
if (!isInternal) KotlinJavascriptMetaFile(this) else null
|
||||
|
||||
override fun getContents(): CharSequence {
|
||||
return jetClsFile?.getText() ?: ""
|
||||
}
|
||||
|
||||
override fun createFile(project: Project, file: VirtualFile, fileType: FileType): PsiFile? = jetClsFile
|
||||
|
||||
override fun createCopy(copy: VirtualFile): SingleRootFileViewProvider {
|
||||
return JetClassFileViewProvider(getManager(), copy, false, isInternal)
|
||||
}
|
||||
}
|
||||
override fun createCopy(copy: VirtualFile) = KotlinJavascriptMetaFileViewProvider(getManager(), copy, false, isInternal)
|
||||
}
|
||||
@@ -16,11 +16,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.decompiler
|
||||
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledText
|
||||
import com.intellij.psi.FileViewProvider
|
||||
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(val provider: JetClassFileViewProvider) : KotlinClsFileBase(provider) {
|
||||
public class JetClsFile(provider: FileViewProvider) : KotlinClsFileBase(provider) {
|
||||
protected override val decompiledText: LockedClearableLazyValue<DecompiledText> = LockedClearableLazyValue(Any()) {
|
||||
buildDecompiledText(getVirtualFile())
|
||||
}
|
||||
|
||||
+2
-1
@@ -16,11 +16,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.decompiler
|
||||
|
||||
import com.intellij.psi.FileViewProvider
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledTextFromJsMetadata
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledText
|
||||
import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue
|
||||
|
||||
public class KotlinJavascriptMetaFile(val provider: KotlinJavascriptMetaFileViewProvider) : KotlinClsFileBase(provider) {
|
||||
public class KotlinJavascriptMetaFile(provider: FileViewProvider) : KotlinClsFileBase(provider) {
|
||||
protected override val decompiledText: LockedClearableLazyValue<DecompiledText> = LockedClearableLazyValue(Any()) {
|
||||
buildDecompiledTextFromJsMetadata(getVirtualFile())
|
||||
}
|
||||
|
||||
-48
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2015 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.kotlin.idea.decompiler
|
||||
|
||||
import com.intellij.openapi.fileTypes.FileType
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.SingleRootFileViewProvider
|
||||
import org.jetbrains.kotlin.idea.JetLanguage
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
public class KotlinJavascriptMetaFileViewProvider (
|
||||
manager: PsiManager,
|
||||
val file: VirtualFile,
|
||||
physical: Boolean,
|
||||
val isInternal: Boolean) : SingleRootFileViewProvider(manager, file, physical, JetLanguage.INSTANCE) {
|
||||
|
||||
val jetJsMetaFile by Delegates.blockingLazy(this) {
|
||||
//TODO: check index that file is library file, as in ClassFileViewProvider
|
||||
if (!isInternal) KotlinJavascriptMetaFile(this) else null
|
||||
}
|
||||
|
||||
override fun getContents(): CharSequence {
|
||||
return jetJsMetaFile?.getText() ?: ""
|
||||
}
|
||||
|
||||
override fun createFile(project: Project, file: VirtualFile, fileType: FileType): PsiFile? = jetJsMetaFile
|
||||
|
||||
override fun createCopy(copy: VirtualFile): SingleRootFileViewProvider {
|
||||
return KotlinJavascriptMetaFileViewProvider(getManager(), copy, false, isInternal)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user