| /** |
| * Copyright (c) 2016-2018 TypeFox and others. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| package org.eclipse.lsp4j; |
| |
| import org.eclipse.lsp4j.Range; |
| import org.eclipse.lsp4j.jsonrpc.validation.NonNull; |
| import org.eclipse.lsp4j.util.Preconditions; |
| import org.eclipse.xtext.xbase.lib.Pure; |
| import org.eclipse.xtext.xbase.lib.util.ToStringBuilder; |
| |
| /** |
| * Represents a link between a source and a target location. |
| */ |
| @SuppressWarnings("all") |
| public class LocationLink { |
| /** |
| * Span of the origin of this link. |
| * <p> |
| * Used as the underlined span for mouse interaction. Defaults to the word range at |
| * the mouse position. |
| */ |
| private Range originSelectionRange; |
| |
| /** |
| * The target resource identifier of this link. |
| */ |
| @NonNull |
| private String targetUri; |
| |
| /** |
| * The full target range of this link. If the target for example is a symbol then target range is the |
| * range enclosing this symbol not including leading/trailing whitespace but everything else |
| * like comments. This information is typically used to highlight the range in the editor. |
| */ |
| @NonNull |
| private Range targetRange; |
| |
| /** |
| * The range that should be selected and revealed when this link is being followed, e.g the name of a function. |
| * Must be contained by the the {@link #targetRange}. See also {@link DocumentSymbol#range} |
| */ |
| @NonNull |
| private Range targetSelectionRange; |
| |
| public LocationLink() { |
| } |
| |
| public LocationLink(@NonNull final String targetUri, @NonNull final Range targetRange, @NonNull final Range targetSelectionRange) { |
| this.targetUri = Preconditions.<String>checkNotNull(targetUri, "targetUri"); |
| this.targetRange = Preconditions.<Range>checkNotNull(targetRange, "targetRange"); |
| this.targetSelectionRange = Preconditions.<Range>checkNotNull(targetSelectionRange, "targetSelectionRange"); |
| } |
| |
| public LocationLink(@NonNull final String targetUri, @NonNull final Range targetRange, @NonNull final Range targetSelectionRange, final Range originSelectionRange) { |
| this(targetUri, targetRange, targetSelectionRange); |
| this.originSelectionRange = originSelectionRange; |
| } |
| |
| /** |
| * Span of the origin of this link. |
| * <p> |
| * Used as the underlined span for mouse interaction. Defaults to the word range at |
| * the mouse position. |
| */ |
| @Pure |
| public Range getOriginSelectionRange() { |
| return this.originSelectionRange; |
| } |
| |
| /** |
| * Span of the origin of this link. |
| * <p> |
| * Used as the underlined span for mouse interaction. Defaults to the word range at |
| * the mouse position. |
| */ |
| public void setOriginSelectionRange(final Range originSelectionRange) { |
| this.originSelectionRange = originSelectionRange; |
| } |
| |
| /** |
| * The target resource identifier of this link. |
| */ |
| @Pure |
| @NonNull |
| public String getTargetUri() { |
| return this.targetUri; |
| } |
| |
| /** |
| * The target resource identifier of this link. |
| */ |
| public void setTargetUri(@NonNull final String targetUri) { |
| this.targetUri = Preconditions.checkNotNull(targetUri, "targetUri"); |
| } |
| |
| /** |
| * The full target range of this link. If the target for example is a symbol then target range is the |
| * range enclosing this symbol not including leading/trailing whitespace but everything else |
| * like comments. This information is typically used to highlight the range in the editor. |
| */ |
| @Pure |
| @NonNull |
| public Range getTargetRange() { |
| return this.targetRange; |
| } |
| |
| /** |
| * The full target range of this link. If the target for example is a symbol then target range is the |
| * range enclosing this symbol not including leading/trailing whitespace but everything else |
| * like comments. This information is typically used to highlight the range in the editor. |
| */ |
| public void setTargetRange(@NonNull final Range targetRange) { |
| this.targetRange = Preconditions.checkNotNull(targetRange, "targetRange"); |
| } |
| |
| /** |
| * The range that should be selected and revealed when this link is being followed, e.g the name of a function. |
| * Must be contained by the the {@link #targetRange}. See also {@link DocumentSymbol#range} |
| */ |
| @Pure |
| @NonNull |
| public Range getTargetSelectionRange() { |
| return this.targetSelectionRange; |
| } |
| |
| /** |
| * The range that should be selected and revealed when this link is being followed, e.g the name of a function. |
| * Must be contained by the the {@link #targetRange}. See also {@link DocumentSymbol#range} |
| */ |
| public void setTargetSelectionRange(@NonNull final Range targetSelectionRange) { |
| this.targetSelectionRange = Preconditions.checkNotNull(targetSelectionRange, "targetSelectionRange"); |
| } |
| |
| @Override |
| @Pure |
| public String toString() { |
| ToStringBuilder b = new ToStringBuilder(this); |
| b.add("originSelectionRange", this.originSelectionRange); |
| b.add("targetUri", this.targetUri); |
| b.add("targetRange", this.targetRange); |
| b.add("targetSelectionRange", this.targetSelectionRange); |
| return b.toString(); |
| } |
| |
| @Override |
| @Pure |
| public boolean equals(final Object obj) { |
| if (this == obj) |
| return true; |
| if (obj == null) |
| return false; |
| if (getClass() != obj.getClass()) |
| return false; |
| LocationLink other = (LocationLink) obj; |
| if (this.originSelectionRange == null) { |
| if (other.originSelectionRange != null) |
| return false; |
| } else if (!this.originSelectionRange.equals(other.originSelectionRange)) |
| return false; |
| if (this.targetUri == null) { |
| if (other.targetUri != null) |
| return false; |
| } else if (!this.targetUri.equals(other.targetUri)) |
| return false; |
| if (this.targetRange == null) { |
| if (other.targetRange != null) |
| return false; |
| } else if (!this.targetRange.equals(other.targetRange)) |
| return false; |
| if (this.targetSelectionRange == null) { |
| if (other.targetSelectionRange != null) |
| return false; |
| } else if (!this.targetSelectionRange.equals(other.targetSelectionRange)) |
| return false; |
| return true; |
| } |
| |
| @Override |
| @Pure |
| public int hashCode() { |
| final int prime = 31; |
| int result = 1; |
| result = prime * result + ((this.originSelectionRange== null) ? 0 : this.originSelectionRange.hashCode()); |
| result = prime * result + ((this.targetUri== null) ? 0 : this.targetUri.hashCode()); |
| result = prime * result + ((this.targetRange== null) ? 0 : this.targetRange.hashCode()); |
| return prime * result + ((this.targetSelectionRange== null) ? 0 : this.targetSelectionRange.hashCode()); |
| } |
| } |