Skip to content

Commit 0426dfb

Browse files
committed
Fix for issue #288: editor focus and selection after method completion
1 parent be25d6f commit 0426dfb

File tree

10 files changed

+306
-389
lines changed

10 files changed

+306
-389
lines changed

ide-test/org.codehaus.groovy.eclipse.codeassist.completion.test/src/org/codehaus/groovy/eclipse/codeassist/tests/CompletionTestSuite.groovy

+8-1
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,25 @@ import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor
4343
import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer
4444
import org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal
4545
import org.eclipse.jdt.internal.ui.text.java.LazyGenericTypeProposal
46+
import org.eclipse.jdt.ui.PreferenceConstants
4647
import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal
4748
import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer
4849
import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext
4950
import org.eclipse.jface.text.Document
5051
import org.eclipse.jface.text.IDocument
5152
import org.eclipse.jface.text.contentassist.ICompletionProposal
53+
import org.junit.After
5254

5355
/**
5456
* Includes utilities to help with all Content assist tests.
5557
*/
5658
abstract class CompletionTestSuite extends GroovyEclipseTestSuite {
5759

60+
@After
61+
final void tearDownCompletionTestCase() {
62+
setJavaPreference(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS, '')
63+
}
64+
5865
protected ICompletionProposal[] performContentAssist(ICompilationUnit unit, int offset, Class<? extends IJavaCompletionProposalComputer> computerClass) {
5966
waitForIndex()
6067
JavaEditor editor = openInEditor(unit)
@@ -242,7 +249,7 @@ abstract class CompletionTestSuite extends GroovyEclipseTestSuite {
242249

243250
protected ICompletionProposal[] createProposalsAtOffset(String contents, String javaContents, int completionOffset) {
244251
if (javaContents != null) {
245-
addJavaSource("public class JavaClass { }\n" + javaContents, "JavaClass", "")
252+
addJavaSource("public class JavaClass { }\n" + javaContents, "JavaClass")
246253
}
247254
def gunit = addGroovySource(contents, nextUnitName())
248255
return createProposalsAtOffset(gunit, completionOffset)

ide-test/org.codehaus.groovy.eclipse.codeassist.completion.test/src/org/codehaus/groovy/eclipse/codeassist/tests/FieldCompletionTests.groovy

+169-204
Large diffs are not rendered by default.

ide-test/org.codehaus.groovy.eclipse.codeassist.completion.test/src/org/codehaus/groovy/eclipse/codeassist/tests/InnerTypeCompletionTests.groovy

+41-42
Original file line numberDiff line numberDiff line change
@@ -23,91 +23,90 @@ import org.junit.Test
2323
*/
2424
final class InnerTypeCompletionTests extends CompletionTestSuite {
2525

26-
private static final String XXX = "xxx"
27-
private static final String HTML = "HTML"
28-
private static final String HTML_PROPOSAL = "HTML - javax.swing.text.html"
26+
private static final String HTML = 'HTML'
27+
private static final String HTML_PROPOSAL = 'HTML - javax.swing.text.html'
2928

3029
@Test
31-
void testCompletionInInnerClass1() {
32-
String contents = "class Outer { class Inner { \nHTML\n } }"
30+
void testInInnerClass1() {
31+
String contents = 'class Outer { class Inner { \nHTML\n } }'
3332
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, HTML))
3433
proposalExists(proposals, HTML_PROPOSAL, 1)
3534
}
3635

3736
@Test
38-
void testCompletionInInnerClass2() {
39-
String contents = "class Outer { class Inner { def x(HTML) { } } }"
37+
void testInInnerClass2() {
38+
String contents = 'class Outer { class Inner { def x(HTML) { } } }'
4039
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, HTML))
4140
proposalExists(proposals, HTML_PROPOSAL, 1)
4241
}
4342

4443
@Test
45-
void testCompletionInInnerClass3() {
46-
String contents = "class Outer { class Inner extends HTML { } }"
44+
void testInInnerClass3() {
45+
String contents = 'class Outer { class Inner extends HTML { } }'
4746
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, HTML))
4847
proposalExists(proposals, HTML_PROPOSAL, 1)
4948
}
5049

5150
@Test
52-
void testCompletionInInnerClass4() {
53-
String contents = "class Outer { class Inner { def x() { HTML } } }"
51+
void testInInnerClass4() {
52+
String contents = 'class Outer { class Inner { def x() { HTML } } }'
5453
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, HTML))
5554
proposalExists(proposals, HTML_PROPOSAL, 1)
5655
}
5756

5857
@Test
59-
void testCompletionOfInnerClass1() {
60-
String contents = "class Outer { class Inner { Inner f } } "
61-
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, "Inner"))
62-
proposalExists(proposals, "Inner", 1)
58+
void testInnerClass1() {
59+
String contents = 'class Outer { class Inner { Inner f } } '
60+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'Inner'))
61+
proposalExists(proposals, 'Inner', 1)
6362
}
6463

