diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/JetClassFileViewProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/JetClassFileViewProvider.kt index 68acd271535..3ffbafa4439 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/JetClassFileViewProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/JetClassFileViewProvider.kt @@ -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()) + 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) +} \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/JetClsFile.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/JetClsFile.kt index 02afb1643ec..2d95436f4ba 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/JetClsFile.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/JetClsFile.kt @@ -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 = LockedClearableLazyValue(Any()) { buildDecompiledText(getVirtualFile()) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KotlinJavascriptMetaFile.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KotlinJavascriptMetaFile.kt index a74595f799a..8224a4b9071 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KotlinJavascriptMetaFile.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KotlinJavascriptMetaFile.kt @@ -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 = LockedClearableLazyValue(Any()) { buildDecompiledTextFromJsMetadata(getVirtualFile()) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KotlinJavascriptMetaFileViewProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KotlinJavascriptMetaFileViewProvider.kt deleted file mode 100644 index 09512d7cfd4..00000000000 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KotlinJavascriptMetaFileViewProvider.kt +++ /dev/null @@ -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) - } -}