Skip to content

Commit e2144e7

Browse files
committed
Перетряхивание логики работы с состоянием документ-контекста
1 parent 2f64bc4 commit e2144e7

File tree

11 files changed

+116
-84
lines changed

11 files changed

+116
-84
lines changed

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,10 @@ public void handleEvent(ServerContextPopulatedEvent event) {
5353

5454
progress.tick();
5555

56-
var withContent = documentContext.isWithContent();
57-
if (!withContent) {
58-
documentContext.rebuild();
59-
}
56+
serverContext.rebuildDocument(documentContext);
6057
diagnosticProvider.computeAndPublishDiagnostics(documentContext);
61-
if (!withContent) {
62-
documentContext.clearSecondaryData();
63-
}
58+
59+
serverContext.tryClearDocument(documentContext);
6460

6561
});
6662

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,10 @@
9292
import org.eclipse.lsp4j.services.TextDocumentService;
9393
import org.springframework.stereotype.Component;
9494

95+
import java.net.URI;
9596
import java.util.Collections;
9697
import java.util.List;
97-
import java.util.Set;
9898
import java.util.concurrent.CompletableFuture;
99-
import java.util.concurrent.ConcurrentHashMap;
10099
import java.util.stream.Collectors;
101100

102101
@Component
@@ -120,8 +119,6 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte
120119
private final ColorProvider colorProvider;
121120
private final RenameProvider renameProvider;
122121

