Modifiers for namespaces fixed
This commit is contained in:
@@ -11,7 +11,7 @@ preamble
|
||||
;
|
||||
|
||||
namespaceHeader
|
||||
: "namespace" SimpleName{"."} SEMI?
|
||||
: modifiers "namespace" SimpleName{"."} SEMI?
|
||||
;
|
||||
|
||||
import
|
||||
|
||||
@@ -337,7 +337,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
parseFunctionLiteral();
|
||||
}
|
||||
else if (!parseLiteralConstant()) {
|
||||
// TODO
|
||||
// TODO: betters recovery if FIRST(expression) did not match
|
||||
errorAndAdvance("Expecting an expression");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,16 +110,21 @@ public class JetParsing extends AbstractJetParsing {
|
||||
private void parsePreamble() {
|
||||
/*
|
||||
* namespaceHeader
|
||||
* : "namespace" SimpleName{"."} SEMI?
|
||||
* : modifiers "namespace" SimpleName{"."} SEMI?
|
||||
* ;
|
||||
*/
|
||||
PsiBuilder.Marker firstEntry = mark();
|
||||
parseModifierList();
|
||||
|
||||
if (at(NAMESPACE_KEYWORD)) {
|
||||
// TODO: Modifiers
|
||||
firstEntry.drop();
|
||||
advance(); // NAMESPACE_KEYWORD
|
||||
|
||||
parseNamespaceName();
|
||||
|
||||
consumeIf(SEMICOLON);
|
||||
} else {
|
||||
firstEntry.rollbackTo();
|
||||
}
|
||||
|
||||
while (at(IMPORT_KEYWORD)) {
|
||||
@@ -384,7 +389,6 @@ public class JetParsing extends AbstractJetParsing {
|
||||
* ;
|
||||
*/
|
||||
private JetNodeType parseNamespaceBlock() {
|
||||
// TODO: Modifiers
|
||||
assert _at(NAMESPACE_KEYWORD);
|
||||
advance(); // NAMESPACE_KEYWORD
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
public [a] namespace name;
|
||||
|
||||
[a] namespace a {
|
||||
val foo
|
||||
|
||||
private namespace b {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
JetFile: NamespaceModifiers.jet
|
||||
NAMESPACE
|
||||
MODIFIER_LIST
|
||||
PsiElement(public)('public')
|
||||
PsiWhiteSpace(' ')
|
||||
ATTRIBUTE_ANNOTATION
|
||||
PsiElement(LBRACKET)('[')
|
||||
ATTRIBUTE
|
||||
USER_TYPE
|
||||
PsiElement(IDENTIFIER)('a')
|
||||
PsiElement(RBRACKET)(']')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(namespace)('namespace')
|
||||
PsiWhiteSpace(' ')
|
||||
NAMESPACE_NAME
|
||||
PsiElement(IDENTIFIER)('name')
|
||||
PsiElement(SEMICOLON)(';')
|
||||
PsiWhiteSpace('\n\n')
|
||||
NAMESPACE
|
||||
MODIFIER_LIST
|
||||
ATTRIBUTE_ANNOTATION
|
||||
PsiElement(LBRACKET)('[')
|
||||
ATTRIBUTE
|
||||
USER_TYPE
|
||||
PsiElement(IDENTIFIER)('a')
|
||||
PsiElement(RBRACKET)(']')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(namespace)('namespace')
|
||||
PsiWhiteSpace(' ')
|
||||
NAMESPACE_NAME
|
||||
PsiElement(IDENTIFIER)('a')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(LBRACE)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
NAMESPACE_BODY
|
||||
PROPERTY
|
||||
PsiElement(val)('val')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(IDENTIFIER)('foo')
|
||||
PsiWhiteSpace('\n\n ')
|
||||
NAMESPACE
|
||||
MODIFIER_LIST
|
||||
PsiElement(private)('private')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(namespace)('namespace')
|
||||
PsiWhiteSpace(' ')
|
||||
NAMESPACE_NAME
|
||||
PsiElement(IDENTIFIER)('b')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(LBRACE)('{')
|
||||
PsiWhiteSpace('\n\n ')
|
||||
NAMESPACE_BODY
|
||||
<empty list>
|
||||
PsiElement(RBRACE)('}')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(RBRACE)('}')
|
||||
Reference in New Issue
Block a user