Introduce BodyResolveCache for storing resolve function body task in IDE
This commit is contained in:
@@ -40,6 +40,9 @@ import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor
|
||||
import org.jetbrains.kotlin.resolve.scopes.ChainedScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||
import org.jetbrains.kotlin.storage.LockBasedLazyResolveStorageManager
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.types.DynamicTypesSettings
|
||||
import org.jetbrains.kotlin.types.TypeUtils
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
|
||||
@@ -160,7 +163,9 @@ public abstract class ElementResolver protected constructor(
|
||||
}
|
||||
}
|
||||
|
||||
JetFlowInformationProvider(resolveElement, trace).checkDeclaration()
|
||||
val controlFlowTrace = DelegatingBindingTrace(trace.getBindingContext(), "Element control flow resolve", resolveElement)
|
||||
JetFlowInformationProvider(resolveElement, controlFlowTrace).checkDeclaration()
|
||||
controlFlowTrace.addOwnDataTo(trace, null, false)
|
||||
|
||||
return trace.getBindingContext()
|
||||
}
|
||||
@@ -404,7 +409,7 @@ public abstract class ElementResolver protected constructor(
|
||||
val globalContext = SimpleGlobalContext(resolveSession.getStorageManager(), resolveSession.getExceptionTracker())
|
||||
return createContainerForBodyResolve(
|
||||
globalContext.withProject(file.getProject()).withModule(resolveSession.getModuleDescriptor()),
|
||||
trace, getAdditionalCheckerProvider(file), statementFilter
|
||||
trace, getAdditionalCheckerProvider(file), statementFilter, getDynamicTypesSettings(file)
|
||||
).get<BodyResolver>()
|
||||
}
|
||||
|
||||
@@ -478,6 +483,7 @@ public abstract class ElementResolver protected constructor(
|
||||
}
|
||||
|
||||
protected abstract fun getAdditionalCheckerProvider(jetFile: JetFile): AdditionalCheckerProvider
|
||||
protected abstract fun getDynamicTypesSettings(jetFile: JetFile): DynamicTypesSettings
|
||||
|
||||
private class BodyResolveContextForLazy(
|
||||
private val topDownAnalysisMode: TopDownAnalysisMode,
|
||||
@@ -504,3 +510,4 @@ public abstract class ElementResolver protected constructor(
|
||||
override fun getTopDownAnalysisMode() = topDownAnalysisMode
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -238,7 +238,8 @@ private object KotlinResolveDataProvider {
|
||||
resolveSession,
|
||||
trace,
|
||||
targetPlatform.getAdditionalCheckerProvider(),
|
||||
targetPlatform.getDynamicTypesSettings()
|
||||
targetPlatform.getDynamicTypesSettings(),
|
||||
resolveSession.getBodyResolveCache()
|
||||
).get<LazyTopDownAnalyzerForTopLevel>()
|
||||
|
||||
lazyTopDownAnalyzer.analyzeDeclarations(
|
||||
|
||||
@@ -28,18 +28,21 @@ import org.jetbrains.kotlin.idea.stubindex.JetProbablyNothingFunctionShortNameIn
|
||||
import org.jetbrains.kotlin.idea.stubindex.JetProbablyNothingPropertyShortNameIndex;
|
||||
import org.jetbrains.kotlin.psi.JetElement;
|
||||
import org.jetbrains.kotlin.psi.JetFile;
|
||||
import org.jetbrains.kotlin.psi.JetNamedFunction;
|
||||
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.BodyResolveCache;
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
|
||||
import org.jetbrains.kotlin.resolve.lazy.ElementResolver;
|
||||
import org.jetbrains.kotlin.resolve.lazy.ProbablyNothingCallableNames;
|
||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||
import org.jetbrains.kotlin.storage.LazyResolveStorageManager;
|
||||
import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull;
|
||||
import org.jetbrains.kotlin.types.DynamicTypesSettings;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class ResolveElementCache extends ElementResolver {
|
||||
public class ResolveElementCache extends ElementResolver implements BodyResolveCache {
|
||||
private final Project project;
|
||||
private final CachedValue<MemoizedFunctionToNotNull<JetElement, BindingContext>> additionalResolveCache;
|
||||
|
||||
@@ -89,6 +92,12 @@ public class ResolveElementCache extends ElementResolver {
|
||||
return TargetPlatformDetector.getPlatform(jetFile).getAdditionalCheckerProvider();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DynamicTypesSettings getDynamicTypesSettings(@NotNull JetFile jetFile) {
|
||||
return TargetPlatformDetector.getPlatform(jetFile).getDynamicTypesSettings();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected ProbablyNothingCallableNames probablyNothingCallableNames() {
|
||||
@@ -107,4 +116,10 @@ public class ResolveElementCache extends ElementResolver {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public BindingContext resolveFunctionBody(@NotNull JetNamedFunction function) {
|
||||
return getElementAdditionalResolve(function);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.psi.psiUtil.PsiUtilPackage;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.BindingContextUtils;
|
||||
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver;
|
||||
import org.jetbrains.kotlin.resolve.BodyResolveCache;
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
|
||||
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer;
|
||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||
@@ -134,6 +135,11 @@ public class ResolveSessionForBodies implements KotlinCodeAnalyzer {
|
||||
return resolveSession.getExceptionTracker();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public BodyResolveCache getBodyResolveCache() {
|
||||
return resolveElementCache;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PackageFragmentProvider getPackageFragmentProvider() {
|
||||
|
||||
Reference in New Issue
Block a user