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"/>
-