forceResolveAll() is not called when compiler initializes built-ins
This commit is contained in:
@@ -125,7 +125,7 @@ public class JetCoreEnvironment {
|
||||
|
||||
JetScriptDefinitionProvider.getInstance(project).addScriptDefinitions(configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY));
|
||||
|
||||
KotlinBuiltIns.initialize(project);
|
||||
KotlinBuiltIns.initialize(project, KotlinBuiltIns.InitializationMode.SINGLE_THREADED);
|
||||
}
|
||||
|
||||
public CompilerConfiguration getConfiguration() {
|
||||
|
||||
@@ -88,9 +88,16 @@ public class KotlinBuiltIns {
|
||||
private static volatile boolean initializing;
|
||||
private static Throwable initializationFailed;
|
||||
|
||||
public enum InitializationMode {
|
||||
// Multi-threaded mode is used in the IDE
|
||||
MULTI_THREADED,
|
||||
// Single-threaded mode is used in the compiler and IDE-independent tests
|
||||
SINGLE_THREADED
|
||||
}
|
||||
|
||||
// This method must be called at least once per application run, on any project
|
||||
// before any type checking is run
|
||||
public static synchronized void initialize(@NotNull Project project) {
|
||||
public static synchronized void initialize(@NotNull Project project, @NotNull InitializationMode initializationMode) {
|
||||
if (instance == null) {
|
||||
if (initializationFailed != null) {
|
||||
throw new RuntimeException(
|
||||
@@ -102,7 +109,7 @@ public class KotlinBuiltIns {
|
||||
initializing = true;
|
||||
try {
|
||||
instance = new KotlinBuiltIns(project);
|
||||
instance.initialize();
|
||||
instance.initialize(initializationMode == InitializationMode.MULTI_THREADED);
|
||||
}
|
||||
catch (Throwable e) {
|
||||
initializationFailed = e;
|
||||
@@ -191,7 +198,7 @@ public class KotlinBuiltIns {
|
||||
}
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
private void initialize(boolean forceResolveAll) {
|
||||
anyType = getBuiltInTypeByClassName("Any");
|
||||
nullableAnyType = TypeUtils.makeNullable(anyType);
|
||||
nothingType = getBuiltInTypeByClassName("Nothing");
|
||||
@@ -206,7 +213,9 @@ public class KotlinBuiltIns {
|
||||
|
||||
nonPhysicalClasses = computeNonPhysicalClasses();
|
||||
|
||||
analyzer.forceResolveAll();
|
||||
if (forceResolveAll) {
|
||||
analyzer.forceResolveAll();
|
||||
}
|
||||
|
||||
AnalyzingUtils.throwExceptionOnErrors(analyzer.getBindingContext());
|
||||
}
|
||||
|
||||
@@ -30,7 +30,10 @@ public class BuiltInsInitializer {
|
||||
ProgressManager.getInstance().executeNonCancelableSection(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
KotlinBuiltIns.initialize(project);
|
||||
// MULTI_THREADED is important not only because of threading as such: since built-ins rely on a project,
|
||||
// if they are not fully initialized when a project is closed,
|
||||
// they will be referencing invalid PSI upon a next request
|
||||
KotlinBuiltIns.initialize(project, KotlinBuiltIns.InitializationMode.MULTI_THREADED);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public class Converter {
|
||||
private final Set<J2KConverterFlags> flags = Sets.newHashSet();
|
||||
|
||||
public Converter(@NotNull Project project) {
|
||||
KotlinBuiltIns.initialize(project);
|
||||
KotlinBuiltIns.initialize(project, KotlinBuiltIns.InitializationMode.MULTI_THREADED);
|
||||
}
|
||||
|
||||
public boolean addFlag(@NotNull J2KConverterFlags flag) {
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.intellij.openapi.util.io.FileUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
import org.jetbrains.k2js.analyze.AnalyzerFacadeForJS;
|
||||
import org.jetbrains.k2js.config.Config;
|
||||
import org.jetbrains.k2js.facade.exceptions.TranslationException;
|
||||
@@ -88,7 +87,6 @@ public final class K2JSTranslator {
|
||||
public JsProgram generateProgram(@NotNull List<JetFile> filesToTranslate,
|
||||
@NotNull MainCallParameters mainCallParameters)
|
||||
throws TranslationException {
|
||||
KotlinBuiltIns.initialize(config.getProject());
|
||||
BindingContext bindingContext = AnalyzerFacadeForJS.analyzeFilesAndCheckErrors(filesToTranslate, config);
|
||||
return Translation.generateAst(bindingContext, filesToTranslate, mainCallParameters, config);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user