Injector for additional body resolve with lazy analyzer
Fix resolve JS modules with JVM resolver
This commit is contained in:
+11
-6
@@ -27,7 +27,6 @@ import com.intellij.util.containers.SLRUCache
|
||||
import com.intellij.psi.util.PsiModificationTracker
|
||||
import com.intellij.openapi.project.DumbService
|
||||
import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace
|
||||
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm
|
||||
import org.jetbrains.jet.context.SimpleGlobalContext
|
||||
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters
|
||||
import com.intellij.openapi.progress.ProcessCanceledException
|
||||
@@ -61,6 +60,8 @@ import org.jetbrains.jet.lang.resolve.BindingTraceContext
|
||||
import org.jetbrains.jet.lang.types.TypeUtils
|
||||
import org.jetbrains.jet.lang.resolve.scopes.ChainedScope
|
||||
import org.jetbrains.jet.lang.resolve.bindingContextUtil.getDataFlowInfo
|
||||
import org.jetbrains.jet.di.InjectorForLazyBodyResolve
|
||||
import org.jetbrains.jet.plugin.project.TargetPlatformDetector
|
||||
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.calls.smartcasts.DataFlowInfo
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope
|
||||
@@ -237,14 +238,18 @@ private object KotlinResolveDataProvider {
|
||||
}
|
||||
|
||||
val trace = DelegatingBindingTrace(resolveSession.getBindingContext(), "Trace for resolution of " + analyzableElement)
|
||||
val injector = InjectorForTopDownAnalyzerForJvm(
|
||||
|
||||
val lazyTopDownAnalyzer = InjectorForLazyBodyResolve(
|
||||
project,
|
||||
SimpleGlobalContext(resolveSession.getStorageManager(), resolveSession.getExceptionTracker()),
|
||||
trace,
|
||||
resolveSession.getModuleDescriptor()
|
||||
)
|
||||
injector.getLazyTopDownAnalyzer()!!.analyzeDeclarations(
|
||||
resolveSession,
|
||||
trace,
|
||||
TargetPlatformDetector.getPlatform(analyzableElement.getContainingJetFile()).getAdditionalCheckerProvider()
|
||||
).getLazyTopDownAnalyzer()!!
|
||||
|
||||
lazyTopDownAnalyzer.setKotlinCodeAnalyzer(resolveSession);
|
||||
|
||||
lazyTopDownAnalyzer.analyzeDeclarations(
|
||||
TopDownAnalysisParameters.createForLazy(
|
||||
resolveSession.getStorageManager(),
|
||||
resolveSession.getExceptionTracker(),
|
||||
|
||||
@@ -73,10 +73,6 @@ public class ResolveElementCache extends ElementResolver {
|
||||
@NotNull
|
||||
@Override
|
||||
public AdditionalCheckerProvider getAdditionalCheckerProvider(@NotNull JetFile jetFile) {
|
||||
TargetPlatform platform = TargetPlatformDetector.getPlatform(jetFile);
|
||||
if (platform == TargetPlatform.JS) {
|
||||
return AdditionalCheckerProvider.Empty.INSTANCE$;
|
||||
}
|
||||
return JavaDeclarationCheckerProvider.INSTANCE$;
|
||||
return TargetPlatformDetector.getPlatform(jetFile).getAdditionalCheckerProvider();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,14 @@
|
||||
|
||||
package org.jetbrains.jet.plugin.project;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider;
|
||||
|
||||
public interface TargetPlatform {
|
||||
TargetPlatform JVM = new TargetPlatformImpl("JVM");
|
||||
@NotNull
|
||||
AdditionalCheckerProvider getAdditionalCheckerProvider();
|
||||
|
||||
TargetPlatform JVM = new TargetPlatformImpl("JVM", JavaDeclarationCheckerProvider.INSTANCE$);
|
||||
TargetPlatform JS = new TargetPlatformImpl("JS");
|
||||
}
|
||||
|
||||
@@ -17,14 +17,27 @@
|
||||
package org.jetbrains.jet.plugin.project;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
|
||||
|
||||
public class TargetPlatformImpl implements TargetPlatform {
|
||||
@NotNull private final String platformName;
|
||||
@NotNull private final AdditionalCheckerProvider additionalCheckerProvider;
|
||||
|
||||
public TargetPlatformImpl(@NotNull String platformName) {
|
||||
this(platformName, AdditionalCheckerProvider.Empty.INSTANCE$);
|
||||
}
|
||||
|
||||
public TargetPlatformImpl(@NotNull String platformName, @NotNull AdditionalCheckerProvider additionalCheckerProvider) {
|
||||
this.additionalCheckerProvider = additionalCheckerProvider;
|
||||
this.platformName = platformName;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public AdditionalCheckerProvider getAdditionalCheckerProvider() {
|
||||
return additionalCheckerProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return platformName;
|
||||
|
||||
Reference in New Issue
Block a user