diff --git a/plugins/plugin-java-debugger/che-plugin-java-debugger-server/src/main/java/org/eclipse/che/plugin/jdb/server/model/JdbLocation.java b/plugins/plugin-java-debugger/che-plugin-java-debugger-server/src/main/java/org/eclipse/che/plugin/jdb/server/model/JdbLocation.java index 4b570458f0..9a64261e20 100644 --- a/plugins/plugin-java-debugger/che-plugin-java-debugger-server/src/main/java/org/eclipse/che/plugin/jdb/server/model/JdbLocation.java +++ b/plugins/plugin-java-debugger/che-plugin-java-debugger-server/src/main/java/org/eclipse/che/plugin/jdb/server/model/JdbLocation.java @@ -32,12 +32,6 @@ public class JdbLocation implements Location { this(languageServer, stackFrame, new JdbMethod(stackFrame)); } - public JdbLocation(Location internal, Method method) { - this.method = method; - this.internal = internal; - this.jdiStackFrame = null; - } - /** * Intends to create location when thread is not suspended. Information concerning thread and * frame are not available. diff --git a/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/service/ServiceUtil.java b/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/service/ServiceUtil.java new file mode 100644 index 0000000000..b024992f83 --- /dev/null +++ b/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/service/ServiceUtil.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2012-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.che.plugin.languageserver.ide.service; + +import org.eclipse.che.api.core.jsonrpc.commons.JsonRpcError; +import org.eclipse.che.api.core.jsonrpc.commons.JsonRpcException; +import org.eclipse.che.api.promises.client.PromiseError; + +public class ServiceUtil { + private ServiceUtil() {} + + public static PromiseError getPromiseError(JsonRpcError jsonRpcError) { + return new PromiseError() { + @Override + public String getMessage() { + return jsonRpcError.getMessage(); + } + + @Override + public Throwable getCause() { + return new JsonRpcException(jsonRpcError.getCode(), jsonRpcError.getMessage()); + } + }; + } +} diff --git a/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/core/reconcile/PomReconciler.java b/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/core/reconcile/PomReconciler.java deleted file mode 100644 index 2b6e1d82f0..0000000000 --- a/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/core/reconcile/PomReconciler.java +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright (c) 2012-2018 Red Hat, Inc. - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.plugin.maven.server.core.reconcile; -/** - * ***************************************************************************** Copyright (c) - * 2012-2018 Red Hat, Inc. All rights reserved. This program and the accompanying materials are made - * available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - * - *

Contributors: Red Hat, Inc. - initial API and implementation - * ***************************************************************************** - */ - -import static com.google.common.base.Strings.isNullOrEmpty; -import static java.lang.String.format; -import static java.nio.charset.Charset.defaultCharset; -import static org.eclipse.che.maven.data.MavenConstants.POM_FILE_NAME; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.SortedSet; -import java.util.TreeSet; -import java.util.stream.Collectors; -import javax.annotation.PreDestroy; -import org.eclipse.che.api.core.NotFoundException; -import org.eclipse.che.api.core.ServerException; -import org.eclipse.che.api.core.notification.EventService; -import org.eclipse.che.api.core.notification.EventSubscriber; -import org.eclipse.che.api.editor.server.impl.EditorWorkingCopy; -import org.eclipse.che.api.editor.server.impl.EditorWorkingCopyManager; -import org.eclipse.che.api.editor.server.impl.EditorWorkingCopyUpdatedEvent; -import org.eclipse.che.api.languageserver.service.LanguageServiceUtils; -import org.eclipse.che.api.project.shared.dto.EditorChangesDto; -import org.eclipse.che.commons.xml.XMLTreeException; -import org.eclipse.che.dto.server.DtoFactory; -import org.eclipse.che.ide.ext.java.shared.dto.Problem; -import org.eclipse.che.ide.maven.tools.Model; -import org.eclipse.che.maven.data.MavenProjectProblem; -import org.eclipse.che.plugin.maven.server.core.MavenProjectManager; -import org.eclipse.che.plugin.maven.server.core.project.MavenProject; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.Document; -import org.eclipse.lsp4j.Diagnostic; -import org.eclipse.lsp4j.DiagnosticSeverity; -import org.eclipse.lsp4j.MessageParams; -import org.eclipse.lsp4j.MessageType; -import org.eclipse.lsp4j.Position; -import org.eclipse.lsp4j.PublishDiagnosticsParams; -import org.eclipse.lsp4j.Range; -import org.eclipse.lsp4j.services.LanguageClient; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.xml.sax.SAXParseException; - -/** - * Handles reconcile operations for pom.xml file. - * - * @author Roman Nikitenko - */ -public class PomReconciler { - private static final Logger LOG = LoggerFactory.getLogger(PomReconciler.class); - - private MavenProjectManager mavenProjectManager; - private EditorWorkingCopyManager editorWorkingCopyManager; - private EventService eventService; - private EventSubscriber editorContentUpdateEventSubscriber; - private LanguageClient client; - - public PomReconciler( - MavenProjectManager mavenProjectManager, - EditorWorkingCopyManager editorWorkingCopyManager, - EventService eventService, - LanguageClient client) { - this.mavenProjectManager = mavenProjectManager; - this.editorWorkingCopyManager = editorWorkingCopyManager; - this.eventService = eventService; - this.client = client; - - editorContentUpdateEventSubscriber = - new EventSubscriber() { - @Override - public void onEvent(EditorWorkingCopyUpdatedEvent event) { - onEditorContentUpdated(event); - } - }; - eventService.subscribe(editorContentUpdateEventSubscriber); - } - - @PreDestroy - private void unsubscribe() { - eventService.unsubscribe(editorContentUpdateEventSubscriber); - } - - List reconcile(String pomPath, String projectPath, String pomContent) - throws ServerException, NotFoundException { - List result = new ArrayList<>(); - - if (isNullOrEmpty(pomContent)) { - Problem problem = - DtoFactory.newDto(Problem.class) - .withError(true) - .withMessage("Content of pom file is empty") - .withSourceStart(1) - .withSourceEnd(1); - result.add(problem); - return result; - } - - try { - Model.readFrom(new ByteArrayInputStream(pomContent.getBytes(defaultCharset()))); - - if (isNullOrEmpty(projectPath)) { - return result; - } - - IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectPath); - MavenProject mavenProject = mavenProjectManager.findMavenProject(project); - if (mavenProject == null) { - return result; - } - - List problems = mavenProject.getProblems(); - - int start = pomContent.indexOf(" problemList = - problems - .stream() - .map( - mavenProjectProblem -> - DtoFactory.newDto(Problem.class) - .withError(true) - .withSourceStart(start) - .withSourceEnd(end) - .withMessage(mavenProjectProblem.getDescription())) - .collect(Collectors.toList()); - result.addAll(problemList); - } catch (XMLTreeException exception) { - Throwable cause = exception.getCause(); - if (cause != null && cause instanceof SAXParseException) { - result.add(createProblem(pomContent, (SAXParseException) cause)); - - } else { - String error = - format( - "Couldn't reconcile pom file '%s', the reason is '%s'", - pomPath, exception.getLocalizedMessage()); - LOG.error(error, exception); - throw new ServerException(error); - } - } catch (IOException e) { - String error = - format( - "Couldn't reconcile pom file '%s', the reason is '%s'", - pomPath, e.getLocalizedMessage()); - LOG.error(error, e); - throw new ServerException(error); - } - return result; - } - - private void onEditorContentUpdated(EditorWorkingCopyUpdatedEvent event) { - EditorChangesDto editorChanges = event.getChanges(); - String fileLocation = editorChanges.getFileLocation(); - String projectPath = editorChanges.getProjectPath(); - reconcilePath(fileLocation, projectPath); - } - - public void reconcilePath(String fileLocation, String projectPath) { - String fileName = new Path(fileLocation).lastSegment(); - if (!POM_FILE_NAME.equals(fileName)) { - return; - } - - EditorWorkingCopy workingCopy = editorWorkingCopyManager.getWorkingCopy(fileLocation); - if (workingCopy == null) { - return; - } - - try { - String newPomContent = workingCopy.getContentAsString(); - List problems = reconcile(fileLocation, projectPath, newPomContent); - List diagnostics = convertProblems(newPomContent, problems); - - client.publishDiagnostics( - new PublishDiagnosticsParams(LanguageServiceUtils.prefixURI(fileLocation), diagnostics)); - } catch (ServerException | NotFoundException e) { - LOG.error(e.getMessage(), e); - client.showMessage(new MessageParams(MessageType.Error, "Error reconciling " + fileLocation)); - } - } - - private Problem createProblem(String pomContent, SAXParseException spe) { - Problem problem = DtoFactory.newDto(Problem.class); - problem.setError(true); - problem.setMessage(spe.getMessage()); - if (pomContent != null) { - int lineNumber = spe.getLineNumber(); - int columnNumber = spe.getColumnNumber(); - try { - Document document = new Document(pomContent); - int lineOffset = document.getLineOffset(lineNumber - 1); - problem.setSourceStart(lineOffset + columnNumber - 1); - problem.setSourceEnd(lineOffset + columnNumber); - } catch (BadLocationException e) { - LOG.error(e.getMessage(), e); - } - } - return problem; - } - - public void reconcileUri(String uri, String text) { - try { - String pomPath = LanguageServiceUtils.removePrefixUri(uri); - List problems = reconcile(pomPath, new File(pomPath).getParent(), text); - List diagnostics = convertProblems(text, problems); - client.publishDiagnostics(new PublishDiagnosticsParams(uri, diagnostics)); - } catch (ServerException | NotFoundException e) { - LOG.error("Error reconciling content: " + uri, e); - client.showMessage(new MessageParams(MessageType.Error, "Error reconciling " + uri)); - } - } - - private static List convertProblems(String text, List problems) { - Map positions = mapPositions(text, problems); - List diagnostics = - problems - .stream() - .map((Problem p) -> convertProblem(positions, p)) - .filter(o -> o != null) - .collect(Collectors.toList()); - return diagnostics; - } - - private static Map mapPositions(String text, List problems) { - SortedSet offsets = new TreeSet<>(); - for (Problem problem : problems) { - offsets.add(problem.getSourceStart()); - offsets.add(problem.getSourceEnd()); - } - Map result = new HashMap<>(); - int line = 0; - int character = 0; - int pos = 0; - for (int offset : offsets) { - while (pos < offset && pos < text.length()) { - char ch = text.charAt(pos++); - if (ch == '\r') { - if (text.charAt(pos) == '\n') { - pos++; - } - line++; - character = 0; - } else if (ch == '\n') { - line++; - character = 0; - } else { - character++; - } - } - result.put(offset, new Position(line, character)); - } - ; - return result; - } - - private static Diagnostic convertProblem(Map positionMap, Problem problem) { - Diagnostic result = new Diagnostic(); - Position start = positionMap.get(problem.getSourceStart()); - Position end = positionMap.get(problem.getSourceEnd()); - if (start == null || end == null) { - LOG.error("Could not map problem range: " + problem); - return null; - } - result.setRange(new Range(start, end)); - result.setMessage(problem.getMessage()); - result.setSeverity(problem.isError() ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning); - return result; - } -} diff --git a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/CodenvyEditor.java b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/CodenvyEditor.java index f6bf91e7d8..402b0e7d70 100644 --- a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/CodenvyEditor.java +++ b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/CodenvyEditor.java @@ -25,6 +25,7 @@ import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.ACTIVE_ import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.ALL_TABS_XPATH; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.ASSIST_CONTENT_CONTAINER; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.AUTOCOMPLETE_CONTAINER; +import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.AUTOCOMPLETE_PROPOSAL_DOC_ID; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.CONTEXT_MENU; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.DEBUGGER_BREAKPOINT_CONDITION; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.DEBUGGER_BREAKPOINT_DISABLED; @@ -40,6 +41,7 @@ import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.IMPLEME import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.ITEM_TAB_LIST; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.JAVA_DOC_POPUP; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.LANGUAGE_SERVER_REFACTORING_RENAME_FIELD_CSS; +import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.LANGUAGE_SERVER_REFACTORING_RENAME_FIELD_CSS; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.ORION_ACTIVE_EDITOR_CONTAINER_XPATH; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.ORION_CONTENT_ACTIVE_EDITOR_XPATH; import static org.eclipse.che.selenium.pageobject.CodenvyEditor.Locators.POSITION_CURSOR_NUMBER; @@ -90,7 +92,6 @@ import java.net.HttpURLConnection; import java.net.URL; import java.util.Arrays; import java.util.List; -import java.util.regex.Pattern; import org.eclipse.che.commons.lang.Pair; import org.eclipse.che.selenium.core.SeleniumWebDriver; import org.eclipse.che.selenium.core.action.ActionsFactory; @@ -347,8 +348,13 @@ public class CodenvyEditor { @FindBy(xpath = HOVER_POPUP_XPATH) private WebElement hoverPopup; + @FindBy(id = AUTOCOMPLETE_PROPOSAL_DOC_ID) + private WebElement proposalDoc; + @FindBy(css = LANGUAGE_SERVER_REFACTORING_RENAME_FIELD_CSS) private WebElement languageServerRenameField; + + /** * Waits until specified {@code editorTab} is presented, selected, focused and editor activated. * @@ -2277,47 +2283,6 @@ public class CodenvyEditor { loader.waitOnClosed(); } - /** - * Get html code of java doc of autocomplete proposal. - * - * @return html code of JavaDoc of already opened autocomplete proposal by making request on 'src' - * attribute of iframe of JavaDoc popup. - */ - public String getAutocompleteProposalJavaDocHtml() throws IOException { - return getJavaDocPopupText(); - } - - /** - * Waits until specified {@code expectedText} is present in javadoc. - * - * @param expectedText text which should be present in javadoc - */ - public void waitContextMenuJavaDocText(String expectedText) { - webDriverWaitFactory - .get() - .until( - (ExpectedCondition) - driver -> { - String javaDocPopupHtmlText = ""; - try { - javaDocPopupHtmlText = getJavaDocPopupText(); - } catch (StaleElementReferenceException e) { - LOG.warn( - "Can not get java doc HTML text from autocomplete context menu in editor"); - } - return javaDocPopupHtmlText.length() > 0 - && verifyJavaDoc(javaDocPopupHtmlText, expectedText); - }); - } - - private String getJavaDocPopupText() { - return seleniumWebDriverHelper.waitVisibilityAndGetText(autocompleteProposalJavaDocPopup); - } - - private boolean verifyJavaDoc(String javaDocHtml, String regex) { - return Pattern.compile(regex, Pattern.DOTALL).matcher(javaDocHtml).matches(); - } - private List getAllTabsWithProvidedName(String tabName) { return seleniumWebDriverHelper.waitVisibilityOfAllElements( By.xpath( @@ -2329,7 +2294,6 @@ public class CodenvyEditor { By.xpath(format(Locators.TEXT_TO_MOVE_CURSOR_XPATH, text))); } -<<<<<<< HEAD public void checkProposalDocumentation(String expectedText) { seleniumWebDriverHelper.waitTextContains(proposalDoc, expectedText); } @@ -2354,8 +2318,6 @@ public class CodenvyEditor { seleniumWebDriverHelper.pressEnter(); } -======= ->>>>>>> Readd removed code to fix build /** Type the comment line in the file by keyboard */ public void launchCommentCodeFeature() { actionsFactory diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/editor/autocomplete/AutocompleteProposalJavaDocTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/editor/autocomplete/AutocompleteProposalJavaDocTest.java index 506ff2950d..61eaea0364 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/editor/autocomplete/AutocompleteProposalJavaDocTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/editor/autocomplete/AutocompleteProposalJavaDocTest.java @@ -92,7 +92,7 @@ public class AutocompleteProposalJavaDocTest { editor.selectAutocompleteProposal("concat(String part1, String part2, char divider) : String"); // then - editor.waitContextMenuJavaDocText( + editor.checkProposalDocumentation( ".*

Deprecated. As of version 1.0, use " + "org.apache.commons.lang.StringUtils.join\\(Object \\[\\], char\\)" + "

Returns concatination of two strings into one divided by special symbol." @@ -114,7 +114,7 @@ public class AutocompleteProposalJavaDocTest { editor.selectAutocompleteProposal("App()"); // then - editor.waitContextMenuJavaDocText(".*No documentation found.*"); + editor.checkProposalDocumentation(".*No documentation found.*"); } @Test @@ -127,7 +127,7 @@ public class AutocompleteProposalJavaDocTest { editor.selectAutocompleteProposal("isEquals(Object o) : boolean "); // then - editor.waitContextMenuJavaDocText( + editor.checkProposalDocumentation( ".*Returns true if the argument is equal to instance. otherwise false" + "

Parameters:
" + "
o an object.
" @@ -155,7 +155,7 @@ public class AutocompleteProposalJavaDocTest { editor.selectAutocompleteProposal("BookImpl"); // then - editor.waitContextMenuJavaDocText(".*UPDATE. Implementation of Book interface..*"); + editor.checkProposalDocumentation(".*UPDATE. Implementation of Book interface..*"); } @Test @@ -168,7 +168,7 @@ public class AutocompleteProposalJavaDocTest { editor.selectAutocompleteProposal("hashCode() : int"); // then - editor.waitContextMenuJavaDocText( + editor.checkProposalDocumentation( ".*Returns a hash code value for the object. " + "This method is supported for the benefit of hash tables such as those provided by " + "java.util.HashMap.*"); @@ -184,7 +184,7 @@ public class AutocompleteProposalJavaDocTest { editor.selectAutocompleteProposal("info(String arg0) : void"); // then - editor.waitContextMenuJavaDocText(".*No documentation found.*"); + editor.checkProposalDocumentation(".*No documentation found.*"); // when editor.closeAutocomplete(); @@ -202,7 +202,7 @@ public class AutocompleteProposalJavaDocTest { editor.selectAutocompleteProposal("info(String msg) : void"); // then - editor.waitContextMenuJavaDocText( + editor.checkProposalDocumentation( ".*Log a message at the .* level." + "
Parameters:
" + "
msg"