Files
Vladimir Krivosheev bf212a3aab IJPL-310 cleanup
GitOrigin-RevId: a4141c965c10f095f501b862dc03d4e7d6d26dac
2023-10-29 20:11:01 +00:00

55 lines
1.8 KiB
Kotlin

// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.openapi.roots
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.util.Disposer
import com.intellij.testFramework.HeavyPlatformTestCase
class ModuleExtensionRegistrationTest : HeavyPlatformTestCase() {
fun `test unregister module extension`() {
runWithRegisteredExtension {
assertNotNull(ModuleRootManager.getInstance(myModule).getModuleExtension(MockModuleExtension::class.java))
}
assertNull(ModuleRootManager.getInstance(myModule).getModuleExtension(MockModuleExtension::class.java))
}
private fun runWithRegisteredExtension(action: () -> Unit) {
val moduleExtensionDisposable = Disposer.newDisposable()
registerModuleExtension(moduleExtensionDisposable)
try {
action()
}
finally {
Disposer.dispose(moduleExtensionDisposable)
}
}
private fun registerModuleExtension(disposable: Disposable) {
val moduleTypeDisposable = Disposer.newDisposable()
Disposer.register(disposable, Disposable {
runWriteAction {
Disposer.dispose(moduleTypeDisposable)
}
})
for (module in ModuleManager.getInstance(myProject).modules) {
@Suppress("DEPRECATION")
ModuleRootManagerEx.MODULE_EXTENSION_NAME.getPoint(module).registerExtension(MockModuleExtension(), moduleTypeDisposable)
}
}
}
private class MockModuleExtension : ModuleExtension() {
override fun getModifiableModel(writable: Boolean): ModuleExtension {
return MockModuleExtension()
}
override fun commit() {
}
override fun isChanged(): Boolean {
return false
}
}