123-
private final Set<DocumentContext> openedDocuments = ConcurrentHashMap.newKeySet();
124-
125122
@Override
126123
public CompletableFuture<Hover> hover(HoverParams params) {
127124
var documentContext = context.getDocument(params.getTextDocument().getUri());
@@ -309,11 +306,14 @@ public CompletableFuture<List<ColorPresentation>> colorPresentation(ColorPresent
309306

310307
@Override
311308
public void didOpen(DidOpenTextDocumentParams params) {
312-
var documentContext = context.addDocument(params.getTextDocument());
309+
var textDocumentItem = params.getTextDocument();
310+
var documentContext = context.addDocument(URI.create(textDocumentItem.getUri()));
311+
312+
context.openDocument(documentContext, textDocumentItem.getText(), textDocumentItem.getVersion());
313+
313314
if (configuration.getDiagnosticsOptions().getComputeTrigger() != ComputeTrigger.NEVER) {
314315
validate(documentContext);
315316
}
316-
openedDocuments.add(documentContext);
317317
}
318318

319319
@Override
@@ -325,7 +325,11 @@ public void didChange(DidChangeTextDocumentParams params) {
325325
return;
326326
}
327327

328-
documentContext.rebuild(params.getContentChanges().get(0).getText(), params.getTextDocument().getVersion());
328+
context.rebuildDocument(
329+
documentContext,
330+
params.getContentChanges().get(0).getText(),
331+
params.getTextDocument().getVersion()
332+
);
329333

330334
if (configuration.getDiagnosticsOptions().getComputeTrigger() == ComputeTrigger.ONTYPE) {
331335
validate(documentContext);
@@ -338,9 +342,8 @@ public void didClose(DidCloseTextDocumentParams params) {
338342
if (documentContext == null) {
339343
return;
340344
}
341-
openedDocuments.remove(documentContext);
342345

343-
documentContext.clearSecondaryData();
346+
context.closeDocument(documentContext);
344347

345348
diagnosticProvider.publishEmptyDiagnosticList(documentContext);
346349
}

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
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.types.MdoReference;
3031
import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase;
3132
import com.github._1c_syntax.utils.Absolute;
3233
import lombok.RequiredArgsConstructor;
@@ -41,12 +42,10 @@
4142
import picocli.CommandLine.Command;
4243

4344
import java.io.File;
44-
import java.nio.charset.StandardCharsets;
4545
import java.nio.file.Path;
4646
import java.time.LocalDateTime;
4747
import java.util.ArrayList;
4848
import java.util.List;
49-
import java.util.Optional;
5049
import java.util.concurrent.Callable;
5150
import java.util.stream.Collectors;
5251

@@ -202,23 +201,21 @@ public String[] getReportersOptions() {
202201

203202
@SneakyThrows
204203
private FileInfo getFileInfoFromFile(Path srcDir, File file) {
205-
var textDocumentContent = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
206-
207-
var documentContext = context.addDocument(file.toURI(), textDocumentContent, 1);
204+
var documentContext = context.addDocument(file.toURI());
205+
context.rebuildDocument(documentContext);
208206

209207
var filePath = srcDir.relativize(Absolute.path(file));
210208
List<Diagnostic> diagnostics = documentContext.getDiagnostics();
211209
MetricStorage metrics = documentContext.getMetrics();
212-
var mdoRef = "";
213-
Optional<AbstractMDObjectBase> mdObjectBase = documentContext.getMdObject();
214-
if (mdObjectBase.isPresent()) {
215-
mdoRef = mdObjectBase.get().getMdoReference().getMdoRef();
216-
}
210+
var mdoRef = documentContext.getMdObject()
211+
.map(AbstractMDObjectBase::getMdoReference)
212+
.map(MdoReference::getMdoRef)
213+
.orElse("");
217214

218215
var fileInfo = new FileInfo(filePath, mdoRef, diagnostics, metrics);
219216

220217
// clean up AST after diagnostic computing to free up RAM.
221-
documentContext.clearSecondaryData();
218+
context.tryClearDocument(documentContext);
222219

223220
return fileInfo;
224221
}

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.springframework.stereotype.Component;
3838

3939
import java.io.File;
40-
import java.net.URI;
4140
import java.nio.charset.StandardCharsets;
4241
import java.nio.file.Path;
4342
import java.util.ArrayList;
@@ -147,13 +146,13 @@ private List<File> findFilesForFormatting(String[] filePaths) {
147146

148147
@SneakyThrows
149148
private void formatFile(File file) {
150-
String textDocumentContent = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
151-
final URI uri = file.toURI();
149+
var uri = file.toURI();
152150

153-
var documentContext = serverContext.addDocument(uri, textDocumentContent, 1);
151+
var documentContext = serverContext.addDocument(uri);
152+
serverContext.rebuildDocument(documentContext);
154153

155-
DocumentFormattingParams params = new DocumentFormattingParams();
156-
FormattingOptions options = new FormattingOptions();
154+
var params = new DocumentFormattingParams();
155+
var options = new FormattingOptions();
157156
options.setInsertSpaces(false);
158157

159158
params.setOptions(options);

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

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,6 @@ public class DocumentContext {
9393
@Getter
9494
private int version;
9595

96-
@Getter
97-
private boolean withContent;
98-
9996
@Setter(onMethod = @__({@Autowired}))
10097
private ServerContext context;
10198
@Setter(onMethod = @__({@Autowired}))
@@ -274,12 +271,12 @@ public void unfreezeComputedData() {
274271
isComputedDataFrozen = false;
275272
}
276273

277-
public void rebuild(String content, int version) {
274+
protected void rebuild(String content, int version) {
278275
computeLock.lock();
279276

280277
boolean versionMatches = version == this.version && version != 0;
281278

282-
if (versionMatches && withContent) {
279+
if (versionMatches && (this.content != null)) {
283280
clearDependantData();
284281
computeLock.unlock();
285282
return;
@@ -293,12 +290,11 @@ public void rebuild(String content, int version) {
293290
tokenizer = new BSLTokenizer(content);
294291
this.version = version;
295292
symbolTree = computeSymbolTree();
296-
withContent = true;
297293

298294
computeLock.unlock();
299295
}
300296

301-
public void rebuild() {
297+
protected void rebuild() {
302298
try {
303299
var newContent = FileUtils.readFileToString(new File(uri), StandardCharsets.UTF_8);
304300
rebuild(newContent, 0);
@@ -307,10 +303,9 @@ public void rebuild() {
307303
}
308304
}
309305

310-
public void clearSecondaryData() {
306+
protected void clearSecondaryData() {
311307
computeLock.lock();
312308

313-
withContent = false;
314309
content = null;
315310
contentList.clear();
316311
tokenizer = null;

0 commit comments

Comments
 (0)