6564
@Test
66-
void testCompletionOfInnerClass2() {
67-
String contents = "class Outer { class Inner { Inner f } } "
68-
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, "Inner"))
69-
proposalExists(proposals, "Inner", 1)
65+
void testInnerClass2() {
66+
String contents = 'class Outer { class Inner { Inner f } } '
67+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'Inner'))
68+
proposalExists(proposals, 'Inner', 1)
7069
}
7170

7271
@Test
73-
void testCompletionOFInnerMember1() {
74-
String contents = "class Outer { class Inner { \n def y() { xxx } \n def xxx } } "
75-
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, XXX))
76-
proposalExists(proposals, XXX, 1)
72+
void testInnerMember1() {
73+
String contents = 'class Outer { class Inner { \n def y() { xxx } \n def xxx } }'
74+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'xxx'))
75+
proposalExists(proposals, 'xxx', 1)
7776
}
7877

7978
@Test
8079
void testCompletionOFInnerMember2() {
81-
String contents = "class Outer { Inner i\ndef y() { i.xxx } \nclass Inner { \n def xxx } } "
82-
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, XXX))
83-
proposalExists(proposals, XXX, 1)
80+
String contents = 'class Outer { Inner i\ndef y() { i.xxx } \nclass Inner { \n def xxx } }'
81+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'xxx'))
82+
proposalExists(proposals, 'xxx', 1)
8483
}
8584

8685
@Test
87-
void testCompletionOFInnerMember3() {
88-
String contents = "def y(Outer.Inner i) { i.xxx } \nclass Outer { class Inner { \n def xxx } } "
89-
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, XXX))
90-
proposalExists(proposals, XXX, 1)
86+
void testInnerMember3() {
87+
String contents = 'def y(Outer.Inner i) { i.xxx } \nclass Outer { class Inner { \n def xxx } }'
88+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'xxx'))
89+
proposalExists(proposals, 'xxx', 1)
9190
}
9291

9392
@Test
94-
void testCompletionOFInnerMember4() {
95-
String contents = "def y(Outer.Inner i) { i.xxx } \nclass Outer { class Inner { \n def getXxx() {} } } "
96-
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, XXX))
97-
proposalExists(proposals, XXX, 1)
93+
void testInnerMember4() {
94+
String contents = 'def y(Outer.Inner i) { i.xxx } \nclass Outer { class Inner { \n def getXxx() {} } }'
95+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'xxx'))
96+
proposalExists(proposals, 'xxx', 1)
9897
}
9998

10099
@Test
101-
void testCompletionOFInnerMember5() {
102-
String contents = "Outer.Inner i\ni.xxx\nclass Outer { class Inner { \n def xxx } } "
103-
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, XXX))
104-
proposalExists(proposals, XXX, 1)
100+
void testInnerMember5() {
101+
String contents = 'Outer.Inner i\ni.xxx\nclass Outer { class Inner { \n def xxx } }'
102+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'xxx'))
103+
proposalExists(proposals, 'xxx', 1)
105104
}
106105

107106
@Test
108-
void testCompletionOFInnerMember6() {
109-
String contents = "Outer.Inner i\ni.xxx\nclass Outer { class Inner { \n def getXxx() {} } } "
110-
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, XXX))
111-
proposalExists(proposals, XXX, 1)
107+
void testInnerMember6() {
108+
String contents = 'Outer.Inner i\ni.xxx\nclass Outer { class Inner { \n def getXxx() {} } }'
109+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'xxx'))
110+
proposalExists(proposals, 'xxx', 1)
112111
}
113112
}

