private void onServerInitialized( LanguageServerLauncher launcher, LanguageServer server, ServerCapabilities capabilities, String projectPath) { LanguageServerDescription description = launcher.getDescription(); FileSystem fileSystem = FileSystems.getDefault(); for (String pattern : description.getFileWatchPatterns()) { PathMatcher matcher = fileSystem.getPathMatcher(pattern); int watcherId = watcherManager.registerByMatcher( matcher, s -> send(server, s, FileChangeType.Created), s -> send(server, s, FileChangeType.Changed), s -> send(server, s, FileChangeType.Deleted)); watcherIds.add(watcherId); } }
private CHANGE_TYPE toChangeType(FileChangeType vtype){ switch (vtype) { case Created: return CHANGE_TYPE.CREATED; case Changed: return CHANGE_TYPE.CHANGED; case Deleted: return CHANGE_TYPE.DELETED; default: throw new UnsupportedOperationException(); } }
@Test public void testOpenedDocumentShadowsPersistedFile() { StringConcatenation _builder = new StringConcatenation(); _builder.append("type Test {"); _builder.newLine(); _builder.append(" "); _builder.append("NonExisting foo"); _builder.newLine(); _builder.append("}"); _builder.newLine(); final String firstFile = this.writeFile("MyType1.testlang", _builder); this.initialize(); this.assertEquals("Couldn\'t resolve reference to TypeDeclaration \'NonExisting\'.", IterableExtensions.<Diagnostic>head(this.getDiagnostics().get(firstFile)).getMessage()); StringConcatenation _builder_1 = new StringConcatenation(); _builder_1.append("type Foo {"); _builder_1.newLine(); _builder_1.append("}"); _builder_1.newLine(); final String path = this.writeFile("MyType2.testlang", _builder_1); WorkspaceService _workspaceService = this.languageServer.getWorkspaceService(); FileEvent _fileEvent = new FileEvent(path, FileChangeType.Created); DidChangeWatchedFilesParams _didChangeWatchedFilesParams = new DidChangeWatchedFilesParams( Collections.<FileEvent>unmodifiableList(CollectionLiterals.<FileEvent>newArrayList(_fileEvent))); _workspaceService.didChangeWatchedFiles(_didChangeWatchedFilesParams); this.assertEquals("Couldn\'t resolve reference to TypeDeclaration \'NonExisting\'.", IterableExtensions.<Diagnostic>head(this.getDiagnostics().get(firstFile)).getMessage()); StringConcatenation _builder_2 = new StringConcatenation(); _builder_2.append("type NonExisting {"); _builder_2.newLine(); _builder_2.append("}"); _builder_2.newLine(); this.open(path, _builder_2.toString()); Assert.assertNull(IterableExtensions.<Diagnostic>head(this.getDiagnostics().get(firstFile))); this.close(path); this.assertEquals("Couldn\'t resolve reference to TypeDeclaration \'NonExisting\'.", IterableExtensions.<Diagnostic>head(this.getDiagnostics().get(firstFile)).getMessage()); }
@Test public void testIncrementalBuildWithError() { StringConcatenation _builder = new StringConcatenation(); _builder.append("type Test {"); _builder.newLine(); _builder.append(" "); _builder.append("NonExisting foo"); _builder.newLine(); _builder.append("}"); _builder.newLine(); this.writeFile("MyType1.testlang", _builder); this.initialize(); this.assertEquals("Couldn\'t resolve reference to TypeDeclaration \'NonExisting\'.", IterableExtensions.<Diagnostic>head(IterableExtensions.<List<Diagnostic>>head(this.getDiagnostics().values())).getMessage()); StringConcatenation _builder_1 = new StringConcatenation(); _builder_1.append("type NonExisting {"); _builder_1.newLine(); _builder_1.append("}"); _builder_1.newLine(); final String path = this.writeFile("MyType2.testlang", _builder_1); WorkspaceService _workspaceService = this.languageServer.getWorkspaceService(); FileEvent _fileEvent = new FileEvent(path, FileChangeType.Created); DidChangeWatchedFilesParams _didChangeWatchedFilesParams = new DidChangeWatchedFilesParams(Collections.<FileEvent>unmodifiableList(CollectionLiterals.<FileEvent>newArrayList(_fileEvent))); _workspaceService.didChangeWatchedFiles(_didChangeWatchedFilesParams); Assert.assertNotNull(this.getDiagnostics().get(path)); final Function1<List<Diagnostic>, Boolean> _function = (List<Diagnostic> it) -> { return Boolean.valueOf(it.isEmpty()); }; Assert.assertTrue(IterableExtensions.join(this.getDiagnostics().values(), ","), IterableExtensions.<List<Diagnostic>>forall(this.getDiagnostics().values(), _function)); }
@Override public void didChangeWatchedFiles(final DidChangeWatchedFilesParams params) { final Function0<BuildManager.Buildable> _function = () -> { BuildManager.Buildable _xblockexpression = null; { final ArrayList<URI> dirtyFiles = CollectionLiterals.<URI>newArrayList(); final ArrayList<URI> deletedFiles = CollectionLiterals.<URI>newArrayList(); List<FileEvent> _changes = params.getChanges(); for (final FileEvent fileEvent : _changes) { FileChangeType _type = fileEvent.getType(); boolean _tripleEquals = (_type == FileChangeType.Deleted); if (_tripleEquals) { URI _uri = this._uriExtensions.toUri(fileEvent.getUri()); deletedFiles.add(_uri); } else { URI _uri_1 = this._uriExtensions.toUri(fileEvent.getUri()); dirtyFiles.add(_uri_1); } } _xblockexpression = this.workspaceManager.didChangeFiles(dirtyFiles, deletedFiles); } return _xblockexpression; }; final Function2<CancelIndicator, BuildManager.Buildable, List<IResourceDescription.Delta>> _function_1 = (CancelIndicator cancelIndicator, BuildManager.Buildable buildable) -> { return buildable.build(cancelIndicator); }; this.requestManager.<BuildManager.Buildable, List<IResourceDescription.Delta>>runWrite(_function, _function_1); }
public FileEvent(@NonNull final String uri, @NonNull final FileChangeType type) { this.uri = uri; this.type = type; }
/** * The change type. */ @Pure @NonNull public FileChangeType getType() { return this.type; }
/** * The change type. */ public void setType(@NonNull final FileChangeType type) { this.type = type; }
private void send(LanguageServer server, String filePath, FileChangeType changeType) { DidChangeWatchedFilesParams params = new DidChangeWatchedFilesParams( Collections.singletonList(new FileEvent(prefixURI(filePath), changeType))); server.getWorkspaceService().didChangeWatchedFiles(params); }