Simple modifiers

This commit is contained in:
Andrey Breslav
2010-12-15 18:28:26 +03:00
parent 921d74d821
commit 2453e6a0dd
14 changed files with 381 additions and 146 deletions
@@ -31,6 +31,7 @@ public interface JetNodeTypes {
JetNodeType IMPORT_DIRECTIVE = new JetNodeType("IMPORT_DIRECTIVE");
JetNodeType IMPORTED = new JetNodeType("IMPORTED");
JetNodeType NAMESPACE_BODY = new JetNodeType("NAMESPACE_BODY");
JetNodeType MODIFIER_LIST = new JetNodeType("MODIFIER_LIST");
IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME");
@@ -8,16 +8,26 @@ import com.intellij.lang.WhitespaceSkippedCallback;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.jet.JetNodeType;
import org.jetbrains.jet.lexer.JetSoftKeywordToken;
import org.jetbrains.jet.lexer.JetKeywordToken;
import org.jetbrains.jet.lexer.JetToken;
import java.util.HashMap;
import java.util.Map;
import static org.jetbrains.jet.JetNodeTypes.*;
import static org.jetbrains.jet.lexer.JetTokens.*;
public class JetParsing {
public static final TokenSet CLASS_NAME_RECOVERY_SET = TokenSet.create(LT, WRAPS_KEYWORD, LPAR, COLON, LBRACE);
public static final TokenSet TYPE_PARAMETER_GT_RECOVERY_SET = TokenSet.create(WHERE_KEYWORD, WRAPS_KEYWORD, LPAR, COLON, LBRACE, GT);
public static final TokenSet PARAMETER_NAME_RECOVERY_SET = TokenSet.create(COLON, EQ, COMMA, RPAR);
private static final Map<String, IElementType> MODIFIER_KEYWORD_MAP = new HashMap<String, IElementType>();
static {
for (IElementType softKeyword : MODIFIER_KEYWORDS.getTypes()) {
MODIFIER_KEYWORD_MAP.put(((JetKeywordToken) softKeyword).getValue(), softKeyword);
}
}
private static final TokenSet CLASS_NAME_RECOVERY_SET = TokenSet.create(LT, WRAPS_KEYWORD, LPAR, COLON, LBRACE);
private static final TokenSet TYPE_PARAMETER_GT_RECOVERY_SET = TokenSet.create(WHERE_KEYWORD, WRAPS_KEYWORD, LPAR, COLON, LBRACE, GT);
private static final TokenSet PARAMETER_NAME_RECOVERY_SET = TokenSet.create(COLON, EQ, COMMA, RPAR);
private static final TokenSet NAMESPACE_NAME_RECOVERY_SET = TokenSet.create(DOT, EOL_OR_SEMICOLON);
private final WhitespaceSkippedCallback myWhitespaceSkippedCallback = new WhitespaceSkippedCallback() {
@@ -163,11 +173,7 @@ public class JetParsing {
*/
private void parseTopLevelObject() {
PsiBuilder.Marker decl = mark();
if (!parseModifierList()) {
decl.drop();
advance(); // TODO
return;
}
parseModifierList();
JetToken keywordToken = tt();
JetNodeType declType = null;
@@ -199,9 +205,54 @@ public class JetParsing {
}
}
private boolean parseModifierList() {
// TODO
return true;
/*
* modifier
* : "abstract"
* : "virtual"
* : "enum"
* : "open"
* : "attribute"
* : "override"
* : "virtual"
* : "abstract"
* : "private"
* : "protected"
* : "public"
* : "internal"
* : "in"
* : "out"
* : "lazy"
* : "ref"
*/
private boolean parseModifierSoftKeyword() {
if (!at(IDENTIFIER)) return false;
String tokenText = myBuilder.getTokenText();
IElementType tokenType = MODIFIER_KEYWORD_MAP.get(tokenText);
if (tokenType != null) {
myBuilder.remapCurrentToken(tokenType);
advance();
return true;
}
return false;
}
private void parseModifierList() {
PsiBuilder.Marker list = mark();
boolean empty = true;
while (true) {
if (MODIFIER_KEYWORDS.contains(tt())) {
advance();
}
else {
if (!parseModifierSoftKeyword()) break;
}
empty = false;
}
if (empty) {
list.drop();
} else {
list.done(MODIFIER_LIST);
}
}
/*
@@ -518,16 +569,9 @@ public class JetParsing {
if (token == SEMICOLON) return true;
if (myEOLInLastWhitespace) return true;
}
if (token == IDENTIFIER && expectation instanceof JetSoftKeywordToken) {
if (((JetSoftKeywordToken) expectation).getValue().equals(myBuilder.getTokenText())) {
// myBuilder.setTokenTypeRemapper(new ITokenTypeRemapper() {
// public IElementType filter(IElementType source, int start, int end, CharSequence text) {
// return expectation;
// }
// });
// tt();
// myBuilder.setTokenTypeRemapper(null);
if (token == IDENTIFIER && expectation instanceof JetKeywordToken) {
JetKeywordToken expectedKeyword = (JetKeywordToken) expectation;
if (expectedKeyword.isSoft() && expectedKeyword.getValue().equals(myBuilder.getTokenText())) {
myBuilder.remapCurrentToken(expectation);
return true;
}
@@ -0,0 +1,35 @@
/*
* @author max
*/
package org.jetbrains.jet.lexer;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
public class JetKeywordToken extends JetToken {
public static JetKeywordToken keyword(String value) {
return new JetKeywordToken(value, false);
}
public static JetKeywordToken softKeyword(String value) {
return new JetKeywordToken(value, true);
}
private final String myValue;
private final boolean myIsSoft;
private JetKeywordToken(@NotNull @NonNls String value, boolean isSoft) {
super(value);
myValue = value;
myIsSoft = isSoft;
}
public String getValue() {
return myValue;
}
public boolean isSoft() {
return myIsSoft;
}
}
@@ -1,20 +0,0 @@
/*
* @author max
*/
package org.jetbrains.jet.lexer;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
public class JetSoftKeywordToken extends JetToken {
private final String myValue;
public JetSoftKeywordToken(@NotNull @NonNls String value) {
super(value);
myValue = value;
}
public String getValue() {
return myValue;
}
}
+55 -55
View File
@@ -6,10 +6,6 @@ package org.jetbrains.jet.lexer;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import gnu.trove.THashSet;
import java.util.Arrays;
import java.util.Set;
public interface JetTokens {
JetToken EOF = new JetToken("EOF");
@@ -26,35 +22,35 @@ public interface JetTokens {
JetToken STRING_LITERAL = new JetToken("STRING_LITERAL");
JetToken RAW_STRING_LITERAL = new JetToken("RAW_STRING_LITERAL");
JetToken NAMESPACE_KEYWORD = new JetToken("NAMESPACE_KEYWORD");
JetToken AS_KEYWORD = new JetToken("AS_KEYWORD");
JetToken TYPE_KEYWORD = new JetToken("TYPE_KEYWORD");
JetToken CLASS_KEYWORD = new JetToken("CLASS_KEYWORD");
JetToken THIS_KEYWORD = new JetToken("THIS_KEYWORD");
JetToken VAL_KEYWORD = new JetToken("VAL_KEYWORD");
JetToken VAR_KEYWORD = new JetToken("VAR_KEYWORD");
JetToken FUN_KEYWORD = new JetToken("FUN_KEYWORD");
JetToken DECOMPOSER_KEYWORD = new JetToken("DECOMPOSER_KEYWORD");
JetToken EXTENSION_KEYWORD = new JetToken("EXTENSION_KEYWORD");
JetToken FOR_KEYWORD = new JetToken("FOR_KEYWORD");
JetToken NULL_KEYWORD = new JetToken("NULL_KEYWORD");
JetToken TYPEOF_KEYWORD = new JetToken("TYPEOF_KEYWORD");
JetToken NEW_KEYWORD = new JetToken("NEW_KEYWORD");
JetToken TRUE_KEYWORD = new JetToken("TRUE_KEYWORD");
JetToken FALSE_KEYWORD = new JetToken("FALSE_KEYWORD");
JetToken IS_KEYWORD = new JetToken("IS_KEYWORD");
JetToken ISNOT_KEYWORD = new JetToken("ISNOT_KEYWORD");
JetToken IN_KEYWORD = new JetToken("IN_KEYWORD");
JetToken THROW_KEYWORD = new JetToken("THROW_KEYWORD");
JetToken RETURN_KEYWORD = new JetToken("RETURN_KEYWORD");
JetToken BREAK_KEYWORD = new JetToken("BREAK_KEYWORD");
JetToken CONTINUE_KEYWORD = new JetToken("CONTINUE_KEYWORD");
JetToken OBJECT_KEYWORD = new JetToken("OBJECT_KEYWORD");
JetToken IF_KEYWORD = new JetToken("IF_KEYWORD");
JetToken ELSE_KEYWORD = new JetToken("ELSE_KEYWORD");
JetToken WHILE_KEYWORD = new JetToken("WHILE_KEYWORD");
JetToken DO_KEYWORD = new JetToken("DO_KEYWORD");
JetToken MATCH_KEYWORD = new JetToken("MATCH_KEYWORD");
JetKeywordToken NAMESPACE_KEYWORD = JetKeywordToken.keyword("namespace");
JetKeywordToken AS_KEYWORD = JetKeywordToken.keyword("as");
JetKeywordToken TYPE_KEYWORD = JetKeywordToken.keyword("type");
JetKeywordToken CLASS_KEYWORD = JetKeywordToken.keyword("class");
JetKeywordToken THIS_KEYWORD = JetKeywordToken.keyword("this");
JetKeywordToken VAL_KEYWORD = JetKeywordToken.keyword("val");
JetKeywordToken VAR_KEYWORD = JetKeywordToken.keyword("var");
JetKeywordToken FUN_KEYWORD = JetKeywordToken.keyword("fun");
JetKeywordToken DECOMPOSER_KEYWORD = JetKeywordToken.keyword("decomposer");
JetKeywordToken EXTENSION_KEYWORD = JetKeywordToken.keyword("extension");
JetKeywordToken FOR_KEYWORD = JetKeywordToken.keyword("for");
JetKeywordToken NULL_KEYWORD = JetKeywordToken.keyword("null");
JetKeywordToken TYPEOF_KEYWORD = JetKeywordToken.keyword("typeof");
JetKeywordToken NEW_KEYWORD = JetKeywordToken.keyword("new");
JetKeywordToken TRUE_KEYWORD = JetKeywordToken.keyword("true");
JetKeywordToken FALSE_KEYWORD = JetKeywordToken.keyword("false");
JetKeywordToken IS_KEYWORD = JetKeywordToken.keyword("is");
JetKeywordToken ISNOT_KEYWORD = JetKeywordToken.keyword("isnot");
JetKeywordToken IN_KEYWORD = JetKeywordToken.keyword("in");
JetKeywordToken THROW_KEYWORD = JetKeywordToken.keyword("throw");
JetKeywordToken RETURN_KEYWORD = JetKeywordToken.keyword("return");
JetKeywordToken BREAK_KEYWORD = JetKeywordToken.keyword("break");
JetKeywordToken CONTINUE_KEYWORD = JetKeywordToken.keyword("continue");
JetKeywordToken OBJECT_KEYWORD = JetKeywordToken.keyword("object");
JetKeywordToken IF_KEYWORD = JetKeywordToken.keyword("if");
JetKeywordToken ELSE_KEYWORD = JetKeywordToken.keyword("else");
JetKeywordToken WHILE_KEYWORD = JetKeywordToken.keyword("while");
JetKeywordToken DO_KEYWORD = JetKeywordToken.keyword("do");
JetKeywordToken MATCH_KEYWORD = JetKeywordToken.keyword("match");
JetToken IDENTIFIER = new JetToken("IDENTIFIER");
@@ -101,37 +97,41 @@ public interface JetTokens {
JetToken EOL_OR_SEMICOLON = new JetToken("EOL_OR_SEMICOLON");
JetSoftKeywordToken WRAPS_KEYWORD = new JetSoftKeywordToken("wraps");
JetSoftKeywordToken IMPORT_KEYWORD = new JetSoftKeywordToken("import");
JetSoftKeywordToken WHERE_KEYWORD = new JetSoftKeywordToken("where");
JetSoftKeywordToken BY_KEYWORD = new JetSoftKeywordToken("by");
JetSoftKeywordToken LAZY_KEYWORD = new JetSoftKeywordToken("lazy");
JetSoftKeywordToken GET_KEYWORD = new JetSoftKeywordToken("get");
JetSoftKeywordToken SET_KEYWORD = new JetSoftKeywordToken("set");
JetSoftKeywordToken ABSTRACT_KEYWORD = new JetSoftKeywordToken("abstract");
JetSoftKeywordToken VIRTUAL_KEYWORD = new JetSoftKeywordToken("virtual");
JetSoftKeywordToken ENUM_KEYWORD = new JetSoftKeywordToken("enum");
JetSoftKeywordToken OPEN_KEYWORD = new JetSoftKeywordToken("open");
JetSoftKeywordToken ATTRIBUTE_KEYWORD = new JetSoftKeywordToken("attribute");
JetSoftKeywordToken OVERRIDE_KEYWORD = new JetSoftKeywordToken("override");
JetSoftKeywordToken PRIVATE_KEYWORD = new JetSoftKeywordToken("private");
JetSoftKeywordToken PUBLIC_KEYWORD = new JetSoftKeywordToken("public");
JetSoftKeywordToken INTERNAL_KEYWORD = new JetSoftKeywordToken("internal");
JetSoftKeywordToken PROTECTED_KEYWORD = new JetSoftKeywordToken("protected");
JetSoftKeywordToken OUT_KEYWORD = new JetSoftKeywordToken("out");
JetSoftKeywordToken REF_KEYWORD = new JetSoftKeywordToken("ref");
JetKeywordToken WRAPS_KEYWORD = JetKeywordToken.softKeyword("wraps");
JetKeywordToken IMPORT_KEYWORD = JetKeywordToken.softKeyword("import");
JetKeywordToken WHERE_KEYWORD = JetKeywordToken.softKeyword("where");
JetKeywordToken BY_KEYWORD = JetKeywordToken.softKeyword("by");
JetKeywordToken LAZY_KEYWORD = JetKeywordToken.softKeyword("lazy");
JetKeywordToken GET_KEYWORD = JetKeywordToken.softKeyword("get");
JetKeywordToken SET_KEYWORD = JetKeywordToken.softKeyword("set");
JetKeywordToken ABSTRACT_KEYWORD = JetKeywordToken.softKeyword("abstract");
JetKeywordToken VIRTUAL_KEYWORD = JetKeywordToken.softKeyword("virtual");
JetKeywordToken ENUM_KEYWORD = JetKeywordToken.softKeyword("enum");
JetKeywordToken OPEN_KEYWORD = JetKeywordToken.softKeyword("open");
JetKeywordToken ATTRIBUTE_KEYWORD = JetKeywordToken.softKeyword("attribute");
JetKeywordToken OVERRIDE_KEYWORD = JetKeywordToken.softKeyword("override");
JetKeywordToken PRIVATE_KEYWORD = JetKeywordToken.softKeyword("private");
JetKeywordToken PUBLIC_KEYWORD = JetKeywordToken.softKeyword("public");
JetKeywordToken INTERNAL_KEYWORD = JetKeywordToken.softKeyword("internal");
JetKeywordToken PROTECTED_KEYWORD = JetKeywordToken.softKeyword("protected");
JetKeywordToken OUT_KEYWORD = JetKeywordToken.softKeyword("out");
JetKeywordToken REF_KEYWORD = JetKeywordToken.softKeyword("ref");
TokenSet KEYWORDS = TokenSet.create(NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD,
THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, DECOMPOSER_KEYWORD, EXTENSION_KEYWORD, FOR_KEYWORD,
NULL_KEYWORD, TYPEOF_KEYWORD, NEW_KEYWORD, TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, ISNOT_KEYWORD,
IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, MATCH_KEYWORD
ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, MATCH_KEYWORD, REF_KEYWORD, OUT_KEYWORD
);
TokenSet SOFT_KEYWORDS = TokenSet.create(WRAPS_KEYWORD, IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, LAZY_KEYWORD, GET_KEYWORD,
SET_KEYWORD, ABSTRACT_KEYWORD, VIRTUAL_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, ATTRIBUTE_KEYWORD,
OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD,
REF_KEYWORD
OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD
);
TokenSet MODIFIER_KEYWORDS = TokenSet.create(LAZY_KEYWORD, ABSTRACT_KEYWORD, VIRTUAL_KEYWORD, ENUM_KEYWORD,
OPEN_KEYWORD, ATTRIBUTE_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
PROTECTED_KEYWORD, REF_KEYWORD, OUT_KEYWORD, IN_KEYWORD
);
TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT);
+2 -2
View File
@@ -1,12 +1,12 @@
JetFile: BabySteps.jet
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n\n')
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Runnable')
TYPE_PARAMETER_LIST
+1 -1
View File
@@ -11,6 +11,6 @@ JetFile: ImportSoftKW.jet
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('import')
PsiWhiteSpace(' ')
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('import')
+3 -3
View File
@@ -1,6 +1,6 @@
JetFile: Imports.jet
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foo')
@@ -26,7 +26,7 @@ JetFile: Imports.jet
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace('\n')
@@ -37,7 +37,7 @@ JetFile: Imports.jet
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace(' ')
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace('\n')
+10 -10
View File
@@ -1,6 +1,6 @@
JetFile: Imports_ERR.jet
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foo')
@@ -14,7 +14,7 @@ JetFile: Imports_ERR.jet
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace('\n')
PsiElement(IDENTIFIER)('import')
PsiWhiteSpace(' ')
@@ -39,7 +39,7 @@ JetFile: Imports_ERR.jet
PsiElement(DOT)('.')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(IDENTIFIER)('bar')
@@ -53,7 +53,7 @@ JetFile: Imports_ERR.jet
PsiElement(MAP)('.*')
PsiWhiteSpace(' ')
PsiErrorElement:Cannot rename a all imported items to one identifier
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace('\n')
@@ -66,7 +66,7 @@ JetFile: Imports_ERR.jet
PsiElement(MAP)('.*')
PsiWhiteSpace(' ')
PsiErrorElement:Cannot rename a all imported items to one identifier
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace('\n\n')
PsiElement(IDENTIFIER)('import')
PsiWhiteSpace(' ')
@@ -74,7 +74,7 @@ JetFile: Imports_ERR.jet
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(SEMICOLON)(';')
@@ -109,7 +109,7 @@ JetFile: Imports_ERR.jet
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiWhiteSpace(' ')
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace(' ')
@@ -124,7 +124,7 @@ JetFile: Imports_ERR.jet
PsiElement(MAP)('.*')
PsiWhiteSpace(' ')
PsiErrorElement:Cannot rename a all imported items to one identifier
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace(' ')
@@ -139,12 +139,12 @@ JetFile: Imports_ERR.jet
PsiElement(MAP)('.*')
PsiWhiteSpace(' ')
PsiErrorElement:Cannot rename a all imported items to one identifier
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n\n')
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo')
PsiWhiteSpace(' ')
+12 -12
View File
@@ -1,6 +1,6 @@
JetFile: NamespaceBlock.jet
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foo')
@@ -14,12 +14,12 @@ JetFile: NamespaceBlock.jet
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace('\n\n')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foof')
@@ -37,7 +37,7 @@ JetFile: NamespaceBlock.jet
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n\n ')
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo')
PsiWhiteSpace(' ')
@@ -48,7 +48,7 @@ JetFile: NamespaceBlock.jet
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('bar')
@@ -57,7 +57,7 @@ JetFile: NamespaceBlock.jet
PsiWhiteSpace('\n ')
NAMESPACE_BODY
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Bar')
PsiWhiteSpace(' ')
@@ -68,7 +68,7 @@ JetFile: NamespaceBlock.jet
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('ns')
@@ -77,14 +77,14 @@ JetFile: NamespaceBlock.jet
PsiWhiteSpace('\n ')
NAMESPACE_BODY
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('X')
PsiWhiteSpace('\n\n ')
TYPE_PARAMETER_LIST
<empty list>
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Y')
PsiWhiteSpace('\n ')
@@ -97,7 +97,7 @@ JetFile: NamespaceBlock.jet
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n\n')
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Bar')
TYPE_PARAMETER_LIST
@@ -111,7 +111,7 @@ JetFile: NamespaceBlock.jet
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foo')
@@ -122,7 +122,7 @@ JetFile: NamespaceBlock.jet
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('bar')
+21 -21
View File
@@ -1,6 +1,6 @@
JetFile: NamespaceBlock_ERR.jet
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foo')
@@ -14,7 +14,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace('\n')
PsiElement(IDENTIFIER)('import')
PsiWhiteSpace(' ')
@@ -39,13 +39,13 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(DOT)('.')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace('\n\n')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foof')
@@ -62,7 +62,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(MAP)('.*')
PsiWhiteSpace(' ')
PsiErrorElement:Cannot rename a all imported items to one identifier
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace('\n ')
@@ -75,7 +75,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(MAP)('.*')
PsiWhiteSpace(' ')
PsiErrorElement:Cannot rename a all imported items to one identifier
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace('\n\n ')
PsiElement(IDENTIFIER)('import')
PsiWhiteSpace(' ')
@@ -83,7 +83,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(SEMICOLON)(';')
@@ -118,7 +118,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiWhiteSpace(' ')
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace(' ')
@@ -133,7 +133,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(MAP)('.*')
PsiWhiteSpace(' ')
PsiErrorElement:Cannot rename a all imported items to one identifier
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace(' ')
@@ -148,12 +148,12 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(MAP)('.*')
PsiWhiteSpace(' ')
PsiErrorElement:Cannot rename a all imported items to one identifier
PsiElement(AS_KEYWORD)('as')
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n\n ')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foo')
@@ -161,7 +161,7 @@ JetFile: NamespaceBlock_ERR.jet
<empty list>
PsiWhiteSpace('\n\n ')
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Foo')
PsiWhiteSpace(' ')
@@ -172,7 +172,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n ')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiErrorElement:Expecting namespace name
<empty list>
PsiWhiteSpace(' ')
@@ -180,7 +180,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiWhiteSpace('\n ')
NAMESPACE_BODY
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Bar')
PsiWhiteSpace(' ')
@@ -191,7 +191,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('ns')
@@ -200,14 +200,14 @@ JetFile: NamespaceBlock_ERR.jet
PsiWhiteSpace('\n ')
NAMESPACE_BODY
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('X')
PsiWhiteSpace('\n\n ')
TYPE_PARAMETER_LIST
<empty list>
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Y')
PsiWhiteSpace('\n ')
@@ -223,7 +223,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(IDENTIFIER)('dsfgd')
PsiWhiteSpace('\n\n')
CLASS
PsiElement(CLASS_KEYWORD)('class')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Bar')
TYPE_PARAMETER_LIST
@@ -237,7 +237,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foo')
@@ -245,7 +245,7 @@ JetFile: NamespaceBlock_ERR.jet
<empty list>
PsiWhiteSpace('\n\n')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiErrorElement:Expecting namespace name
<empty list>
PsiWhiteSpace(' ')
@@ -255,7 +255,7 @@ JetFile: NamespaceBlock_ERR.jet
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n')
NAMESPACE
PsiElement(NAMESPACE_KEYWORD)('namespace')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('bar')
+51
View File
@@ -0,0 +1,51 @@
namespace foo.bar.goo
abstract
virtual
enum
open
attribute
override
virtual
abstract
private
protected
public
internal
lazy
in
out
ref
class Bar<abstract
virtual
enum
open
attribute
override
virtual
abstract
private
protected
public
internal
lazy
in
out
ref T> {
abstract
virtual
enum
open
attribute
override
virtual
abstract
private
protected
public
internal
in
lazy
out
ref
}
+123
View File
@@ -0,0 +1,123 @@
JetFile: SimpleModifiers.jet
NAMESPACE
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('goo')
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
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
MODIFIER_LIST
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(' ')
PsiElement(IDENTIFIER)('T')
PsiElement(GT)('>')
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')
PsiElement(RBRACE)('}')
@@ -34,4 +34,5 @@ public class JetParsingTest extends ParsingTestCase {
public void testImportSoftKW() throws Exception {doTest(true);}
public void testNamespaceBlock_ERR() throws Exception {doTest(true);}
public void testNamespaceBlock() throws Exception {doTest(true);}
public void testSimpleModifiers() throws Exception {doTest(true);}
}