ide-test/org.codehaus.groovy.eclipse.codeassist.completion.test/src/org/codehaus/groovy/eclipse/codeassist/tests/MethodCompletionTests.groovy

+20-27
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,15 @@ import org.codehaus.groovy.ast.stmt.ExpressionStatement
2525
import org.codehaus.groovy.ast.stmt.ReturnStatement
2626
import org.codehaus.groovy.ast.stmt.Statement
2727
import org.codehaus.groovy.eclipse.codeassist.proposals.GroovyMethodProposal
28-
import org.codehaus.groovy.eclipse.codeassist.requestor.GroovyCompletionProposalComputer
2928
import org.codehaus.jdt.groovy.model.GroovyCompilationUnit
3029
import org.eclipse.jdt.core.compiler.CharOperation
3130
import org.eclipse.jdt.ui.PreferenceConstants
3231
import org.eclipse.jface.text.Document
3332
import org.eclipse.jface.text.contentassist.ICompletionProposal
34-
import org.junit.After
3533
import org.junit.Test
3634

3735
final class MethodCompletionTests extends CompletionTestSuite {
3836

39-
@After
40-
void tearDown() {
41-
setJavaPreference(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS, '')
42-
}
43-
4437
private List<MethodNode> delegateTestParameterNames(GroovyCompilationUnit unit) {
4538
waitForIndex()
4639
List<MethodNode> methods = extract(unit).getMethods('m')
@@ -87,7 +80,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
8780
HttpRetryException f() { null }
8881
f().
8982
'''.stripIndent()
90-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getIndexOf(contents, 'f().'), GroovyCompletionProposalComputer)
83+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'f().'))
9184
proposalExists(proposals, 'cause', 1)
9285
}
9386

@@ -97,7 +90,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
9790
HttpRetryException f() { null }
9891
this.f().
9992
'''.stripIndent()
100-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getIndexOf(contents, 'f().'), GroovyCompletionProposalComputer)
93+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'f().'))
10194
proposalExists(proposals, 'cause', 1)
10295
}
10396

@@ -107,7 +100,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
107100
class Super { HttpRetryException f() { null } }
108101
new Super().f().
109102
'''.stripIndent()
110-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getIndexOf(contents, 'f().'), GroovyCompletionProposalComputer)
103+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'f().'))
111104
proposalExists(proposals, 'cause', 1)
112105
}
113106

@@ -118,7 +111,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
118111
class Sub extends Super { }
119112
new Sub().f().
120113
'''.stripIndent()
121-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getIndexOf(contents, 'f().'), GroovyCompletionProposalComputer)
114+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'f().'))
122115
proposalExists(proposals, 'cause', 1)
123116
}
124117

@@ -129,7 +122,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
129122
def s = new Super()
130123
s.f(null).
131124
'''.stripIndent()
132-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getIndexOf(contents, 'f(null).'), GroovyCompletionProposalComputer)
125+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'f(null).'))
133126
proposalExists(proposals, 'cause', 1)
134127
}
135128

@@ -140,7 +133,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
140133
def s = new Super()
141134
s.f().
142135
'''.stripIndent()
143-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getIndexOf(contents, 'f().'), GroovyCompletionProposalComputer)
136+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, 'f().'))
144137
proposalExists(proposals, 'cause', 1)
145138
}
146139

@@ -228,7 +221,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
228221
(1).
229222
def u
230223
'''.stripIndent()
231-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getIndexOf(contents, '(1).'), GroovyCompletionProposalComputer)
224+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, '(1).'))
232225
proposalExists(proposals, 'abs', 1)
233226
}
234227

@@ -238,37 +231,37 @@ final class MethodCompletionTests extends CompletionTestSuite {
238231
(((1))).
239232
def u
240233
'''.stripIndent()
241-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getIndexOf(contents, '(((1))).'), GroovyCompletionProposalComputer)
234+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, '(((1))).'))
242235
proposalExists(proposals, 'abs', 1)
243236
}
244237

