blob: 5fb1b38873f119463e839003547292749f6566b0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.parser;
import junit.framework.Test;
/**
* Completion is expected to be a ReferenceType.
*/
public class ReferenceTypeCompletionTest extends AbstractCompletionTest {
public ReferenceTypeCompletionTest(String testName) {
super(testName);
}
public static Test suite() {
return buildAllCompliancesTestSuite(ReferenceTypeCompletionTest.class);
}
/*
* Regression test for 1FTZCIG.
*/
public void test1FTZCIG() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" new X() { \n" +
" protected void bar() { \n" +
" } \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"p",
// expectedCompletionNodeToString:
"<CompleteOnType:p>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" new X() {\n" +
" <CompleteOnType:p>;\n" +
" void bar() {\n" +
" }\n" +
" };\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"p",
// expectedReplacedSource:
"protected",
// test name
"<1FTZCIG>"
);
}
/*
* Block ::= OpenBlock '{' <BlockStatementsopt> '}'
*/
public void testBlock() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" try { \n" +
" Xxx o = new Y(); \n" +
" } catch (Exception e) { \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnName:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" {\n" +
" <CompleteOnName:X>;\n" +
" }\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on block>"
);
}
/*
* BlockStatements ::= BlockStatements <BlockStatement>
*/
public void testBlockStatements() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" int i = 0; \n" +
" Xxx o = new Y(); \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnName:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" int i;\n" +
" <CompleteOnName:X>;\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on block statements>"
);
}
/*
* CatchClause ::= 'catch' '(' <FormalParameter> ')' Block
*/
public void testCatchClause1() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" try { \n" +
" fred(); \n" +
" } catch (Xxx e) { \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnException:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" try \n" +
" {\n" +
" fred();\n" +
" }\n" +
" catch (<CompleteOnException:X> ) {\n" +
" }\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on catch clause 1>"
);
}
/*
* CatchClause ::= 'catch' '(' <FormalParameter> ')' Block
*/
public void testCatchClause2() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" try { \n" +
" fred(); \n" +
" } catch (final Xxx e) { \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnException:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" try \n" +
" {\n" +
" fred();\n" +
" }\n" +
" catch (<CompleteOnException:X> ) {\n" +
" }\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on catch clause 2>"
);
}
/*
* CatchClause ::= 'catch' '(' <FormalParameter> ')' Block
*/
public void testCatchClause3() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" try { \n" +
" fred(); \n" +
" } catch (x.y.Xxx e) { \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"x.y.X",
// expectedCompletionNodeToString:
"<CompleteOnException:x.y.X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" try \n" +
" {\n" +
" fred();\n" +
" }\n" +
" catch (<CompleteOnException:x.y.X> ) {\n" +
" }\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"x.y.Xxx",
// test name
"<complete on catch clause 3>"
);
}
/*
* ClassBody ::= '{' <ClassBodyDeclarationsopt> '}'
*/
public void testClassBody() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" Xxx foo() { \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" <CompleteOnType:X>\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class body>"
);
}
/*
* ClassBodyDeclarations ::= ClassBodyDeclarations <ClassBodyDeclaration>
*/
public void testClassBodyDeclarations() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" int i = 0; \n" +
" Xxx foo() { \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" int i;\n" +
" Bar() {\n" +
" }\n" +
" <CompleteOnType:X>\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class body declarations>"
);
}
/*
* ClassInstanceCreationExpression ::= 'new' <ClassType> '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpression1() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" new Xxx().zzz(); \n" +
" } \n" +
"}\n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" new <CompleteOnType:X>();\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression 1>"
);
}
/*
* ClassInstanceCreationExpression ::= 'new' <ClassType> '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpression2() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" new Y(new Xxx()).zzz(); \n" +
" } \n" +
"}\n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" new Y(new <CompleteOnType:X>());\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression 2>"
);
}
/*
* ClassInstanceCreationExpression ::= 'new' <ClassType> '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpression3() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" new Y(1, true, new Xxx()).zzz(); \n" +
" } \n" +
"}\n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" new Y(1, true, new <CompleteOnType:X>());\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression 3>"
);
}
/*
* ClassInstanceCreationExpression ::= 'new' <ClassType> '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpression4() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" fred().new Y(new Xxx()).zzz(); \n" +
" } \n" +
"}\n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" fred().new Y(new <CompleteOnType:X>());\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression 4>"
);
}
/*
* ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpressionName1() {
this.runTestCheckMethodParse(
// compilationUnit:
"public class Bar { \n" +
" static Bar baz; \n" +
" public class X { \n" +
" void foo() { \n" +
" Bar.baz.new Xxx(); \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"new X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"public class Bar {\n" +
" public class X {\n" +
" public X() {\n" +
" }\n" +
" void foo() {\n" +
" Bar.baz.new <CompleteOnType:X>();\n" +
" }\n" +
" }\n" +
" static Bar baz;\n" +
" <clinit>() {\n" +
" }\n" +
" public Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression with name 1>"
);
}
/*
* ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpressionName2() {
this.runTestCheckMethodParse(
// compilationUnit:
"public class Bar { \n" +
" static Bar baz; \n" +
" public class X { \n" +
" void foo() { \n" +
" new Y(Bar.baz.new Xxx()); \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"new X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"public class Bar {\n" +
" public class X {\n" +
" public X() {\n" +
" }\n" +
" void foo() {\n" +
" new Y(Bar.baz.new <CompleteOnType:X>());\n" +
" }\n" +
" }\n" +
" static Bar baz;\n" +
" <clinit>() {\n" +
" }\n" +
" public Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression with name 2>"
);
}
/*
* ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpressionName3() {
this.runTestCheckMethodParse(
// compilationUnit:
"public class Bar { \n" +
" static Bar baz; \n" +
" public class X { \n" +
" void foo() { \n" +
" new Y(1, true, Bar.baz.new Xxx()); \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"new X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"public class Bar {\n" +
" public class X {\n" +
" public X() {\n" +
" }\n" +
" void foo() {\n" +
" new Y(1, true, Bar.baz.new <CompleteOnType:X>());\n" +
" }\n" +
" }\n" +
" static Bar baz;\n" +
" <clinit>() {\n" +
" }\n" +
" public Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression with name 3>"
);
}
/*
* ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpressionName4() {
this.runTestCheckMethodParse(
// compilationUnit:
"public class Bar { \n" +
" static Bar baz; \n" +
" public class X { \n" +
" void foo() { \n" +
" fred().new Y(Bar.baz.new Xxx()); \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"new X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"public class Bar {\n" +
" public class X {\n" +
" public X() {\n" +
" }\n" +
" void foo() {\n" +
" fred().new Y(Bar.baz.new <CompleteOnType:X>());\n" +
" }\n" +
" }\n" +
" static Bar baz;\n" +
" <clinit>() {\n" +
" }\n" +
" public Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression with name 4>"
);
}
/*
* ClassInstanceCreationExpression ::= Primary '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpressionPrimary1() {
this.runTestCheckMethodParse(
// compilationUnit:
"public class Bar { \n" +
" public class X { \n" +
" void foo() { \n" +
" new Bar().new Xxx(); \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"new X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"public class Bar {\n" +
" public class X {\n" +
" public X() {\n" +
" }\n" +
" void foo() {\n" +
" new Bar().new <CompleteOnType:X>();\n" +
" }\n" +
" }\n" +
" public Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression with primary 1>"
);
}
/*
* ClassInstanceCreationExpression ::= Primary '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpressionPrimary2() {
this.runTestCheckMethodParse(
// compilationUnit:
"public class Bar { \n" +
" public class X { \n" +
" void foo() { \n" +
" new Y(new Bar().new Xxx()); \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"new X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"public class Bar {\n" +
" public class X {\n" +
" public X() {\n" +
" }\n" +
" void foo() {\n" +
" new Y(new Bar().new <CompleteOnType:X>());\n" +
" }\n" +
" }\n" +
" public Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression with primary 2>"
);
}
/*
* ClassInstanceCreationExpression ::= Primary '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpressionPrimary3() {
this.runTestCheckMethodParse(
// compilationUnit:
"public class Bar { \n" +
" public class X { \n" +
" void foo() { \n" +
" fred().new Y(new Bar().new Xxx()); \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"new X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"public class Bar {\n" +
" public class X {\n" +
" public X() {\n" +
" }\n" +
" void foo() {\n" +
" fred().new Y(new Bar().new <CompleteOnType:X>());\n" +
" }\n" +
" }\n" +
" public Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression with primary 3>"
);
}
/*
* ClassInstanceCreationExpression ::= Primary '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
*/
public void testClassInstanceCreationExpressionPrimary4() {
this.runTestCheckMethodParse(
// compilationUnit:
"public class Bar { \n" +
" public class X { \n" +
" void foo() { \n" +
" new Y(1, true, new Bar().new Xxx());\n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"new X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"public class Bar {\n" +
" public class X {\n" +
" public X() {\n" +
" }\n" +
" void foo() {\n" +
" new Y(1, true, new Bar().new <CompleteOnType:X>());\n" +
" }\n" +
" }\n" +
" public Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class instance creation expression with primary 4>"
);
}
/*
* ClassTypeList ::= ClassTypeList ',' <ClassTypeElt>
*/
public void testClassTypeList() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" void foo() throws Exception, Xxx { \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnException:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() throws Exception, <CompleteOnException:X> {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on class type list>"
);
}
/*
* ConstructorBody ::= NestedMethod '{' <BlockStatementsopt> '}'
*/
public void testConstructorBody() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" Bar() { \n" +
" Xxx o = new Y(); \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnName:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" super();\n" +
" <CompleteOnName:X>;\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on constructor body>"
);
}
/*
* ConstructorDeclarator ::= 'Identifier' '(' <FormalParameterListopt> ')'
*/
public void testConstructorDeclarator() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" Bar(Xxx o) { \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar(<CompleteOnType:X> o) {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on constructor declarator>"
);
}
/*
* The reference type is burried in several blocks
*/
public void testDeepReference() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" if (a == 2) { \n" +
" } \n" +
" try { \n" +
" } finally { \n" +
" if (1 == fgh) { \n" +
" Xxx o = null; \n" +
" } \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnName:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" {\n" +
" {\n" +
" if ((1 == fgh))\n" +
" <CompleteOnName:X>;\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on deep type>"
);
}
/*
* Super ::= 'extends' <ClassType>
*/
public void testExtendsClass() {
runTestCheckDietParse(
// compilationUnit:
"class Bar extends Xxx { \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnClass:X>",
// expectedUnitDisplayString:
"class Bar extends <CompleteOnClass:X> {\n" +
" Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on extends>"
);
}
/*
* ExtendsInterfaces ::= 'extends' <InterfaceTypeList>
*/
public void testExtendsInterface() {
runTestCheckDietParse(
// compilationUnit:
"interface Bar extends Xxx { \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnInterface:X>",
// expectedUnitDisplayString:
"interface Bar extends <CompleteOnInterface:X> {\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on extends>"
);
}
/*
* FieldDeclaration ::= Modifiersopt <Type> VariableDeclarators ';'
* where Modifiersopt is not empty
*/
public void testFieldDeclarationWithModifiers() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" public final Xxx foo; \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>;",
// expectedUnitDisplayString:
"class Bar {\n" +
" <CompleteOnType:X>;\n" +
" Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on field declaration with modifiers>"
);
}
/*
* FieldDeclaration ::= Modifiersopt <Type> VariableDeclarators ';'
* where Modifiersopt is empty
*/
public void testFieldDeclarationWithoutModifiers() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" Xxx foo; \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>;",
// expectedUnitDisplayString:
"class Bar {\n" +
" <CompleteOnType:X>;\n" +
" Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on field declaration without modifiers>"
);
}
/*
* FormalParameter ::= Modifiers <Type> VariableDeclaratorId
*/
public void testFormalParameter() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" void foo(final Xxx x) { \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo(final <CompleteOnType:X> x) {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on formal parameter>"
);
}
/*
* FormalParameterList ::= FormalParameterList ',' <FormalParameter>
*/
public void testFormalParameterList() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" void foo(int i, final Object o, Xxx x) {\n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo(int i, final Object o, <CompleteOnType:X> x) {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on formal parameter list>"
);
}
/*
* ForStatement ::= 'for' '(' <ForInitopt> ';' Expressionopt ';' ForUpdateopt ')' Statement
* or
* ForStatementNoShortIf ::= 'for' '(' <ForInitopt> ';' Expressionopt ';' ForUpdateopt ')' StatementNoShortIf
*/
public void testForStatement() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" for (Xxx o = new Y(); o.size() < 10; ) {\n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnName:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" <CompleteOnName:X>;\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on for statement>"
);
}
/*
* Interfaces ::= 'implements' <InterfaceTypeList>
*/
public void testImplements() {
runTestCheckDietParse(
// compilationUnit:
"class Bar implements Xxx { \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnInterface:X>",
// expectedUnitDisplayString:
"class Bar implements <CompleteOnInterface:X> {\n" +
" Bar() {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on implements>"
);
}
/*
* RelationalExpression ::= RelationalExpression 'instanceof' <ReferenceType>
*/
public void testInstanceOf() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" boolean foo() { \n" +
" return this instanceof Xxx; \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" boolean foo() {\n" +
" (this instanceof <CompleteOnType:X>);\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on instanceof>"
);
}
/*
* InterfaceBody ::= '{' <InterfaceMemberDeclarationsopt> '}'
*/
public void testInterfaceBody() {
runTestCheckDietParse(
// compilationUnit:
"interface Bar { \n" +
" Xxx foo(); \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"interface Bar {\n" +
" <CompleteOnType:X>\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on interface body>"
);
}
/*
* InterfaceMemberDeclarations ::= InterfaceMemberDeclarations <InterfaceMemberDeclaration>
*/
public void testInterfaceMemberDeclarations() {
runTestCheckDietParse(
// compilationUnit:
"interface Bar { \n" +
" int CONSTANT = 0; \n" +
" Xxx foo(); \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"interface Bar {\n" +
" int CONSTANT;\n" +
" <clinit>() {\n" +
" }\n" +
" <CompleteOnType:X>\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on interface member declarations>"
);
}
/*
* InterfaceTypeList ::= InterfaceTypeList ',' <InterfaceType>
*/
public void testInterfaceTypeList() {
runTestCheckDietParse(
// compilationUnit:
"interface Bar extends Comparable, Xxx { \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnInterface:X>",
// expectedUnitDisplayString:
"interface Bar extends Comparable, <CompleteOnInterface:X> {\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on interface list>"
);
}
/*
* LocalVariableDeclaration ::= Modifiers <Type> VariableDeclarators
*/
public void testLocalVariableDeclaration() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" final Xxx o = new Y(); \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnName:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" <CompleteOnName:X>;\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on local variable declaration>"
);
}
/*
* MethodBody ::= NestedMethod '{' <BlockStatementsopt> '}'
*/
public void testMethodBody() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" Xxx o = new Y(); \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnName:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" <CompleteOnName:X>;\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on method body>"
);
}
/*
* MethodDeclarator ::= 'Identifier' '(' <FormalParameterListopt> ')' Dimsopt
*/
public void testMethodDeclarator() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" void foo(Xxx o) { \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo(<CompleteOnType:X> o) {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on method declarator>"
);
}
/*
* MethodHeader ::= Modifiersopt <Type> MethodDeclarator Throwsopt
* where Modifiersopt is not empty
*/
public void testMethodHeaderWithModifiers() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" public static Xxx foo() { \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" <CompleteOnType:X>\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on method header with modifiers>"
);
}
/*
* MethodHeader ::= Modifiersopt <Type> MethodDeclarator Throwsopt
* where Modifiersopt is empty
*/
public void testMethodHeaderWithoutModifiers() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" Xxx foo() { \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" <CompleteOnType:X>\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on method header without modifiers>"
);
}
/*
* Completion on a qualified type reference, where the cursor is in the
* first type reference.
*/
public void testQualifiedTypeReferenceShrinkAll() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" int i = 0; \n" +
" new a.b.c.Xxx(); \n" +
" } \n" +
"} \n",
// completeBehind:
" new a",
// expectedCompletionNodeToString:
"<CompleteOnType:a>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" int i;\n" +
" new <CompleteOnType:a>();\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"a",
// expectedReplacedSource:
"a",
// test name
"<complete on qualified type reference (shrink all)>"
);
}
/*
* Completion on a qualified type reference, where the cursor is right after the first dot.
*/
public void testQualifiedTypeReferenceShrinkAllButOne() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" int i = 0; \n" +
" new a.b.c.Xxx(); \n" +
" } \n" +
"} \n",
// completeBehind:
"a.",
// expectedCompletionNodeToString:
"<CompleteOnType:a.>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" int i;\n" +
" new <CompleteOnType:a.>();\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"",
// expectedReplacedSource:
"a.",
// test name
"<complete on qualified type reference (shrink all but one)>"
);
}
/*
* Completion on a qualified type reference, where the cursor is right after the end
* of the last type reference.
*/
public void testQualifiedTypeReferenceShrinkNone() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" int i = 0; \n" +
" new a.b.c.Xxx(); \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnType:a.b.c.X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" int i;\n" +
" new <CompleteOnType:a.b.c.X>();\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"a.b.c.Xxx",
// test name
"<complete on qualified type reference (shrink none)>"
);
}
/*
* Completion on a qualified type reference, where the cursor is right after the
* last dot.
*/
public void testQualifiedTypeReferenceShrinkOne() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" int i = 0; \n" +
" new a.b.c.Xxx(); \n" +
" } \n" +
"} \n",
// completeBehind:
"a.b.c.",
// expectedCompletionNodeToString:
"<CompleteOnType:a.b.c.>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" int i;\n" +
" new <CompleteOnType:a.b.c.>();\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"",
// expectedReplacedSource:
"a.b.c.",
// test name
"<complete on qualified type reference (shrink one)>"
);
}
/*
* SwitchBlockStatement ::= SwitchLabels <BlockStatements>
*/
public void testSwitchBlockStatement() {
this.runTestCheckMethodParse(
// compilationUnit:
"class Bar { \n" +
" void foo() { \n" +
" int i = 1; \n" +
" switch (i) { \n" +
" case 1: \n" +
" Xxx o = fred(i); \n" +
" break; \n" +
" default: \n" +
" } \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnName:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() {\n" +
" int i;\n" +
" {\n" +
" <CompleteOnName:X>;\n" +
" }\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on switch block statement>"
);
}
/*
* Throws ::= 'throws' <ClassTypeList>
*/
public void testThrows() {
runTestCheckDietParse(
// compilationUnit:
"class Bar { \n" +
" void foo() throws Xxx { \n" +
" } \n" +
"} \n",
// completeBehind:
"X",
// expectedCompletionNodeToString:
"<CompleteOnException:X>",
// expectedUnitDisplayString:
"class Bar {\n" +
" Bar() {\n" +
" }\n" +
" void foo() throws <CompleteOnException:X> {\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
"X",
// expectedReplacedSource:
"Xxx",
// test name
"<complete on throws>"
);
}
}