public void organizeImportsInCompilationUnit(ICompilationUnit unit, WorkspaceEdit rootEdit) { try { InnovationContext context = new InnovationContext(unit, 0, unit.getBuffer().getLength() - 1); CUCorrectionProposal proposal = new CUCorrectionProposal("OrganizeImports", unit, IProposalRelevance.ORGANIZE_IMPORTS) { @Override protected void addEdits(IDocument document, TextEdit editRoot) throws CoreException { CompilationUnit astRoot = context.getASTRoot(); OrganizeImportsOperation op = new OrganizeImportsOperation(unit, astRoot, true, false, true, null); editRoot.addChild(op.createTextEdit(null)); } }; addWorkspaceEdit(unit, proposal, rootEdit); } catch (CoreException e) { JavaLanguageServerPlugin.logException("Problem organize imports ", e); } }
@Test public void testOrganizeImportsUnused() throws CoreException, BadLocationException { IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null); StringBuilder buf = new StringBuilder(); buf.append("package test1;\n"); buf.append("\n"); buf.append("import java.util.ArrayList;\n"); buf.append("\n"); buf.append("public class E {\n"); buf.append("}\n"); ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null); buf = new StringBuilder(); buf.append("package test1;\n"); buf.append("\n"); buf.append("public class E {\n"); buf.append("}\n"); WorkspaceEdit rootEdit = new WorkspaceEdit(); command.organizeImportsInCompilationUnit(cu, rootEdit); assertEquals(getOrganizeImportResult(cu, rootEdit), buf.toString()); }
@Test public void testRenameSystemLibrary() throws JavaModelException { IPackageFragment pack1 = sourceFolder.createPackageFragment("test1", false, null); String[] codes = { "package test1;\n", "public class E {\n", " public int bar() {\n", " String str = new String();\n", " str.len|*gth();\n", " }\n", "}\n" }; StringBuilder builder = new StringBuilder(); Position pos = mergeCode(builder, codes); ICompilationUnit cu = pack1.createCompilationUnit("E.java", builder.toString(), false, null); WorkspaceEdit edit = getRenameEdit(cu, pos, "newname"); assertNotNull(edit); assertEquals(edit.getChanges().size(), 0); }
private String evaluateCodeActionCommand(Command c) throws BadLocationException, JavaModelException { Assert.assertEquals(CodeActionHandler.COMMAND_ID_APPLY_EDIT, c.getCommand()); Assert.assertNotNull(c.getArguments()); Assert.assertTrue(c.getArguments().get(0) instanceof WorkspaceEdit); WorkspaceEdit we = (WorkspaceEdit) c.getArguments().get(0); Iterator<Entry<String, List<TextEdit>>> editEntries = we.getChanges().entrySet().iterator(); Entry<String, List<TextEdit>> entry = editEntries.next(); assertNotNull("No edits generated", entry); assertEquals("More than one resource modified", false, editEntries.hasNext()); ICompilationUnit cu = JDTUtils.resolveCompilationUnit(entry.getKey()); assertNotNull("CU not found: " + entry.getKey(), cu); Document doc = new Document(); doc.set(cu.getSource()); return TextEditUtil.apply(doc, entry.getValue()); }
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); } }
protected String _toExpectation(final WorkspaceEdit it) { StringConcatenation _builder = new StringConcatenation(); _builder.append("changes :"); _builder.newLine(); { Set<Map.Entry<String, List<TextEdit>>> _entrySet = it.getChanges().entrySet(); for(final Map.Entry<String, List<TextEdit>> entry : _entrySet) { _builder.append("\t"); String _lastSegment = org.eclipse.emf.common.util.URI.createURI(entry.getKey()).lastSegment(); _builder.append(_lastSegment, "\t"); _builder.append(" : "); String _expectation = this.toExpectation(entry.getValue()); _builder.append(_expectation, "\t"); _builder.newLineIfNotEmpty(); } } _builder.append("documentChanges : "); _builder.newLine(); _builder.append("\t"); String _expectation_1 = this.toExpectation(it.getDocumentChanges()); _builder.append(_expectation_1, "\t"); _builder.newLineIfNotEmpty(); return _builder.toString(); }
@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); }
@Test public void testMapConversion() { Map<String, List<TextEdit>> changes = Collections.singletonMap( "anURL", Arrays.asList( new TextEdit(new Range(new Position(0, 1), new Position(3, 4)), "blabla"))); WorkspaceEdit edit = new WorkspaceEdit(); edit.setChanges(changes); WorkspaceEditDto originalDto = new WorkspaceEditDto(edit); Assert.assertTrue(reflectionEquals(originalDto, edit)); String jsonString = originalDto.toJson(); WorkspaceEditDto convertedDto = WorkspaceEditDto.fromJson(jsonString); Assert.assertTrue(reflectionEquals(originalDto, convertedDto)); }
/** * Organize imports when select a project. * * @param proj * the target project * @return */ public WorkspaceEdit organizeImportsInProject(IProject proj) { WorkspaceEdit rootEdit = new WorkspaceEdit(); HashSet<IJavaElement> result = new HashSet<>(); collectCompilationUnits(JavaCore.create(proj), result, null); for (IJavaElement elem : result) { if (elem.getElementType() == IJavaElement.COMPILATION_UNIT) { organizeImportsInCompilationUnit((ICompilationUnit) elem, rootEdit); } } return rootEdit; }
/** * Organize imports underlying a directory * * @param folderUri * Selected folder URI * @param proj * the folder associated project * @return * @throws CoreException */ public WorkspaceEdit organizeImportsInDirectory(String folderUri, IProject proj) throws CoreException { WorkspaceEdit rootEdit = new WorkspaceEdit(); IPackageFragment fragment = null; if (JDTUtils.toURI(folderUri) != null) { fragment = JDTUtils.resolvePackage(folderUri); } // Select an individual package if (fragment != null) { organizeImportsInPackageFragment(fragment, rootEdit); } else if (proj != null) { // Search the packages under the selected folder: IJavaProject javaProject = JavaCore.create(proj); IPath rootPath = ResourceUtils.filePathFromURI(folderUri); IPackageFragmentRoot[] roots = javaProject.getPackageFragmentRoots(); HashSet<IJavaElement> result = new HashSet<>(); for (IPackageFragmentRoot root : roots) { if (root.getKind() == IPackageFragmentRoot.K_SOURCE) { String packageRoot = root.getResource().getLocation().toString(); if (packageRoot.toLowerCase().indexOf(rootPath.toString().toLowerCase()) >= 0) { collectCompilationUnits(javaProject, result, null); } } } for (IJavaElement elem : result) { if (elem.getElementType() == IJavaElement.COMPILATION_UNIT) { organizeImportsInCompilationUnit((ICompilationUnit) elem, rootEdit); } } } return rootEdit; }
public WorkspaceEdit organizeImportsInFile(String fileUri) { WorkspaceEdit rootEdit = new WorkspaceEdit(); ICompilationUnit unit = null; if (JDTUtils.toURI(fileUri) != null) { unit = JDTUtils.resolveCompilationUnit(fileUri); } if (unit == null) { return rootEdit; } organizeImportsInCompilationUnit(unit, rootEdit); return rootEdit; }
public void organizeImportsInPackageFragment(IPackageFragment fragment, WorkspaceEdit rootEdit) throws CoreException { HashSet<IJavaElement> result = new HashSet<>(); collectCompilationUnits(fragment.getParent(), result, fragment.getElementName()); for (IJavaElement elem : result) { if (elem.getElementType() == IJavaElement.COMPILATION_UNIT) { organizeImportsInCompilationUnit((ICompilationUnit) elem, rootEdit); } } }
@Override public void renameOccurrences(WorkspaceEdit edit, String newName, IProgressMonitor monitor) throws CoreException { super.renameOccurrences(edit, newName, monitor); IType t = (IType) fElement; IMethod[] methods = t.getMethods(); for (IMethod method : methods) { if (method.isConstructor()) { TextEdit replaceEdit = new ReplaceEdit(method.getNameRange().getOffset(), method.getNameRange().getLength(), newName); convert(edit, t.getCompilationUnit(), replaceEdit); } } }
public void renameOccurrences(WorkspaceEdit edit, String newName, IProgressMonitor monitor) throws CoreException { if (fElement == null || !canRename()) { return; } IJavaElement[] elementsToSearch = null; if (fElement instanceof IMethod) { elementsToSearch = RippleMethodFinder.getRelatedMethods((IMethod) fElement, monitor, null); } else { elementsToSearch = new IJavaElement[] { fElement }; } SearchPattern pattern = createOccurrenceSearchPattern(elementsToSearch); if (pattern == null) { return; } SearchEngine engine = new SearchEngine(); engine.search(pattern, new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, createSearchScope(), new SearchRequestor() { @Override public void acceptSearchMatch(SearchMatch match) throws CoreException { Object o = match.getElement(); if (o instanceof IJavaElement) { IJavaElement element = (IJavaElement) o; ICompilationUnit compilationUnit = (ICompilationUnit) element.getAncestor(IJavaElement.COMPILATION_UNIT); if (compilationUnit == null) { return; } TextEdit replaceEdit = collectMatch(match, element, compilationUnit, newName); if (replaceEdit != null) { convert(edit, compilationUnit, replaceEdit); } } } }, monitor); }
protected void convert(WorkspaceEdit root, ICompilationUnit unit, TextEdit edits) { TextEditConverter converter = new TextEditConverter(unit, edits); String uri = JDTUtils.toURI(unit); Map<String, List<org.eclipse.lsp4j.TextEdit>> changes = root.getChanges(); if (changes.containsKey(uri)) { changes.get(uri).addAll(converter.convert()); } else { changes.put(uri, converter.convert()); } }
private List<TextEdit> handleSaveActionOrganizeImports(String documentUri, IProgressMonitor monitor) { String uri = ResourceUtils.fixURI(JDTUtils.toURI(documentUri)); if (monitor.isCanceled()) { return Collections.emptyList(); } WorkspaceEdit organizedResult = organizeImportsCommand.organizeImportsInFile(uri); List<TextEdit> edit = organizedResult.getChanges().get(uri); edit = edit == null ? Collections.emptyList() : edit; return edit; }
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; }
private static Command textEditToCommand(ICompilationUnit unit, String label, TextEdit textEdit) { TextEditConverter converter = new TextEditConverter(unit, textEdit); String uri = JDTUtils.toURI(unit); WorkspaceEdit $ = new WorkspaceEdit(); $.getChanges().put(uri, converter.convert()); return new Command(label, COMMAND_ID_APPLY_EDIT, Arrays.asList($)); }
@Test public void testOrganizeImportsSort() throws CoreException, BadLocationException { IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null); StringBuilder buf = new StringBuilder(); buf.append("package test1;\n"); buf.append("\n"); buf.append("import java.util.HashMap;\n"); buf.append("import java.util.ArrayList;\n"); buf.append("\n"); buf.append("public class E {\n"); buf.append("\n"); buf.append(" public E() {\n"); buf.append(" ArrayList list = new ArrayList();\n"); buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n"); buf.append(" }\n"); buf.append("}\n"); ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null); buf = new StringBuilder(); buf.append("package test1;\n"); buf.append("\n"); buf.append("import java.util.ArrayList;\n"); buf.append("import java.util.HashMap;\n"); buf.append("\n"); buf.append("public class E {\n"); buf.append("\n"); buf.append(" public E() {\n"); buf.append(" ArrayList list = new ArrayList();\n"); buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n"); buf.append(" }\n"); buf.append("}\n"); WorkspaceEdit rootEdit = new WorkspaceEdit(); command.organizeImportsInCompilationUnit(cu, rootEdit); assertEquals(getOrganizeImportResult(cu, rootEdit), buf.toString()); }
@Test public void testOrganizeImportsAutomaticallyResolve() throws CoreException, BadLocationException { IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null); StringBuilder buf = new StringBuilder(); buf.append("package test1;\n"); buf.append("\n"); buf.append("import java.util.ArrayList;\n"); buf.append("\n"); buf.append("public class E {\n"); buf.append("\n"); buf.append(" public E() {\n"); buf.append(" ArrayList list = new ArrayList();\n"); buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n"); buf.append(" }\n"); buf.append("}\n"); ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null); buf = new StringBuilder(); buf.append("package test1;\n"); buf.append("\n"); buf.append("import java.util.ArrayList;\n"); buf.append("import java.util.HashMap;\n"); buf.append("\n"); buf.append("public class E {\n"); buf.append("\n"); buf.append(" public E() {\n"); buf.append(" ArrayList list = new ArrayList();\n"); buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n"); buf.append(" }\n"); buf.append("}\n"); WorkspaceEdit rootEdit = new WorkspaceEdit(); command.organizeImportsInCompilationUnit(cu, rootEdit); assertEquals(getOrganizeImportResult(cu, rootEdit), buf.toString()); }
private String getOrganizeImportResult(ICompilationUnit cu, WorkspaceEdit we) throws BadLocationException, CoreException { List<TextEdit> change = we.getChanges().get(JDTUtils.getFileURI(cu)); Document doc = new Document(); doc.set(cu.getSource()); return TextEditUtil.apply(doc, change); }
@Test @Ignore public void testCodeAction_superfluousSemicolon() throws Exception{ ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " void foo() {\n"+ ";" + " }\n"+ "}\n"); CodeActionParams params = new CodeActionParams(); params.setTextDocument(new TextDocumentIdentifier(JDTUtils.toURI(unit))); final Range range = getRange(unit, ";"); params.setRange(range); params.setContext(new CodeActionContext(Arrays.asList(getDiagnostic(Integer.toString(IProblem.SuperfluousSemicolon), range)))); List<? extends Command> commands = server.codeAction(params).join(); Assert.assertNotNull(commands); Assert.assertEquals(1, commands.size()); Command c = commands.get(0); Assert.assertEquals(CodeActionHandler.COMMAND_ID_APPLY_EDIT, c.getCommand()); Assert.assertNotNull(c.getArguments()); Assert.assertTrue(c.getArguments().get(0) instanceof WorkspaceEdit); WorkspaceEdit we = (WorkspaceEdit) c.getArguments().get(0); List<org.eclipse.lsp4j.TextEdit> edits = we.getChanges().get(JDTUtils.toURI(unit)); Assert.assertEquals(1, edits.size()); Assert.assertEquals("", edits.get(0).getNewText()); Assert.assertEquals(range, edits.get(0).getRange()); }
@Test public void testRenameParameter() throws JavaModelException, BadLocationException { IPackageFragment pack1 = sourceFolder.createPackageFragment("test1", false, null); String[] codes = { "package test1;\n", "public class E {\n", " public int foo(String str) {\n", " str|*.length();\n", " }\n", " public int bar(String str) {\n", " str.length();\n", " }\n", "}\n" }; StringBuilder builder = new StringBuilder(); Position pos = mergeCode(builder, codes); ICompilationUnit cu = pack1.createCompilationUnit("E.java", builder.toString(), false, null); WorkspaceEdit edit = getRenameEdit(cu, pos, "newname"); assertNotNull(edit); assertEquals(edit.getChanges().size(), 1); assertEquals(TextEditUtil.apply(builder.toString(), edit.getChanges().get(JDTUtils.toURI(cu))), "package test1;\n" + "public class E {\n" + " public int foo(String newname) {\n" + " newname.length();\n" + " }\n" + " public int bar(String str) {\n" + " str.length();\n" + " }\n" + "}\n"); }
@Test public void testRenameLocalVariable() throws JavaModelException, BadLocationException { IPackageFragment pack1 = sourceFolder.createPackageFragment("test1", false, null); String[] codes = { "package test1;\n", "public class E {\n", " public int bar() {\n", " String str = new String();\n", " str.length();\n", " }\n", " public int foo() {\n", " String str = new String();\n", " str|*.length()\n", " }\n", "}\n" }; StringBuilder builder = new StringBuilder(); Position pos = mergeCode(builder, codes); ICompilationUnit cu = pack1.createCompilationUnit("E.java", builder.toString(), false, null); WorkspaceEdit edit = getRenameEdit(cu, pos, "newname"); assertNotNull(edit); assertEquals(edit.getChanges().size(), 1); assertEquals(TextEditUtil.apply(builder.toString(), edit.getChanges().get(JDTUtils.toURI(cu))), "package test1;\n" + "public class E {\n" + " public int bar() {\n" + " String str = new String();\n" + " str.length();\n" + " }\n" + " public int foo() {\n" + " String newname = new String();\n" + " newname.length()\n" + " }\n" + "}\n"); }
@Test public void testRenameField() throws JavaModelException, BadLocationException { IPackageFragment pack1 = sourceFolder.createPackageFragment("test1", false, null); String[] codes = { "package test1;\n", "public class E {\n", " private int myValue = 2;\n", " public void bar() {\n", " myValue|* = 3;\n", " }\n", "}\n" }; StringBuilder builder = new StringBuilder(); Position pos = mergeCode(builder, codes); ICompilationUnit cu = pack1.createCompilationUnit("E.java", builder.toString(), false, null); WorkspaceEdit edit = getRenameEdit(cu, pos, "newname"); assertNotNull(edit); assertEquals(edit.getChanges().size(), 1); assertEquals(TextEditUtil.apply(builder.toString(), edit.getChanges().get(JDTUtils.toURI(cu))), "package test1;\n" + "public class E {\n" + " private int newname = 2;\n" + " public void bar() {\n" + " newname = 3;\n" + " }\n" + "}\n"); }
@Test public void testRenameMethod() throws JavaModelException, BadLocationException { IPackageFragment pack1 = sourceFolder.createPackageFragment("test1", false, null); String[] codes = { "package test1;\n", "public class E {\n", " public int bar() {\n", " }\n", " public int foo() {\n", " this.bar|*();\n", " }\n", "}\n" }; StringBuilder builder = new StringBuilder(); Position pos = mergeCode(builder, codes); ICompilationUnit cu = pack1.createCompilationUnit("E.java", builder.toString(), false, null); WorkspaceEdit edit = getRenameEdit(cu, pos, "newname"); assertNotNull(edit); assertEquals(edit.getChanges().size(), 1); assertEquals(TextEditUtil.apply(builder.toString(), edit.getChanges().get(JDTUtils.toURI(cu))), "package test1;\n" + "public class E {\n" + " public int newname() {\n" + " }\n" + " public int foo() {\n" + " this.newname();\n" + " }\n" + "}\n" ); }
@Test public void testRenameSuperMethod() throws JavaModelException, BadLocationException { IPackageFragment pack1 = sourceFolder.createPackageFragment("test1", false, null); String[] codes = { "package test1;\n", "class A {\n", " public void bar() {\n", " }\n", "}\n", "class B extends A {\n", " public void bar() {\n", " super|*.bar();\n", " }\n", "}\n" }; StringBuilder builder = new StringBuilder(); Position pos = mergeCode(builder, codes); ICompilationUnit cu = pack1.createCompilationUnit("E.java", builder.toString(), false, null); WorkspaceEdit edit = getRenameEdit(cu, pos, "TypeA"); assertNotNull(edit); assertEquals(1, edit.getChanges().size()); assertEquals(TextEditUtil.apply(builder.toString(), edit.getChanges().get(JDTUtils.toURI(cu))), "package test1;\n" + "class TypeA {\n" + " public void bar() {\n" + " }\n" + "}\n" + "class B extends TypeA {\n" + " public void bar() {\n" + " super.bar();\n" + " }\n" + "}\n" ); }
@Test public void testRenameTypeParameter() throws JavaModelException, BadLocationException { IPackageFragment pack1 = sourceFolder.createPackageFragment("test1", false, null); String[] codes= { "package test1;\n", "public class A<T|*> {\n", " private T t;\n", " public T get() { return t; }\n", "}\n" }; StringBuilder builder = new StringBuilder(); Position pos = mergeCode(builder, codes); ICompilationUnit cu = pack1.createCompilationUnit("A.java", builder.toString(), false, null); WorkspaceEdit edit = getRenameEdit(cu, pos, "TT"); assertNotNull(edit); assertEquals(edit.getChanges().size(), 1); assertEquals(TextEditUtil.apply(builder.toString(), edit.getChanges().get(JDTUtils.toURI(cu))), "package test1;\n" + "public class A<TT> {\n" + " private TT t;\n" + " public TT get() { return t; }\n" + "}\n" ); }
@Test public void testRenameTypeParameterInMethod() throws JavaModelException, BadLocationException { IPackageFragment pack1 = sourceFolder.createPackageFragment("test1", false, null); String[] codes = { "package test1;\n", "public class B<T> {\n", " private T t;\n", " public <U|* extends Number> inspect(U u) { return u; }\n", "}\n" }; StringBuilder builder = new StringBuilder(); Position pos = mergeCode(builder, codes); ICompilationUnit cu = pack1.createCompilationUnit("B.java", builder.toString(), false, null); WorkspaceEdit edit = getRenameEdit(cu, pos, "UU"); assertNotNull(edit); assertEquals(edit.getChanges().size(), 1); assertEquals(TextEditUtil.apply(builder.toString(), edit.getChanges().get(JDTUtils.toURI(cu))), "package test1;\n" + "public class B<T> {\n" + " private T t;\n" + " public <UU extends Number> inspect(UU u) { return u; }\n" + "}\n" ); }
@Test public void testRenameJavadoc() throws JavaModelException, BadLocationException { IPackageFragment pack1 = sourceFolder.createPackageFragment("test1", false, null); String[] codes = { "package test1;\n", "public class E {\n", " /**\n", " *@param i int\n", " */\n", " public int foo(int i|*) {\n", " E e = new E();\n", " e.foo();\n", " }\n", "}\n" }; StringBuilder builder = new StringBuilder(); Position pos = mergeCode(builder, codes); ICompilationUnit cu = pack1.createCompilationUnit("E.java", builder.toString(), false, null); WorkspaceEdit edit = getRenameEdit(cu, pos, "i2"); assertNotNull(edit); assertEquals(edit.getChanges().size(), 1); assertEquals(TextEditUtil.apply(builder.toString(), edit.getChanges().get(JDTUtils.toURI(cu))), "package test1;\n" + "public class E {\n" + " /**\n" + " *@param i2 int\n" + " */\n" + " public int foo(int i2) {\n" + " E e = new E();\n" + " e.foo();\n" + " }\n" + "}\n" ); }
@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); } }
private WorkspaceEdit recordWorkspaceEdit(final Document doc, final XtextResource resource, final IChangeSerializer.IModification<Resource> mod) { try { final XtextResourceSet rs = new XtextResourceSet(); final Resource copy = rs.createResource(resource.getURI()); String _text = resource.getParseResult().getRootNode().getText(); StringInputStream _stringInputStream = new StringInputStream(_text); copy.load(_stringInputStream, CollectionLiterals.<Object, Object>emptyMap()); this.serializer.<Resource>addModification(copy, mod); final ArrayList<IEmfResourceChange> documentchanges = CollectionLiterals.<IEmfResourceChange>newArrayList(); this.serializer.applyModifications(CollectionBasedAcceptor.<IEmfResourceChange>of(documentchanges)); WorkspaceEdit _workspaceEdit = new WorkspaceEdit(); final Procedure1<WorkspaceEdit> _function = (WorkspaceEdit it) -> { Iterable<ITextDocumentChange> _filter = Iterables.<ITextDocumentChange>filter(documentchanges, ITextDocumentChange.class); for (final ITextDocumentChange documentchange : _filter) { { final Function1<ITextReplacement, TextEdit> _function_1 = (ITextReplacement replacement) -> { TextEdit _textEdit = new TextEdit(); final Procedure1<TextEdit> _function_2 = (TextEdit it_1) -> { it_1.setNewText(replacement.getReplacementText()); Position _position = doc.getPosition(replacement.getOffset()); Position _position_1 = doc.getPosition(replacement.getEndOffset()); Range _range = new Range(_position, _position_1); it_1.setRange(_range); }; return ObjectExtensions.<TextEdit>operator_doubleArrow(_textEdit, _function_2); }; final List<TextEdit> edits = ListExtensions.<ITextReplacement, TextEdit>map(documentchange.getReplacements(), _function_1); it.getChanges().put(documentchange.getNewURI().toString(), edits); } } }; return ObjectExtensions.<WorkspaceEdit>operator_doubleArrow(_workspaceEdit, _function); } 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; }
private void applyRename(List<RenameProject> projects) { List<TextDocumentEdit> edits = new ArrayList<>(); for (RenameProject project : projects) { edits.addAll(project.getTextDocumentEdits()); } workspaceEditAction.applyWorkspaceEdit(new WorkspaceEdit(edits)); }
@Override public void actionPerformed(ActionEvent evt) { QuickassistActionEvent qaEvent = (QuickassistActionEvent) evt; List<Object> arguments = qaEvent.getArguments(); WorkspaceEdit edit = dtoFactory.createDtoFromJson(arguments.get(0).toString(), WorkspaceEdit.class); applyWorkspaceEdit(edit); }
@Override public CompletableFuture<WorkspaceEdit> rename(RenameParams params) { LOGGER.info("rename: " + params.getTextDocument()); return CompletableFuture.completedFuture(null); }
public ApplyWorkspaceEditParams(final WorkspaceEdit edit) { this.edit = edit; }
/** * The edits to apply. */ @Pure public WorkspaceEdit getEdit() { return this.edit; }
/** * The edits to apply. */ public void setEdit(final WorkspaceEdit edit) { this.edit = edit; }
@Override public CompletableFuture<WorkspaceEdit> rename(final RenameParams params) { // TODO Auto-generated method stub return null; }