245238
@Test // GRECLIPSE-1374
246239
void testParensExprs3() {
247240
String contents = '(((1))).abs()'
248-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getIndexOf(contents, '(((1))).a'), GroovyCompletionProposalComputer)
241+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getIndexOf(contents, '(((1))).a'))
249242
proposalExists(proposals, 'abs', 1)
250243
}
251244

252245
@Test // GRECLIPSE-1528
253246
void testGetterSetter1() {
254247
String contents = 'class A { private int value\n}'
255-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, '\n'), GroovyCompletionProposalComputer)
248+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, '\n'))
256249
proposalExists(proposals, 'getValue', 1)
257250
proposalExists(proposals, 'setValue', 1)
258251
}
259252

260253
@Test
261254
void testGetterSetter2() {
262255
String contents = 'class A { private final int value\n}'
263-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, '\n'), GroovyCompletionProposalComputer)
256+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, '\n'))
264257
proposalExists(proposals, 'getValue', 1)
265258
proposalExists(proposals, 'setValue', 0)
266259
}
267260

268261
@Test
269262
void testGetterSetter3() {
270263
String contents = 'class A { private boolean value\n}'
271-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, '\n'), GroovyCompletionProposalComputer)
264+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, '\n'))
272265
proposalExists(proposals, 'isValue', 1)
273266
proposalExists(proposals, 'setValue', 1)
274267
}
@@ -283,7 +276,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
283276
}
284277
}
285278
'''.stripIndent()
286-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, 'A.'), GroovyCompletionProposalComputer)
279+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'A.'))
287280
proposalExists(proposals, 'util', 1)
288281
}
289282

@@ -300,7 +293,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
300293
}
301294
}
302295
'''.stripIndent()
303-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, 'A.'), GroovyCompletionProposalComputer)
296+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'A.'))
304297
proposalExists(proposals, 'util', 1)
305298
}
306299

@@ -314,7 +307,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
314307
}
315308
}
316309
'''.stripIndent()
317-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, 'A.class.'), GroovyCompletionProposalComputer)
310+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'A.class.'))
318311
proposalExists(proposals, 'util', 1)
319312
}
320313

@@ -330,7 +323,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
330323
A.class.
331324
}
332325
}'''.stripIndent()
333-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, 'A.class.'), GroovyCompletionProposalComputer)
326+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'A.class.'))
334327
proposalExists(proposals, 'util', 1)
335328
}
336329

@@ -340,7 +333,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
340333
import static java.util.regex.Pattern.compile
341334
comp
342335
'''.stripIndent()
343-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, 'comp'), GroovyCompletionProposalComputer)
336+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'comp'))
344337
proposalExists(proposals, 'compile', 2)
345338
}
346339

@@ -350,7 +343,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
350343
import static java.util.regex.Pattern.*
351344
comp
352345
'''.stripIndent()
353-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, 'comp'), GroovyCompletionProposalComputer)
346+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'comp'))
354347
proposalExists(proposals, 'compile', 2)
355348
}
356349

@@ -361,7 +354,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
361354
String contents = '''\
362355
comp
363356
'''.stripIndent()
364-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, 'comp'), GroovyCompletionProposalComputer)
357+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'comp'))
365358
proposalExists(proposals, 'compile', 2)
366359

367360
applyProposalAndCheck(new Document(contents), findFirstProposal(proposals, 'compile', false), '''\
@@ -378,7 +371,7 @@ final class MethodCompletionTests extends CompletionTestSuite {
378371
String contents = '''\
379372
comp
380373
'''.stripIndent()
381-
ICompletionProposal[] proposals = performContentAssist(addGroovySource(contents), getLastIndexOf(contents, 'comp'), GroovyCompletionProposalComputer)
374+
ICompletionProposal[] proposals = createProposalsAtOffset(contents, getLastIndexOf(contents, 'comp'))
382375
proposalExists(proposals, 'compile', 2)
383376

384377
applyProposalAndCheck(new Document(contents), findFirstProposal(proposals, 'compile', false), '''\

0 commit comments

Comments
 (0)