23
23
import com .google .idea .blaze .base .settings .BlazeImportSettings ;
24
24
import com .google .idea .blaze .base .settings .BlazeImportSettings .ProjectType ;
25
25
import com .intellij .openapi .project .Project ;
26
+
26
27
import javax .annotation .Nullable ;
27
28
28
29
/** Stores a cache of blaze project data and issues any side effects when that data is updated. */
29
30
public class DelegatingBlazeProjectDataManager implements BlazeProjectDataManager {
30
31
31
- private final Supplier <BlazeProjectDataManager > delegate ;
32
+ private final Project project ;
33
+ private Supplier <BlazeProjectDataManager > delegate ;
34
+ private ProjectType projectType ;
32
35
33
36
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 );
48
39
}
49
40
50
41
@ Override
51
42
@ Nullable
52
43
public BlazeProjectData getBlazeProjectData () {
53
- return delegate .get ().getBlazeProjectData ();
44
+ if (projectType != Blaze .getProjectType (project )) {
45
+ initBlazeProjectDataDelegate (project );
46
+ }
47
+ return delegate .get ().getBlazeProjectData ();
54
48
}
55
49
56
50
@ Nullable
@@ -61,6 +55,27 @@ public BlazeProjectData loadProject(BlazeImportSettings importSettings) {
61
55
62
56
@ Override
63
57
public void saveProject (BlazeImportSettings importSettings , BlazeProjectData projectData ) {
58
+ if (projectType != Blaze .getProjectType (project )) {
59
+ initBlazeProjectDataDelegate (project );
60
+ }
64
61
delegate .get ().saveProject (importSettings , projectData );
65
62
}
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
+
66
81
}
0 commit comments