add support for cancel compilation from IDE
#KT-8158 Fixed
This commit is contained in:
@@ -20,6 +20,7 @@ import com.google.common.collect.Sets;
|
|||||||
import com.intellij.util.containers.MultiMap;
|
import com.intellij.util.containers.MultiMap;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||||
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.psi.JetFile;
|
import org.jetbrains.kotlin.psi.JetFile;
|
||||||
import org.jetbrains.kotlin.psi.JetScript;
|
import org.jetbrains.kotlin.psi.JetScript;
|
||||||
@@ -54,8 +55,12 @@ public class KotlinCodegenFacade {
|
|||||||
@NotNull GenerationState state,
|
@NotNull GenerationState state,
|
||||||
@NotNull CompilationErrorHandler errorHandler
|
@NotNull CompilationErrorHandler errorHandler
|
||||||
) {
|
) {
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
prepareForCompilation(state);
|
prepareForCompilation(state);
|
||||||
|
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
MultiMap<FqName, JetFile> packageFqNameToFiles = new MultiMap<FqName, JetFile>();
|
MultiMap<FqName, JetFile> packageFqNameToFiles = new MultiMap<FqName, JetFile>();
|
||||||
for (JetFile file : state.getFiles()) {
|
for (JetFile file : state.getFiles()) {
|
||||||
if (file == null) throw new IllegalArgumentException("A null file given for compilation");
|
if (file == null) throw new IllegalArgumentException("A null file given for compilation");
|
||||||
@@ -64,9 +69,11 @@ public class KotlinCodegenFacade {
|
|||||||
|
|
||||||
Set<FqName> packagesWithObsoleteParts = new HashSet<FqName>(state.getPackagesWithObsoleteParts());
|
Set<FqName> packagesWithObsoleteParts = new HashSet<FqName>(state.getPackagesWithObsoleteParts());
|
||||||
for (FqName fqName : Sets.union(packagesWithObsoleteParts, packageFqNameToFiles.keySet())) {
|
for (FqName fqName : Sets.union(packagesWithObsoleteParts, packageFqNameToFiles.keySet())) {
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
generatePackage(state, fqName, packageFqNameToFiles.get(fqName), errorHandler);
|
generatePackage(state, fqName, packageFqNameToFiles.get(fqName), errorHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
state.getFactory().done();
|
state.getFactory().done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.codegen.context.MethodContext;
|
|||||||
import org.jetbrains.kotlin.codegen.context.PackageContext;
|
import org.jetbrains.kotlin.codegen.context.PackageContext;
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||||
import org.jetbrains.kotlin.config.IncrementalCompilation;
|
import org.jetbrains.kotlin.config.IncrementalCompilation;
|
||||||
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor;
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
|
||||||
@@ -211,6 +212,7 @@ public class PackageCodegen {
|
|||||||
Map<CallableMemberDescriptor, Runnable> generateCallableMemberTasks = new HashMap<CallableMemberDescriptor, Runnable>();
|
Map<CallableMemberDescriptor, Runnable> generateCallableMemberTasks = new HashMap<CallableMemberDescriptor, Runnable>();
|
||||||
|
|
||||||
for (JetFile file : files) {
|
for (JetFile file : files) {
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
try {
|
try {
|
||||||
ClassBuilder builder = generate(file, generateCallableMemberTasks);
|
ClassBuilder builder = generate(file, generateCallableMemberTasks);
|
||||||
if (builder != null) {
|
if (builder != null) {
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler;
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentException;
|
import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentException;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.config.Services;
|
import org.jetbrains.kotlin.config.Services;
|
||||||
|
import org.jetbrains.kotlin.context.CompilationCanceledException;
|
||||||
|
import org.jetbrains.kotlin.context.CompilationCanceledStatus;
|
||||||
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
|
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -156,6 +159,9 @@ public abstract class CLICompiler<A extends CommonCompilerArguments> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CompilationCanceledStatus canceledStatus = services.get(CompilationCanceledStatus.class);
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.setCompilationCanceledStatus(canceledStatus);
|
||||||
|
|
||||||
for (int i = 0; i < repeatCount; i++) {
|
for (int i = 0; i < repeatCount; i++) {
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
K2JVMCompiler.Companion.resetInitStartTime();
|
K2JVMCompiler.Companion.resetInitStartTime();
|
||||||
@@ -166,6 +172,21 @@ public abstract class CLICompiler<A extends CommonCompilerArguments> {
|
|||||||
ExitCode code = doExecute(arguments, services, severityCollector, rootDisposable);
|
ExitCode code = doExecute(arguments, services, severityCollector, rootDisposable);
|
||||||
exitCode = severityCollector.anyReported(CompilerMessageSeverity.ERROR) ? COMPILATION_ERROR : code;
|
exitCode = severityCollector.anyReported(CompilerMessageSeverity.ERROR) ? COMPILATION_ERROR : code;
|
||||||
}
|
}
|
||||||
|
catch(CompilationCanceledException e) {
|
||||||
|
messageCollector.report(CompilerMessageSeverity.INFO, "Compilation was canceled", CompilerMessageLocation.NO_LOCATION);
|
||||||
|
return ExitCode.OK;
|
||||||
|
}
|
||||||
|
catch(RuntimeException e) {
|
||||||
|
Throwable cause = e.getCause();
|
||||||
|
if (cause instanceof CompilationCanceledException) {
|
||||||
|
messageCollector
|
||||||
|
.report(CompilerMessageSeverity.INFO, "Compilation was canceled", CompilerMessageLocation.NO_LOCATION);
|
||||||
|
return ExitCode.OK;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
finally {
|
finally {
|
||||||
Disposer.dispose(rootDisposable);
|
Disposer.dispose(rootDisposable);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
|||||||
import org.jetbrains.kotlin.cli.jvm.config.JVMConfigurationKeys;
|
import org.jetbrains.kotlin.cli.jvm.config.JVMConfigurationKeys;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.config.Services;
|
import org.jetbrains.kotlin.config.Services;
|
||||||
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
||||||
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
||||||
import org.jetbrains.kotlin.js.config.Config;
|
import org.jetbrains.kotlin.js.config.Config;
|
||||||
@@ -142,6 +143,8 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
return COMPILATION_ERROR;
|
return COMPILATION_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
AnalysisResult analysisResult = analyzerWithCompilerReport.getAnalysisResult();
|
AnalysisResult analysisResult = analyzerWithCompilerReport.getAnalysisResult();
|
||||||
assert analysisResult instanceof JsAnalysisResult : "analysisResult should be instance of JsAnalysisResult, but " + analysisResult;
|
assert analysisResult instanceof JsAnalysisResult : "analysisResult should be instance of JsAnalysisResult, but " + analysisResult;
|
||||||
JsAnalysisResult jsAnalysisResult = (JsAnalysisResult) analysisResult;
|
JsAnalysisResult jsAnalysisResult = (JsAnalysisResult) analysisResult;
|
||||||
@@ -179,6 +182,8 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
AnalyzerWithCompilerReport.reportDiagnostics(translationResult.getDiagnostics(), messageSeverityCollector);
|
AnalyzerWithCompilerReport.reportDiagnostics(translationResult.getDiagnostics(), messageSeverityCollector);
|
||||||
|
|
||||||
if (!(translationResult instanceof TranslationResult.Success)) return ExitCode.COMPILATION_ERROR;
|
if (!(translationResult instanceof TranslationResult.Success)) return ExitCode.COMPILATION_ERROR;
|
||||||
@@ -197,6 +202,9 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
if (outputDir == null) {
|
if (outputDir == null) {
|
||||||
outputDir = outputFile.getAbsoluteFile().getParentFile();
|
outputDir = outputFile.getAbsoluteFile().getParentFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
OutputUtilsPackage.writeAll(outputFiles, outputDir, messageSeverityCollector);
|
OutputUtilsPackage.writeAll(outputFiles, outputDir, messageSeverityCollector);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
|
|||||||
+11
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState;
|
|||||||
import org.jetbrains.kotlin.codegen.state.Progress;
|
import org.jetbrains.kotlin.codegen.state.Progress;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.context.ModuleContext;
|
import org.jetbrains.kotlin.context.ModuleContext;
|
||||||
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
import org.jetbrains.kotlin.idea.MainFunctionDetector;
|
import org.jetbrains.kotlin.idea.MainFunctionDetector;
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.cache.IncrementalCache;
|
import org.jetbrains.kotlin.load.kotlin.incremental.cache.IncrementalCache;
|
||||||
@@ -123,6 +124,8 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
) {
|
) {
|
||||||
Map<Module, ClassFileFactory> outputFiles = Maps.newHashMap();
|
Map<Module, ClassFileFactory> outputFiles = Maps.newHashMap();
|
||||||
|
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
String targetDescription = "in modules [" + Joiner.on(", ").join(Collections2.transform(chunk, new Function<Module, String>() {
|
String targetDescription = "in modules [" + Joiner.on(", ").join(Collections2.transform(chunk, new Function<Module, String>() {
|
||||||
@Override
|
@Override
|
||||||
public String apply(@Nullable Module input) {
|
public String apply(@Nullable Module input) {
|
||||||
@@ -134,9 +137,12 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
result.throwIfError();
|
result.throwIfError();
|
||||||
|
|
||||||
for (Module module : chunk) {
|
for (Module module : chunk) {
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
List<JetFile> jetFiles = CompileEnvironmentUtil.getJetFiles(
|
List<JetFile> jetFiles = CompileEnvironmentUtil.getJetFiles(
|
||||||
environment.getProject(), getAbsolutePaths(directory, module), new Function1<String, Unit>() {
|
environment.getProject(), getAbsolutePaths(directory, module), new Function1<String, Unit>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -151,6 +157,7 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (Module module : chunk) {
|
for (Module module : chunk) {
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
writeOutput(configuration, outputFiles.get(module), new File(module.getOutputDirectory()), jarPath, jarRuntime, null);
|
writeOutput(configuration, outputFiles.get(module), new File(module.getOutputDirectory()), jarPath, jarRuntime, null);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -386,6 +393,8 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
diagnosticHolder,
|
diagnosticHolder,
|
||||||
outputDirectory
|
outputDirectory
|
||||||
);
|
);
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
long generationStart = PerformanceCounter.Companion.currentThreadCpuTime();
|
long generationStart = PerformanceCounter.Companion.currentThreadCpuTime();
|
||||||
|
|
||||||
KotlinCodegenFacade.compileCorrectFiles(generationState, CompilationErrorHandler.THROW_EXCEPTION);
|
KotlinCodegenFacade.compileCorrectFiles(generationState, CompilationErrorHandler.THROW_EXCEPTION);
|
||||||
@@ -395,6 +404,7 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
String message = "GENERATE: " + sourceFiles.size() + " files (" +
|
String message = "GENERATE: " + sourceFiles.size() + " files (" +
|
||||||
environment.countLinesOfCode(sourceFiles) + " lines) " + desc + "in " + TimeUnit.NANOSECONDS.toMillis(generationNanos) + " ms";
|
environment.countLinesOfCode(sourceFiles) + " lines) " + desc + "in " + TimeUnit.NANOSECONDS.toMillis(generationNanos) + " ms";
|
||||||
K2JVMCompiler.Companion.reportPerf(environment.getConfiguration(), message);
|
K2JVMCompiler.Companion.reportPerf(environment.getConfiguration(), message);
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
AnalyzerWithCompilerReport.reportDiagnostics(
|
AnalyzerWithCompilerReport.reportDiagnostics(
|
||||||
new FilteredJvmDiagnostics(
|
new FilteredJvmDiagnostics(
|
||||||
@@ -403,6 +413,7 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
),
|
),
|
||||||
environment.getConfiguration().get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
environment.getConfiguration().get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
||||||
);
|
);
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
return generationState;
|
return generationState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.resolve.jvm;
|
package org.jetbrains.kotlin.resolve.jvm;
|
||||||
|
|
||||||
import com.intellij.openapi.components.ServiceManager;
|
import com.intellij.openapi.components.ServiceManager;
|
||||||
import com.intellij.openapi.progress.ProgressIndicatorProvider;
|
|
||||||
import com.intellij.openapi.project.DumbAware;
|
import com.intellij.openapi.project.DumbAware;
|
||||||
import com.intellij.openapi.project.DumbService;
|
import com.intellij.openapi.project.DumbService;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
@@ -40,6 +39,7 @@ import com.intellij.util.messages.MessageBus;
|
|||||||
import kotlin.KotlinPackage;
|
import kotlin.KotlinPackage;
|
||||||
import kotlin.jvm.functions.Function1;
|
import kotlin.jvm.functions.Function1;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
import org.jetbrains.kotlin.name.ClassId;
|
import org.jetbrains.kotlin.name.ClassId;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -85,7 +85,7 @@ public class KotlinJavaPsiFacade {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public PsiClass findClass(@NotNull ClassId classId, @NotNull GlobalSearchScope scope) {
|
public PsiClass findClass(@NotNull ClassId classId, @NotNull GlobalSearchScope scope) {
|
||||||
ProgressIndicatorProvider.checkCanceled(); // We hope this method is being called often enough to cancel daemon processes smoothly
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled(); // We hope this method is being called often enough to cancel daemon processes smoothly
|
||||||
|
|
||||||
String qualifiedName = classId.asSingleFqName().asString();
|
String qualifiedName = classId.asSingleFqName().asString();
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.context
|
package org.jetbrains.kotlin.context
|
||||||
|
|
||||||
|
import com.intellij.openapi.progress.ProcessCanceledException
|
||||||
|
import com.intellij.openapi.progress.ProgressIndicatorProvider
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
@@ -27,17 +29,18 @@ import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
|
|||||||
import org.jetbrains.kotlin.storage.ExceptionTracker
|
import org.jetbrains.kotlin.storage.ExceptionTracker
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
import kotlin.platform.platformStatic
|
||||||
|
|
||||||
public trait GlobalContext {
|
public interface GlobalContext {
|
||||||
public val storageManager: StorageManager
|
public val storageManager: StorageManager
|
||||||
public val exceptionTracker: ExceptionTracker
|
public val exceptionTracker: ExceptionTracker
|
||||||
}
|
}
|
||||||
|
|
||||||
public trait ProjectContext : GlobalContext {
|
public interface ProjectContext : GlobalContext {
|
||||||
public val project: Project
|
public val project: Project
|
||||||
}
|
}
|
||||||
|
|
||||||
public trait ModuleContext : ProjectContext {
|
public interface ModuleContext : ProjectContext {
|
||||||
public val module: ModuleDescriptor
|
public val module: ModuleDescriptor
|
||||||
|
|
||||||
public val platformToKotlinClassMap: PlatformToKotlinClassMap
|
public val platformToKotlinClassMap: PlatformToKotlinClassMap
|
||||||
@@ -47,7 +50,7 @@ public trait ModuleContext : ProjectContext {
|
|||||||
get() = module.builtIns
|
get() = module.builtIns
|
||||||
}
|
}
|
||||||
|
|
||||||
public trait MutableModuleContext: ModuleContext {
|
public interface MutableModuleContext: ModuleContext {
|
||||||
override val module: ModuleDescriptorImpl
|
override val module: ModuleDescriptorImpl
|
||||||
|
|
||||||
public fun setDependencies(vararg dependencies: ModuleDescriptorImpl) {
|
public fun setDependencies(vararg dependencies: ModuleDescriptorImpl) {
|
||||||
@@ -112,6 +115,29 @@ public fun ContextForNewModule(
|
|||||||
return MutableModuleContextImpl(module, projectContext)
|
return MutableModuleContextImpl(module, projectContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class CompilationCanceledException : ProcessCanceledException()
|
||||||
|
|
||||||
|
public interface CompilationCanceledStatus {
|
||||||
|
fun checkCanceled(): Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ProgressIndicatorAndCompilationCanceledStatus {
|
||||||
|
companion object {
|
||||||
|
private var canceledStatus: CompilationCanceledStatus? = null
|
||||||
|
|
||||||
|
platformStatic
|
||||||
|
synchronized public fun setCompilationCanceledStatus(newCanceledStatus: CompilationCanceledStatus?): Unit {
|
||||||
|
canceledStatus = newCanceledStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
platformStatic
|
||||||
|
public fun checkCanceled(): Unit {
|
||||||
|
ProgressIndicatorProvider.checkCanceled()
|
||||||
|
canceledStatus?.checkCanceled()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
deprecated("Used temporarily while we are in transition from to lazy resolve")
|
deprecated("Used temporarily while we are in transition from to lazy resolve")
|
||||||
public open class TypeLazinessToken {
|
public open class TypeLazinessToken {
|
||||||
deprecated("Used temporarily while we are in transition from to lazy resolve")
|
deprecated("Used temporarily while we are in transition from to lazy resolve")
|
||||||
|
|||||||
@@ -17,11 +17,11 @@
|
|||||||
package org.jetbrains.kotlin.resolve.calls;
|
package org.jetbrains.kotlin.resolve.calls;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.intellij.openapi.progress.ProgressIndicatorProvider;
|
|
||||||
import kotlin.Unit;
|
import kotlin.Unit;
|
||||||
import kotlin.jvm.functions.Function0;
|
import kotlin.jvm.functions.Function0;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.lexer.JetTokens;
|
import org.jetbrains.kotlin.lexer.JetTokens;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
@@ -74,8 +74,8 @@ public class CallResolver {
|
|||||||
private TaskPrioritizer taskPrioritizer;
|
private TaskPrioritizer taskPrioritizer;
|
||||||
private AdditionalCheckerProvider additionalCheckerProvider;
|
private AdditionalCheckerProvider additionalCheckerProvider;
|
||||||
|
|
||||||
private static PerformanceCounter callResolvePerfCounter = new PerformanceCounter("Call resolve", true);
|
private static final PerformanceCounter callResolvePerfCounter = new PerformanceCounter("Call resolve", true);
|
||||||
private static PerformanceCounter candidatePerfCounter = new PerformanceCounter("Call resolve candidate analysis", true);
|
private static final PerformanceCounter candidatePerfCounter = new PerformanceCounter("Call resolve candidate analysis", true);
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setExpressionTypingServices(@NotNull ExpressionTypingServices expressionTypingServices) {
|
public void setExpressionTypingServices(@NotNull ExpressionTypingServices expressionTypingServices) {
|
||||||
@@ -255,7 +255,7 @@ public class CallResolver {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public OverloadResolutionResults<FunctionDescriptor> resolveFunctionCall(@NotNull BasicCallResolutionContext context) {
|
public OverloadResolutionResults<FunctionDescriptor> resolveFunctionCall(@NotNull BasicCallResolutionContext context) {
|
||||||
ProgressIndicatorProvider.checkCanceled();
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
JetExpression calleeExpression = context.call.getCalleeExpression();
|
JetExpression calleeExpression = context.call.getCalleeExpression();
|
||||||
if (calleeExpression instanceof JetSimpleNameExpression) {
|
if (calleeExpression instanceof JetSimpleNameExpression) {
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ package org.jetbrains.kotlin.resolve.calls;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.intellij.openapi.progress.ProgressIndicatorProvider;
|
|
||||||
import kotlin.jvm.functions.Function1;
|
import kotlin.jvm.functions.Function1;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||||
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
import org.jetbrains.kotlin.resolve.*;
|
import org.jetbrains.kotlin.resolve.*;
|
||||||
@@ -76,7 +76,7 @@ public class CandidateResolver {
|
|||||||
@NotNull CallCandidateResolutionContext<D> context,
|
@NotNull CallCandidateResolutionContext<D> context,
|
||||||
@NotNull ResolutionTask<D, F> task) {
|
@NotNull ResolutionTask<D, F> task) {
|
||||||
|
|
||||||
ProgressIndicatorProvider.checkCanceled();
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
|
|
||||||
MutableResolvedCall<D> candidateCall = context.candidateCall;
|
MutableResolvedCall<D> candidateCall = context.candidateCall;
|
||||||
D candidate = candidateCall.getCandidateDescriptor();
|
D candidate = candidateCall.getCandidateDescriptor();
|
||||||
|
|||||||
@@ -18,28 +18,32 @@ package org.jetbrains.kotlin.resolve.calls.tasks
|
|||||||
|
|
||||||
import com.google.common.collect.Lists
|
import com.google.common.collect.Lists
|
||||||
import com.google.common.collect.Sets
|
import com.google.common.collect.Sets
|
||||||
import com.intellij.openapi.progress.ProgressIndicatorProvider
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.Call
|
import org.jetbrains.kotlin.psi.Call
|
||||||
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.CallResolverUtil.isOrOverridesSynthesized
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.SmartCastUtils
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.SmartCastUtils
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.BOTH_RECEIVERS
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.DISPATCH_RECEIVER
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.EXTENSION_RECEIVER
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.NO_EXPLICIT_RECEIVER
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.tasks.collectors.CallableDescriptorCollector
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.tasks.collectors.CallableDescriptorCollectors
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.tasks.collectors.filtered
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScopeUtils
|
import org.jetbrains.kotlin.resolve.scopes.JetScopeUtils
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.QualifierReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.QualifierReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER
|
||||||
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
import org.jetbrains.kotlin.types.ErrorUtils
|
||||||
import org.jetbrains.kotlin.types.checker.JetTypeChecker
|
import org.jetbrains.kotlin.types.checker.JetTypeChecker
|
||||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
|
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.types.isDynamic
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallResolverUtil.isOrOverridesSynthesized
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.*
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER
|
|
||||||
import org.jetbrains.kotlin.resolve.*
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.*
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.collectors.*
|
|
||||||
|
|
||||||
public class TaskPrioritizer(private val storageManager: StorageManager) {
|
public class TaskPrioritizer(private val storageManager: StorageManager) {
|
||||||
|
|
||||||
@@ -106,7 +110,7 @@ public class TaskPrioritizer(private val storageManager: StorageManager) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun <D : CallableDescriptor, F : D> doComputeTasks(receiver: ReceiverValue, c: TaskPrioritizerContext<D, F>) {
|
private fun <D : CallableDescriptor, F : D> doComputeTasks(receiver: ReceiverValue, c: TaskPrioritizerContext<D, F>) {
|
||||||
ProgressIndicatorProvider.checkCanceled()
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||||
|
|
||||||
val resolveInvoke = c.context.call.getDispatchReceiver().exists()
|
val resolveInvoke = c.context.call.getDispatchReceiver().exists()
|
||||||
if (resolveInvoke) {
|
if (resolveInvoke) {
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ import org.jetbrains.kotlin.config.CompilerRunnerConstants
|
|||||||
import org.jetbrains.kotlin.config.CompilerRunnerConstants.INTERNAL_ERROR_PREFIX
|
import org.jetbrains.kotlin.config.CompilerRunnerConstants.INTERNAL_ERROR_PREFIX
|
||||||
import org.jetbrains.kotlin.config.IncrementalCompilation
|
import org.jetbrains.kotlin.config.IncrementalCompilation
|
||||||
import org.jetbrains.kotlin.config.Services
|
import org.jetbrains.kotlin.config.Services
|
||||||
|
import org.jetbrains.kotlin.context.CompilationCanceledStatus
|
||||||
|
import org.jetbrains.kotlin.context.CompilationCanceledException
|
||||||
import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings
|
import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings
|
||||||
import org.jetbrains.kotlin.jps.incremental.*
|
import org.jetbrains.kotlin.jps.incremental.*
|
||||||
import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.DO_NOTHING
|
import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.DO_NOTHING
|
||||||
@@ -59,7 +61,10 @@ import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind
|
|||||||
import org.jetbrains.kotlin.load.kotlin.incremental.cache.IncrementalCache
|
import org.jetbrains.kotlin.load.kotlin.incremental.cache.IncrementalCache
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.cache.IncrementalCacheProvider
|
import org.jetbrains.kotlin.load.kotlin.incremental.cache.IncrementalCacheProvider
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
import org.jetbrains.kotlin.utils.*
|
import org.jetbrains.kotlin.utils.LibraryUtils
|
||||||
|
import org.jetbrains.kotlin.utils.PathUtil
|
||||||
|
import org.jetbrains.kotlin.utils.keysToMap
|
||||||
|
import org.jetbrains.kotlin.utils.sure
|
||||||
import org.jetbrains.org.objectweb.asm.ClassReader
|
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
@@ -94,7 +99,11 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
val messageCollector = MessageCollectorAdapter(context)
|
val messageCollector = MessageCollectorAdapter(context)
|
||||||
try {
|
try {
|
||||||
return doBuild(chunk, context, dirtyFilesHolder, messageCollector, outputConsumer)
|
return doBuild(chunk, context, dirtyFilesHolder, messageCollector, outputConsumer)
|
||||||
} catch (e: Throwable) {
|
}
|
||||||
|
catch (e: StopBuildException) {
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
catch (e: Throwable) {
|
||||||
messageCollector.report(
|
messageCollector.report(
|
||||||
CompilerMessageSeverity.EXCEPTION,
|
CompilerMessageSeverity.EXCEPTION,
|
||||||
OutputMessageUtil.renderException(e),
|
OutputMessageUtil.renderException(e),
|
||||||
@@ -133,7 +142,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
|
|
||||||
val incrementalCaches = chunk.getTargets().keysToMap { dataManager.getKotlinCache(it) }
|
val incrementalCaches = chunk.getTargets().keysToMap { dataManager.getKotlinCache(it) }
|
||||||
|
|
||||||
val environment = createCompileEnvironment(incrementalCaches)
|
val environment = createCompileEnvironment(incrementalCaches, context)
|
||||||
if (!environment.success()) {
|
if (!environment.success()) {
|
||||||
environment.reportErrorsTo(messageCollector)
|
environment.reportErrorsTo(messageCollector)
|
||||||
return ABORT
|
return ABORT
|
||||||
@@ -169,6 +178,8 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
|
|
||||||
registerOutputItems(outputConsumer, generatedFiles)
|
registerOutputItems(outputConsumer, generatedFiles)
|
||||||
|
|
||||||
|
context.checkCanceled()
|
||||||
|
|
||||||
val recompilationDecision: IncrementalCacheImpl.RecompilationDecision
|
val recompilationDecision: IncrementalCacheImpl.RecompilationDecision
|
||||||
if (JpsUtils.isJsKotlinModule(chunk.representativeTarget())) {
|
if (JpsUtils.isJsKotlinModule(chunk.representativeTarget())) {
|
||||||
recompilationDecision = DO_NOTHING
|
recompilationDecision = DO_NOTHING
|
||||||
@@ -237,7 +248,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
|
|
||||||
val representativeTarget = chunk.representativeTarget()
|
val representativeTarget = chunk.representativeTarget()
|
||||||
|
|
||||||
fun concatenate(strings: Array<String>?, cp: List<String>) = array(*(strings ?: array<String>()), *cp.copyToArray())
|
fun concatenate(strings: Array<String>?, cp: List<String>) = arrayOf(*(strings ?: arrayOf<String>()), *cp.toTypedArray())
|
||||||
|
|
||||||
for (argumentProvider in ServiceLoader.load(javaClass<KotlinJpsCompilerArgumentsProvider>())) {
|
for (argumentProvider in ServiceLoader.load(javaClass<KotlinJpsCompilerArgumentsProvider>())) {
|
||||||
// appending to pluginOptions
|
// appending to pluginOptions
|
||||||
@@ -257,9 +268,12 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
return compileToJvm(allCompiledFiles, chunk, commonArguments, context, dirtyFilesHolder, environment, filesToCompile, messageCollector)
|
return compileToJvm(allCompiledFiles, chunk, commonArguments, context, dirtyFilesHolder, environment, filesToCompile, messageCollector)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createCompileEnvironment(incrementalCaches: Map<ModuleBuildTarget, IncrementalCache>): CompilerEnvironment {
|
private fun createCompileEnvironment(incrementalCaches: Map<ModuleBuildTarget, IncrementalCache>, context: CompileContext): CompilerEnvironment {
|
||||||
val compilerServices = Services.Builder()
|
val compilerServices = Services.Builder()
|
||||||
.register(javaClass<IncrementalCacheProvider>(), IncrementalCacheProviderImpl(incrementalCaches))
|
.register(javaClass<IncrementalCacheProvider>(), IncrementalCacheProviderImpl(incrementalCaches))
|
||||||
|
.register(javaClass<CompilationCanceledStatus>(), object: CompilationCanceledStatus {
|
||||||
|
override fun checkCanceled(): Unit = if (context.getCancelStatus().isCanceled()) throw CompilationCanceledException()
|
||||||
|
})
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
return CompilerEnvironment.getEnvironmentFor(
|
return CompilerEnvironment.getEnvironmentFor(
|
||||||
@@ -268,6 +282,8 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
className.startsWith("org.jetbrains.kotlin.load.kotlin.incremental.cache.")
|
className.startsWith("org.jetbrains.kotlin.load.kotlin.incremental.cache.")
|
||||||
|| className == "org.jetbrains.kotlin.config.Services"
|
|| className == "org.jetbrains.kotlin.config.Services"
|
||||||
|| className.startsWith("org.apache.log4j.") // For logging from compiler
|
|| className.startsWith("org.apache.log4j.") // For logging from compiler
|
||||||
|
|| className == "org.jetbrains.kotlin.context.CompilationCanceledStatus"
|
||||||
|
|| className == "org.jetbrains.kotlin.context.CompilationCanceledException"
|
||||||
},
|
},
|
||||||
compilerServices
|
compilerServices
|
||||||
)
|
)
|
||||||
@@ -556,7 +572,7 @@ private fun getAllCompiledFilesContainer(context: CompileContext): MutableSet<Fi
|
|||||||
allCompiledFiles = THashSet(FileUtil.FILE_HASHING_STRATEGY)
|
allCompiledFiles = THashSet(FileUtil.FILE_HASHING_STRATEGY)
|
||||||
ALL_COMPILED_FILES_KEY.set(context, allCompiledFiles)
|
ALL_COMPILED_FILES_KEY.set(context, allCompiledFiles)
|
||||||
}
|
}
|
||||||
return allCompiledFiles!!
|
return allCompiledFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
private val PROCESSED_TARGETS_WITH_REMOVED_FILES = Key.create<MutableSet<ModuleBuildTarget>>("_processed_targets_with_removed_files_")
|
private val PROCESSED_TARGETS_WITH_REMOVED_FILES = Key.create<MutableSet<ModuleBuildTarget>>("_processed_targets_with_removed_files_")
|
||||||
@@ -566,7 +582,7 @@ private fun getProcessedTargetsWithRemovedFilesContainer(context: CompileContext
|
|||||||
set = HashSet<ModuleBuildTarget>()
|
set = HashSet<ModuleBuildTarget>()
|
||||||
PROCESSED_TARGETS_WITH_REMOVED_FILES.set(context, set)
|
PROCESSED_TARGETS_WITH_REMOVED_FILES.set(context, set)
|
||||||
}
|
}
|
||||||
return set!!
|
return set
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hasKotlinDirtyOrRemovedFiles(
|
private fun hasKotlinDirtyOrRemovedFiles(
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.js.facade;
|
|||||||
import com.google.dart.compiler.backend.js.ast.JsProgram;
|
import com.google.dart.compiler.backend.js.ast.JsProgram;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.kotlin.context.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
||||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
||||||
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
||||||
@@ -67,6 +68,7 @@ public final class K2JSTranslator {
|
|||||||
) throws TranslationException {
|
) throws TranslationException {
|
||||||
if (analysisResult == null) {
|
if (analysisResult == null) {
|
||||||
analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(files, config);
|
analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(files, config);
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
}
|
}
|
||||||
|
|
||||||
BindingTrace bindingTrace = analysisResult.getBindingTrace();
|
BindingTrace bindingTrace = analysisResult.getBindingTrace();
|
||||||
@@ -75,12 +77,15 @@ public final class K2JSTranslator {
|
|||||||
Diagnostics diagnostics = bindingTrace.getBindingContext().getDiagnostics();
|
Diagnostics diagnostics = bindingTrace.getBindingContext().getDiagnostics();
|
||||||
|
|
||||||
TranslationContext context = Translation.generateAst(bindingTrace, files, mainCallParameters, moduleDescriptor, config);
|
TranslationContext context = Translation.generateAst(bindingTrace, files, mainCallParameters, moduleDescriptor, config);
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
if (hasError(diagnostics)) return new TranslationResult.Fail(diagnostics);
|
if (hasError(diagnostics)) return new TranslationResult.Fail(diagnostics);
|
||||||
|
|
||||||
JsProgram program = JsInliner.process(context);
|
JsProgram program = JsInliner.process(context);
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
if (hasError(diagnostics)) return new TranslationResult.Fail(diagnostics);
|
if (hasError(diagnostics)) return new TranslationResult.Fail(diagnostics);
|
||||||
|
|
||||||
expandIsCalls(program, context);
|
expandIsCalls(program, context);
|
||||||
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||||
return new TranslationResult.Success(config, files, program, diagnostics, moduleDescriptor);
|
return new TranslationResult.Success(config, files, program, diagnostics, moduleDescriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user