From 8ac3b1441acf05cf67ded8b9586218df38aa817c Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Mon, 23 Nov 2015 14:54:21 +0300 Subject: [PATCH] remove idea-js module --- .idea/artifacts/KotlinPlugin.xml | 1 - .idea/modules.xml | 1 - idea/idea-completion/idea-completion.iml | 1 - idea/idea-js/idea-js.iml | 19 -- .../kotlin/idea/js/KotlinJavaScriptHandler.kt | 70 ---- ...iptLibraryContentsTreeStructureProvider.kt | 36 -- .../idea/js/KotlinJavaScriptLibraryManager.kt | 310 ------------------ .../idea/js/KotlinJavaScriptMetaFileSystem.kt | 63 ---- .../idea-test-framework.iml | 1 - idea/idea.iml | 1 - idea/src/META-INF/plugin.xml | 8 - 11 files changed, 511 deletions(-) delete mode 100644 idea/idea-js/idea-js.iml delete mode 100644 idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptHandler.kt delete mode 100644 idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptLibraryContentsTreeStructureProvider.kt delete mode 100644 idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptLibraryManager.kt delete mode 100644 idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptMetaFileSystem.kt diff --git a/.idea/artifacts/KotlinPlugin.xml b/.idea/artifacts/KotlinPlugin.xml index 1b1bf2dd414..ad71d741b99 100644 --- a/.idea/artifacts/KotlinPlugin.xml +++ b/.idea/artifacts/KotlinPlugin.xml @@ -42,7 +42,6 @@ - diff --git a/.idea/modules.xml b/.idea/modules.xml index dc0e1b27c47..92f38d72ac1 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -36,7 +36,6 @@ - diff --git a/idea/idea-completion/idea-completion.iml b/idea/idea-completion/idea-completion.iml index ade1db9de2e..8e89f611d9b 100644 --- a/idea/idea-completion/idea-completion.iml +++ b/idea/idea-completion/idea-completion.iml @@ -21,7 +21,6 @@ - diff --git a/idea/idea-js/idea-js.iml b/idea/idea-js/idea-js.iml deleted file mode 100644 index caae7ed606b..00000000000 --- a/idea/idea-js/idea-js.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptHandler.kt b/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptHandler.kt deleted file mode 100644 index 7f99b4be2f9..00000000000 --- a/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptHandler.kt +++ /dev/null @@ -1,70 +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.js - -import com.intellij.openapi.vfs.impl.ArchiveHandler -import com.intellij.openapi.vfs.impl.ArchiveHandler.EntryInfo -import com.intellij.util.ArrayUtil -import gnu.trove.THashMap -import org.jetbrains.kotlin.serialization.js.forEachFile -import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils - -public open class KotlinJavaScriptHandler(path: String) : ArchiveHandler(path) { - - override fun createEntriesMap(): Map { - val map = THashMap() - map.put("", createRootEntry()) - - for(metadata in KotlinJavascriptMetadataUtils.loadMetadata(getFile())) { - val moduleName = metadata.moduleName - metadata.forEachFile { - filePath, fileContent -> getOrCreate(moduleName + "/" + filePath, false, map, fileContent) - } - } - - return map - } - - private fun getOrCreate( - entryPath: String, - isDirectory: Boolean, - map: MutableMap, - content: ByteArray = ArrayUtil.EMPTY_BYTE_ARRAY - ): EntryInfo { - val info = map[entryPath] - if (info != null) return info - - val path = splitPath(entryPath) - val parentInfo = getOrCreate(path.first, true, map) - val newInfo = JsMetaEntryInfo(parentInfo, path.second, isDirectory, content) - map[entryPath] = newInfo - - return newInfo - } - - override fun contentsToByteArray(relativePath: String): ByteArray { - val entryInfo = getEntryInfo(relativePath) - return if (entryInfo is JsMetaEntryInfo) entryInfo.content else ArrayUtil.EMPTY_BYTE_ARRAY - } - - private class JsMetaEntryInfo( - parent: EntryInfo, - shortName: String, - isDirectory: Boolean, - val content: ByteArray - ) : EntryInfo(shortName, isDirectory, ArchiveHandler.DEFAULT_LENGTH, ArchiveHandler.DEFAULT_TIMESTAMP, parent) -} \ No newline at end of file diff --git a/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptLibraryContentsTreeStructureProvider.kt b/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptLibraryContentsTreeStructureProvider.kt deleted file mode 100644 index 639ab9dd6ec..00000000000 --- a/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptLibraryContentsTreeStructureProvider.kt +++ /dev/null @@ -1,36 +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.js - -import com.intellij.ide.projectView.TreeStructureProvider -import com.intellij.ide.projectView.ViewSettings -import com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode -import com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode -import com.intellij.ide.util.treeView.AbstractTreeNode - -public class KotlinJavaScriptLibraryContentsTreeStructureProvider : TreeStructureProvider { - - override fun modify(parent: AbstractTreeNode<*>, children: Collection>, settings: ViewSettings): Collection> = - if (parent.getProject() == null || parent !is ExternalLibrariesNode) children else filterLibraryNodes(children) - - private fun filterLibraryNodes(children: Collection>): Collection> { - val filteredChildren = children.filterNot { it is NamedLibraryElementNode && KotlinJavaScriptLibraryManager.LIBRARY_NAME == it.getName() } - return if (filteredChildren.size() == children.size()) children else filteredChildren - } - - override fun getData(selected: MutableCollection>?, dataName: String?): Any? = null -} diff --git a/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptLibraryManager.kt b/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptLibraryManager.kt deleted file mode 100644 index cfff41a9a97..00000000000 --- a/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptLibraryManager.kt +++ /dev/null @@ -1,310 +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.js - -import com.intellij.ProjectTopics -import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.application.ModalityState -import com.intellij.openapi.components.ProjectComponent -import com.intellij.openapi.module.Module -import com.intellij.openapi.module.ModuleManager -import com.intellij.openapi.module.ModuleType -import com.intellij.openapi.module.ModuleTypeId -import com.intellij.openapi.project.DumbService -import com.intellij.openapi.project.Project -import com.intellij.openapi.roots.* -import com.intellij.openapi.roots.impl.OrderEntryUtil -import com.intellij.openapi.roots.libraries.Library -import com.intellij.openapi.roots.libraries.LibraryTable -import com.intellij.openapi.util.Disposer -import com.intellij.openapi.vfs.VfsUtil -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.openapi.vfs.VirtualFileManager -import com.intellij.openapi.vfs.newvfs.BulkFileListener -import com.intellij.openapi.vfs.newvfs.events.VFileContentChangeEvent -import com.intellij.openapi.vfs.newvfs.events.VFileEvent -import com.intellij.util.FileContentUtilCore -import com.intellij.util.PathUtil -import org.jetbrains.annotations.TestOnly -import org.jetbrains.kotlin.idea.framework.KotlinJavaScriptLibraryDetectionUtil -import org.jetbrains.kotlin.idea.project.ProjectStructureUtil.isJsKotlinModule -import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils -import java.io.File -import java.util.* -import java.util.concurrent.atomic.AtomicBoolean - -public class KotlinJavaScriptLibraryManager private constructor(private var myProject: Project?) : ProjectComponent, ModuleRootListener, BulkFileListener { - private val myMuted = AtomicBoolean(false) - - private val libraryFileStampMap: MutableMap = Collections.synchronizedMap(hashMapOf()) - - override fun getComponentName(): String = "KotlinJavascriptLibraryManager" - - override fun projectOpened() { - val project = myProject!! - project.messageBus.connect(project).subscribe(ProjectTopics.PROJECT_ROOTS, this) - project.messageBus.connect(project).subscribe(VirtualFileManager.VFS_CHANGES, this) - DumbService.getInstance(project).smartInvokeLater() { updateProjectLibrary() } - } - - override fun projectClosed() { - } - - override fun initComponent() { - } - - override fun disposeComponent() { - myProject = null - } - - override fun after(events: List) { - if (myMuted.get()) return - - val changedFiles = events - .filter { it !is MyVFileContentChangeEvent && it is VFileContentChangeEvent } - .mapNotNull { it.file } - - val files = update(changedFiles, addToMapIfAbsent = false) - val application = ApplicationManager.getApplication() - refreshFiles(files, application.isUnitTestMode) - } - - override fun before(events: List) { - } - - override fun beforeRootsChange(event: ModuleRootEvent) { - } - - override fun rootsChanged(event: ModuleRootEvent) { - if (myMuted.get()) return - - ApplicationManager.getApplication().invokeLater(Runnable { - DumbService.getInstance(myProject!!).runWhenSmart() { updateProjectLibrary() } - }, ModalityState.NON_MODAL, myProject!!.disposed) - } - - @TestOnly - public fun syncUpdateProjectLibrary(): Unit = updateProjectLibrary(true) - - /** - * @param synchronously may be true only in tests. - */ - private fun updateProjectLibrary(synchronously: Boolean = false) { - val project = myProject - if (project == null || project.isDisposed) return - - ApplicationManager.getApplication().assertReadAccessAllowed() - - for (module in ModuleManager.getInstance(project).modules) { - if (!isModuleApplicable(module)) continue - - if (!isJsKotlinModule(module)) { - findLibraryByName(module, LIBRARY_NAME)?.let { resetLibraries(module, ChangesToApply(), LIBRARY_NAME, synchronously) } - continue - } - - val clsRootUrls: MutableList = arrayListOf() - val srcRootUrls: MutableList = arrayListOf() - val rootFiles: MutableList = arrayListOf() - - ModuleRootManager.getInstance(module).orderEntries().librariesOnly().forEachLibrary() { library -> - if (KotlinJavaScriptLibraryDetectionUtil.isKotlinJavaScriptLibrary(library)) { - var addSources = false - for (clsRootFile in library.getFiles(OrderRootType.CLASSES)) { - val path = PathUtil.getLocalPath(clsRootFile) - assert(path != null) { "expected not-null path for ${clsRootFile.name}" } - - val metadataList = KotlinJavascriptMetadataUtils.loadMetadata(path!!) - if (metadataList.filter { !it.isAbiVersionCompatible }.isNotEmpty()) continue - - VfsUtil.findFileByIoFile(File(path), true)?.let { rootFiles.add(it) } - val classRoot = KotlinJavaScriptMetaFileSystem.getInstance().refreshAndFindFileByPath("$path!/") - classRoot?.let { - clsRootUrls.add(it.url) - addSources = true - } - } - if (addSources) { - srcRootUrls.addAll(library.getFiles(OrderRootType.SOURCES).map { it.url }) - } - } - true - } - - val filesToRefresh = update(rootFiles, addToMapIfAbsent = true) - - val changesToApply = ChangesToApply(clsRootUrls, srcRootUrls, filesToRefresh) - - resetLibraries(module, changesToApply, LIBRARY_NAME, synchronously) - } - } - - private fun resetLibraries(module: Module, changesToApply: ChangesToApply, libraryName: String, synchronously: Boolean) = - applyChange(module, changesToApply, synchronously, libraryName) - - private fun applyChange(module: Module, changesToApply: ChangesToApply, synchronously: Boolean, libraryName: String) { - if (synchronously) { - //for test only - val application = ApplicationManager.getApplication() - if (!application.isUnitTestMode) { - throw IllegalStateException("Synchronous library update may be done only in test mode") - } - - val token = application.acquireWriteActionLock(KotlinJavaScriptLibraryManager::class.java) - try { - applyChangeImpl(module, changesToApply, libraryName) - } - finally { - token.finish() - } - } - else { - val commit = Runnable { applyChangeImpl(module, changesToApply, libraryName) } - val commitInWriteAction = Runnable { ApplicationManager.getApplication().runWriteAction(commit) } - ApplicationManager.getApplication().invokeLater(commitInWriteAction, myProject!!.disposed) - } - } - - private fun update(changedFiles: List, addToMapIfAbsent: Boolean): List { - if (changedFiles.isEmpty()) return emptyList() - - val files = arrayListOf() - synchronized(libraryFileStampMap) { - changedFiles.forEach { file -> - PathUtil.getLocalPath(file)?.let { path -> - val timeStamp = libraryFileStampMap.get(path) - if (addToMapIfAbsent && timeStamp != file.timeStamp || - !addToMapIfAbsent && timeStamp != null) { - libraryFileStampMap[path] = file.timeStamp - files.add(file) - } - } - } - } - - return files - } - - private fun refreshFiles(files: List, synchronously: Boolean) { - val events = files.filter { !it.isDirectory && it.isValid }.map { MyVFileContentChangeEvent(it) } - if (events.isEmpty()) return - - val commitInWriteAction = Runnable { - ApplicationManager.getApplication().runWriteAction() { - val publisher = ApplicationManager.getApplication().messageBus.syncPublisher(VirtualFileManager.VFS_CHANGES) - publisher.before(events) - publisher.after(events) - } - } - - if (synchronously) { - commitInWriteAction.run() - } - else { - ApplicationManager.getApplication().invokeLater(commitInWriteAction, myProject!!.disposed) - } - } - - @Synchronized - private fun applyChangeImpl(module: Module, changesToApply: ChangesToApply, libraryName: String) { - if (module.isDisposed) return - - refreshFiles(changesToApply.filesToRefresh, synchronously = true) - - val model = ModuleRootManager.getInstance(module).modifiableModel - val libraryTableModel = model.moduleLibraryTable.modifiableModel - - var library = findLibraryByName(libraryTableModel, libraryName) - - if (library == null) { - if (changesToApply.clsUrlsToAdd.isEmpty()) { - model.dispose() - return - } - - library = libraryTableModel.createLibrary(libraryName)!! - } - - if (changesToApply.clsUrlsToAdd.isEmpty()) { - libraryTableModel.removeLibrary(library) - commitLibraries(null, libraryTableModel, model) - return - } - - val libraryModel = library.modifiableModel - - val existingClsUrls = library.getUrls(OrderRootType.CLASSES).toSet() - val existingSrcUrls = library.getUrls(OrderRootType.SOURCES).toSet() - - if (existingClsUrls == changesToApply.clsUrlsToAdd.toSet() && existingSrcUrls == changesToApply.srcUrlsToAdd.toSet()) { - model.dispose() - Disposer.dispose(libraryModel) - return - } - - existingClsUrls.forEach { libraryModel.removeRoot(it, OrderRootType.CLASSES) } - existingSrcUrls.forEach { libraryModel.removeRoot(it, OrderRootType.SOURCES) } - - changesToApply.clsUrlsToAdd.forEach { libraryModel.addRoot(it, OrderRootType.CLASSES) } - changesToApply.srcUrlsToAdd.forEach { libraryModel.addRoot(it, OrderRootType.SOURCES) } - - commitLibraries(libraryModel, libraryTableModel, model) - } - - private fun commitLibraries(libraryModel: Library.ModifiableModel?, tableModel: LibraryTable.ModifiableModel, model: ModifiableRootModel) { - try { - myMuted.set(true) - libraryModel?.commit() - tableModel.commit() - model.commit() - } - finally { - myMuted.set(false) - } - } - - private fun isModuleApplicable(module: Module) = ModuleTypeId.JAVA_MODULE == ModuleType.get(module).id - - private fun findLibraryByName(libraryTableModel: LibraryTable.ModifiableModel, libraryName: String) = - libraryTableModel.libraries.firstOrNull { libraryName == it.name } - - private fun findLibraryByName(module: Module, libraryName: String) = - OrderEntryUtil.findLibraryOrderEntry(ModuleRootManager.getInstance(module), libraryName)?.library - - private class ChangesToApply(val clsUrlsToAdd: List = listOf(), val srcUrlsToAdd: List = listOf(), val filesToRefresh: List = listOf()) - - private class MyVFileContentChangeEvent( - file: VirtualFile - ) : VFileContentChangeEvent( - FileContentUtilCore.FORCE_RELOAD_REQUESTOR, - file, - file.modificationStamp, - -1, /* oldModificationStamp */ - false /* isFromRefresh */ - ) { - override fun getPath(): String = PathUtil.getLocalPath(file.path + KotlinJavaScriptMetaFileSystem.ARCHIVE_SUFFIX) - } - - companion object { - - public val LIBRARY_NAME: String = "" - - @JvmStatic - public fun getInstance(project: Project): KotlinJavaScriptLibraryManager = - project.getComponent(KotlinJavaScriptLibraryManager::class.java)!! - } -} diff --git a/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptMetaFileSystem.kt b/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptMetaFileSystem.kt deleted file mode 100644 index 395246613f7..00000000000 --- a/idea/idea-js/src/org/jetbrains/kotlin/idea/js/KotlinJavaScriptMetaFileSystem.kt +++ /dev/null @@ -1,63 +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.js - -import com.intellij.openapi.util.text.StringUtil -import com.intellij.openapi.vfs.JarFileSystem -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.openapi.vfs.VirtualFileManager -import com.intellij.openapi.vfs.newvfs.ArchiveFileSystem -import com.intellij.openapi.vfs.newvfs.VfsImplUtil -import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils - -public class KotlinJavaScriptMetaFileSystem : ArchiveFileSystem() { - companion object { - val ARCHIVE_SUFFIX = ".kjsm_archive" - - @JvmStatic - public fun getInstance(): KotlinJavaScriptMetaFileSystem = VirtualFileManager.getInstance().getFileSystem(KotlinJavascriptMetadataUtils.VFS_PROTOCOL) as KotlinJavaScriptMetaFileSystem - } - - override fun getProtocol(): String = KotlinJavascriptMetadataUtils.VFS_PROTOCOL - - override fun extractRootPath(path: String): String { - val jarSeparatorIndex = path.indexOf(JarFileSystem.JAR_SEPARATOR) - assert(jarSeparatorIndex >= 0) { "Path passed to KotlinJavascriptMetaFileSystem must have separator '!/': $path" } - return path.substring(0, jarSeparatorIndex + JarFileSystem.JAR_SEPARATOR.length()) - } - - override fun getHandler(entryFile: VirtualFile): KotlinJavaScriptHandler { - val pathToRoot = extractLocalPath(this.extractRootPath(entryFile.path)).removeSuffix() - return VfsImplUtil.getHandler(this, "$pathToRoot$ARCHIVE_SUFFIX") { - KotlinJavaScriptHandler(it.removeSuffix()) - } - } - - override fun extractLocalPath(rootPath: String): String = StringUtil.trimEnd(rootPath, JarFileSystem.JAR_SEPARATOR) - - override fun composeRootPath(localPath: String): String = localPath.removeSuffix() + JarFileSystem.JAR_SEPARATOR - - override fun findFileByPath(path: String): VirtualFile? = VfsImplUtil.findFileByPath(this, path) - - override fun findFileByPathIfCached(path: String): VirtualFile? = VfsImplUtil.findFileByPathIfCached(this, path) - - override fun refreshAndFindFileByPath(path: String): VirtualFile? = VfsImplUtil.refreshAndFindFileByPath(this, path) - - override fun refresh(asynchronous: Boolean) = VfsImplUtil.refresh(this, asynchronous) - - private fun String.removeSuffix() = substringBeforeLast(ARCHIVE_SUFFIX) -} \ No newline at end of file diff --git a/idea/idea-test-framework/idea-test-framework.iml b/idea/idea-test-framework/idea-test-framework.iml index b654892a87d..f6f45360e40 100644 --- a/idea/idea-test-framework/idea-test-framework.iml +++ b/idea/idea-test-framework/idea-test-framework.iml @@ -13,6 +13,5 @@ - \ No newline at end of file diff --git a/idea/idea.iml b/idea/idea.iml index 1d8c69173dc..dbf72261b73 100644 --- a/idea/idea.iml +++ b/idea/idea.iml @@ -48,7 +48,6 @@ - diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index d47e374a775..ecf47e554a6 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -28,9 +28,6 @@ org.jetbrains.kotlin.idea.configuration.ui.NonConfiguredKotlinProjectComponent - - org.jetbrains.kotlin.idea.js.KotlinJavaScriptLibraryManager - org.jetbrains.kotlin.idea.highlighter.KotlinBeforeResolveHighlightingPass$Factory @@ -48,10 +45,6 @@ org.jetbrains.kotlin.idea.versions.KotlinUpdatePluginComponent - - org.jetbrains.kotlin.idea.js.KotlinJavaScriptMetaFileSystem - org.jetbrains.kotlin.idea.js.KotlinJavaScriptMetaFileSystem - @@ -352,7 +345,6 @@ implementation="org.jetbrains.kotlin.idea.refactoring.introduce.introduceParameter.KotlinIntroduceParameterMethodUsageProcessor"/> -