Skip to content

Commit

Permalink
Invalidate the environment in project when the compiler crashes
Browse files Browse the repository at this point in the history
  • Loading branch information
azinneera committed Jun 17, 2022
1 parent 7d57315 commit 9217211
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
package io.ballerina.projects;

import io.ballerina.projects.environment.ProjectEnvironment;
import org.wso2.ballerinalang.compiler.PackageCache;
import org.wso2.ballerinalang.compiler.util.CompilerContext;
import org.wso2.ballerinalang.compiler.util.CompilerOptions;

Expand All @@ -36,7 +35,7 @@ public abstract class Project {
protected final Path sourceRoot;
private Package currentPackage;
private BuildOptions buildOptions;
private final ProjectEnvironment projectEnvironment;
protected ProjectEnvironment projectEnvironment;
private final ProjectKind projectKind;

protected Project(ProjectKind projectKind,
Expand Down Expand Up @@ -110,13 +109,7 @@ protected void populateCompilerContext() {
* (i.e. package resolution caches, compilation caches)
* generated during project compilation will be discarded.
*/
public void clearCaches() {
cloneProject(this);
CompilerContext compilerContext = this.projectEnvironmentContext()
.getService(CompilerContext.class);
PackageCache packageCache = PackageCache.getInstance(compilerContext);
packageCache.flush();
}
public abstract void clearCaches();

/**
* Creates a new Project instance which has the same structure as this Project.
Expand All @@ -128,7 +121,7 @@ public void clearCaches() {
*/
public abstract Project duplicate();

protected Project cloneProject(Project project) {
protected Project resetPackage(Project project) {
Package clone = this.currentPackage.duplicate(project);
project.setCurrentPackage(clone);
return project;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,20 @@ private BalaProject(ProjectEnvironmentBuilder environmentBuilder, Path balaPath)
this.platform = BalaFiles.readPackageJson(balaPath).getPlatform();
}

@Override
public void clearCaches() {
resetPackage(this);
ProjectEnvironmentBuilder projectEnvironmentBuilder = ProjectEnvironmentBuilder.getDefaultBuilder();
projectEnvironmentBuilder.addCompilationCacheFactory(TempDirCompilationCache::from);
this.projectEnvironment = projectEnvironmentBuilder.build(this);
}

@Override
public Project duplicate() {
ProjectEnvironmentBuilder projectEnvironmentBuilder = ProjectEnvironmentBuilder.getDefaultBuilder();
projectEnvironmentBuilder.addCompilationCacheFactory(TempDirCompilationCache::from);
BalaProject balaProject = new BalaProject(projectEnvironmentBuilder, this.sourceRoot);
return cloneProject(balaProject);
return resetPackage(balaProject);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,12 +155,18 @@ public Optional<Path> documentPath(DocumentId documentId) {
return Optional.empty();
}

@Override
public void clearCaches() {
resetPackage(this);
this.projectEnvironment = ProjectEnvironmentBuilder.getDefaultBuilder().build(this);
}

@Override
public Project duplicate() {
BuildOptions duplicateBuildOptions = BuildOptions.builder().build().acceptTheirs(buildOptions());
BuildProject buildProject = new BuildProject(
ProjectEnvironmentBuilder.getDefaultBuilder(), this.sourceRoot, duplicateBuildOptions);
return cloneProject(buildProject);
return resetPackage(buildProject);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import io.ballerina.projects.ProjectException;
import io.ballerina.projects.ProjectKind;
import io.ballerina.projects.internal.PackageConfigCreator;
import io.ballerina.projects.repos.TempDirCompilationCache;

import java.io.IOException;
import java.nio.file.Files;
Expand Down Expand Up @@ -82,12 +83,20 @@ private SingleFileProject(ProjectEnvironmentBuilder environmentBuilder, Path fil
populateCompilerContext();
}

@Override
public void clearCaches() {
resetPackage(this);
ProjectEnvironmentBuilder projectEnvironmentBuilder = ProjectEnvironmentBuilder.getDefaultBuilder();
projectEnvironmentBuilder.addCompilationCacheFactory(TempDirCompilationCache::from);
this.projectEnvironment = projectEnvironmentBuilder.build(this);
}

@Override
public Project duplicate() {
BuildOptions duplicateBuildOptions = BuildOptions.builder().build().acceptTheirs(buildOptions());
SingleFileProject singleFileProject = new SingleFileProject(
ProjectEnvironmentBuilder.getDefaultBuilder(), this.sourceRoot, duplicateBuildOptions);
return cloneProject(singleFileProject);
return resetPackage(singleFileProject);
}

@Override
Expand Down

0 comments on commit 9217211

Please sign in to comment.