diff --git a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java index 847e45ccadb..3909b738c00 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java @@ -13,9 +13,9 @@ import static org.jetbrains.jet.lexer.JetTokens.*; * @author abreslav */ /*package*/ class AbstractJetParsing { - protected final SemanticWitespaceAwarePsiBuilder myBuilder; + protected final SemanticWhitespaceAwarePsiBuilder myBuilder; - public AbstractJetParsing(SemanticWitespaceAwarePsiBuilder builder) { + public AbstractJetParsing(SemanticWhitespaceAwarePsiBuilder builder) { this.myBuilder = builder; } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index 043e07cfe4c..8ba6432abd2 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -12,7 +12,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*; * @author abreslav */ public class JetExpressionParsing extends AbstractJetParsing { - public JetExpressionParsing(SemanticWitespaceAwarePsiBuilder builder) { + public JetExpressionParsing(SemanticWhitespaceAwarePsiBuilder builder) { super(builder); } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParser.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParser.java index edad43bdbae..f159894d94c 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParser.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParser.java @@ -8,12 +8,11 @@ import com.intellij.lang.PsiBuilder; import com.intellij.lang.PsiParser; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.JetNodeTypes; public class JetParser implements PsiParser { @NotNull public ASTNode parse(IElementType iElementType, PsiBuilder psiBuilder) { - new JetParsing(new SemanticWitespaceAwarePsiBuilder(psiBuilder)).parseFile(); + new JetParsing(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder)).parseFile(); return psiBuilder.getTreeBuilt(); } } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 670bdfb8083..90c118421df 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -40,7 +40,7 @@ public class JetParsing extends AbstractJetParsing { private final JetExpressionParsing myExpressionParsing; - public JetParsing(SemanticWitespaceAwarePsiBuilder builder) { + public JetParsing(SemanticWhitespaceAwarePsiBuilder builder) { super(builder); this.myExpressionParsing = new JetExpressionParsing(builder); } @@ -300,8 +300,8 @@ public class JetParsing extends AbstractJetParsing { while (!eof()) { if (at(LBRACKET)) { parseAttributeAnnotation(); - } else if (MODIFIER_KEYWORDS.contains(tt())) { - advance(); + } else if (atSet(MODIFIER_KEYWORDS)) { + advance(); // MODIFIER } else { if (!parseModifierSoftKeyword()) break; @@ -365,8 +365,8 @@ public class JetParsing extends AbstractJetParsing { * ; */ private JetNodeType parseNamespaceBlock() { - assert at(NAMESPACE); - advance(); // NAMESPACE + assert at(NAMESPACE_KEYWORD); + advance(); // NAMESPACE_KEYWORD if (at(LBRACE)) { error("Expecting namespace name"); @@ -460,6 +460,8 @@ public class JetParsing extends AbstractJetParsing { private void parseMemberDeclaration() { PsiBuilder.Marker decl = mark(); + parseModifierList(); + IElementType keywordToken = tt(); JetNodeType declType = null; if (keywordToken == CLASS_KEYWORD) { @@ -490,7 +492,7 @@ public class JetParsing extends AbstractJetParsing { } if (declType == null) { - errorAndAdvance("Expecting namespace or top level declaration"); + errorAndAdvance("Expecting member declaration"); decl.drop(); } else { @@ -610,17 +612,18 @@ public class JetParsing extends AbstractJetParsing { TokenSet propertyNameFollow = TokenSet.create(COLON, EQ, LBRACE, EOL_OR_SEMICOLON); - int lastDot = findLastDotBefore(propertyNameFollow); + int lastDot = findLastBefore(TokenSet.create(DOT), propertyNameFollow, true); if (lastDot == -1) { parseAttributeList(); expect(IDENTIFIER, "Expecting property name or receiver type", propertyNameFollow); } else { - // The code below is NOT REENTRANT - myBuilder.setEOFPosition(lastDot); - parseTypeRef(); - myBuilder.unSetEOFPosition(); + createTruncatedBuilder(lastDot).parseTypeRef(); +// // The code below is NOT REENTRANT +// myBuilder.setEOFPosition(lastDot); +// parseTypeRef(); +// myBuilder.unSetEOFPosition(); expect(DOT, "Expecting '.' before a property name", propertyNameFollow); expect(IDENTIFIER, "Expecting property name", propertyNameFollow); @@ -661,6 +664,10 @@ public class JetParsing extends AbstractJetParsing { return PROPERTY; } + private JetParsing createTruncatedBuilder(int eofPosition) { + return new JetParsing(new TruncatedSemanticWhitespaceAwarePsiBuilder(myBuilder, eofPosition)); + } + /* * getter * : modifiers @@ -702,16 +709,17 @@ public class JetParsing extends AbstractJetParsing { advance(); // FUN_KEYWORD - int lastDot = findLastDotBefore(TokenSet.create(LPAR)); + int lastDot = findLastBefore(TokenSet.create(DOT), TokenSet.create(LPAR), true); if (lastDot == -1) { // There's no explicit receiver type specified parseAttributeList(); expect(IDENTIFIER, "Expecting function name or receiver type"); } else { - // The code below in NOT REENTRANT - myBuilder.setEOFPosition(lastDot); - parseTypeRef(); - myBuilder.unSetEOFPosition(); + createTruncatedBuilder(lastDot).parseTypeRef(); +// // The code below in NOT REENTRANT +// myBuilder.setEOFPosition(lastDot); +// parseTypeRef(); +// myBuilder.unSetEOFPosition(); TokenSet functionNameFollow = TokenSet.create(LT, LPAR, COLON, EQ); expect(DOT, "Expecting '.' before a function name", functionNameFollow); @@ -744,21 +752,22 @@ public class JetParsing extends AbstractJetParsing { * Looks for a the last top-level (not inside any {} [] () <>) '.' occurring before a * top-level occurrence of a token from the stopSet */ - private int findLastDotBefore(TokenSet stopSet) { + private int findLastBefore(TokenSet lookFor, TokenSet stopAt, boolean dontStopRightAfterOccurrence) { PsiBuilder.Marker currentPosition = mark(); - int lastDot = -1; + int lastOccurrence = -1; int openAngleBrackets = 0; int openBraces = 0; int openParentheses = 0; int openBrackets = 0; IElementType previousToken = null; while (!eof()) { - if (atSet(stopSet)) { + if (atSet(stopAt)) { if (openAngleBrackets == 0 && openBrackets == 0 && openBraces == 0 && openParentheses == 0 - && previousToken != DOT) break; + && (!dontStopRightAfterOccurrence + || !lookFor.contains(previousToken))) break; } if (at(LPAR)) { openParentheses++; @@ -784,18 +793,18 @@ public class JetParsing extends AbstractJetParsing { else if (at(RBRACKET)) { openBrackets--; } - else if (at(DOT) + else if (atSet(lookFor) && openAngleBrackets == 0 && openBrackets == 0 && openBraces == 0 && openParentheses == 0) { - lastDot = myBuilder.getCurrentOffset(); + lastOccurrence = myBuilder.getCurrentOffset(); } previousToken = tt(); advance(); // skip token } currentPosition.rollbackTo(); - return lastDot; + return lastOccurrence ; } /* @@ -1025,13 +1034,20 @@ public class JetParsing extends AbstractJetParsing { * ; */ private void parseTypeParameter() { - if (TYPE_PARAMETER_GT_RECOVERY_SET.contains(tt())) { + if (atSet(TYPE_PARAMETER_GT_RECOVERY_SET)) { error("Type parameter declaration expected"); return; } PsiBuilder.Marker mark = mark(); - parseModifierList(); + + int lastId = findLastBefore(TokenSet.create(IDENTIFIER), TokenSet.create(COMMA, GT, COLON), false); + createTruncatedBuilder(lastId).parseModifierList(); +// // The code below is NOT REENTRANT +// myBuilder.setEOFPosition(lastId); +// parseModifierList(); +// myBuilder.unSetEOFPosition(); + expect(IDENTIFIER, "Type parameter name expected", TokenSet.EMPTY); // TODO : other constraints @@ -1226,7 +1242,13 @@ public class JetParsing extends AbstractJetParsing { if (!at(RPAR)) { while (true) { - if (at(COMMA)) errorAndAdvance("Expecting a parameter declaration"); + if (at(COMMA)) { + errorAndAdvance("Expecting a parameter declaration"); + } + else if (at(RPAR)) { + error("Expecting a parameter declaration"); + break; + } if (!parseValueParameter()) { if (isFunctionTypeContents) { parseModifierList(); // lazy, out, ref @@ -1251,7 +1273,13 @@ public class JetParsing extends AbstractJetParsing { private boolean parseValueParameter() { PsiBuilder.Marker parameter = mark(); - parseModifierList(); + int lastId = findLastBefore(TokenSet.create(IDENTIFIER), TokenSet.create(COMMA, RPAR, COLON), false); + createTruncatedBuilder(lastId).parseModifierList(); +// // The code below is NOT REENTRANT +// myBuilder.setEOFPosition(lastId); +// parseModifierList(); +// myBuilder.unSetEOFPosition(); + if (!parseFunctionParameterRest()) { parameter.rollbackTo(); return false; diff --git a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilder.java b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilder.java new file mode 100644 index 00000000000..c5bf1843936 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilder.java @@ -0,0 +1,10 @@ +package org.jetbrains.jet.lang.parsing; + +import com.intellij.lang.PsiBuilder; + +/** + * @author abreslav + */ +public interface SemanticWhitespaceAwarePsiBuilder extends PsiBuilder { + boolean eolInLastWhitespace(); +} diff --git a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWitespaceAwarePsiBuilder.java b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java similarity index 58% rename from idea/src/org/jetbrains/jet/lang/parsing/SemanticWitespaceAwarePsiBuilder.java rename to idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java index 6b41ea6a8d5..20fcd4361f6 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWitespaceAwarePsiBuilder.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java @@ -8,7 +8,7 @@ import com.intellij.psi.tree.IElementType; /** * @author abreslav */ -public class SemanticWitespaceAwarePsiBuilder extends PsiBuilderAdapter { +public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter implements SemanticWhitespaceAwarePsiBuilder { private final WhitespaceSkippedCallback myWhitespaceSkippedCallback = new WhitespaceSkippedCallback() { public void onSkip(IElementType type, int start, int end) { CharSequence whitespace = getOriginalText(); @@ -23,9 +23,8 @@ public class SemanticWitespaceAwarePsiBuilder extends PsiBuilderAdapter { }; private boolean myEOLInLastWhitespace; - private int myEOFPosition = -1; - public SemanticWitespaceAwarePsiBuilder(final PsiBuilder delegate) { + public SemanticWhitespaceAwarePsiBuilderImpl(final PsiBuilder delegate) { super(delegate); delegate.setWhitespaceSkippedCallback(myWhitespaceSkippedCallback); } @@ -36,33 +35,8 @@ public class SemanticWitespaceAwarePsiBuilder extends PsiBuilderAdapter { super.advanceLexer(); } + @Override public boolean eolInLastWhitespace() { return myEOLInLastWhitespace; } - - @Override - public boolean eof() { - if (super.eof()) return true; - return myEOFPosition >= 0 && getCurrentOffset() >= myEOFPosition; - } - - @Override - public String getTokenText() { - if (eof()) return null; - return super.getTokenText(); - } - - @Override - public IElementType getTokenType() { - if (eof()) return null; - return super.getTokenType(); - } - - public void setEOFPosition(int myEOFPosition) { - this.myEOFPosition = myEOFPosition; - } - - public void unSetEOFPosition() { - this.myEOFPosition = -1; - } } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/TruncatedSemanticWhitespaceAwarePsiBuilder.java b/idea/src/org/jetbrains/jet/lang/parsing/TruncatedSemanticWhitespaceAwarePsiBuilder.java new file mode 100644 index 00000000000..7b9ad549118 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/parsing/TruncatedSemanticWhitespaceAwarePsiBuilder.java @@ -0,0 +1,44 @@ +package org.jetbrains.jet.lang.parsing; + +import com.intellij.psi.tree.IElementType; + +/** + * @author abreslav + */ +public class TruncatedSemanticWhitespaceAwarePsiBuilder extends PsiBuilderAdapter implements SemanticWhitespaceAwarePsiBuilder { + + private final SemanticWhitespaceAwarePsiBuilder myBuilder; + private final int myEOFPosition; + + + public TruncatedSemanticWhitespaceAwarePsiBuilder(SemanticWhitespaceAwarePsiBuilder myBuilder, int eofPosition) { + super(myBuilder); + this.myBuilder = myBuilder; + this.myEOFPosition = eofPosition; + } + + @Override + public boolean eolInLastWhitespace() { + return myBuilder.eolInLastWhitespace(); + } + + + @Override + public boolean eof() { + if (super.eof()) return true; + return myEOFPosition >= 0 && getCurrentOffset() >= myEOFPosition; + } + + @Override + public String getTokenText() { + if (eof()) return null; + return super.getTokenText(); + } + + @Override + public IElementType getTokenType() { + if (eof()) return null; + return super.getTokenType(); + } + +} diff --git a/idea/testData/psi/FunctionTypes_ERR.txt b/idea/testData/psi/FunctionTypes_ERR.txt index 9e92eabd063..0e711cb79c7 100644 --- a/idea/testData/psi/FunctionTypes_ERR.txt +++ b/idea/testData/psi/FunctionTypes_ERR.txt @@ -53,10 +53,9 @@ JetFile: FunctionTypes_ERR.jet USER_TYPE PsiElement(IDENTIFIER)('a') PsiElement(COMMA)(',') + PsiErrorElement:Expecting a parameter declaration + PsiWhiteSpace(' ') - TYPE_REFERENCE - PsiErrorElement:Type expected - PsiElement(RPAR)(')') PsiWhiteSpace(' ') PsiElement(COLON)(':') diff --git a/idea/testData/psi/SimpleModifiers.jet b/idea/testData/psi/SimpleModifiers.jet index 70bfe942b2e..783a1d748ad 100644 --- a/idea/testData/psi/SimpleModifiers.jet +++ b/idea/testData/psi/SimpleModifiers.jet @@ -17,35 +17,32 @@ in out ref class Bar { -abstract -virtual -enum -open -attribute -override -virtual -abstract -private -protected -public -internal -in -lazy -out -ref + virtual + enum + open + attribute + override + virtual + abstract + private + protected + public + internal + lazy + in + out + ref T> { + val abstract + val virtual + val enum + val open + val attribute + val override + val virtual + val abstract + val private + val protected + val public + val internal + val lazy } diff --git a/idea/testData/psi/SimpleModifiers.txt b/idea/testData/psi/SimpleModifiers.txt index e1be966ca8d..6adfe55d13a 100644 --- a/idea/testData/psi/SimpleModifiers.txt +++ b/idea/testData/psi/SimpleModifiers.txt @@ -51,35 +51,35 @@ JetFile: SimpleModifiers.jet TYPE_PARAMETER MODIFIER_LIST PsiElement(abstract)('abstract') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(virtual)('virtual') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(enum)('enum') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(open)('open') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(attribute)('attribute') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(override)('override') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(virtual)('virtual') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(abstract)('abstract') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(private)('private') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(protected)('protected') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(public)('public') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(internal)('internal') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(lazy)('lazy') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(in)('in') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(out)('out') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n ') PsiElement(ref)('ref') PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('T') @@ -87,37 +87,70 @@ JetFile: SimpleModifiers.jet PsiWhiteSpace(' ') CLASS_BODY PsiElement(LBRACE)('{') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('abstract') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('virtual') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('enum') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('open') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('attribute') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('override') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('virtual') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('abstract') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('private') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('protected') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('public') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('internal') - PsiWhiteSpace('\n') - PsiElement(in)('in') - PsiWhiteSpace('\n') - PsiElement(IDENTIFIER)('lazy') - PsiWhiteSpace('\n') - PsiElement(out)('out') - PsiWhiteSpace('\n') - PsiElement(ref)('ref') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('enum') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('open') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('attribute') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('override') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('private') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('protected') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('public') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('internal') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('lazy') PsiWhiteSpace('\n') PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/idea/testData/psi/SoftKeywords.jet b/idea/testData/psi/SoftKeywords.jet new file mode 100644 index 00000000000..77316acb9a5 --- /dev/null +++ b/idea/testData/psi/SoftKeywords.jet @@ -0,0 +1,115 @@ +namespace foo.bar.goo + +import foo + +public protected private internal +abstract +virtual +enum +open +attribute +override +virtual +abstract +private +protected +public +internal +lazy +in +out +ref + class Bar wraps (a : B) : A by b { + public protected private internal val abstract + val virtual + val enum + val open + val attribute + val override + val virtual + val abstract + val private + val protected + val public + val internal + val lazy + val wraps + val import + val where + val by + val get + val set + val public + val private + val protected + val internal { + get() = a + set(S : s) {} + } + + public protected private internal + fun abstract () : abstract + fun virtual () : virtual + fun enum () : enum + fun open () : open + fun attribute () : attribute + fun override () : override + fun virtual () : virtual + fun abstract () : abstract + fun private () : private + fun protected () : protected + fun public () : public + fun internal () : internal + fun lazy () : lazy + fun wraps () : wraps + fun import () : import + fun where () : where + fun by () : by + fun get () : get + fun set () : set + fun public () : public + fun private () : private + fun protected () : protected + fun internal () : internal + + fun test( + abstract : t, + virtual : t, + enum : t, + open : t, + attribute : t, + override : t, + virtual : t, + abstract : t, + private : t, + protected : t, + public : t, + internal : t, + lazy : t, + wraps : t, + import : t, + where : t, + by : t, + get : t, + set : t, + public : t, + private : t, + protected : t, + internal : t + ) + +} diff --git a/idea/testData/psi/SoftKeywords.txt b/idea/testData/psi/SoftKeywords.txt new file mode 100644 index 00000000000..970297e27f8 --- /dev/null +++ b/idea/testData/psi/SoftKeywords.txt @@ -0,0 +1,953 @@ +JetFile: SoftKeywords.jet + NAMESPACE + PsiElement(namespace)('namespace') + PsiWhiteSpace(' ') + NAMESPACE_NAME + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('bar') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('goo') + PsiWhiteSpace('\n\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiWhiteSpace('\n\n') + CLASS + MODIFIER_LIST + PsiElement(public)('public') + PsiWhiteSpace(' ') + PsiElement(protected)('protected') + PsiWhiteSpace(' ') + PsiElement(private)('private') + PsiWhiteSpace(' ') + PsiElement(internal)('internal') + PsiWhiteSpace('\n') + PsiElement(abstract)('abstract') + PsiWhiteSpace('\n') + PsiElement(virtual)('virtual') + PsiWhiteSpace('\n') + PsiElement(enum)('enum') + PsiWhiteSpace('\n') + PsiElement(open)('open') + PsiWhiteSpace('\n') + PsiElement(attribute)('attribute') + PsiWhiteSpace('\n') + PsiElement(override)('override') + PsiWhiteSpace('\n') + PsiElement(virtual)('virtual') + PsiWhiteSpace('\n') + PsiElement(abstract)('abstract') + PsiWhiteSpace('\n') + PsiElement(private)('private') + PsiWhiteSpace('\n') + PsiElement(protected)('protected') + PsiWhiteSpace('\n') + PsiElement(public)('public') + PsiWhiteSpace('\n') + PsiElement(internal)('internal') + PsiWhiteSpace('\n') + PsiElement(lazy)('lazy') + PsiWhiteSpace('\n') + PsiElement(in)('in') + PsiWhiteSpace('\n') + PsiElement(out)('out') + PsiWhiteSpace('\n') + PsiElement(ref)('ref') + PsiWhiteSpace('\n ') + PsiElement(class)('class') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('Bar') + TYPE_PARAMETER_LIST + PsiElement(LT)('<') + TYPE_PARAMETER + PsiElement(IDENTIFIER)('abstract') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + TYPE_PARAMETER + MODIFIER_LIST + PsiElement(abstract)('abstract') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('enum') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('T') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + TYPE_PARAMETER + MODIFIER_LIST + PsiElement(lazy)('lazy') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('virtual') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + TYPE_PARAMETER + MODIFIER_LIST + PsiElement(public)('public') + PsiWhiteSpace(' ') + PsiElement(protected)('protected') + PsiWhiteSpace(' ') + PsiElement(private)('private') + PsiWhiteSpace(' ') + PsiElement(internal)('internal') + PsiWhiteSpace(' ') + PsiElement(abstract)('abstract') + PsiWhiteSpace('\n ') + PsiElement(virtual)('virtual') + PsiWhiteSpace('\n ') + PsiElement(enum)('enum') + PsiWhiteSpace('\n ') + PsiElement(open)('open') + PsiWhiteSpace('\n ') + PsiElement(attribute)('attribute') + PsiWhiteSpace('\n ') + PsiElement(override)('override') + PsiWhiteSpace('\n ') + PsiElement(virtual)('virtual') + PsiWhiteSpace('\n ') + PsiElement(abstract)('abstract') + PsiWhiteSpace('\n ') + PsiElement(private)('private') + PsiWhiteSpace('\n ') + PsiElement(protected)('protected') + PsiWhiteSpace('\n ') + PsiElement(public)('public') + PsiWhiteSpace('\n ') + PsiElement(internal)('internal') + PsiWhiteSpace('\n ') + PsiElement(lazy)('lazy') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('open') + PsiWhiteSpace('\n ') + PsiElement(GT)('>') + PsiWhiteSpace(' ') + PsiElement(wraps)('wraps') + PsiWhiteSpace(' ') + PRIMARY_CONSTRUCTOR_PARAMETERS_LIST + PsiElement(LPAR)('(') + PRIMARY_CONSTRUCTOR_PARAMETER + PsiElement(IDENTIFIER)('a') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('B') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + DELEGATION_SPECIFIER_LIST + DELEGATION_SPECIFIER + DELEGATOR_BY + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('A') + PsiWhiteSpace(' ') + PsiElement(by)('by') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('b') + PsiWhiteSpace(' ') + CLASS_BODY + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n ') + PROPERTY + MODIFIER_LIST + PsiElement(public)('public') + PsiWhiteSpace(' ') + PsiElement(protected)('protected') + PsiWhiteSpace(' ') + PsiElement(private)('private') + PsiWhiteSpace(' ') + PsiElement(internal)('internal') + PsiWhiteSpace(' ') + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('enum') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('open') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('attribute') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('override') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('private') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('protected') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('public') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('internal') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('lazy') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('wraps') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('import') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('where') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('by') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('get') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('set') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('public') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('private') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('protected') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('internal') + PsiWhiteSpace(' ') + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n ') + PROPERTY_GETTER + PsiElement(get)('get') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('a') + PsiWhiteSpace('\n ') + PROPERTY_GETTER + PsiElement(set)('set') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('S') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('s') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(LBRACE)('{') + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n ') + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n\n ') + FUN + MODIFIER_LIST + PsiElement(public)('public') + PsiWhiteSpace(' ') + PsiElement(protected)('protected') + PsiWhiteSpace(' ') + PsiElement(private)('private') + PsiWhiteSpace(' ') + PsiElement(internal)('internal') + PsiWhiteSpace('\n ') + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('enum') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('enum') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('open') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('open') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('attribute') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('attribute') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('override') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('override') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('private') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('private') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('protected') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('protected') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('public') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('public') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('internal') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('internal') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('lazy') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('lazy') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('wraps') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('wraps') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('import') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('import') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('where') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('where') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('by') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('by') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('get') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('get') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('set') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('set') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('public') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('public') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('private') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('private') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('protected') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('protected') + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('internal') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('internal') + PsiWhiteSpace('\n\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('test') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('enum') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('open') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('attribute') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('override') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('virtual') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('abstract') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('private') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('protected') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('public') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('internal') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('lazy') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('wraps') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('import') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('where') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('by') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('get') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('set') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('public') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('private') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('protected') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiElement(COMMA)(',') + PsiWhiteSpace('\n ') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('internal') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('t') + PsiWhiteSpace('\n ') + PsiElement(RPAR)(')') + PsiWhiteSpace('\n\n') + PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java b/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java index 8ca0ff27999..dbf7c7a8754 100644 --- a/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java +++ b/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java @@ -52,4 +52,5 @@ public class JetParsingTest extends ParsingTestCase { public void testFunctions_ERR() throws Exception {doTest(true);} public void testExtensions() throws Exception {doTest(true);} public void testExtensions_ERR() throws Exception {doTest(true);} + public void testSoftKeywords() throws Exception {doTest(true);} }