fix "IDEA-221944 Deadlock on opening second project" and support preloading for proje...
[idea/community.git] / platform / service-container / testSrc / com / intellij / serviceContainer / ConstructorInjectionTest.kt
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.serviceContainer
3
4 import com.intellij.configurationStore.StateStorageManager
5 import com.intellij.ide.plugins.IdeaPluginDescriptorImpl
6 import com.intellij.openapi.components.PersistentStateComponent
7 import com.intellij.openapi.components.Service
8 import com.intellij.openapi.components.ServiceDescriptor
9 import com.intellij.openapi.components.impl.stores.IComponentStore
10 import com.intellij.openapi.extensions.DefaultPluginDescriptor
11 import com.intellij.openapi.extensions.PluginId
12 import com.intellij.util.messages.MessageBus
13 import org.junit.Test
14
15 class ConstructorInjectionTest {
16   private val pluginDescriptor = DefaultPluginDescriptor("test")
17
18   @Test
19   fun `interface extension`() {
20     val componentManager = TestComponentManager()
21     val area = componentManager.extensionArea
22     val point = area.registerPoint("bar", Bar::class.java, pluginDescriptor)
23     @Suppress("DEPRECATION")
24     point.registerExtension(BarImpl())
25
26     componentManager.instantiateClassWithConstructorInjection(Foo::class.java, Foo::class.java, pluginDescriptor.pluginId)
27   }
28
29   @Test
30   fun `resolve light service`() {
31     val componentManager = TestComponentManager()
32     componentManager.registerService(IComponentStore::class.java, TestComponentStore::class.java, pluginDescriptor, false)
33     componentManager.instantiateClassWithConstructorInjection(BarServiceClient::class.java, BarServiceClient::class.java.name, pluginDescriptor.pluginId)
34   }
35 }
36
37 private interface Bar
38
39 private class BarImpl : Bar
40
41 private class Foo(@Suppress("UNUSED_PARAMETER") bar: BarImpl)
42
43 @Service
44 private class BarService
45
46 private class BarServiceClient(@Suppress("UNUSED_PARAMETER") bar: BarService)
47
48 private class TestComponentManager : PlatformComponentManagerImpl(null, setExtensionsRootArea = false /* must work without */) {
49   override fun getContainerDescriptor(pluginDescriptor: IdeaPluginDescriptorImpl) = pluginDescriptor.appContainerDescriptor
50
51   override fun assertExtensionInjection(pluginId: PluginId?, e: Exception) {
52   }
53 }
54
55 private class TestComponentStore : IComponentStore {
56   override val storageManager: StateStorageManager
57     get() = TODO("not implemented")
58
59   override fun setPath(path: String) {
60   }
61
62   override fun initComponent(component: Any, serviceDescriptor: ServiceDescriptor?) {
63   }
64
65   override fun initPersistencePlainComponent(component: Any, key: String) {
66   }
67
68   override fun reloadStates(componentNames: Set<String>, messageBus: MessageBus) {
69   }
70
71   override fun reloadState(componentClass: Class<out PersistentStateComponent<*>>) {
72   }
73
74   override fun isReloadPossible(componentNames: Set<String>) = false
75
76   override suspend fun save(forceSavingAllSettings: Boolean) {
77   }
78
79   override fun saveComponent(component: PersistentStateComponent<*>) {
80   }
81 }