Skip to content

Commit a795230

Browse files
authored
Merge pull request #1364 from 1c-syntax/develop
Merge
2 parents 1bacc56 + f8146b6 commit a795230

File tree

3 files changed

+71
-12
lines changed

3 files changed

+71
-12
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,14 @@
2424
import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration;
2525
import com.github._1c_syntax.bsl.languageserver.context.ServerContext;
2626
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo;
27+
import lombok.AccessLevel;
2728
import lombok.Getter;
2829
import org.springframework.boot.Banner;
30+
import org.springframework.boot.SpringApplication;
2931
import org.springframework.boot.WebApplicationType;
3032
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
3133
import org.springframework.boot.builder.SpringApplicationBuilder;
32-
import org.springframework.context.ApplicationContext;
34+
import org.springframework.context.ConfigurableApplicationContext;
3335
import org.springframework.context.annotation.ComponentScan;
3436
import org.springframework.core.io.DefaultResourceLoader;
3537

@@ -40,16 +42,27 @@
4042
@ComponentScan("com.github._1c_syntax.bsl.languageserver")
4143
public class BSLLSBinding {
4244

43-
@Getter(lazy = true)
44-
private static final ApplicationContext applicationContext = createContext();
45+
@Getter(lazy = true, value = AccessLevel.PRIVATE)
46+
private static final SpringApplication application = createApplication();
47+
@Getter(lazy = true, value = AccessLevel.PRIVATE)
48+
private static final ConfigurableApplicationContext context = createContext();
4549

4650
public BSLLSBinding() {
4751
// public constructor is needed for spring initialization
4852
}
4953

54+
public static ConfigurableApplicationContext getApplicationContext() {
55+
var context = getContext();
56+
if (!context.isActive()) {
57+
context = createContext();
58+
}
59+
60+
return context;
61+
}
62+
5063
@SuppressWarnings("unchecked")
5164
public static Collection<DiagnosticInfo> getDiagnosticInfos() {
52-
return (Collection<DiagnosticInfo>) getApplicationContext().getBean("diagnosticInfos", Collection.class);
65+
return getApplicationContext().getBean("diagnosticInfos", Collection.class);
5366
}
5467

5568
public static LanguageServerConfiguration getLanguageServerConfiguration() {
@@ -60,7 +73,7 @@ public static ServerContext getServerContext() {
6073
return getApplicationContext().getBean(ServerContext.class);
6174
}
6275

63-
private static ApplicationContext createContext() {
76+
private static SpringApplication createApplication() {
6477
return new SpringApplicationBuilder(BSLLSBinding.class)
6578
.bannerMode(Banner.Mode.OFF)
6679
.web(WebApplicationType.NONE)
@@ -71,7 +84,10 @@ private static ApplicationContext createContext() {
7184
"app.command.line.runner.enabled", "false",
7285
"app.scheduling.enabled", "false"
7386
))
74-
.build()
75-
.run();
87+
.build();
88+
}
89+
90+
private static ConfigurableApplicationContext createContext() {
91+
return getApplication().run();
7692
}
7793
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.fasterxml.jackson.annotation.JsonProperty;
2525
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticCode;
2626
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo;
27+
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType;
2728
import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo;
2829
import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo;
2930
import lombok.Getter;
@@ -42,6 +43,13 @@
4243

4344
public class GenericIssueReport {
4445

46+
private static final Map<DiagnosticType, RuleType> diagnosticTypeRuleTypeMap = Map.of(
47+
DiagnosticType.ERROR, RuleType.BUG,
48+
DiagnosticType.CODE_SMELL, RuleType.CODE_SMELL,
49+
DiagnosticType.SECURITY_HOTSPOT, RuleType.SECURITY_HOTSPOT,
50+
DiagnosticType.VULNERABILITY, RuleType.VULNERABILITY
51+
);
52+
4553
@Getter
4654
@JsonProperty("issues")
4755
private final List<GenericIssueEntry> issues;
@@ -72,7 +80,7 @@ static class GenericIssueEntry {
7280
String engineId;
7381
String ruleId;
7482
String severity;
75-
String type;
83+
RuleType type;
7684
Location primaryLocation;
7785
int effortMinutes;
7886
List<Location> secondaryLocations;
@@ -81,7 +89,7 @@ public GenericIssueEntry(
8189
@JsonProperty("engineId") String engineId,
8290
@JsonProperty("ruleId") String ruleId,
8391
@JsonProperty("severity") String severity,
84-
@JsonProperty("type") String type,
92+
@JsonProperty("type") RuleType type,
8593
@JsonProperty("primaryLocation") Location primaryLocation,
8694
@JsonProperty("effortMinutes") int effortMinutes,
8795
@JsonProperty("secondaryLocations") List<Location> secondaryLocations
@@ -99,7 +107,7 @@ public GenericIssueEntry(String fileName, Diagnostic diagnostic, DiagnosticInfo
99107
engineId = diagnostic.getSource();
100108
ruleId = diagnosticInfo.getCode().getStringValue();
101109
severity = diagnosticInfo.getSeverity().name();
102-
type = diagnosticInfo.getType().name();
110+
type = diagnosticTypeRuleTypeMap.get(diagnosticInfo.getType());
103111
primaryLocation = new Location(fileName, diagnostic);
104112
effortMinutes = diagnosticInfo.getMinutesToFix();
105113

@@ -176,4 +184,10 @@ public TextRange(Range range) {
176184

177185
}
178186

187+
enum RuleType {
188+
BUG,
189+
CODE_SMELL,
190+
SECURITY_HOTSPOT,
191+
VULNERABILITY
192+
}
179193
}

src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@
2222
package com.github._1c_syntax.bsl.languageserver;
2323

2424
import org.junit.jupiter.api.Test;
25-
import org.springframework.boot.test.context.SpringBootTest;
2625

2726
import static org.assertj.core.api.Assertions.assertThat;
2827

29-
@SpringBootTest
3028
class BSLLSBindingTest {
3129

3230
@Test
@@ -37,4 +35,35 @@ void testGetServerContext() {
3735
// then
3836
assertThat(serverContext).isNotNull();
3937
}
38+
39+
@Test
40+
void testGetDiagnosticInfos() {
41+
// when
42+
var diagnosticInfos = BSLLSBinding.getDiagnosticInfos();
43+
44+
// then
45+
assertThat(diagnosticInfos).isNotNull();
46+
}
47+
48+
@Test
49+
void testGetLanguageServerConfiguration() {
50+
// when
51+
var languageServerConfiguration = BSLLSBinding.getLanguageServerConfiguration();
52+
53+
// then
54+
assertThat(languageServerConfiguration).isNotNull();
55+
}
56+
57+
@Test
58+
void testReactivateContext() {
59+
// given
60+
var applicationContext = BSLLSBinding.getApplicationContext();
61+
applicationContext.close();
62+
63+
// when
64+
applicationContext = BSLLSBinding.getApplicationContext();
65+
66+
// then
67+
assertThat(applicationContext.isActive()).isTrue();
68+
}
4069
}

0 commit comments

Comments
 (0)