diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 95611843a91..903f05a289d 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -431,6 +431,7 @@ public class JetParsing extends AbstractJetParsing { * ; */ private void parseClassBody() { + // TODO: enum classes assert at(LBRACE); PsiBuilder.Marker body = mark(); advance(); // LBRACE @@ -1107,7 +1108,7 @@ public class JetParsing extends AbstractJetParsing { advance(); // DOT } - userType.done(USER_TYPE); + userType.done(TYPE_REFERENCE); } /* @@ -1245,13 +1246,13 @@ public class JetParsing extends AbstractJetParsing { error("Expecting a parameter declaration"); break; } - if (!parseValueParameter()) { - if (isFunctionTypeContents) { - parseModifierList(); // lazy, out, ref - parseTypeRef(); - } else { - errorAndAdvance("Expecting a parameter declaration"); + if (isFunctionTypeContents) { + if (!tryParseValueParameter()) { + parseModifierList(); // lazy, out, ref + parseTypeRef(); } + } else { + parseValueParameter(); } if (!at(COMMA)) break; advance(); // COMMA @@ -1266,7 +1267,7 @@ public class JetParsing extends AbstractJetParsing { * : modifiers functionParameterRest * ; */ - private boolean parseValueParameter() { + private boolean tryParseValueParameter() { PsiBuilder.Marker parameter = mark(); int lastId = findLastBefore(TokenSet.create(IDENTIFIER), TokenSet.create(COMMA, RPAR, COLON), false); @@ -1281,4 +1282,20 @@ public class JetParsing extends AbstractJetParsing { return true; } + /* + * functionParameter + * : modifiers functionParameterRest + * ; + */ + private void parseValueParameter() { + PsiBuilder.Marker parameter = mark(); + + int lastId = findLastBefore(TokenSet.create(IDENTIFIER), TokenSet.create(COMMA, RPAR, COLON), false); + createTruncatedBuilder(lastId).parseModifierList(); + + parseFunctionParameterRest(); + + parameter.done(VALUE_PARAMETER); + } + } \ No newline at end of file diff --git a/idea/testData/psi/Attributes.txt b/idea/testData/psi/Attributes.txt index 68c19e9e3dc..828eabfbc84 100644 --- a/idea/testData/psi/Attributes.txt +++ b/idea/testData/psi/Attributes.txt @@ -40,7 +40,7 @@ JetFile: Attributes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('foo') TYPE_ARGUMENT_LIST @@ -65,12 +65,12 @@ JetFile: Attributes.jet PsiElement(RPAR)(')') PsiElement(COMMA)(',') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('ina') PsiElement(COMMA)(',') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('foo') PsiElement(DOT)('.') @@ -110,7 +110,7 @@ JetFile: Attributes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('df') PsiElement(RBRACKET)(']') @@ -120,7 +120,7 @@ JetFile: Attributes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('sdfsdf') PsiElement(RBRACKET)(']') @@ -155,19 +155,19 @@ JetFile: Attributes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('sdfsd') PsiElement(COMMA)(',') PsiWhiteSpace(' ') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('sdfsd') PsiElement(COMMA)(',') PsiWhiteSpace(' ') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(DOT)('.') diff --git a/idea/testData/psi/Attributes_ERR.txt b/idea/testData/psi/Attributes_ERR.txt index 81ecb4b98e5..c663576eec8 100644 --- a/idea/testData/psi/Attributes_ERR.txt +++ b/idea/testData/psi/Attributes_ERR.txt @@ -45,7 +45,7 @@ JetFile: Attributes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('foo') TYPE_ARGUMENT_LIST @@ -71,12 +71,12 @@ JetFile: Attributes_ERR.jet PsiElement(COMMA)(',') PsiWhiteSpace(' ') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('ina') PsiElement(COMMA)(',') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('foo') PsiElement(DOT)('.') @@ -116,7 +116,7 @@ JetFile: Attributes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('df') PsiElement(RBRACKET)(']') @@ -126,7 +126,7 @@ JetFile: Attributes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('sdfsdf') PsiElement(COMMA)(',') @@ -137,12 +137,12 @@ JetFile: Attributes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('s') PsiElement(COMMA)(',') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('fd') PsiErrorElement:Expecting ']' to close an attribute annotation @@ -185,19 +185,19 @@ JetFile: Attributes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('sdfsd') PsiElement(COMMA)(',') PsiWhiteSpace(' ') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('sdfsd') PsiElement(COMMA)(',') PsiWhiteSpace(' ') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(DOT)('.') diff --git a/idea/testData/psi/Constructors.jet b/idea/testData/psi/Constructors.jet new file mode 100644 index 00000000000..b51cc945bf2 --- /dev/null +++ b/idea/testData/psi/Constructors.jet @@ -0,0 +1,9 @@ +class foo { + + this() : this(a, b, c), Foo(bar) + + this(foo : bar) : this(a, b, c), Foo(bar) { + + } + +} diff --git a/idea/testData/psi/Constructors.txt b/idea/testData/psi/Constructors.txt new file mode 100644 index 00000000000..68b23421573 --- /dev/null +++ b/idea/testData/psi/Constructors.txt @@ -0,0 +1,110 @@ +JetFile: Constructors.jet + NAMESPACE + CLASS + PsiElement(class)('class') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + CLASS_BODY + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n\n ') + CONSTRUCTOR + PsiElement(this)('this') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + INITIALIZER_LIST + THIS_CALL + PsiElement(this)('this') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('a') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('b') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('c') + PsiElement(RPAR)(')') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + DELEGATOR_SUPER_CALL + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('Foo') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('bar') + PsiElement(RPAR)(')') + PsiWhiteSpace('\n\n ') + CONSTRUCTOR + PsiElement(this)('this') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('foo') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('bar') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + INITIALIZER_LIST + THIS_CALL + PsiElement(this)('this') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('a') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('b') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('c') + PsiElement(RPAR)(')') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + DELEGATOR_SUPER_CALL + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('Foo') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('bar') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + BLOCK + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n\n ') + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n\n') + PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/idea/testData/psi/Decomposers.txt b/idea/testData/psi/Decomposers.txt index a9a3dae2a62..9c9cf55826b 100644 --- a/idea/testData/psi/Decomposers.txt +++ b/idea/testData/psi/Decomposers.txt @@ -73,7 +73,7 @@ JetFile: Decomposers.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -86,7 +86,7 @@ JetFile: Decomposers.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') diff --git a/idea/testData/psi/Decomposers_ERR.txt b/idea/testData/psi/Decomposers_ERR.txt index eb17f6dcc53..3a29b2f4354 100644 --- a/idea/testData/psi/Decomposers_ERR.txt +++ b/idea/testData/psi/Decomposers_ERR.txt @@ -69,7 +69,7 @@ JetFile: Decomposers_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -82,7 +82,7 @@ JetFile: Decomposers_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -103,7 +103,7 @@ JetFile: Decomposers_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') diff --git a/idea/testData/psi/FunctionTypes.txt b/idea/testData/psi/FunctionTypes.txt index 2ca40038c85..c8ddc07f6b5 100644 --- a/idea/testData/psi/FunctionTypes.txt +++ b/idea/testData/psi/FunctionTypes.txt @@ -18,7 +18,7 @@ JetFile: FunctionTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -83,7 +83,7 @@ JetFile: FunctionTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -139,7 +139,7 @@ JetFile: FunctionTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -256,7 +256,7 @@ JetFile: FunctionTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') diff --git a/idea/testData/psi/FunctionTypes_ERR.txt b/idea/testData/psi/FunctionTypes_ERR.txt index 0e711cb79c7..31aa27f065a 100644 --- a/idea/testData/psi/FunctionTypes_ERR.txt +++ b/idea/testData/psi/FunctionTypes_ERR.txt @@ -18,7 +18,7 @@ JetFile: FunctionTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') diff --git a/idea/testData/psi/Functions.txt b/idea/testData/psi/Functions.txt index 1aab6712952..aa5f0e93b43 100644 --- a/idea/testData/psi/Functions.txt +++ b/idea/testData/psi/Functions.txt @@ -16,7 +16,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -35,7 +35,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -57,7 +57,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -108,7 +108,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -144,7 +144,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') VALUE_ARGUMENT_LIST @@ -215,7 +215,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -235,7 +235,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -258,7 +258,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -310,7 +310,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -347,7 +347,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') VALUE_ARGUMENT_LIST @@ -422,7 +422,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -445,7 +445,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -471,7 +471,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -526,7 +526,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -566,7 +566,7 @@ JetFile: Functions.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') VALUE_ARGUMENT_LIST diff --git a/idea/testData/psi/Functions_ERR.txt b/idea/testData/psi/Functions_ERR.txt index c2c810ddf3c..d6e03a4d957 100644 --- a/idea/testData/psi/Functions_ERR.txt +++ b/idea/testData/psi/Functions_ERR.txt @@ -17,7 +17,7 @@ JetFile: Functions_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -29,8 +29,11 @@ JetFile: Functions_ERR.jet VALUE_PARAMETER_LIST PsiErrorElement:Expecting '( PsiElement(IDENTIFIER)('foo') - PsiErrorElement:Expecting a parameter declaration - PsiElement(LPAR)('(') + VALUE_PARAMETER + PsiErrorElement:Parameter name expected + PsiElement(LPAR)('(') + PsiErrorElement:Parameters must have type annotation + PsiElement(RPAR)(')') PsiWhiteSpace('\n') FUN @@ -40,7 +43,7 @@ JetFile: Functions_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -76,7 +79,7 @@ JetFile: Functions_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') VALUE_ARGUMENT_LIST @@ -138,7 +141,7 @@ JetFile: Functions_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') VALUE_ARGUMENT_LIST @@ -180,7 +183,7 @@ JetFile: Functions_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') VALUE_ARGUMENT_LIST @@ -229,7 +232,7 @@ JetFile: Functions_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') VALUE_ARGUMENT_LIST @@ -281,7 +284,7 @@ JetFile: Functions_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') VALUE_ARGUMENT_LIST @@ -362,7 +365,7 @@ JetFile: Functions_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') diff --git a/idea/testData/psi/Properties.txt b/idea/testData/psi/Properties.txt index 581cd24d38a..6ef9afefd5f 100644 --- a/idea/testData/psi/Properties.txt +++ b/idea/testData/psi/Properties.txt @@ -11,7 +11,7 @@ JetFile: Properties.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -70,7 +70,7 @@ JetFile: Properties.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -211,7 +211,7 @@ JetFile: Properties.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -354,7 +354,7 @@ JetFile: Properties.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') diff --git a/idea/testData/psi/Properties_ERR.txt b/idea/testData/psi/Properties_ERR.txt index 55262325323..ef746d3dba9 100644 --- a/idea/testData/psi/Properties_ERR.txt +++ b/idea/testData/psi/Properties_ERR.txt @@ -47,7 +47,7 @@ JetFile: Properties_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiErrorElement:Expecting ']' to close an attribute annotation @@ -78,7 +78,7 @@ JetFile: Properties_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -224,8 +224,10 @@ JetFile: Properties_ERR.jet PsiElement(get)('get') VALUE_PARAMETER_LIST PsiElement(LPAR)('(') - PsiErrorElement:Expecting a parameter declaration + VALUE_PARAMETER PsiElement(IDENTIFIER)('foo') + PsiErrorElement:Parameters must have type annotation + PsiElement(RPAR)(')') PsiWhiteSpace(' ') BLOCK diff --git a/idea/testData/psi/SimpleClassMembers_ERR.jet b/idea/testData/psi/SimpleClassMembers_ERR.jet new file mode 100644 index 00000000000..c925ecd858c --- /dev/null +++ b/idea/testData/psi/SimpleClassMembers_ERR.jet @@ -0,0 +1,25 @@ +class foo { + + extension foo for X { } - + + class Bar { + sdfsd + } + + fun foo() + + val x + + var f + + type foo = + + decomposer (a, b, c + + this() : this(a, b, c), Foo(bar) { + + } + +} diff --git a/idea/testData/psi/SimpleClassMembers_ERR.txt b/idea/testData/psi/SimpleClassMembers_ERR.txt new file mode 100644 index 00000000000..e78b567a6cd --- /dev/null +++ b/idea/testData/psi/SimpleClassMembers_ERR.txt @@ -0,0 +1,186 @@ +JetFile: SimpleClassMembers_ERR.jet + NAMESPACE + CLASS + PsiElement(class)('class') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + CLASS_BODY + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n\n ') + EXTENSION + PsiElement(extension)('extension') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + PsiElement(for)('for') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('X') + PsiWhiteSpace(' ') + CLASS_BODY + PsiElement(LBRACE)('{') + PsiWhiteSpace(' ') + PsiElement(RBRACE)('}') + PsiWhiteSpace(' ') + PsiErrorElement:Expecting member declaration + PsiElement(MINUS)('-') + PsiWhiteSpace('\n\n ') + CLASS + PsiElement(class)('class') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('Bar') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + CLASS_BODY + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n ') + PsiErrorElement:Expecting member declaration + PsiElement(IDENTIFIER)('sdfsd') + PsiWhiteSpace('\n ') + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace('\n\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('x') + PsiWhiteSpace('\n\n ') + PROPERTY + PsiElement(var)('var') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('f') + PsiWhiteSpace('\n\n ') + TYPEDEF + PsiElement(type)('type') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + PsiElement(EQ)('=') + PsiWhiteSpace('\n\n ') + TYPE_REFERENCE + PsiErrorElement:Type expected + + DECOMPOSER + PsiElement(decomposer)('decomposer') + PsiWhiteSpace(' ') + DECOMPOSER_PROPERTY_LIST + PsiElement(LPAR)('(') + PsiElement(IDENTIFIER)('a') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('b') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('c') + PsiErrorElement:Expecting ')' to close a property list + + PsiWhiteSpace('\n\n ') + CONSTRUCTOR + PsiElement(this)('this') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + INITIALIZER_LIST + THIS_CALL + PsiElement(this)('this') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('a') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('b') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('c') + PsiElement(RPAR)(')') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + DELEGATOR_SUPER_CALL + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('Foo') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('T') + PsiErrorElement:Expecting a '>' + + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('bar') + PsiElement(RPAR)(')') + PsiWhiteSpace('\n\n ') + CONSTRUCTOR + PsiElement(this)('this') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + INITIALIZER_LIST + THIS_CALL + PsiElement(this)('this') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('a') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('b') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('c') + PsiElement(RPAR)(')') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + DELEGATOR_SUPER_CALL + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('Foo') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + PsiElement(IDENTIFIER)('bar') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + BLOCK + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n\n ') + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n\n') + PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/idea/testData/psi/TupleTypes.txt b/idea/testData/psi/TupleTypes.txt index ea78bd7e33d..638e7447ac9 100644 --- a/idea/testData/psi/TupleTypes.txt +++ b/idea/testData/psi/TupleTypes.txt @@ -91,7 +91,7 @@ JetFile: TupleTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -110,7 +110,7 @@ JetFile: TupleTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -120,7 +120,7 @@ JetFile: TupleTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -139,7 +139,7 @@ JetFile: TupleTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -150,7 +150,7 @@ JetFile: TupleTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -163,7 +163,7 @@ JetFile: TupleTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -181,7 +181,7 @@ JetFile: TupleTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -197,7 +197,7 @@ JetFile: TupleTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -215,7 +215,7 @@ JetFile: TupleTypes.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') diff --git a/idea/testData/psi/TupleTypes_ERR.txt b/idea/testData/psi/TupleTypes_ERR.txt index d630176430c..db5fb1181be 100644 --- a/idea/testData/psi/TupleTypes_ERR.txt +++ b/idea/testData/psi/TupleTypes_ERR.txt @@ -88,7 +88,7 @@ JetFile: TupleTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -107,7 +107,7 @@ JetFile: TupleTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -117,7 +117,7 @@ JetFile: TupleTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiErrorElement:Expecting ']' to close an attribute annotation @@ -137,7 +137,7 @@ JetFile: TupleTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -148,7 +148,7 @@ JetFile: TupleTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -161,7 +161,7 @@ JetFile: TupleTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -179,7 +179,7 @@ JetFile: TupleTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -195,7 +195,7 @@ JetFile: TupleTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -213,7 +213,7 @@ JetFile: TupleTypes_ERR.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') diff --git a/idea/testData/psi/TypeAnnotations.txt b/idea/testData/psi/TypeAnnotations.txt index b48778e964f..a391e93281e 100644 --- a/idea/testData/psi/TypeAnnotations.txt +++ b/idea/testData/psi/TypeAnnotations.txt @@ -17,7 +17,7 @@ JetFile: TypeAnnotations.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') @@ -25,7 +25,7 @@ JetFile: TypeAnnotations.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('b') PsiElement(RBRACKET)(']') @@ -47,7 +47,7 @@ JetFile: TypeAnnotations.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('b') PsiElement(RBRACKET)(']') @@ -55,7 +55,7 @@ JetFile: TypeAnnotations.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') @@ -68,7 +68,7 @@ JetFile: TypeAnnotations.jet ATTRIBUTE_ANNOTATION PsiElement(LBRACKET)('[') ATTRIBUTE - USER_TYPE + TYPE_REFERENCE USER_TYPE PsiElement(IDENTIFIER)('x') PsiElement(RBRACKET)(']') diff --git a/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java b/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java index 8861967ce98..45275b6afed 100644 --- a/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java +++ b/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java @@ -54,4 +54,6 @@ public class JetParsingTest extends ParsingTestCase { public void testExtensions_ERR() throws Exception {doTest(true);} public void testSoftKeywords() throws Exception {doTest(true);} public void testSimpleClassMembers() throws Exception {doTest(true);} + public void testSimpleClassMembers_ERR() throws Exception {doTest(true);} + public void testConstructors() throws Exception {doTest(true);} }