protected void doTest(final String fileName, final Position position) { try { TextDocumentIdentifier _textDocumentIdentifier = new TextDocumentIdentifier(fileName); final RenameParams params = new RenameParams(_textDocumentIdentifier, position, "Tescht"); final WorkspaceEdit workspaceEdit = this.languageServer.rename(params).get(); StringConcatenation _builder = new StringConcatenation(); _builder.append("changes :"); _builder.newLine(); _builder.append("\t"); _builder.append("MyType1.testlang : Tescht [[0, 5] .. [0, 9]]"); _builder.newLine(); _builder.append("\t"); _builder.append("Tescht [[1, 4] .. [1, 8]]"); _builder.newLine(); _builder.append("\t"); _builder.append("MyType2.testlang : Tescht [[1, 4] .. [1, 8]]"); _builder.newLine(); _builder.append("documentChanges : "); _builder.newLine(); this.assertEquals(_builder.toString(), this.toExpectation(workspaceEdit)); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } }
@Override public CompletableFuture<WorkspaceEdit> rename(final RenameParams params) { final Function1<CancelIndicator, WorkspaceEdit> _function = (CancelIndicator cancelIndicator) -> { WorkspaceEdit _xblockexpression = null; { final URI uri = this._uriExtensions.toUri(params.getTextDocument().getUri()); final IResourceServiceProvider resourceServiceProvider = this.languagesRegistry.getResourceServiceProvider(uri); IRenameService _get = null; if (resourceServiceProvider!=null) { _get=resourceServiceProvider.<IRenameService>get(IRenameService.class); } final IRenameService renameService = _get; if ((renameService == null)) { return new WorkspaceEdit(); } _xblockexpression = renameService.rename(this.workspaceManager, params, cancelIndicator); } return _xblockexpression; }; return this.requestManager.<WorkspaceEdit>runRead(_function); }
private void callRename(String newName, TextPosition cursorPosition, TextEditor editor) { RenameParams dto = dtoFactory.createDto(RenameParams.class); TextDocumentIdentifier identifier = dtoFactory.createDto(TextDocumentIdentifier.class); identifier.setUri(editor.getEditorInput().getFile().getLocation().toString()); dto.setNewName(newName); dto.setTextDocument(identifier); org.eclipse.lsp4j.Position position = dtoFactory.createDto(org.eclipse.lsp4j.Position.class); position.setCharacter(cursorPosition.getCharacter()); position.setLine(cursorPosition.getLine()); dto.setPosition(position); client .rename(dto) .then(this::handleRename) .catchError( arg -> { LOG.error(arg.getMessage()); }); }
public WorkspaceEdit rename(RenameParams params, IProgressMonitor monitor) { WorkspaceEdit edit = new WorkspaceEdit(); if (!preferenceManager.getPreferences().isRenameEnabled()) { return edit; } try { final ICompilationUnit unit = JDTUtils.resolveCompilationUnit(params.getTextDocument().getUri()); IJavaElement[] elements = JDTUtils.findElementsAtSelection(unit, params.getPosition().getLine(), params.getPosition().getCharacter(), this.preferenceManager, monitor); if (elements == null || elements.length == 0) { return edit; } IJavaElement curr = null; if (elements.length != 1) { // they could be package fragments. // We need to select the one that matches the package fragment of the current unit IPackageFragment packageFragment = (IPackageFragment) unit.getParent(); IJavaElement found = Stream.of(elements).filter(e -> e.equals(packageFragment)).findFirst().orElse(null); if (found == null) { // this would be a binary package fragment curr = elements[0]; } else { curr = found; } } else { curr = elements[0]; } RenameProcessor processor = createRenameProcessor(curr); processor.renameOccurrences(edit, params.getNewName(), monitor); } catch (CoreException ex) { JavaLanguageServerPlugin.logException("Problem with rename for " + params.getTextDocument().getUri(), ex); } return edit; }
@Test public void testRenameSelfRef() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("package foo"); _builder.newLine(); _builder.newLine(); _builder.append("element Foo {"); _builder.newLine(); _builder.append(" "); _builder.append("ref Foo"); _builder.newLine(); _builder.append("}"); _builder.newLine(); final String model = _builder.toString(); final String file = this.writeFile("foo/Foo.fileawaretestlanguage", model); this.initialize(); TextDocumentIdentifier _textDocumentIdentifier = new TextDocumentIdentifier(file); Position _position = new Position(2, 9); final RenameParams params = new RenameParams(_textDocumentIdentifier, _position, "Bar"); final WorkspaceEdit workspaceEdit = this.languageServer.rename(params).get(); StringConcatenation _builder_1 = new StringConcatenation(); _builder_1.append("changes :"); _builder_1.newLine(); _builder_1.append(" "); _builder_1.append("Foo.fileawaretestlanguage : Bar [[2, 8] .. [2, 11]]"); _builder_1.newLine(); _builder_1.append(" "); _builder_1.append("Bar [[3, 5] .. [3, 8]]"); _builder_1.newLine(); _builder_1.append("documentChanges : "); _builder_1.newLine(); this.assertEquals(_builder_1.toString(), this.toExpectation(workspaceEdit)); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } }
@Override public WorkspaceEdit rename(final WorkspaceManager workspaceManager, final RenameParams renameParams, final CancelIndicator cancelIndicator) { WorkspaceEdit _xblockexpression = null; { final URI uri = this._uriExtensions.toUri(renameParams.getTextDocument().getUri()); final ServerRefactoringIssueAcceptor issueAcceptor = this.issueProvider.get(); final Function2<Document, XtextResource, WorkspaceEdit> _function = (Document document, XtextResource resource) -> { final ProjectManager projectManager = workspaceManager.getProjectManager(uri); final XtextResourceSet resourceSet = projectManager.createNewResourceSet(projectManager.getIndexState().getResourceDescriptions()); resourceSet.getLoadOptions().put(ResourceDescriptionsProvider.LIVE_SCOPE, Boolean.valueOf(true)); final int offset = document.getOffSet(renameParams.getPosition()); final WorkspaceEdit workspaceEdit = new WorkspaceEdit(); final Resource xtextResource = resourceSet.getResource(resource.getURI(), true); if ((xtextResource instanceof XtextResource)) { final EObject element = this._eObjectAtOffsetHelper.resolveElementAt(((XtextResource)xtextResource), offset); if (((element == null) || element.eIsProxy())) { StringConcatenation _builder = new StringConcatenation(); _builder.append("No element found at position line:"); int _line = renameParams.getPosition().getLine(); _builder.append(_line); _builder.append(" column:"); int _character = renameParams.getPosition().getCharacter(); _builder.append(_character); issueAcceptor.add(RefactoringIssueAcceptor.Severity.FATAL, _builder.toString()); } else { String _newName = renameParams.getNewName(); URI _uRI = EcoreUtil.getURI(element); final RenameChange change = new RenameChange(_newName, _uRI); final IChangeSerializer changeSerializer = this.changeSerializerProvider.get(); final RenameContext context = new RenameContext(Collections.<RenameChange>unmodifiableList(CollectionLiterals.<RenameChange>newArrayList(change)), resourceSet, changeSerializer, issueAcceptor); this.renameStrategy.applyRename(context); final ChangeConverter changeConverter = this.converterFactory.create(workspaceManager, workspaceEdit); changeSerializer.applyModifications(changeConverter); } } else { issueAcceptor.add(RefactoringIssueAcceptor.Severity.FATAL, "Loaded resource is not an XtextResource", resource.getURI()); } return workspaceEdit; }; _xblockexpression = workspaceManager.<WorkspaceEdit>doRead(uri, _function); } return _xblockexpression; }
@Override public CompletableFuture<WorkspaceEdit> rename(RenameParams params) { LOGGER.info("rename: " + params.getTextDocument()); return CompletableFuture.completedFuture(null); }
@Override public CompletableFuture<WorkspaceEdit> rename(final RenameParams params) { // TODO Auto-generated method stub return null; }
@Override public CompletableFuture<WorkspaceEdit> rename(RenameParams params) { logInfo(">> document/rename"); RenameHandler handler = new RenameHandler(preferenceManager); return computeAsync((cc) -> handler.rename(params, toMonitor(cc))); }
private WorkspaceEdit getRenameEdit(ICompilationUnit cu, Position pos, String newName) { TextDocumentIdentifier identifier = new TextDocumentIdentifier(JDTUtils.toURI(cu)); RenameParams params = new RenameParams(identifier, pos, newName); return handler.rename(params, monitor); }
@Test public void testRenameContainer() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("package foo"); _builder.newLine(); _builder.newLine(); _builder.append("element Foo {"); _builder.newLine(); _builder.append(" "); _builder.append("element Bar {"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("ref foo.Foo.Bar"); _builder.newLine(); _builder.append(" "); _builder.append("ref Foo.Bar"); _builder.newLine(); _builder.append(" "); _builder.append("ref Bar"); _builder.newLine(); _builder.append("}"); _builder.newLine(); final String model = _builder.toString(); final String file = this.writeFile("foo/Foo.fileawaretestlanguage", model); this.initialize(); TextDocumentIdentifier _textDocumentIdentifier = new TextDocumentIdentifier(file); Position _position = new Position(2, 9); final RenameParams params = new RenameParams(_textDocumentIdentifier, _position, "Baz"); final WorkspaceEdit workspaceEdit = this.languageServer.rename(params).get(); StringConcatenation _builder_1 = new StringConcatenation(); _builder_1.append("changes :"); _builder_1.newLine(); _builder_1.append(" "); _builder_1.append("Foo.fileawaretestlanguage : Baz [[2, 8] .. [2, 11]]"); _builder_1.newLine(); _builder_1.append(" "); _builder_1.append("Bar [[5, 5] .. [5, 16]]"); _builder_1.newLine(); _builder_1.append(" "); _builder_1.append("Bar [[6, 5] .. [6, 12]]"); _builder_1.newLine(); _builder_1.append("documentChanges : "); _builder_1.newLine(); this.assertEquals(_builder_1.toString(), this.toExpectation(workspaceEdit)); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } }
@Override public CompletableFuture<WorkspaceEdit> rename(RenameParams params) { throw new UnsupportedOperationException(); }
@Override public CompletableFuture<WorkspaceEdit> rename(RenameParams params) { return null; }
@PostConstruct public void configureMethods() { dtoToDtoList( "definition", TextDocumentPositionParams.class, LocationDto.class, this::definition); dtoToDtoList("codeAction", CodeActionParams.class, CommandDto.class, this::codeAction); dtoToDtoList( "documentSymbol", DocumentSymbolParams.class, SymbolInformationDto.class, this::documentSymbol); dtoToDtoList("formatting", DocumentFormattingParams.class, TextEditDto.class, this::formatting); dtoToDtoList( "rangeFormatting", DocumentRangeFormattingParams.class, TextEditDto.class, this::rangeFormatting); dtoToDtoList("references", ReferenceParams.class, LocationDto.class, this::references); dtoToDtoList( "onTypeFormatting", DocumentOnTypeFormattingParams.class, TextEditDto.class, this::onTypeFormatting); dtoToDto( "completionItem/resolve", ExtendedCompletionItem.class, ExtendedCompletionItemDto.class, this::completionItemResolve); dtoToDto( "documentHighlight", TextDocumentPositionParams.class, DocumentHighlight.class, this::documentHighlight); dtoToDto( "completion", TextDocumentPositionParams.class, ExtendedCompletionListDto.class, this::completion); dtoToDto("hover", TextDocumentPositionParams.class, HoverDto.class, this::hover); dtoToDto( "signatureHelp", TextDocumentPositionParams.class, SignatureHelpDto.class, this::signatureHelp); dtoToDto("rename", RenameParams.class, RenameResultDto.class, this::rename); dtoToNothing("didChange", DidChangeTextDocumentParams.class, this::didChange); dtoToNothing("didClose", DidCloseTextDocumentParams.class, this::didClose); dtoToNothing("didOpen", DidOpenTextDocumentParams.class, this::didOpen); dtoToNothing("didSave", DidSaveTextDocumentParams.class, this::didSave); }
/** * The rename request is sent from the client to the server to do a * workspace wide rename of a symbol. * * Registration Options: TextDocumentRegistrationOptions */ @JsonRequest CompletableFuture<WorkspaceEdit> rename(RenameParams params);
/** * GWT client implementation of {@link TextDocumentService#rename(RenameParams)} * * @param params * @return a {@link Promise} of a rename result object which contains all workspace edits. */ public Promise<RenameResult> rename(RenameParams params) { return transmitDtoAndReceiveDto(params, "textDocument/rename", RenameResult.class); }
public abstract WorkspaceEdit rename(final WorkspaceManager workspaceManager, final RenameParams renameParams, final CancelIndicator cancelIndicator);