Avoid rebuilds after changes of layouts xml-files

This commit makes IC react more granularly on these changes
Precisely, it marks dirty only kt-files that having lookups into
synthetic package built upon a changed layout-file

 #KT-21622 Fixed
This commit is contained in:
Denis Zharkov
2017-12-05 17:52:21 +03:00
parent 58123f2103
commit e24e711208
11 changed files with 99 additions and 19 deletions
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
import org.jetbrains.kotlin.frontend.java.di.createContainerForLazyResolveWithJava
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolverImpl
@@ -86,6 +85,7 @@ object JvmAnalyzerFacade : AnalyzerFacade() {
val trace = CodeAnalyzerInitializer.getInstance(project).createTrace()
val lookupTracker = LookupTracker.DO_NOTHING
val container = createContainerForLazyResolveWithJava(
moduleContext,
trace,
@@ -93,7 +93,7 @@ object JvmAnalyzerFacade : AnalyzerFacade() {
moduleContentScope,
moduleClassResolver,
targetEnvironment,
LookupTracker.DO_NOTHING,
lookupTracker,
packagePartProvider,
jvmTarget,
languageVersionSettings,
@@ -107,8 +107,13 @@ object JvmAnalyzerFacade : AnalyzerFacade() {
resolveSession.packageFragmentProvider,
javaDescriptorResolver.packageFragmentProvider)
providersForModule += PackageFragmentProviderExtension.getInstances(project)
.mapNotNull { it.getPackageFragmentProvider(project, moduleDescriptor, moduleContext.storageManager, trace, moduleInfo) }
providersForModule +=
PackageFragmentProviderExtension.getInstances(project)
.mapNotNull {
it.getPackageFragmentProvider(
project, moduleDescriptor, moduleContext.storageManager, trace, moduleInfo, lookupTracker
)
}
return ResolverForModule(CompositePackageFragmentProvider(providersForModule), container)
}
@@ -18,8 +18,10 @@ package org.jetbrains.kotlin.resolve.jvm.extensions
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.storage.StorageManager
@@ -34,6 +36,7 @@ interface PackageFragmentProviderExtension {
module: ModuleDescriptor,
storageManager: StorageManager,
trace: BindingTrace,
moduleInfo: ModuleInfo?
moduleInfo: ModuleInfo?,
lookupTracker: LookupTracker
): PackageFragmentProvider?
}