Skip to content

Commit a9d2eca

Browse files
committed
exclude filter
1 parent 6d195b1 commit a9d2eca

File tree

3 files changed

+87
-49
lines changed

3 files changed

+87
-49
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,14 @@
2424
import lombok.Data;
2525
import lombok.NoArgsConstructor;
2626

27-
import java.util.ArrayList;
27+
import java.util.TreeSet;
2828

2929
/**
3030
* Фильтр диагностик по подсистемам
3131
*/
3232
@Data
3333
@NoArgsConstructor
3434
public class SubsystemFilter {
35-
private ArrayList<String> include = new ArrayList<>();
36-
// todo Exclude subsystems
37-
// private ArrayList<String> exclude = new ArrayList<>();
35+
private TreeSet<String> include = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
36+
private TreeSet<String> exclude = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
3837
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,26 @@ private static boolean needToComputeDiagnostics(
100100

101101
private static boolean filterSubsystems(DocumentContext documentContext, DiagnosticsOptions diagnosticsOptions) {
102102
var mdoObject = documentContext.getMdObject();
103-
var subSystemsName = diagnosticsOptions.getSubsystemsFilter();
103+
var subsystemsFilter = diagnosticsOptions.getSubsystemsFilter();
104104

105105
if (mdoObject.isEmpty()
106-
|| (subSystemsName.getInclude().isEmpty())) {
106+
|| (subsystemsFilter.getInclude().isEmpty() && subsystemsFilter.getExclude().isEmpty())) {
107107
return true;
108108
}
109109

110-
return MdoRefBuilder.subsystemFlatList(mdoObject.get().getIncludedSubsystems()).stream()
110+
var stringStream = MdoRefBuilder.subsystemFlatList(mdoObject.get().getIncludedSubsystems()).stream()
111111
.map(AbstractMDO::getName)
112-
.anyMatch(mdoSystemName -> subSystemsName.getInclude().stream().anyMatch(mdoSystemName::equalsIgnoreCase));
112+
.collect(Collectors.toList());
113+
114+
var include = subsystemsFilter.getInclude().isEmpty()
115+
|| stringStream.stream()
116+
.anyMatch(mdoSystemName -> subsystemsFilter.getInclude().contains(mdoSystemName));
117+
118+
var exclude = !subsystemsFilter.getExclude().isEmpty()
119+
&& stringStream.stream()
120+
.anyMatch(mdoSystemName -> subsystemsFilter.getExclude().contains(mdoSystemName));
121+
122+
return include && !exclude;
113123
}
114124

115125
private static boolean checkSupport(DocumentContext documentContext, DiagnosticsOptions diagnosticsOptions) {

src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java

Lines changed: 70 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,13 @@
2424
import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration;
2525
import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.Mode;
2626
import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.SkipSupport;
27-
import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.SubsystemFilter;
2827
import com.github._1c_syntax.bsl.languageserver.context.DocumentContext;
2928
import com.github._1c_syntax.bsl.languageserver.context.FileType;
3029
import com.github._1c_syntax.bsl.languageserver.context.ServerContext;
3130
import com.github._1c_syntax.bsl.languageserver.diagnostics.infrastructure.DiagnosticsConfiguration;
3231
import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass;
3332
import com.github._1c_syntax.bsl.languageserver.util.TestUtils;
3433
import com.github._1c_syntax.mdclasses.common.CompatibilityMode;
35-
import com.github._1c_syntax.mdclasses.mdo.AbstractMDOForm;
3634
import com.github._1c_syntax.mdclasses.mdo.support.ModuleType;
3735
import com.github._1c_syntax.mdclasses.supportconf.SupportConfiguration;
3836
import com.github._1c_syntax.mdclasses.supportconf.SupportVariant;
@@ -43,18 +41,16 @@
4341
import org.springframework.beans.factory.annotation.Autowired;
4442
import org.springframework.boot.test.context.SpringBootTest;
4543

46-
import java.util.ArrayList;
4744
import java.util.Collections;
4845
import java.util.HashMap;
4946
import java.util.List;
5047
import java.util.Map;
51-
import java.util.Optional;
48+
import java.util.TreeSet;
5249

5350
import static org.assertj.core.api.Assertions.assertThat;
5451
import static org.mockito.Mockito.doReturn;
5552
import static org.mockito.Mockito.mock;
5653
import static org.mockito.Mockito.spy;
57-
import static org.mockito.Mockito.when;
5854

5955
@SpringBootTest
6056
@CleanupContextBeforeClassAndAfterClass
@@ -311,69 +307,102 @@ void testDiagnosticSubsystemsIncludeCheck() {
311307
.isNotEmpty();
312308

313309
configuration.getDiagnosticsOptions().getSubsystemsFilter()
314-
.setInclude(new ArrayList<>(List.of("ПодсистемаКотройНет")));
310+
.setInclude(new TreeSet<>(List.of("ПодсистемаКотройНет")));
315311
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
316312
.isEmpty();
317313

318314
configuration.getDiagnosticsOptions().getSubsystemsFilter()
319-
.setInclude(new ArrayList<>(List.of("Подсистема1")));
315+
.setInclude(new TreeSet<>(List.of("Подсистема1")));
320316
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
321317
.isNotEmpty();
322318

323319
configuration.getDiagnosticsOptions().getSubsystemsFilter()
324-
.setInclude(new ArrayList<>(List.of("Подсистема1_1")));
320+
.setInclude(new TreeSet<>(List.of("Подсистема1_1")));
325321
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
326322
.isNotEmpty();
327323

328324
configuration.getDiagnosticsOptions().getSubsystemsFilter()
329-
.setInclude(new ArrayList<>(List.of("Подсистема1_1_1")));
325+
.setInclude(new TreeSet<>(List.of("Подсистема1_1_1")));
330326
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
331327
.isNotEmpty();
332328

333329
configuration.getDiagnosticsOptions().getSubsystemsFilter()
334-
.setInclude(new ArrayList<>(List.of("Подсистема1_1_3")));
330+
.setInclude(new TreeSet<>(List.of("Подсистема1_1_3")));
335331
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
336332
.isEmpty();
337333

338334
configuration.getDiagnosticsOptions().getSubsystemsFilter()
339-
.setInclude(new ArrayList<>(List.of("Подсистема2")));
335+
.setInclude(new TreeSet<>(List.of("Подсистема2")));
340336
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
341337
.isNotEmpty();
342338

343339
configuration.getDiagnosticsOptions().getSubsystemsFilter()
344-
.setInclude(new ArrayList<>(List.of("Подсистема3")));
340+
.setInclude(new TreeSet<>(List.of("Подсистема3")));
345341
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
346342
.isEmpty();
347343

348344
}
349-
//
350-
// @Test
351-
// void testDiagnosticSubsystemsExcludeCheck() {
352-
//
353-
// var PATH_TO_METADATA = "src/test/resources/metadata/subSystemFilter";
354-
// context.clear();
355-
// context.setConfigurationRoot(Absolute.path(PATH_TO_METADATA));
356-
// context.populateContext();
357-
//
358-
// documentContext = spy(TestUtils.getDocumentContext("А = 0"));
359-
//
360-
// var mdObject = context.getConfiguration().getChildren().stream()
361-
// .filter(mdo -> mdo.getName().equalsIgnoreCase("ОбщийМодуль1"))
362-
// .findFirst();
363-
//
364-
// doReturn(mdObject).when(documentContext).getMdObject();
365-
// // Без фильтра
366-
// assertThat(diagnosticsConfiguration.diagnostics(documentContext))
367-
// .isNotEmpty();
368-
//
369-
// configuration.getDiagnosticsOptions().getSubsystemsFilter()
370-
// .setExclude(new ArrayList<>(List.of("ПодсистемаКотройНет")));
371-
// assertThat(diagnosticsConfiguration.diagnostics(documentContext))
372-
// .isNotNull();
373-
// configuration.getDiagnosticsOptions().getSubsystemsFilter()
374-
// .setExclude(new ArrayList<>(List.of("Подсистема2")));
375-
// assertThat(diagnosticsConfiguration.diagnostics(documentContext))
376-
// .isNull();
377-
// }
345+
346+
//
347+
@Test
348+
void testDiagnosticSubsystemsExcludeCheck() {
349+
350+
var PATH_TO_METADATA = "src/test/resources/metadata/subSystemFilter";
351+
context.clear();
352+
context.setConfigurationRoot(Absolute.path(PATH_TO_METADATA));
353+
context.populateContext();
354+
355+
documentContext = spy(TestUtils.getDocumentContext("А = 0"));
356+
357+
var mdObject = context.getConfiguration().getChildren().stream()
358+
.filter(mdo -> mdo.getName().equalsIgnoreCase("ОбщийМодуль1"))
359+
.findFirst();
360+
361+
doReturn(mdObject).when(documentContext).getMdObject();
362+
// Без фильтра
363+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
364+
.isNotEmpty();
365+
366+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
367+
.setExclude(new TreeSet<>(List.of("ПодсистемаКотройНет")));
368+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
369+
.isNotEmpty();
370+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
371+
.setExclude(new TreeSet<>(List.of("Подсистема2")));
372+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
373+
.isEmpty();
374+
}
375+
376+
@Test
377+
void testDiagnosticSubsystemsIncludeExcludeCheck() {
378+
379+
var PATH_TO_METADATA = "src/test/resources/metadata/subSystemFilter";
380+
context.clear();
381+
context.setConfigurationRoot(Absolute.path(PATH_TO_METADATA));
382+
context.populateContext();
383+
384+
documentContext = spy(TestUtils.getDocumentContext("А = 0"));
385+
386+
var mdObject = context.getConfiguration().getChildren().stream()
387+
.filter(mdo -> mdo.getName().equalsIgnoreCase("ОбщийМодуль1"))
388+
.findFirst();
389+
390+
doReturn(mdObject).when(documentContext).getMdObject();
391+
// Без фильтра
392+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
393+
.isNotEmpty();
394+
395+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
396+
.setInclude(new TreeSet<>(List.of("Подсистема2")));
397+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
398+
.setExclude(new TreeSet<>(List.of("Подсистема2_2")));
399+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
400+
.isEmpty();
401+
402+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
403+
.setExclude(new TreeSet<>(List.of("Подсистема2")));
404+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
405+
.isEmpty();
406+
}
378407

379408
}

0 commit comments

Comments
 (0)