diff --git a/compiler/ballerina-lang/src/main/java/io/ballerina/projects/Project.java b/compiler/ballerina-lang/src/main/java/io/ballerina/projects/Project.java index 7828865e2a93..c539eb65b357 100644 --- a/compiler/ballerina-lang/src/main/java/io/ballerina/projects/Project.java +++ b/compiler/ballerina-lang/src/main/java/io/ballerina/projects/Project.java @@ -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; @@ -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, @@ -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. @@ -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; diff --git a/compiler/ballerina-lang/src/main/java/io/ballerina/projects/bala/BalaProject.java b/compiler/ballerina-lang/src/main/java/io/ballerina/projects/bala/BalaProject.java index 199077eceea9..81febf8d9c61 100644 --- a/compiler/ballerina-lang/src/main/java/io/ballerina/projects/bala/BalaProject.java +++ b/compiler/ballerina-lang/src/main/java/io/ballerina/projects/bala/BalaProject.java @@ -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 diff --git a/compiler/ballerina-lang/src/main/java/io/ballerina/projects/directory/BuildProject.java b/compiler/ballerina-lang/src/main/java/io/ballerina/projects/directory/BuildProject.java index a1cc2edd072e..f5812bc1e4ff 100644 --- a/compiler/ballerina-lang/src/main/java/io/ballerina/projects/directory/BuildProject.java +++ b/compiler/ballerina-lang/src/main/java/io/ballerina/projects/directory/BuildProject.java @@ -155,12 +155,18 @@ public Optional 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 diff --git a/compiler/ballerina-lang/src/main/java/io/ballerina/projects/directory/SingleFileProject.java b/compiler/ballerina-lang/src/main/java/io/ballerina/projects/directory/SingleFileProject.java index 49338b77b497..d84efcb85430 100644 --- a/compiler/ballerina-lang/src/main/java/io/ballerina/projects/directory/SingleFileProject.java +++ b/compiler/ballerina-lang/src/main/java/io/ballerina/projects/directory/SingleFileProject.java @@ -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; @@ -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