From a41025c23e500b7ea64c7079625e468f8cfd03d9 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Thu, 22 Nov 2018 20:17:53 -0500 Subject: [PATCH] PT #160151830: Accept range within quickfix range --- .../languageserver/quickfix/Quickfix.java | 3 ++- .../commons/util/text/DocumentUtil.java | 23 ++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/quickfix/Quickfix.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/quickfix/Quickfix.java index d2a688eb0..0401e813a 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/quickfix/Quickfix.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/quickfix/Quickfix.java @@ -14,6 +14,7 @@ import org.eclipse.lsp4j.CodeActionContext; import org.eclipse.lsp4j.Command; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.Range; +import org.springframework.ide.vscode.commons.util.text.DocumentUtil; import com.google.common.collect.ImmutableList; @@ -59,7 +60,7 @@ public class Quickfix { } public boolean appliesTo(Range range, CodeActionContext context) { - return range.equals(this.range) && appliesToContext(context); + return appliesToContext(context) && DocumentUtil.containsRange(this.range, range); } private boolean appliesToContext(CodeActionContext context) { diff --git a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/DocumentUtil.java b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/DocumentUtil.java index 4e8aef546..e1f87e092 100644 --- a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/DocumentUtil.java +++ b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/DocumentUtil.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016-2017 Pivotal, Inc. + * Copyright (c) 2016, 2018 Pivotal, 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 @@ -11,6 +11,8 @@ package org.springframework.ide.vscode.commons.util.text; +import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.Range; import org.springframework.ide.vscode.commons.util.Assert; import org.springframework.ide.vscode.commons.util.BadLocationException; @@ -45,5 +47,24 @@ public class DocumentUtil { throw new IllegalStateException("Bug!", e); } } + + /** + * Compares two LSP4J positions + * @param p1 + * @param p2 + * @return integer number which is 0 if equals, <0 if p1 comes before p2 and >0 otherwise + */ + public static int compare(Position p1, Position p2) { + int res = p1.getLine() - p2.getLine(); + if (res == 0) { + res = p1.getCharacter() - p2.getCharacter(); + } + return res; + } + + public static boolean containsRange(Range outer, Range inner) { + return compare(outer.getStart(), inner.getStart()) <= 0 + && compare(outer.getEnd(), inner.getEnd()) >= 0; + } }