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));
|
JetScriptDefinitionProvider.getInstance(project).addScriptDefinitions(configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY));
|
||||||
|
|
||||||
KotlinBuiltIns.initialize(project);
|
KotlinBuiltIns.initialize(project, KotlinBuiltIns.InitializationMode.SINGLE_THREADED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompilerConfiguration getConfiguration() {
|
public CompilerConfiguration getConfiguration() {
|
||||||
|
|||||||
@@ -88,9 +88,16 @@ public class KotlinBuiltIns {
|
|||||||
private static volatile boolean initializing;
|
private static volatile boolean initializing;
|
||||||
private static Throwable initializationFailed;
|
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
|
// This method must be called at least once per application run, on any project
|
||||||
// before any type checking is run
|
// 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 (instance == null) {
|
||||||
if (initializationFailed != null) {
|
if (initializationFailed != null) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
@@ -102,7 +109,7 @@ public class KotlinBuiltIns {
|
|||||||
initializing = true;
|
initializing = true;
|
||||||
try {
|
try {
|
||||||
instance = new KotlinBuiltIns(project);
|
instance = new KotlinBuiltIns(project);
|
||||||
instance.initialize();
|
instance.initialize(initializationMode == InitializationMode.MULTI_THREADED);
|
||||||
}
|
}
|
||||||
catch (Throwable e) {
|
catch (Throwable e) {
|
||||||
initializationFailed = e;
|
initializationFailed = e;
|
||||||
@@ -191,7 +198,7 @@ public class KotlinBuiltIns {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initialize() {
|
private void initialize(boolean forceResolveAll) {
|
||||||
anyType = getBuiltInTypeByClassName("Any");
|
anyType = getBuiltInTypeByClassName("Any");
|
||||||
nullableAnyType = TypeUtils.makeNullable(anyType);
|
nullableAnyType = TypeUtils.makeNullable(anyType);
|
||||||
nothingType = getBuiltInTypeByClassName("Nothing");
|
nothingType = getBuiltInTypeByClassName("Nothing");
|
||||||
@@ -206,7 +213,9 @@ public class KotlinBuiltIns {
|
|||||||
|
|
||||||
nonPhysicalClasses = computeNonPhysicalClasses();
|
nonPhysicalClasses = computeNonPhysicalClasses();
|
||||||
|
|
||||||
analyzer.forceResolveAll();
|
if (forceResolveAll) {
|
||||||
|
analyzer.forceResolveAll();
|
||||||
|
}
|
||||||
|
|
||||||
AnalyzingUtils.throwExceptionOnErrors(analyzer.getBindingContext());
|
AnalyzingUtils.throwExceptionOnErrors(analyzer.getBindingContext());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,10 @@ public class BuiltInsInitializer {
|
|||||||
ProgressManager.getInstance().executeNonCancelableSection(new Runnable() {
|
ProgressManager.getInstance().executeNonCancelableSection(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
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();
|
private final Set<J2KConverterFlags> flags = Sets.newHashSet();
|
||||||
|
|
||||||
public Converter(@NotNull Project project) {
|
public Converter(@NotNull Project project) {
|
||||||
KotlinBuiltIns.initialize(project);
|
KotlinBuiltIns.initialize(project, KotlinBuiltIns.InitializationMode.MULTI_THREADED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addFlag(@NotNull J2KConverterFlags flag) {
|
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.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
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.analyze.AnalyzerFacadeForJS;
|
||||||
import org.jetbrains.k2js.config.Config;
|
import org.jetbrains.k2js.config.Config;
|
||||||
import org.jetbrains.k2js.facade.exceptions.TranslationException;
|
import org.jetbrains.k2js.facade.exceptions.TranslationException;
|
||||||
@@ -88,7 +87,6 @@ public final class K2JSTranslator {
|
|||||||
public JsProgram generateProgram(@NotNull List<JetFile> filesToTranslate,
|
public JsProgram generateProgram(@NotNull List<JetFile> filesToTranslate,
|
||||||
@NotNull MainCallParameters mainCallParameters)
|
@NotNull MainCallParameters mainCallParameters)
|
||||||
throws TranslationException {
|
throws TranslationException {
|
||||||
KotlinBuiltIns.initialize(config.getProject());
|
|
||||||
BindingContext bindingContext = AnalyzerFacadeForJS.analyzeFilesAndCheckErrors(filesToTranslate, config);
|
BindingContext bindingContext = AnalyzerFacadeForJS.analyzeFilesAndCheckErrors(filesToTranslate, config);
|
||||||
return Translation.generateAst(bindingContext, filesToTranslate, mainCallParameters, config);
|
return Translation.generateAst(bindingContext, filesToTranslate, mainCallParameters, config);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user