Namespace blocks
This commit is contained in:
@@ -125,7 +125,7 @@ typeArguments
|
|||||||
;
|
;
|
||||||
|
|
||||||
valueArguments
|
valueArguments
|
||||||
: "(" (SimpleName "=")? expression{","} ")"
|
: "(" (SimpleName "=")? ("out" | "ref")? expression{","} ")"
|
||||||
;
|
;
|
||||||
|
|
||||||
infixFunctionCall
|
infixFunctionCall
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ public interface JetNodeTypes {
|
|||||||
JetNodeType CLASS_BODY = new JetNodeType("CLASS_BODY");
|
JetNodeType CLASS_BODY = new JetNodeType("CLASS_BODY");
|
||||||
JetNodeType IMPORT_DIRECTIVE = new JetNodeType("IMPORT_DIRECTIVE");
|
JetNodeType IMPORT_DIRECTIVE = new JetNodeType("IMPORT_DIRECTIVE");
|
||||||
JetNodeType IMPORTED = new JetNodeType("IMPORTED");
|
JetNodeType IMPORTED = new JetNodeType("IMPORTED");
|
||||||
|
JetNodeType NAMESPACE_BODY = new JetNodeType("NAMESPACE_BODY");
|
||||||
|
|
||||||
|
|
||||||
IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME");
|
IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.jetbrains.jet.lang.parsing;
|
package org.jetbrains.jet.lang.parsing;
|
||||||
|
|
||||||
import com.intellij.lang.ITokenTypeRemapper;
|
|
||||||
import com.intellij.lang.PsiBuilder;
|
import com.intellij.lang.PsiBuilder;
|
||||||
import com.intellij.lang.WhitespaceSkippedCallback;
|
import com.intellij.lang.WhitespaceSkippedCallback;
|
||||||
import com.intellij.psi.tree.IElementType;
|
import com.intellij.psi.tree.IElementType;
|
||||||
@@ -52,7 +51,17 @@ public class JetParsing {
|
|||||||
|
|
||||||
parsePreamble();
|
parsePreamble();
|
||||||
|
|
||||||
while (!eof()) {
|
parseToplevelDeclarations(false);
|
||||||
|
|
||||||
|
namespaceMarker.done(NAMESPACE);
|
||||||
|
fileMarker.done(JET_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* toplevelObject[| import]*
|
||||||
|
*/
|
||||||
|
private void parseToplevelDeclarations(boolean insideBlock) {
|
||||||
|
while (!eof() && (!insideBlock || !at(RBRACE))) {
|
||||||
if (at(IMPORT_KEYWORD)) {
|
if (at(IMPORT_KEYWORD)) {
|
||||||
parseImportDirective();
|
parseImportDirective();
|
||||||
}
|
}
|
||||||
@@ -60,9 +69,6 @@ public class JetParsing {
|
|||||||
parseTopLevelObject();
|
parseTopLevelObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespaceMarker.done(NAMESPACE);
|
|
||||||
fileMarker.done(JET_FILE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -77,7 +83,7 @@ public class JetParsing {
|
|||||||
* ;
|
* ;
|
||||||
*/
|
*/
|
||||||
if (at(NAMESPACE_KEYWORD)) {
|
if (at(NAMESPACE_KEYWORD)) {
|
||||||
advance();
|
advance(); // NAMESPACE_KEYWORD
|
||||||
|
|
||||||
parseNamespaceName();
|
parseNamespaceName();
|
||||||
}
|
}
|
||||||
@@ -92,7 +98,7 @@ public class JetParsing {
|
|||||||
PsiBuilder.Marker nsName = mark();
|
PsiBuilder.Marker nsName = mark();
|
||||||
expect(IDENTIFIER, "Expecting qualified name", NAMESPACE_NAME_RECOVERY_SET);
|
expect(IDENTIFIER, "Expecting qualified name", NAMESPACE_NAME_RECOVERY_SET);
|
||||||
while (at(DOT)) {
|
while (at(DOT)) {
|
||||||
advance();
|
advance(); // DOT
|
||||||
expect(IDENTIFIER, "Namespace name must be a '.'-separated identifier list", NAMESPACE_NAME_RECOVERY_SET);
|
expect(IDENTIFIER, "Namespace name must be a '.'-separated identifier list", NAMESPACE_NAME_RECOVERY_SET);
|
||||||
if (at(EOL_OR_SEMICOLON)) break;
|
if (at(EOL_OR_SEMICOLON)) break;
|
||||||
}
|
}
|
||||||
@@ -107,16 +113,16 @@ public class JetParsing {
|
|||||||
private void parseImportDirective() {
|
private void parseImportDirective() {
|
||||||
assert at(IMPORT_KEYWORD);
|
assert at(IMPORT_KEYWORD);
|
||||||
PsiBuilder.Marker importDirective = mark();
|
PsiBuilder.Marker importDirective = mark();
|
||||||
advance();
|
advance(); // IMPORT_KEYWORD
|
||||||
|
|
||||||
expect(IDENTIFIER, "Expecting qualified name", TokenSet.create(DOT, MAP));
|
expect(IDENTIFIER, "Expecting qualified name", TokenSet.create(DOT, MAP));
|
||||||
while (at(DOT)) {
|
while (at(DOT)) {
|
||||||
advance();
|
advance(); // DOT
|
||||||
if (at(IDENTIFIER)) {
|
if (at(IDENTIFIER)) {
|
||||||
advance();
|
advance(); // IDENTIFIER
|
||||||
}
|
}
|
||||||
else if (at(MUL)) {
|
else if (at(MUL)) {
|
||||||
advance();
|
advance(); // MUL
|
||||||
handleUselessRename();
|
handleUselessRename();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -125,41 +131,50 @@ public class JetParsing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (at(MAP)) {
|
if (at(MAP)) {
|
||||||
advance();
|
advance(); // MAP
|
||||||
handleUselessRename();
|
handleUselessRename();
|
||||||
}
|
}
|
||||||
else if (at(AS_KEYWORD)) {
|
else if (at(AS_KEYWORD)) {
|
||||||
advance();
|
advance(); // AS_KEYWORD
|
||||||
expect(IDENTIFIER, "Expecting identifier", TokenSet.create(SEMICOLON));
|
expect(IDENTIFIER, "Expecting identifier", TokenSet.create(SEMICOLON));
|
||||||
}
|
}
|
||||||
cosumeIf(SEMICOLON);
|
cosumeIf(SEMICOLON);
|
||||||
importDirective.done(IMPORT_DIRECTIVE);
|
importDirective.done(IMPORT_DIRECTIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cosumeIf(JetToken token) {
|
|
||||||
if (at(token)) advance();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleUselessRename() {
|
private void handleUselessRename() {
|
||||||
if (at(AS_KEYWORD)) {
|
if (at(AS_KEYWORD)) {
|
||||||
PsiBuilder.Marker as = mark();
|
PsiBuilder.Marker as = mark();
|
||||||
advance();
|
advance(); // AS_KEYWORD
|
||||||
cosumeIf(IDENTIFIER);
|
cosumeIf(IDENTIFIER);
|
||||||
as.error("Cannot rename a all imported items to one identifier");
|
as.error("Cannot rename a all imported items to one identifier");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* toplevelObject
|
||||||
|
* : namespace
|
||||||
|
* : class
|
||||||
|
* : extension
|
||||||
|
* : function
|
||||||
|
* : property
|
||||||
|
* : typedef
|
||||||
|
* ;
|
||||||
|
*/
|
||||||
private void parseTopLevelObject() {
|
private void parseTopLevelObject() {
|
||||||
PsiBuilder.Marker decl = mark();
|
PsiBuilder.Marker decl = mark();
|
||||||
if (!parseModifierList()) {
|
if (!parseModifierList()) {
|
||||||
decl.drop();
|
decl.drop();
|
||||||
advance();
|
advance(); // TODO
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
JetToken keywordToken = tt();
|
JetToken keywordToken = tt();
|
||||||
JetNodeType declType = null;
|
JetNodeType declType = null;
|
||||||
if (keywordToken == CLASS_KEYWORD) {
|
if (keywordToken == NAMESPACE_KEYWORD) {
|
||||||
|
declType = parseNamespaceBlock();
|
||||||
|
}
|
||||||
|
else if (keywordToken == CLASS_KEYWORD) {
|
||||||
declType = parseClass();
|
declType = parseClass();
|
||||||
}
|
}
|
||||||
else if (keywordToken == EXTENSION_KEYWORD) {
|
else if (keywordToken == EXTENSION_KEYWORD) {
|
||||||
@@ -171,9 +186,6 @@ public class JetParsing {
|
|||||||
else if (keywordToken == VAL_KEYWORD || keywordToken == VAR_KEYWORD) {
|
else if (keywordToken == VAL_KEYWORD || keywordToken == VAR_KEYWORD) {
|
||||||
declType = parseProperty();
|
declType = parseProperty();
|
||||||
}
|
}
|
||||||
else if (keywordToken == NAMESPACE_KEYWORD) {
|
|
||||||
declType = parseBlockNamespace();
|
|
||||||
}
|
|
||||||
else if (keywordToken == TYPE_KEYWORD) {
|
else if (keywordToken == TYPE_KEYWORD) {
|
||||||
declType = parseTypedef();
|
declType = parseTypedef();
|
||||||
}
|
}
|
||||||
@@ -187,16 +199,75 @@ public class JetParsing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean parseModifierList() {
|
||||||
|
// TODO
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* namespace
|
||||||
|
* : "namespace" SimpleName{"."} "{"
|
||||||
|
* import*
|
||||||
|
* toplevelObject[| import]*
|
||||||
|
* "}"
|
||||||
|
* ;
|
||||||
|
*/
|
||||||
|
private JetNodeType parseNamespaceBlock() {
|
||||||
|
assert at(NAMESPACE);
|
||||||
|
advance(); // NAMESPACE
|
||||||
|
|
||||||
|
if (at(LBRACE)) {
|
||||||
|
error("Expecting namespace name");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
parseNamespaceName();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!at(LBRACE)) {
|
||||||
|
error("A namespace block in '{...}' expected");
|
||||||
|
return NAMESPACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
advance(); // LBRACE
|
||||||
|
PsiBuilder.Marker namespaceBody = mark();
|
||||||
|
|
||||||
|
parseToplevelDeclarations(true);
|
||||||
|
|
||||||
|
namespaceBody.done(NAMESPACE_BODY);
|
||||||
|
expect(RBRACE, "Expecting '}'");
|
||||||
|
|
||||||
|
return NAMESPACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JetNodeType parseClass() {
|
||||||
|
assert at(CLASS_KEYWORD);
|
||||||
|
advance(); // CLASS_KEYWORD
|
||||||
|
|
||||||
|
expect(IDENTIFIER, "Class name expected", CLASS_NAME_RECOVERY_SET);
|
||||||
|
parseTypeParameterList();
|
||||||
|
|
||||||
|
cosumeIf(WRAPS_KEYWORD);
|
||||||
|
if (at(LPAR)) {
|
||||||
|
parsePrimaryConstructorParameterList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (at(COLON)) {
|
||||||
|
advance(); // COLON
|
||||||
|
parseDelegationSpecifierList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (at(LBRACE)) {
|
||||||
|
parseClassBody();
|
||||||
|
}
|
||||||
|
|
||||||
|
return CLASS;
|
||||||
|
}
|
||||||
|
|
||||||
private JetNodeType parseTypedef() {
|
private JetNodeType parseTypedef() {
|
||||||
advance(); // TODO
|
advance(); // TODO
|
||||||
return TYPEDEF;
|
return TYPEDEF;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JetNodeType parseBlockNamespace() {
|
|
||||||
advance(); // TODO
|
|
||||||
return NAMESPACE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private JetNodeType parseProperty() {
|
private JetNodeType parseProperty() {
|
||||||
advance(); // TODO
|
advance(); // TODO
|
||||||
return PROPERTY;
|
return PROPERTY;
|
||||||
@@ -212,40 +283,16 @@ public class JetParsing {
|
|||||||
return EXTENSION;
|
return EXTENSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JetNodeType parseClass() {
|
|
||||||
assert at(CLASS_KEYWORD);
|
|
||||||
advance();
|
|
||||||
|
|
||||||
expect(IDENTIFIER, "Class name expected", CLASS_NAME_RECOVERY_SET);
|
|
||||||
parseTypeParameterList();
|
|
||||||
|
|
||||||
cosumeIf(WRAPS_KEYWORD);
|
|
||||||
if (at(LPAR)) {
|
|
||||||
parsePrimaryConstructorParameterList();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (at(COLON)) {
|
|
||||||
advance();
|
|
||||||
parseDelegationSpecifierList();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (at(LBRACE)) {
|
|
||||||
parseClassBody();
|
|
||||||
}
|
|
||||||
|
|
||||||
return CLASS;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void parseClassBody() {
|
private void parseClassBody() {
|
||||||
assert at(LBRACE);
|
assert at(LBRACE);
|
||||||
PsiBuilder.Marker body = mark();
|
PsiBuilder.Marker body = mark();
|
||||||
advance();
|
advance(); // LBRACE
|
||||||
|
|
||||||
while (!eof()) {
|
while (!eof()) {
|
||||||
if (at(RBRACE)) {
|
if (at(RBRACE)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
advance();
|
advance(); // TODO
|
||||||
}
|
}
|
||||||
expect(RBRACE, "Missing '}");
|
expect(RBRACE, "Missing '}");
|
||||||
body.done(CLASS_BODY);
|
body.done(CLASS_BODY);
|
||||||
@@ -256,7 +303,7 @@ public class JetParsing {
|
|||||||
while (true) {
|
while (true) {
|
||||||
parseDelegationSpecifier();
|
parseDelegationSpecifier();
|
||||||
if (!at(COMMA)) break;
|
if (!at(COMMA)) break;
|
||||||
advance();
|
advance(); // COMMA
|
||||||
}
|
}
|
||||||
|
|
||||||
list.done(DELEGATION_SPECIFIER_LIST);
|
list.done(DELEGATION_SPECIFIER_LIST);
|
||||||
@@ -269,7 +316,7 @@ public class JetParsing {
|
|||||||
PsiBuilder.Marker delegator = mark();
|
PsiBuilder.Marker delegator = mark();
|
||||||
parseTypeRef(); // TODO: Error recovery!!!
|
parseTypeRef(); // TODO: Error recovery!!!
|
||||||
if (at(BY_KEYWORD)) {
|
if (at(BY_KEYWORD)) {
|
||||||
advance();
|
advance(); // BY_KEYWORD
|
||||||
parseExpression();
|
parseExpression();
|
||||||
delegator.done(DELEGATOR_BY);
|
delegator.done(DELEGATOR_BY);
|
||||||
}
|
}
|
||||||
@@ -287,12 +334,12 @@ public class JetParsing {
|
|||||||
private void parseValueParameterList() {
|
private void parseValueParameterList() {
|
||||||
assert at(LPAR);
|
assert at(LPAR);
|
||||||
PsiBuilder.Marker list = mark();
|
PsiBuilder.Marker list = mark();
|
||||||
advance();
|
advance(); // LPAR
|
||||||
while (true) {
|
while (true) {
|
||||||
if (at(IDENTIFIER) && lookahead(1) == EQ) {
|
if (at(IDENTIFIER) && lookahead(1) == EQ) {
|
||||||
PsiBuilder.Marker named = mark();
|
PsiBuilder.Marker named = mark();
|
||||||
advance();
|
advance(); // IDENTIFIER
|
||||||
advance();
|
advance(); // EQ
|
||||||
parseExpression();
|
parseExpression();
|
||||||
named.done(NAMED_ARGUMENT);
|
named.done(NAMED_ARGUMENT);
|
||||||
}
|
}
|
||||||
@@ -318,12 +365,12 @@ public class JetParsing {
|
|||||||
private void parsePrimaryConstructorParameterList() {
|
private void parsePrimaryConstructorParameterList() {
|
||||||
assert at(LPAR);
|
assert at(LPAR);
|
||||||
PsiBuilder.Marker cons = mark();
|
PsiBuilder.Marker cons = mark();
|
||||||
advance();
|
advance(); // LPAR
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
parsePrimaryConstructorParameter();
|
parsePrimaryConstructorParameter();
|
||||||
if (!at(COMMA)) break;
|
if (!at(COMMA)) break;
|
||||||
advance();
|
advance(); // COMMA
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(RPAR, "')' expected");
|
expect(RPAR, "')' expected");
|
||||||
@@ -336,7 +383,7 @@ public class JetParsing {
|
|||||||
parseModifierList();
|
parseModifierList();
|
||||||
|
|
||||||
if (at(VAR_KEYWORD) || at(VAL_KEYWORD)) {
|
if (at(VAR_KEYWORD) || at(VAL_KEYWORD)) {
|
||||||
advance();
|
advance(); // VAR_KEYWORD | VAL_KEYWORD
|
||||||
}
|
}
|
||||||
|
|
||||||
parseFunctionParameterRest();
|
parseFunctionParameterRest();
|
||||||
@@ -348,7 +395,7 @@ public class JetParsing {
|
|||||||
expect(IDENTIFIER, "Parameter name expected", PARAMETER_NAME_RECOVERY_SET);
|
expect(IDENTIFIER, "Parameter name expected", PARAMETER_NAME_RECOVERY_SET);
|
||||||
|
|
||||||
if (at(COLON)) {
|
if (at(COLON)) {
|
||||||
advance();
|
advance(); // COLON
|
||||||
parseTypeRef();
|
parseTypeRef();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -356,26 +403,25 @@ public class JetParsing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (at(EQ)) {
|
if (at(EQ)) {
|
||||||
advance();
|
advance(); // EQ
|
||||||
parseExpression();
|
parseExpression();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void parseExpression() {
|
private void parseExpression() {
|
||||||
advance();
|
advance(); // TODO
|
||||||
// TODO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void parseTypeParameterList() {
|
private void parseTypeParameterList() {
|
||||||
PsiBuilder.Marker list = mark();
|
PsiBuilder.Marker list = mark();
|
||||||
if (tt() == LT) {
|
if (tt() == LT) {
|
||||||
advance();
|
advance(); // LT
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
parseTypeParameter();
|
parseTypeParameter();
|
||||||
|
|
||||||
if (!at(COMMA)) break;
|
if (!at(COMMA)) break;
|
||||||
advance();
|
advance(); // COMMA
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(GT, "Missing '>'", TYPE_PARAMETER_GT_RECOVERY_SET);
|
expect(GT, "Missing '>'", TYPE_PARAMETER_GT_RECOVERY_SET);
|
||||||
@@ -394,7 +440,7 @@ public class JetParsing {
|
|||||||
expect(IDENTIFIER, "Type parameter name expected", TokenSet.EMPTY);
|
expect(IDENTIFIER, "Type parameter name expected", TokenSet.EMPTY);
|
||||||
|
|
||||||
if (at(COLON)) {
|
if (at(COLON)) {
|
||||||
advance();
|
advance(); // COLON
|
||||||
parseTypeRef();
|
parseTypeRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -403,13 +449,7 @@ public class JetParsing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void parseTypeRef() {
|
private void parseTypeRef() {
|
||||||
advance();
|
advance(); // tODO:
|
||||||
// tODO:
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean parseModifierList() {
|
|
||||||
// TODO
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -431,7 +471,7 @@ public class JetParsing {
|
|||||||
|
|
||||||
private boolean expect(JetToken expectation, String message, TokenSet recoverySet) {
|
private boolean expect(JetToken expectation, String message, TokenSet recoverySet) {
|
||||||
if (at(expectation)) {
|
if (at(expectation)) {
|
||||||
advance();
|
advance(); // expectation
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -454,7 +494,7 @@ public class JetParsing {
|
|||||||
|
|
||||||
private void errorAndAdvance(String message) {
|
private void errorAndAdvance(String message) {
|
||||||
PsiBuilder.Marker err = mark();
|
PsiBuilder.Marker err = mark();
|
||||||
advance();
|
advance(); // erroneous token
|
||||||
err.error(message);
|
err.error(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -503,4 +543,9 @@ public class JetParsing {
|
|||||||
tmp.rollbackTo();
|
tmp.rollbackTo();
|
||||||
return tt;
|
return tt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void cosumeIf(JetToken token) {
|
||||||
|
if (at(token)) advance(); // token
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import java.util.Arrays;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public interface JetTokens {
|
public interface JetTokens {
|
||||||
|
JetToken EOF = new JetToken("EOF");
|
||||||
|
|
||||||
JetToken BLOCK_COMMENT = new JetToken("BLOCK_COMMENT");
|
JetToken BLOCK_COMMENT = new JetToken("BLOCK_COMMENT");
|
||||||
JetToken DOC_COMMENT = new JetToken("DOC_COMMENT");
|
JetToken DOC_COMMENT = new JetToken("DOC_COMMENT");
|
||||||
JetToken EOL_COMMENT = new JetToken("EOL_COMMENT");
|
JetToken EOL_COMMENT = new JetToken("EOL_COMMENT");
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
namespace foo.bar.goo
|
||||||
|
|
||||||
|
import foo as bar
|
||||||
|
|
||||||
|
namespace foof {
|
||||||
|
import foo.bar.*;
|
||||||
|
|
||||||
|
class Foo {}
|
||||||
|
|
||||||
|
namespace bar {
|
||||||
|
class Bar {}
|
||||||
|
|
||||||
|
namespace ns {
|
||||||
|
class X
|
||||||
|
|
||||||
|
class Y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Bar<T> {}
|
||||||
|
|
||||||
|
namespace foo {}
|
||||||
|
|
||||||
|
namespace bar {
|
||||||
|
import sdf
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
JetFile: NamespaceBlock.jet
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('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(' ')
|
||||||
|
PsiElement(AS_KEYWORD)('as')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('foof')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(MAP)('.*')
|
||||||
|
PsiElement(SEMICOLON)(';')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('Foo')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
CLASS_BODY
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('Bar')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
CLASS_BODY
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('ns')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('X')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('Y')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n\n\n')
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('Bar')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
PsiElement(LT)('<')
|
||||||
|
TYPE_PARAMETER
|
||||||
|
PsiElement(IDENTIFIER)('T')
|
||||||
|
PsiElement(GT)('>')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
CLASS_BODY
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
<empty list>
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('sdf')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
namespace foo.bar.goo
|
||||||
|
|
||||||
|
import foo as
|
||||||
|
import foo.
|
||||||
|
import foo.bar.
|
||||||
|
import foo. as bar
|
||||||
|
|
||||||
|
namespace foof {
|
||||||
|
import foo.bar.* as bar
|
||||||
|
import foo.bar.* as
|
||||||
|
|
||||||
|
import foo as ;
|
||||||
|
import foo. ;
|
||||||
|
import foo.bar. ;
|
||||||
|
import foo. as bar ;
|
||||||
|
import foo.bar.* as bar ;
|
||||||
|
import foo.bar.* as ;
|
||||||
|
|
||||||
|
namespace foo
|
||||||
|
|
||||||
|
class Foo {}
|
||||||
|
namespace {
|
||||||
|
class Bar {}
|
||||||
|
|
||||||
|
namespace ns {
|
||||||
|
class X
|
||||||
|
|
||||||
|
class Y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dsfgd
|
||||||
|
|
||||||
|
class Bar<T> {}
|
||||||
|
|
||||||
|
namespace foo
|
||||||
|
|
||||||
|
namespace {}
|
||||||
|
|
||||||
|
namespace bar {
|
||||||
|
import sdf
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,271 @@
|
|||||||
|
JetFile: NamespaceBlock_ERR.jet
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('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(' ')
|
||||||
|
PsiElement(AS_KEYWORD)('as')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(IDENTIFIER)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(IDENTIFIER)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(AS_KEYWORD)('as')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('foof')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(MAP)('.*')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Cannot rename a all imported items to one identifier
|
||||||
|
PsiElement(AS_KEYWORD)('as')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(MAP)('.*')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Cannot rename a all imported items to one identifier
|
||||||
|
PsiElement(AS_KEYWORD)('as')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
PsiElement(IDENTIFIER)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(AS_KEYWORD)('as')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(SEMICOLON)(';')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiErrorElement:Qualified name must be a '.'-separated identifier list
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(SEMICOLON)(';')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiErrorElement:Qualified name must be a '.'-separated identifier list
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(SEMICOLON)(';')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiErrorElement:Qualified name must be a '.'-separated identifier list
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(AS_KEYWORD)('as')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(SEMICOLON)(';')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(MAP)('.*')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Cannot rename a all imported items to one identifier
|
||||||
|
PsiElement(AS_KEYWORD)('as')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(SEMICOLON)(';')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(MAP)('.*')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Cannot rename a all imported items to one identifier
|
||||||
|
PsiElement(AS_KEYWORD)('as')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(SEMICOLON)(';')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiErrorElement:A namespace block in '{...}' expected
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('Foo')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
CLASS_BODY
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiErrorElement:Expecting namespace name
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('Bar')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
CLASS_BODY
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('ns')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('X')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('Y')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(IDENTIFIER)('dsfgd')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
CLASS
|
||||||
|
PsiElement(CLASS_KEYWORD)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('Bar')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
PsiElement(LT)('<')
|
||||||
|
TYPE_PARAMETER
|
||||||
|
PsiElement(IDENTIFIER)('T')
|
||||||
|
PsiElement(GT)('>')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
CLASS_BODY
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiErrorElement:A namespace block in '{...}' expected
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiErrorElement:Expecting namespace name
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
<empty list>
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
NAMESPACE
|
||||||
|
PsiElement(NAMESPACE_KEYWORD)('namespace')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
NAMESPACE_NAME
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
NAMESPACE_BODY
|
||||||
|
IMPORT_DIRECTIVE
|
||||||
|
PsiElement(import)('import')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('sdf')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
@@ -32,4 +32,6 @@ public class JetParsingTest extends ParsingTestCase {
|
|||||||
public void testImports() throws Exception {doTest(true);}
|
public void testImports() throws Exception {doTest(true);}
|
||||||
public void testImports_ERR() throws Exception {doTest(true);}
|
public void testImports_ERR() throws Exception {doTest(true);}
|
||||||
public void testImportSoftKW() throws Exception {doTest(true);}
|
public void testImportSoftKW() throws Exception {doTest(true);}
|
||||||
|
public void testNamespaceBlock_ERR() throws Exception {doTest(true);}
|
||||||
|
public void testNamespaceBlock() throws Exception {doTest(true);}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user