Skip to content

Commit 1ba26cf

Browse files
committed
Make sure that BazelProjectData corresponds to current ProjectType
1 parent c830963 commit 1ba26cf

File tree

1 file changed

+31
-16
lines changed

1 file changed

+31
-16
lines changed

base/src/com/google/idea/blaze/base/sync/data/DelegatingBlazeProjectDataManager.java

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,34 +23,28 @@
2323
import com.google.idea.blaze.base.settings.BlazeImportSettings;
2424
import com.google.idea.blaze.base.settings.BlazeImportSettings.ProjectType;
2525
import com.intellij.openapi.project.Project;
26+
2627
import javax.annotation.Nullable;
2728

2829
/** Stores a cache of blaze project data and issues any side effects when that data is updated. */
2930
public class DelegatingBlazeProjectDataManager implements BlazeProjectDataManager {
3031

31-
private final Supplier<BlazeProjectDataManager> delegate;
32+
private final Project project;
33+
private Supplier<BlazeProjectDataManager> delegate;
34+
private ProjectType projectType;
3235

3336
public DelegatingBlazeProjectDataManager(Project project) {
34-
delegate =
35-
Suppliers.memoize(
36-
() -> {
37-
ProjectType projectType = Blaze.getProjectType(project);
38-
switch (projectType) {
39-
case UNKNOWN:
40-
return new EmptyBlazeProjectDataManager();
41-
case QUERY_SYNC:
42-
return new QuerySyncProjectDataManager(project);
43-
case ASPECT_SYNC:
44-
return new AspectSyncProjectDataManager(project);
45-
}
46-
throw new AssertionError(projectType);
47-
});
37+
this.project = project;
38+
initBlazeProjectDataDelegate(project);
4839
}
4940

5041
@Override
5142
@Nullable
5243
public BlazeProjectData getBlazeProjectData() {
53-
return delegate.get().getBlazeProjectData();
44+
if (projectType != Blaze.getProjectType(project)) {
45+
initBlazeProjectDataDelegate(project);
46+
}
47+
return delegate.get().getBlazeProjectData();
5448
}
5549

5650
@Nullable
@@ -61,6 +55,27 @@ public BlazeProjectData loadProject(BlazeImportSettings importSettings) {
6155

6256
@Override
6357
public void saveProject(BlazeImportSettings importSettings, BlazeProjectData projectData) {
58+
if (projectType != Blaze.getProjectType(project)) {
59+
initBlazeProjectDataDelegate(project);
60+
}
6461
delegate.get().saveProject(importSettings, projectData);
6562
}
63+
64+
private void initBlazeProjectDataDelegate(Project project) {
65+
this.projectType = Blaze.getProjectType(project);
66+
this.delegate =
67+
Suppliers.memoize(
68+
() -> {
69+
switch (projectType) {
70+
case UNKNOWN:
71+
return new EmptyBlazeProjectDataManager();
72+
case QUERY_SYNC:
73+
return new QuerySyncProjectDataManager(project);
74+
case ASPECT_SYNC:
75+
return new AspectSyncProjectDataManager(project);
76+
}
77+
throw new AssertionError(projectType);
78+
});
79+
}
80+
6681
}

0 commit comments

Comments
 (0)