Skip to content

Commit 0c544f4

Browse files
authored
Merge pull request #3158 from 1c-syntax/feature/newMDC
Поддержка mdclasses 0.12
2 parents 637b650 + 60d56fd commit 0c544f4

File tree

68 files changed

+518
-621
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+518
-621
lines changed

build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ repositories {
2929
mavenLocal()
3030
mavenCentral()
3131
maven(url = "https://jitpack.io")
32-
maven(url = "https://projectlombok.org/edge-releases")
32+
maven(url = "https://projectlombok.org/edge-releases")
3333
}
3434

3535
group = "io.github.1c-syntax"
@@ -83,8 +83,8 @@ dependencies {
8383
exclude("org.glassfish", "javax.json")
8484
}
8585
api("com.github.1c-syntax", "utils", "0.5.1")
86-
api("com.github.1c-syntax", "mdclasses", "0.10.4")
87-
api("io.github.1c-syntax", "bsl-common-library", "0.3.0")
86+
api("io.github.1c-syntax", "mdclasses", "0.12.0-rc.5")
87+
api("io.github.1c-syntax", "bsl-common-library", "0.5.0")
8888
api("io.github.1c-syntax", "supportconf", "0.12.1")
8989

9090
// JLanguageTool

src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
import com.github._1c_syntax.bsl.languageserver.reporters.ReportersAggregator;
2828
import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo;
2929
import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo;
30+
import com.github._1c_syntax.bsl.mdo.MD;
3031
import com.github._1c_syntax.bsl.types.MdoReference;
31-
import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase;
3232
import com.github._1c_syntax.utils.Absolute;
3333
import lombok.RequiredArgsConstructor;
3434
import lombok.SneakyThrows;
@@ -208,7 +208,7 @@ private FileInfo getFileInfoFromFile(Path srcDir, File file) {
208208
List<Diagnostic> diagnostics = documentContext.getDiagnostics();
209209
MetricStorage metrics = documentContext.getMetrics();
210210
var mdoRef = documentContext.getMdObject()
211-
.map(AbstractMDObjectBase::getMdoReference)
211+
.map(MD::getMdoReference)
212212
.map(MdoReference::getMdoRef)
213213
.orElse("");
214214

src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,16 @@
3333
import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol;
3434
import com.github._1c_syntax.bsl.languageserver.context.symbol.SymbolTree;
3535
import com.github._1c_syntax.bsl.languageserver.utils.Trees;
36+
import com.github._1c_syntax.bsl.mdo.MD;
37+
import com.github._1c_syntax.bsl.mdo.Module;
3638
import com.github._1c_syntax.bsl.mdo.support.ScriptVariant;
3739
import com.github._1c_syntax.bsl.parser.BSLLexer;
3840
import com.github._1c_syntax.bsl.parser.BSLParser;
3941
import com.github._1c_syntax.bsl.parser.BSLTokenizer;
4042
import com.github._1c_syntax.bsl.parser.SDBLTokenizer;
41-
import com.github._1c_syntax.bsl.supconf.SupportConfiguration;
4243
import com.github._1c_syntax.bsl.support.SupportVariant;
4344
import com.github._1c_syntax.bsl.types.ConfigurationSource;
4445
import com.github._1c_syntax.bsl.types.ModuleType;
45-
import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase;
4646
import com.github._1c_syntax.utils.Lazy;
4747
import edu.umd.cs.findbugs.annotations.Nullable;
4848
import jakarta.annotation.PostConstruct;
@@ -68,7 +68,6 @@
6868
import java.util.Collections;
6969
import java.util.List;
7070
import java.util.Locale;
71-
import java.util.Map;
7271
import java.util.Optional;
7372
import java.util.concurrent.locks.ReentrantLock;
7473
import java.util.regex.Pattern;
@@ -120,8 +119,6 @@ public class DocumentContext {
120119

121120
private final Lazy<String[]> contentList = new Lazy<>(this::computeContentList, computeLock);
122121
private final Lazy<ModuleType> moduleType = new Lazy<>(this::computeModuleType, computeLock);
123-
private final Lazy<Map<SupportConfiguration, SupportVariant>> supportVariants
124-
= new Lazy<>(this::computeSupportVariants, computeLock);
125122
private final Lazy<ComplexityData> cognitiveComplexityData
126123
= new Lazy<>(this::computeCognitiveComplexity, computeLock);
127124
private final Lazy<ComplexityData> cyclomaticComplexityData
@@ -240,13 +237,12 @@ public ModuleType getModuleType() {
240237
return moduleType.getOrCompute();
241238
}
242239

243-
public Map<SupportConfiguration, SupportVariant> getSupportVariants() {
244-
return supportVariants.getOrCompute();
240+
public SupportVariant getSupportVariant() {
241+
return getMdObject().map(MD::getSupportVariant).orElse(SupportVariant.NONE);
245242
}
246243

247-
public Optional<AbstractMDObjectBase> getMdObject() {
248-
return Optional
249-
.ofNullable((AbstractMDObjectBase) getServerContext().getConfiguration().getModulesByObject().get(getUri()));
244+
public Optional<MD> getMdObject() {
245+
return getServerContext().getConfiguration().findChild(getUri());
250246
}
251247

252248
public List<SDBLTokenizer> getQueries() {
@@ -340,7 +336,6 @@ private void clearDependantData() {
340336
diagnosticsLock.unlock();
341337
computeLock.unlock();
342338
}
343-
344339
}
345340

346341
private static FileType computeFileType(URI uri) {
@@ -371,11 +366,10 @@ private SymbolTree computeSymbolTree() {
371366

372367

373368
private ModuleType computeModuleType() {
374-
return context.getConfiguration().getModuleType(uri);
375-
}
376-
377-
private Map<SupportConfiguration, SupportVariant> computeSupportVariants() {
378-
return context.getConfiguration().getModuleSupport(uri);
369+
return context.getConfiguration()
370+
.getModuleByUri(uri)
371+
.map(Module::getModuleType)
372+
.orElse(ModuleType.UNKNOWN);
379373
}
380374

381375
private ComplexityData computeCognitiveComplexity() {

src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@
2626
import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder;
2727
import com.github._1c_syntax.bsl.languageserver.utils.NamedForkJoinWorkerThreadFactory;
2828
import com.github._1c_syntax.bsl.languageserver.utils.Resources;
29+
import com.github._1c_syntax.bsl.mdclasses.CF;
30+
import com.github._1c_syntax.bsl.mdclasses.MDClasses;
2931
import com.github._1c_syntax.bsl.types.ModuleType;
30-
import com.github._1c_syntax.mdclasses.Configuration;
3132
import com.github._1c_syntax.utils.Absolute;
3233
import com.github._1c_syntax.utils.Lazy;
3334
import edu.umd.cs.findbugs.annotations.Nullable;
@@ -63,7 +64,7 @@ public class ServerContext {
6364
private final LanguageServerConfiguration languageServerConfiguration;
6465

6566
private final Map<URI, DocumentContext> documents = Collections.synchronizedMap(new HashMap<>());
66-
private final Lazy<Configuration> configurationMetadata = new Lazy<>(this::computeConfigurationMetadata);
67+
private final Lazy<CF> configurationMetadata = new Lazy<>(this::computeConfigurationMetadata);
6768
@Nullable
6869
@Setter
6970
private Path configurationRoot;
@@ -258,7 +259,7 @@ public void closeDocument(DocumentContext documentContext) {
258259
documentContext.clearSecondaryData();
259260
}
260261

261-
public Configuration getConfiguration() {
262+
public CF getConfiguration() {
262263
return configurationMetadata.getOrCompute();
263264
}
264265

@@ -273,9 +274,9 @@ private DocumentContext createDocumentContext(URI uri) {
273274
return documentContext;
274275
}
275276

276-
private Configuration computeConfigurationMetadata() {
277+
private CF computeConfigurationMetadata() {
277278
if (configurationRoot == null) {
278-
return Configuration.create();
279+
return (CF) MDClasses.createConfiguration();
279280
}
280281

281282
var progress = workDoneProgressHelper.createProgress(0, "");
@@ -284,15 +285,15 @@ private Configuration computeConfigurationMetadata() {
284285
var factory = new NamedForkJoinWorkerThreadFactory("compute-configuration-");
285286
var executorService = new ForkJoinPool(ForkJoinPool.getCommonPoolParallelism(), factory, null, true);
286287

287-
Configuration configuration;
288+
CF configuration;
288289
try {
289-
configuration = executorService.submit(() -> Configuration.create(configurationRoot)).get();
290+
configuration = (CF) executorService.submit(() -> MDClasses.createConfiguration(configurationRoot)).get();
290291
} catch (ExecutionException e) {
291292
LOGGER.error("Can't parse configuration metadata. Execution exception.", e);
292-
configuration = Configuration.create();
293+
configuration = (CF) MDClasses.createConfiguration();
293294
} catch (InterruptedException e) {
294295
LOGGER.error("Can't parse configuration metadata. Interrupted exception.", e);
295-
configuration = Configuration.create();
296+
configuration = (CF) MDClasses.createConfiguration();
296297
Thread.currentThread().interrupt();
297298
} finally {
298299
executorService.shutdown();

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323

2424
import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration;
2525
import com.github._1c_syntax.bsl.languageserver.utils.Ranges;
26-
import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase;
27-
import com.github._1c_syntax.mdclasses.mdo.MDCommonModule;
26+
import com.github._1c_syntax.bsl.mdo.CommonModule;
2827
import com.github._1c_syntax.utils.CaseInsensitivePattern;
2928

3029
import java.util.regex.Matcher;
@@ -49,57 +48,57 @@ protected void check() {
4948
}
5049

5150
documentContext.getMdObject()
52-
.filter(MDCommonModule.class::isInstance)
53-
.map(MDCommonModule.class::cast)
51+
.filter(CommonModule.class::isInstance)
52+
.map(CommonModule.class::cast)
5453
.filter(this::flagsCheck)
55-
.map(AbstractMDObjectBase::getName)
54+
.map(CommonModule::getName)
5655
.map(pattern::matcher)
5756
.filter(this::matchCheck)
5857
.ifPresent(commonModule -> diagnosticStorage.addDiagnostic(range));
5958
}
6059

61-
protected abstract boolean flagsCheck(MDCommonModule commonModule);
60+
protected abstract boolean flagsCheck(CommonModule commonModule);
6261

6362
protected boolean matchCheck(Matcher matcher) {
6463
return !matcher.find();
6564
}
6665

67-
protected boolean isClientServer(MDCommonModule commonModule) {
66+
protected boolean isClientServer(CommonModule commonModule) {
6867
return !commonModule.isServerCall()
6968
&& commonModule.isServer()
7069
&& commonModule.isExternalConnection()
7170
&& isClientApplication(commonModule);
7271
}
7372

74-
protected boolean isClient(MDCommonModule commonModule) {
73+
protected boolean isClient(CommonModule commonModule) {
7574
return !commonModule.isServerCall()
7675
&& !commonModule.isServer()
7776
&& !commonModule.isExternalConnection()
7877
&& isClientApplication(commonModule);
7978
}
8079

81-
protected boolean isServerCall(MDCommonModule commonModule) {
80+
protected boolean isServerCall(CommonModule commonModule) {
8281
return commonModule.isServerCall()
8382
&& commonModule.isServer()
8483
&& !commonModule.isExternalConnection()
8584
&& !commonModule.isClientOrdinaryApplication()
8685
&& !commonModule.isClientManagedApplication();
8786
}
8887

89-
protected boolean isServer(MDCommonModule commonModule) {
88+
protected boolean isServer(CommonModule commonModule) {
9089
return !commonModule.isServerCall()
9190
&& commonModule.isServer()
9291
&& commonModule.isExternalConnection()
9392
&& isClientOrdinaryAppIfNeed(commonModule)
9493
&& !commonModule.isClientManagedApplication();
9594
}
9695

97-
private boolean isClientApplication(MDCommonModule commonModule) {
96+
private boolean isClientApplication(CommonModule commonModule) {
9897
return isClientOrdinaryAppIfNeed(commonModule)
9998
&& commonModule.isClientManagedApplication();
10099
}
101100

102-
private boolean isClientOrdinaryAppIfNeed(MDCommonModule commonModule) {
101+
private boolean isClientOrdinaryAppIfNeed(CommonModule commonModule) {
103102
return commonModule.isClientOrdinaryApplication()
104103
|| !serverConfiguration.getDiagnosticsOptions().isOrdinaryAppSupport();
105104
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java

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

2424
import com.github._1c_syntax.bsl.languageserver.utils.Ranges;
25+
import com.github._1c_syntax.bsl.mdo.MD;
26+
import com.github._1c_syntax.bsl.mdo.ModuleOwner;
2527
import com.github._1c_syntax.bsl.types.MDOType;
2628
import com.github._1c_syntax.bsl.types.ModuleType;
27-
import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBSL;
28-
import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase;
2929
import org.eclipse.lsp4j.Range;
3030

3131
import java.util.ArrayList;
@@ -103,24 +103,25 @@ protected void addDiagnostic(String message) {
103103
diagnosticStorage.addDiagnostic(diagnosticRange, message);
104104
}
105105

106-
protected abstract void checkMetadata(AbstractMDObjectBase mdo);
106+
protected abstract void checkMetadata(MD mdo);
107107

108108
private void checkMetadataWithModules() {
109109
documentContext.getMdObject()
110110
.filter(mdo -> filterMdoTypes.contains(mdo.getMdoType()))
111-
.filter(AbstractMDObjectBSL.class::isInstance)
111+
.filter(ModuleOwner.class::isInstance)
112+
.map(ModuleOwner.class::cast)
112113
.filter(this::haveMatchingModule)
113114
.ifPresent(this::checkMetadata);
114115
}
115116

116-
private boolean haveMatchingModule(AbstractMDObjectBase mdo) {
117+
private boolean haveMatchingModule(ModuleOwner mdo) {
117118
// чтобы не анализировать несколько раз и не выдавать одинаковые результаты для разных модулей,
118119
// выберем только один модуль, например модуль менеджера
119-
if (documentContext.getModuleType() == ModuleType.ManagerModule){
120+
if (documentContext.getModuleType() == ModuleType.ManagerModule) {
120121
return true;
121122
}
122123

123-
return ((AbstractMDObjectBSL) mdo).getModules().stream()
124+
return mdo.getModules().stream()
124125
.filter(mdoModule -> OBJECT_MODULES.contains(mdoModule.getModuleType()))
125126
.count() == 1;
126127
}
@@ -135,8 +136,8 @@ private boolean haveMatchingModule(AbstractMDObjectBase mdo) {
135136
private void checkMetadataWithoutModules() {
136137
documentContext.getServerContext().getConfiguration().getChildren().stream()
137138
.filter(mdo -> filterMdoTypes.contains(mdo.getMdoType()))
138-
.filter(mdo -> !(mdo instanceof AbstractMDObjectBSL)
139-
|| (((AbstractMDObjectBSL) mdo).getModules().stream()
139+
.filter(mdo -> !(mdo instanceof ModuleOwner moduleOwner)
140+
|| (moduleOwner.getModules().stream()
140141
.noneMatch(module -> OBJECT_MODULES.contains(module.getModuleType()))))
141142
.forEach(this::checkMetadata);
142143
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag;
2929
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType;
3030
import com.github._1c_syntax.bsl.languageserver.utils.Keywords;
31+
import com.github._1c_syntax.bsl.mdo.CommonModule;
3132
import com.github._1c_syntax.bsl.mdo.support.ReturnValueReuse;
3233
import com.github._1c_syntax.bsl.types.ModuleType;
33-
import com.github._1c_syntax.mdclasses.mdo.MDCommonModule;
3434
import com.github._1c_syntax.utils.CaseInsensitivePattern;
3535

3636
import java.util.regex.Pattern;
@@ -68,18 +68,14 @@ protected void check() {
6868
.forEach(regionSymbol -> diagnosticStorage.addDiagnostic(regionSymbol.getRegionNameRange()));
6969
}
7070

71-
private boolean isCashed(DocumentContext documentContext) {
71+
private static boolean isCashed(DocumentContext documentContext) {
7272
return documentContext.getMdObject()
73-
.filter(MDCommonModule.class::isInstance)
74-
.map(MDCommonModule.class::cast)
75-
.map(MDCommonModule::getReturnValuesReuse)
76-
.filter(this::isReuseValue)
73+
.filter(CommonModule.class::isInstance)
74+
.map(CommonModule.class::cast)
75+
.map(CommonModule::getReturnValuesReuse)
76+
.filter(value -> value == ReturnValueReuse.DURING_REQUEST
77+
|| value == ReturnValueReuse.DURING_SESSION)
7778
.isPresent();
7879
}
7980

80-
private Boolean isReuseValue(ReturnValueReuse value) {
81-
return value == ReturnValueReuse.DURING_REQUEST
82-
|| value == ReturnValueReuse.DURING_SESSION;
83-
}
84-
8581
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@
2626
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag;
2727
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType;
2828
import com.github._1c_syntax.bsl.parser.BSLParser;
29-
import com.github._1c_syntax.mdclasses.Configuration;
3029
import org.antlr.v4.runtime.tree.ParseTree;
31-
import org.antlr.v4.runtime.tree.TerminalNode;
3230

3331
@DiagnosticMetadata(
3432
type = DiagnosticType.ERROR,
@@ -43,15 +41,14 @@ public class CommonModuleAssignDiagnostic extends AbstractVisitorDiagnostic {
4341
@Override
4442
public ParseTree visitLValue(BSLParser.LValueContext ctx) {
4543

46-
TerminalNode identifier = ctx.IDENTIFIER();
44+
var identifier = ctx.IDENTIFIER();
4745

48-
if (identifier == null
49-
|| ctx.acceptor() != null) {
46+
if (identifier == null || ctx.acceptor() != null) {
5047
return ctx;
5148
}
5249

53-
Configuration configuration = documentContext.getServerContext().getConfiguration();
54-
if (configuration.getCommonModule(identifier.getText()).isPresent()) {
50+
var configuration = documentContext.getServerContext().getConfiguration();
51+
if (configuration.findCommonModule(identifier.getText()).isPresent()) {
5552
diagnosticStorage.addDiagnostic(identifier, info.getMessage(identifier.getText()));
5653
}
5754

0 commit comments

Comments
 (0)