Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Goubet2015-10-30 10:45:07 +0000
committerYvan Lussaud2015-11-27 13:35:44 +0000
commitcb06c757822c5f49035d9476b59d509efbc8aa86 (patch)
tree9f2efbf7b6a742d74e0da5c4e756fc8568208ce8
parent29eab7f0f0a8bf4f1c9c75d0f19408c59e413c0d (diff)
downloadorg.eclipse.acceleo-cb06c757822c5f49035d9476b59d509efbc8aa86.tar.gz
org.eclipse.acceleo-cb06c757822c5f49035d9476b59d509efbc8aa86.tar.xz
org.eclipse.acceleo-cb06c757822c5f49035d9476b59d509efbc8aa86.zip
[479826] Completion proposals should inform about replacement info
-rw-r--r--query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/ICompletionResult.java32
-rw-r--r--query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/BasicFilter.java34
-rw-r--r--query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/CompletionResult.java45
-rw-r--r--query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/QueryCompletionEngine.java33
-rw-r--r--query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/CompletionTest.java288
5 files changed, 386 insertions, 46 deletions
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/ICompletionResult.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/ICompletionResult.java
index c0eb2c123..1625ef9f3 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/ICompletionResult.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/ICompletionResult.java
@@ -66,4 +66,36 @@ public interface ICompletionResult {
* the remaining of identifier part after the cursor
*/
void setRemaining(String remaining);
+
+ /**
+ * Returns the offset at which this completion proposal should start replacing existing text.
+ *
+ * @return The offset at which this completion proposal should start replacing existing text.
+ */
+ int getReplacementOffset();
+
+ /**
+ * Sets the offset at which this completion proposal should start replacing existing text.
+ *
+ * @param offset
+ * The offset at which this completion proposal should start replacing existing text.
+ */
+ void setReplacementOffset(int offset);
+
+ /**
+ * If this proposal is going to replace text when accepted, this will return the number of characters
+ * to replace.
+ *
+ * @return Number of characters to replace from the existing text starting at
+ * {@link #getReplacementOffset()}.
+ */
+ int getReplacementLength();
+
+ /**
+ * Sets the number of characters to replace with this proposal.
+ *
+ * @param replacementLength
+ * The number of characters to replace with this proposal.
+ */
+ void setReplacementLength(int replacementLength);
}
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/BasicFilter.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/BasicFilter.java
index 664deb24a..e0b999785 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/BasicFilter.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/BasicFilter.java
@@ -13,6 +13,7 @@ package org.eclipse.acceleo.query.runtime.impl;
import org.eclipse.acceleo.query.runtime.ICompletionProposal;
import org.eclipse.acceleo.query.runtime.ICompletionResult;
import org.eclipse.acceleo.query.runtime.IProposalFilter;
+import org.eclipse.acceleo.query.runtime.impl.completion.EClassifierCompletionProposal;
/**
* {@link BasicFilter} filters on prefix and remaining.
@@ -20,7 +21,6 @@ import org.eclipse.acceleo.query.runtime.IProposalFilter;
* @author <a href="mailto:yvan.lussaud@obeo.fr">Yvan Lussaud</a>
*/
public class BasicFilter implements IProposalFilter {
-
/**
* The {@link ICompletionResult}.
*/
@@ -43,26 +43,30 @@ public class BasicFilter implements IProposalFilter {
*/
@Override
public boolean keepProposal(ICompletionProposal proposal) {
- final String name = proposal.getProposal();
String prefix = completionResult.getPrefix();
if (prefix == null) {
return true;
}
-
- boolean result = false;
- if (name.substring(0, prefix.length()).equalsIgnoreCase(prefix)) {
- String remaining = completionResult.getRemaining();
- if (remaining == null) {
- remaining = "";
- }
- if (remaining != null && remaining.length() != 0) {
- result = name.lastIndexOf(remaining) >= prefix.length();
- } else {
- result = true;
- }
+
+ String candidateName = proposal.getProposal();
+ if (proposal instanceof EClassifierCompletionProposal) {
+ candidateName = ((EClassifierCompletionProposal)proposal).getObject().getName();
}
- return result;
+ return startsWithIgnoreCase(candidateName, prefix);
}
+ /**
+ * Checks if the given candidate String starts with the given prefix, ignoring case.
+ *
+ * @param candidate
+ * The candidate string.
+ * @param prefix
+ * The expected prefix of {@code candidate}.
+ * @return <code>true</code> if the given {@code candidate} starts with the given {@code prefix}, ignoring
+ * case.
+ */
+ private static boolean startsWithIgnoreCase(String candidate, String prefix) {
+ return candidate != null && candidate.regionMatches(true, 0, prefix, 0, prefix.length());
+ }
}
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/CompletionResult.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/CompletionResult.java
index ceaef2828..078980d96 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/CompletionResult.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/CompletionResult.java
@@ -43,6 +43,12 @@ public class CompletionResult implements ICompletionResult {
*/
private String remaining;
+ /** The offset at which this completion proposal should start replacing existing text. */
+ private int replacementOffset;
+
+ /** Number of characters to replace from the existing text starting at{@link #replacementOffset}. */
+ private int replacementLength;
+
/**
* Constructor.
*
@@ -121,4 +127,43 @@ public class CompletionResult implements ICompletionResult {
this.remaining = remaining;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.acceleo.query.runtime.ICompletionResult#getReplacementLength()
+ */
+ @Override
+ public int getReplacementLength() {
+ return replacementLength;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.acceleo.query.runtime.ICompletionResult#getReplacementOffset()
+ */
+ @Override
+ public int getReplacementOffset() {
+ return replacementOffset;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.acceleo.query.runtime.ICompletionResult#setReplacementLength(int)
+ */
+ @Override
+ public void setReplacementLength(int replacementLength) {
+ this.replacementLength = replacementLength;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.acceleo.query.runtime.ICompletionResult#setReplacementOffset(int)
+ */
+ @Override
+ public void setReplacementOffset(int offset) {
+ this.replacementOffset = offset;
+ }
}
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/QueryCompletionEngine.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/QueryCompletionEngine.java
index 1d958ae90..f58f4e432 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/QueryCompletionEngine.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/impl/QueryCompletionEngine.java
@@ -12,9 +12,14 @@ package org.eclipse.acceleo.query.runtime.impl;
import com.google.common.collect.Sets;
+import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.eclipse.acceleo.query.ast.Error;
+import org.eclipse.acceleo.query.ast.ErrorEnumLiteral;
+import org.eclipse.acceleo.query.ast.ErrorTypeLiteral;
+import org.eclipse.acceleo.query.ast.Expression;
import org.eclipse.acceleo.query.parser.AstCompletor;
import org.eclipse.acceleo.query.runtime.ICompletionResult;
import org.eclipse.acceleo.query.runtime.IQueryCompletionEngine;
@@ -74,6 +79,34 @@ public class QueryCompletionEngine implements IQueryCompletionEngine {
result.setPrefix(prefix);
result.setRemaining(remaining);
+ int replacementLength = 0;
+ int replacementOffset = 0;
+ if (toParse != null) {
+ replacementOffset = toParse.length();
+ }
+
+ // Errors on types or enum literals must be handled differently
+ List<Error> errors = validationResult.getAstResult().getErrors();
+ for (Error error : errors) {
+ if (error instanceof ErrorTypeLiteral || error instanceof ErrorEnumLiteral) {
+ int errorStart = validationResult.getAstResult().getStartPosition((Expression)error);
+ int errorEnd = validationResult.getAstResult().getEndPosition((Expression)error);
+ if (errorStart <= offset - prefix.length() && offset - prefix.length() <= errorEnd) {
+ replacementOffset = validationResult.getAstResult().getStartPosition((Expression)error);
+ replacementLength = validationResult.getAstResult().getEndPosition((Expression)error)
+ - replacementOffset;
+ break;
+ }
+ }
+ }
+
+ // The prefix part is to be replaced in all cases
+ if (prefix != null) {
+ replacementLength += prefix.length();
+ }
+ result.setReplacementOffset(replacementOffset);
+ result.setReplacementLength(replacementLength);
+
return result;
}
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/CompletionTest.java b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/CompletionTest.java
index 59b222d54..82e274d6d 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/CompletionTest.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/CompletionTest.java
@@ -84,6 +84,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(6, completionResult.getReplacementLength());
}
@Test
@@ -95,6 +97,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(14, completionResult.getReplacementLength());
}
@Test
@@ -106,18 +110,18 @@ public class CompletionTest {
assertEquals(null, completionResult.getRemaining());
assertNoServiceCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test(expected = IllegalArgumentException.class)
public void negativeOffsetTest() {
- final ICompletionResult completionResult = engine.getCompletion("aa", -1, variableTypes);
- assertEquals(0, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ engine.getCompletion("aa", -1, variableTypes);
}
@Test(expected = IllegalArgumentException.class)
public void outOffsetTest() {
- final ICompletionResult completionResult = engine.getCompletion("aa", 10, variableTypes);
- assertEquals(0, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ engine.getCompletion("aa", 10, variableTypes);
}
@Test
@@ -129,6 +133,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoServiceCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -141,6 +147,8 @@ public class CompletionTest {
assertNoVariableCompletionProposal(completionResult);
assertApplyOn(completionResult, queryEnvironment, EcorePackage.eINSTANCE.getEClass());
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(5, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -153,6 +161,8 @@ public class CompletionTest {
assertNoVariableCompletionProposal(completionResult);
assertApplyOn(completionResult, queryEnvironment, EcorePackage.eINSTANCE.getEClass());
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(5, completionResult.getReplacementOffset());
+ assertEquals(2, completionResult.getReplacementLength());
}
@Test
@@ -165,6 +175,22 @@ public class CompletionTest {
assertNoVariableCompletionProposal(completionResult);
assertApplyOn(completionResult, queryEnvironment, EcorePackage.eINSTANCE.getEClass());
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(5, completionResult.getReplacementOffset());
+ assertEquals(2, completionResult.getReplacementLength());
+ }
+
+ @Test
+ public void navigationSegmentPrefixLongExpressionRemainingTest() {
+ final ICompletionResult completionResult = engine.getCompletion("self.nam.size()", 7, variableTypes);
+
+ assertEquals("na", completionResult.getPrefix());
+ assertEquals("m", completionResult.getRemaining());
+ assertEquals(1, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertNoVariableCompletionProposal(completionResult);
+ assertApplyOn(completionResult, queryEnvironment, EcorePackage.eINSTANCE.getEClass());
+ assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(5, completionResult.getReplacementOffset());
+ assertEquals(2, completionResult.getReplacementLength());
}
@Test
@@ -178,11 +204,12 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(5, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
public void someIntTest() {
- // FIXME also test without this registration and ensure it fails
queryEnvironment.registerEPackage(EcorePackage.eINSTANCE);
final Set<IType> someIntTypes = new LinkedHashSet<IType>();
someIntTypes.add(new EClassifierType(queryEnvironment, EcorePackage.eINSTANCE.getEInt()));
@@ -196,6 +223,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(8, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -212,6 +241,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(10, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -225,6 +256,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(4, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -236,6 +269,8 @@ public class CompletionTest {
assertEquals(73, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(5, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -249,16 +284,18 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(6, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
+ /**
+ * Checks that the completion includes proposals for the implicit collect (i.e. "aSequence.name" which is
+ * the equivalent of "aSequence->collect(name)").
+ */
@Test
- public void testCollectionImplicitCollect() {
+ public void testImplicitCollectProposalsOnDot() {
final ICompletionResult dotCompletionResult = engine.getCompletion("Sequence{self}.", 15,
variableTypes);
- final ICompletionResult nothingCompletionResult = engine.getCompletion("Sequence{self}", 14,
- variableTypes);
- final ICompletionResult arrowCompletionResult = engine.getCompletion("Sequence{self}->", 16,
- variableTypes);
List<ICompletionProposal> dotCompletionProposals = dotCompletionResult.getProposals(new BasicFilter(
dotCompletionResult));
@@ -276,21 +313,14 @@ public class CompletionTest {
assertTrue(dotProposals.contains("oclIsKindOf()"));
assertTrue(!dotProposals.contains("size()"));
- List<ICompletionProposal> nothingCompletionProposals = nothingCompletionResult
- .getProposals(new BasicFilter(nothingCompletionResult));
- assertEquals("", nothingCompletionResult.getPrefix());
- assertEquals("", nothingCompletionResult.getRemaining());
- assertEquals(4, nothingCompletionProposals.size());
-
- List<String> nothingProposals = new ArrayList<String>();
- for (ICompletionProposal nothingCompletionProposal : nothingCompletionProposals) {
- nothingProposals.add(nothingCompletionProposal.getProposal());
- }
+ assertEquals(15, dotCompletionResult.getReplacementOffset());
+ assertEquals(0, dotCompletionResult.getReplacementLength());
+ }
- assertTrue(nothingProposals.contains("+ "));
- assertTrue(nothingProposals.contains("- "));
- assertTrue(nothingProposals.contains("= "));
- assertTrue(nothingProposals.contains("<> "));
+ @Test
+ public void testImplicitCollectProposalsOnArrow() {
+ final ICompletionResult arrowCompletionResult = engine.getCompletion("Sequence{self}->", 16,
+ variableTypes);
List<ICompletionProposal> arrowCompletionProposals = arrowCompletionResult
.getProposals(new BasicFilter(arrowCompletionResult));
@@ -308,6 +338,33 @@ public class CompletionTest {
assertTrue(arrowProposals.contains("collect()"));
assertTrue(!arrowProposals.contains("name"));
+ assertEquals(16, arrowCompletionResult.getReplacementOffset());
+ assertEquals(0, arrowCompletionResult.getReplacementLength());
+ }
+
+ @Test
+ public void testImplicitCollectProposalsNoSeparator() {
+ final ICompletionResult noSeparatorCompletionResult = engine.getCompletion("Sequence{self}", 14,
+ variableTypes);
+
+ List<ICompletionProposal> nothingCompletionProposals = noSeparatorCompletionResult
+ .getProposals(new BasicFilter(noSeparatorCompletionResult));
+ assertEquals("", noSeparatorCompletionResult.getPrefix());
+ assertEquals("", noSeparatorCompletionResult.getRemaining());
+ assertEquals(4, nothingCompletionProposals.size());
+
+ List<String> nothingProposals = new ArrayList<String>();
+ for (ICompletionProposal nothingCompletionProposal : nothingCompletionProposals) {
+ nothingProposals.add(nothingCompletionProposal.getProposal());
+ }
+
+ assertTrue(nothingProposals.contains("+ "));
+ assertTrue(nothingProposals.contains("- "));
+ assertTrue(nothingProposals.contains("= "));
+ assertTrue(nothingProposals.contains("<> "));
+
+ assertEquals(14, noSeparatorCompletionResult.getReplacementOffset());
+ assertEquals(0, noSeparatorCompletionResult.getReplacementLength());
}
@Test
@@ -322,6 +379,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(7, completionResult.getReplacementLength());
}
@Test
@@ -332,6 +391,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertEquals(0, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(15, completionResult.getReplacementLength());
}
@Test
@@ -346,6 +407,8 @@ public class CompletionTest {
assertEquals(true, proposal instanceof VariableDeclarationCompletionProposal);
assertEquals("myEClass | ", proposal.getProposal());
assertEquals("myEClass | ".length(), proposal.getCursorOffset());
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -361,6 +424,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(17, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -376,6 +441,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(20, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -394,6 +461,8 @@ public class CompletionTest {
}
}
assertTrue(found);
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -406,6 +475,8 @@ public class CompletionTest {
ICompletionProposal proposal = completionResult.getProposals(new BasicFilter(completionResult))
.get(0);
assertEquals("let ", proposal.getProposal());
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(2, completionResult.getReplacementLength());
}
@Test
@@ -415,6 +486,8 @@ public class CompletionTest {
assertEquals("", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
assertEquals(0, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertEquals(4, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -424,6 +497,8 @@ public class CompletionTest {
assertEquals("", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
assertEquals(2, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertEquals(6, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -435,6 +510,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(8, completionResult.getReplacementOffset());
+ assertEquals(7, completionResult.getReplacementLength());
}
@Test
@@ -446,6 +523,8 @@ public class CompletionTest {
ICompletionProposal proposal = completionResult.getProposals(new BasicFilter(completionResult))
.get(0);
assertEquals(" = ", proposal.getProposal());
+ assertEquals(22, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -453,6 +532,8 @@ public class CompletionTest {
final ICompletionResult completionResult = engine.getCompletion("let a = ", 8, variableTypes);
assertEquals(TOTAL_NUMBER_OF_PROPOSAL, completionResult.getProposals(
new BasicFilter(completionResult)).size());
+ assertEquals(8, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -461,6 +542,8 @@ public class CompletionTest {
assertEquals(TOTAL_NUMBER_OF_PROPOSAL, completionResult.getProposals(
new BasicFilter(completionResult)).size());
+ assertEquals(11, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
public void testConditionalIfCompletionFromNothing() {
@@ -478,6 +561,8 @@ public class CompletionTest {
}
}
assertTrue(found);
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -490,6 +575,8 @@ public class CompletionTest {
ICompletionProposal proposal = completionResult.getProposals(new BasicFilter(completionResult))
.get(0);
assertEquals("if ", proposal.getProposal());
+ assertEquals(0, completionResult.getReplacementOffset());
+ assertEquals(1, completionResult.getReplacementLength());
}
@Test
@@ -503,6 +590,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
+ assertEquals(3, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -514,6 +603,8 @@ public class CompletionTest {
assertEquals(1, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("then ", completionResult.getProposals(new BasicFilter(completionResult)).get(0)
.getProposal());
+ assertEquals(8, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
/**
@@ -530,6 +621,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -542,6 +635,21 @@ public class CompletionTest {
assertEquals(1, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("else ", completionResult.getProposals(new BasicFilter(completionResult)).get(0)
.getProposal());
+ assertEquals(18, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
+ }
+
+ @Test
+ public void testConditionWithinTrueBranchCompletion() {
+ final ICompletionResult completionResult = engine.getCompletion("if true then tr", 15, variableTypes);
+
+ assertEquals("tr", completionResult.getPrefix());
+ assertEquals("", completionResult.getRemaining());
+ assertEquals(1, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertEquals("true", completionResult.getProposals(new BasicFilter(completionResult)).get(0)
+ .getProposal());
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(2, completionResult.getReplacementLength());
}
/**
@@ -559,6 +667,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
+ assertEquals(23, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -571,6 +681,8 @@ public class CompletionTest {
assertEquals(1, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("endif ", completionResult.getProposals(new BasicFilter(completionResult)).get(0)
.getProposal());
+ assertEquals(29, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
/**
@@ -587,6 +699,8 @@ public class CompletionTest {
assertNoVariableCompletionProposal(completionResult);
assertApplyOn(completionResult, queryEnvironment, EcorePackage.eINSTANCE.getEClass());
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(35, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
/**
@@ -602,6 +716,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(36, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
/**
@@ -618,6 +734,8 @@ public class CompletionTest {
assertNoVariableCompletionProposal(completionResult);
assertApplyOn(completionResult, queryEnvironment, EcorePackage.eINSTANCE.getEClass());
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(65, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
/**
@@ -633,22 +751,55 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(66, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
- public void test472179TypeLiteralComletion() {
+ public void test472179TypeLiteralCompletion() {
final ICompletionResult completionResult = engine.getCompletion("self.eContainer(ecore::EP)", 25,
variableTypes);
- assertEquals(0, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertEquals(2, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("EP", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(16, completionResult.getReplacementOffset());
+ assertEquals(9, completionResult.getReplacementLength());
}
@Test
- public void test471583TypeLiteralComletion() {
+ public void testTypeLiteralCompletionWithPrefix() {
+ final ICompletionResult completionResult = engine.getCompletion("self.eContainer(ecore::EPack)", 28,
+ variableTypes);
+
+ assertEquals(1, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertEquals("EPack", completionResult.getPrefix());
+ assertEquals("", completionResult.getRemaining());
+ assertNoVariableCompletionProposal(completionResult);
+ assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(16, completionResult.getReplacementOffset());
+ assertEquals(12, completionResult.getReplacementLength());
+ }
+
+ @Test
+ public void testTypeLiteralCompletionWithPrefixAndRemaining() {
+ final ICompletionResult completionResult = engine.getCompletion("self.eContainer(ecore::EPack)", 26,
+ variableTypes);
+
+ assertEquals(2, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertEquals("EPa", completionResult.getPrefix());
+ assertEquals("ck", completionResult.getRemaining());
+ assertNoVariableCompletionProposal(completionResult);
+ assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(16, completionResult.getReplacementOffset());
+ // the "remaining" ck are not part of the replacement
+ assertEquals(10, completionResult.getReplacementLength());
+ }
+
+ @Test
+ public void test471583TypeLiteralCompletion() {
final ICompletionResult completionResult = engine.getCompletion(
"self->eClassifiers->filter(ecore::)", 34, variableTypes);
@@ -657,6 +808,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(27, completionResult.getReplacementOffset());
+ assertEquals(7, completionResult.getReplacementLength());
}
@Test
@@ -675,6 +828,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(14, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -693,6 +848,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(14, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -712,6 +869,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(14, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -730,6 +889,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(14, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -748,6 +909,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -766,6 +929,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -785,6 +950,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -803,6 +970,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -821,6 +990,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -839,6 +1010,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -858,6 +1031,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -876,6 +1051,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -890,6 +1067,8 @@ public class CompletionTest {
assertEquals(0, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
+ assertEquals(8, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -904,6 +1083,11 @@ public class CompletionTest {
assertEquals(0, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("te", completionResult.getPrefix());
assertEquals("st", completionResult.getRemaining());
+
+ // This would replace part of the string...
+ // but makes no sense as there is no completion within string literals
+ assertEquals(8, completionResult.getReplacementOffset());
+ assertEquals(2, completionResult.getReplacementLength());
}
@Test
@@ -918,6 +1102,8 @@ public class CompletionTest {
assertEquals(2, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
+ assertEquals(15, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -936,6 +1122,8 @@ public class CompletionTest {
assertNoFeatureCompletionProposal(completionResult);
assertNoServiceCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
+ assertEquals(16, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -951,34 +1139,56 @@ public class CompletionTest {
assertEquals(1, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
+ assertEquals(31, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
+ }
+
+ @Test
+ public void testOrderedSetMinus() {
+ final Map<String, Set<IType>> types = new LinkedHashMap<String, Set<IType>>();
+
+ final ICompletionResult completionResult = engine.getCompletion("OrderedSet{}-", 13, types);
+
+ assertEquals(128, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertEquals("", completionResult.getPrefix());
+ assertEquals("", completionResult.getRemaining());
+ assertNoEOperationCompletionProposal(completionResult);
+ assertNoVariableCompletionProposal(completionResult);
+ assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(13, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
public void test480853EmptyOrderedSetLiteralInExtension() {
final Map<String, Set<IType>> types = new LinkedHashMap<String, Set<IType>>();
- final ICompletionResult completionResult = engine.getCompletion("OrderedSet()->", 13, types);
+ final ICompletionResult completionResult = engine.getCompletion("OrderedSet{}->", 14, types);
- assertEquals(117, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertEquals(56, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(14, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
public void test480853EmptySequenceLiteralInExtension() {
final Map<String, Set<IType>> types = new LinkedHashMap<String, Set<IType>>();
- final ICompletionResult completionResult = engine.getCompletion("Sequence()->", 12, types);
+ final ICompletionResult completionResult = engine.getCompletion("Sequence{}->", 12, types);
- assertEquals(117, completionResult.getProposals(new BasicFilter(completionResult)).size());
+ assertEquals(56, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
assertNoEOperationCompletionProposal(completionResult);
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(12, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
public void testTypeLiteralInTypeSetLiteral() {
@@ -989,6 +1199,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(1, completionResult.getReplacementOffset());
+ assertEquals(7, completionResult.getReplacementLength());
}
@Test
@@ -1000,6 +1212,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(1, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -1012,6 +1226,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(14, completionResult.getReplacementOffset());
+ assertEquals(7, completionResult.getReplacementLength());
}
@Test
@@ -1023,6 +1239,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(14, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -1035,6 +1253,8 @@ public class CompletionTest {
assertEquals("", completionResult.getRemaining());
assertNoVariableCompletionProposal(completionResult);
assertNoVariableDeclarationCompletionProposal(completionResult);
+ assertEquals(16, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -1049,6 +1269,8 @@ public class CompletionTest {
assertNoVariableDeclarationCompletionProposal(completionResult);
assertNoFeatureCompletionProposal(completionResult);
assertNoEOperationCompletionProposal(completionResult);
+ assertEquals(17, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test
@@ -1063,6 +1285,8 @@ public class CompletionTest {
assertEquals(0, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("n", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
+ assertEquals(2, completionResult.getReplacementOffset());
+ assertEquals(1, completionResult.getReplacementLength());
}
@Test
@@ -1078,6 +1302,8 @@ public class CompletionTest {
assertEquals(0, completionResult.getProposals(new BasicFilter(completionResult)).size());
assertEquals("", completionResult.getPrefix());
assertEquals("", completionResult.getRemaining());
+ assertEquals(31, completionResult.getReplacementOffset());
+ assertEquals(0, completionResult.getReplacementLength());
}
@Test

Back to the top