Do not resolve services in non-default ctors

This commit is contained in:
Vladimir Dolzhenko
2019-09-24 09:11:20 +02:00
parent 0e1e1e350f
commit 8b0aeb9a55
5 changed files with 15 additions and 15 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.idea.caches.resolve package org.jetbrains.kotlin.idea.caches.resolve
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiClass import com.intellij.psi.PsiClass
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
@@ -20,8 +21,8 @@ import org.jetbrains.kotlin.psi.KtFileClassProvider
import org.jetbrains.kotlin.psi.analysisContext import org.jetbrains.kotlin.psi.analysisContext
import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.platform.jvm.isJvm
class KtFileClassProviderImpl(val kotlinAsJavaSupport: KotlinAsJavaSupport) : class KtFileClassProviderImpl(val project: Project) : KtFileClassProvider {
KtFileClassProvider {
override fun getFileClasses(file: KtFile): Array<PsiClass> { override fun getFileClasses(file: KtFile): Array<PsiClass> {
if (file.project.isInDumbMode()) { if (file.project.isInDumbMode()) {
return PsiClass.EMPTY_ARRAY return PsiClass.EMPTY_ARRAY
@@ -45,6 +46,8 @@ class KtFileClassProviderImpl(val kotlinAsJavaSupport: KotlinAsJavaSupport) :
val jvmClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file) val jvmClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file)
val fileClassFqName = file.javaFileFacadeFqName val fileClassFqName = file.javaFileFacadeFqName
val kotlinAsJavaSupport = KotlinAsJavaSupport.getInstance(project)
val facadeClasses = when { val facadeClasses = when {
file.analysisContext != null && file.hasTopLevelCallables() -> file.analysisContext != null && file.hasTopLevelCallables() ->
listOf( listOf(
@@ -11,10 +11,10 @@ import com.intellij.psi.util.PsiModificationTracker
import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
class KotlinIDEModificationTrackerService(project: Project, psiModificationTracker: PsiModificationTracker) : class KotlinIDEModificationTrackerService(project: Project) :
KotlinModificationTrackerService() { KotlinModificationTrackerService() {
override val modificationTracker: ModificationTracker = psiModificationTracker override val modificationTracker: ModificationTracker = PsiModificationTracker.SERVICE.getInstance(project)
override val outOfBlockModificationTracker: ModificationTracker = override val outOfBlockModificationTracker: ModificationTracker =
KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker
@@ -38,10 +38,7 @@ import kotlin.script.experimental.api.makeFailureResult
// NOTE: this service exists exclusively because ScriptDependencyManager // NOTE: this service exists exclusively because ScriptDependencyManager
// cannot be registered as implementing two services (state would be duplicated) // cannot be registered as implementing two services (state would be duplicated)
class IdeScriptDependenciesProvider( class IdeScriptDependenciesProvider(project: Project) : ScriptDependenciesProvider(project) {
private val scriptConfigurationManager: ScriptConfigurationManager,
project: Project
) : ScriptDependenciesProvider(project) {
override fun getScriptConfigurationResult(file: KtFile): ScriptCompilationConfigurationResult? { override fun getScriptConfigurationResult(file: KtFile): ScriptCompilationConfigurationResult? {
val configuration = getScriptConfiguration(file) val configuration = getScriptConfiguration(file)
val reports = IdeScriptReportSink.getReports(file) val reports = IdeScriptReportSink.getReports(file)
@@ -52,7 +49,7 @@ class IdeScriptDependenciesProvider(
} }
override fun getScriptConfiguration(file: KtFile): ScriptCompilationConfigurationWrapper? { override fun getScriptConfiguration(file: KtFile): ScriptCompilationConfigurationWrapper? {
return scriptConfigurationManager.getConfiguration(file) return ScriptConfigurationManager.getInstance(project).getConfiguration(file)
} }
} }
@@ -22,6 +22,7 @@ import com.intellij.openapi.extensions.PluginId
import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.progress.Task import com.intellij.openapi.progress.Task
import com.intellij.openapi.project.Project
import com.intellij.openapi.updateSettings.impl.PluginDownloader import com.intellij.openapi.updateSettings.impl.PluginDownloader
import com.intellij.openapi.updateSettings.impl.UpdateSettings import com.intellij.openapi.updateSettings.impl.UpdateSettings
import com.intellij.openapi.util.JDOMUtil import com.intellij.openapi.util.JDOMUtil
@@ -86,7 +87,7 @@ sealed class PluginUpdateStatus {
} }
} }
class KotlinPluginUpdater(private val propertiesComponent: PropertiesComponent) : Disposable { class KotlinPluginUpdater : Disposable {
private var updateDelay = INITIAL_UPDATE_DELAY private var updateDelay = INITIAL_UPDATE_DELAY
private val alarm = Alarm(Alarm.ThreadToUse.POOLED_THREAD, this) private val alarm = Alarm(Alarm.ThreadToUse.POOLED_THREAD, this)
private val notificationGroup = NotificationGroup("Kotlin plugin updates", NotificationDisplayType.STICKY_BALLOON, true) private val notificationGroup = NotificationGroup("Kotlin plugin updates", NotificationDisplayType.STICKY_BALLOON, true)
@@ -101,7 +102,7 @@ class KotlinPluginUpdater(private val propertiesComponent: PropertiesComponent)
if (ApplicationManager.getApplication().isUnitTestMode || ApplicationManager.getApplication().isHeadlessEnvironment) return if (ApplicationManager.getApplication().isUnitTestMode || ApplicationManager.getApplication().isHeadlessEnvironment) return
if (!UpdateSettings.getInstance().isCheckNeeded) return if (!UpdateSettings.getInstance().isCheckNeeded) return
val lastUpdateTime = java.lang.Long.parseLong(propertiesComponent.getValue(PROPERTY_NAME, "0")) val lastUpdateTime = java.lang.Long.parseLong(PropertiesComponent.getInstance().getValue(PROPERTY_NAME, "0"))
if (lastUpdateTime == 0L || System.currentTimeMillis() - lastUpdateTime > CACHED_REQUEST_DELAY) { if (lastUpdateTime == 0L || System.currentTimeMillis() - lastUpdateTime > CACHED_REQUEST_DELAY) {
queueUpdateCheck { updateStatus -> queueUpdateCheck { updateStatus ->
when (updateStatus) { when (updateStatus) {
@@ -233,7 +234,7 @@ class KotlinPluginUpdater(private val propertiesComponent: PropertiesComponent)
} }
private fun recordSuccessfulUpdateCheck() { private fun recordSuccessfulUpdateCheck() {
propertiesComponent.setValue(PROPERTY_NAME, System.currentTimeMillis().toString()) PropertiesComponent.getInstance().setValue(PROPERTY_NAME, System.currentTimeMillis().toString())
updateDelay = INITIAL_UPDATE_DELAY updateDelay = INITIAL_UPDATE_DELAY
} }
@@ -30,8 +30,7 @@ import kotlin.script.experimental.host.ScriptingHostConfiguration
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
class ScriptTemplatesFromCompilerSettingsProvider( class ScriptTemplatesFromCompilerSettingsProvider(
private val project: Project, private val project: Project
private val compilerSettings: KotlinCompilerSettings
) : ScriptDefinitionSourceAsContributor { ) : ScriptDefinitionSourceAsContributor {
init { init {
@@ -46,7 +45,7 @@ class ScriptTemplatesFromCompilerSettingsProvider(
override val definitions: Sequence<ScriptDefinition> override val definitions: Sequence<ScriptDefinition>
get() { get() {
val kotlinSettings = compilerSettings.settings val kotlinSettings = KotlinCompilerSettings.getInstance(project).settings
return if (kotlinSettings.scriptTemplates.isBlank()) emptySequence() return if (kotlinSettings.scriptTemplates.isBlank()) emptySequence()
else loadDefinitionsFromTemplates( else loadDefinitionsFromTemplates(
templateClassNames = kotlinSettings.scriptTemplates.split(',', ' '), templateClassNames = kotlinSettings.scriptTemplates.split(',', ' '),