From 5fdb34038ede46d49d6f8e3a498eee401aba1fa3 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 25 Apr 2011 22:08:03 +0400 Subject: [PATCH] Allow namespaces with {} on the first line of a file (JET-2) --- .../jet/lang/parsing/JetParsing.java | 7 +++- idea/testData/psi/NamespaceBlockFirst.jet | 4 +++ idea/testData/psi/NamespaceBlockFirst.txt | 36 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 idea/testData/psi/NamespaceBlockFirst.jet create mode 100644 idea/testData/psi/NamespaceBlockFirst.txt diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 2f6cd5b0f22..f5ae2ea66bc 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -118,11 +118,16 @@ public class JetParsing extends AbstractJetParsing { parseModifierList(); if (at(NAMESPACE_KEYWORD)) { - firstEntry.drop(); advance(); // NAMESPACE_KEYWORD parseNamespaceName(); + if (at(LBRACE)) { + firstEntry.rollbackTo(); + return; + } + firstEntry.drop(); + consumeIf(SEMICOLON); } else { firstEntry.rollbackTo(); diff --git a/idea/testData/psi/NamespaceBlockFirst.jet b/idea/testData/psi/NamespaceBlockFirst.jet new file mode 100644 index 00000000000..d3324536a1a --- /dev/null +++ b/idea/testData/psi/NamespaceBlockFirst.jet @@ -0,0 +1,4 @@ +namespace foobar { + val a = 1 + val b = foobar.a +} diff --git a/idea/testData/psi/NamespaceBlockFirst.txt b/idea/testData/psi/NamespaceBlockFirst.txt new file mode 100644 index 00000000000..a115f637a28 --- /dev/null +++ b/idea/testData/psi/NamespaceBlockFirst.txt @@ -0,0 +1,36 @@ +JetFile: NamespaceBlockFirst.jet + NAMESPACE + NAMESPACE + PsiElement(namespace)('namespace') + PsiWhiteSpace(' ') + NAMESPACE_NAME + PsiElement(IDENTIFIER)('foobar') + PsiWhiteSpace(' ') + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n ') + NAMESPACE_BODY + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('a') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('b') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('foobar') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiWhiteSpace('\n') + PsiElement(RBRACE)('}') \ No newline at end of file