diff --git a/base/src/com/google/idea/blaze/base/projectview/parser/ProjectViewParser.java b/base/src/com/google/idea/blaze/base/projectview/parser/ProjectViewParser.java index 69259d8614c..30748c21cfd 100644 --- a/base/src/com/google/idea/blaze/base/projectview/parser/ProjectViewParser.java +++ b/base/src/com/google/idea/blaze/base/projectview/parser/ProjectViewParser.java @@ -48,6 +48,10 @@ public ProjectViewParser(BlazeContext context, WorkspacePathResolver workspacePa } public void parseProjectView(File projectViewFile) { + parseProjectView(projectViewFile, Sections.getParsers()); + } + + public void parseProjectView(File projectViewFile, List sectionParsers) { if (!encounteredProjectViewFiles.add(projectViewFile)) { return; } @@ -64,22 +68,25 @@ public void parseProjectView(File projectViewFile) { return; } parseProjectView( - new ParseContext(context, workspacePathResolver, projectViewFile, projectViewText)); + new ParseContext(context, workspacePathResolver, projectViewFile, projectViewText), sectionParsers); } - public void parseProjectView(String text) { + public void parseProjectView(String text, List sectionParsers) { if (text.isEmpty()) { ProjectView projectView = new ProjectView(ImmutableList.of()); projectViewFiles.add(new ProjectViewSet.ProjectViewFile(projectView, null)); return; } - parseProjectView(new ParseContext(context, workspacePathResolver, null, text)); + parseProjectView(new ParseContext(context, workspacePathResolver, null, text), sectionParsers); } - private void parseProjectView(ParseContext parseContext) { + public void parseProjectView(String text) { + parseProjectView(text, Sections.getParsers()); + } + + private void parseProjectView(ParseContext parseContext, List sectionParsers) { ImmutableList.Builder> sections = ImmutableList.builder(); - List sectionParsers = Sections.getParsers(); while (!parseContext.atEnd()) { Section section = null; for (SectionParser sectionParser : sectionParsers) { diff --git a/base/tests/unittests/com/google/idea/blaze/base/projectview/parser/ProjectViewParserTest.java b/base/tests/unittests/com/google/idea/blaze/base/projectview/parser/ProjectViewParserTest.java index 09f76116b96..b2d9a0fe7b2 100644 --- a/base/tests/unittests/com/google/idea/blaze/base/projectview/parser/ProjectViewParserTest.java +++ b/base/tests/unittests/com/google/idea/blaze/base/projectview/parser/ProjectViewParserTest.java @@ -39,6 +39,7 @@ import com.google.idea.blaze.base.projectview.section.sections.TestSourceSection; import com.google.idea.blaze.base.projectview.section.sections.TextBlock; import com.google.idea.blaze.base.projectview.section.sections.TextBlockSection; +import com.google.idea.blaze.base.projectview.section.sections.UseQuerySyncSection; import com.google.idea.blaze.base.projectview.section.sections.TryImportSection; import com.google.idea.blaze.base.projectview.section.sections.ViewProjectRootSection; import com.google.idea.blaze.base.projectview.section.sections.WorkspaceTypeSection; @@ -519,6 +520,21 @@ public void testCommentsAndWhitespacePreserved() throws Exception { assertThat(outputString).isEqualTo(text); } + @Test + public void testParsersSubset() throws Exception { + projectViewStorageManager.add( + ".blazeproject", + "workspace_type: c", + "use_query_sync: compatibility"); + projectViewParser.parseProjectView(new File(".blazeproject"), List.of(WorkspaceTypeSection.PARSER)); + // Parser errors are expected from the parsers not included in the parsers list + + ProjectViewSet projectViewSet = projectViewParser.getResult(); + assertThat(projectViewSet.getScalarValue(WorkspaceTypeSection.KEY)).hasValue(WorkspaceType.C); + // Value will not be parsed for the parsers not in the provided list + assertThat(projectViewSet.getScalarValue(UseQuerySyncSection.KEY)).isEqualTo(Optional.empty()); + } + @Test public void testParserParsesVieProjectRootSection() throws Exception { String text =