Injector for additional body resolve with lazy analyzer

Fix resolve JS modules with JVM resolver
This commit is contained in:
Nikolay Krasko
2014-09-18 15:19:03 +04:00
parent eae86e035f
commit ad05b5a709
8 changed files with 316 additions and 18 deletions
@@ -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;