diff --git a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java
index 8aa38facc66..045c5d59457 100644
--- a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java
+++ b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java
@@ -155,35 +155,20 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
error.error(mesage);
}
- /*
- * Looks for a the last top-level (not inside any {} [] () <>) '.' occurring before a
- * top-level occurrence of a token from the stopSet
- *
- * Returns -1 if no occurrence is found
- */
- protected int findLastBefore(TokenSet lookFor, TokenSet stopAt, boolean dontStopRightAfterOccurrence) {
+ protected int matchTokenStreamPredicate(TokenStreamPattern pattern) {
PsiBuilder.Marker currentPosition = mark();
- int lastOccurrence = -1;
int openAngleBrackets = 0;
int openBraces = 0;
int openParentheses = 0;
int openBrackets = 0;
- IElementType previousToken = null;
while (!eof()) {
- if (atSet(lookFor)
- && openAngleBrackets == 0
+ if (pattern.processToken(
+ myBuilder.getCurrentOffset(),
+ openAngleBrackets == 0
&& openBrackets == 0
&& openBraces == 0
- && openParentheses == 0) {
- lastOccurrence = myBuilder.getCurrentOffset();
- }
- if (atSet(stopAt)) {
- if (openAngleBrackets == 0
- && openBrackets == 0
- && openBraces == 0
- && openParentheses == 0
- && (!dontStopRightAfterOccurrence
- || !lookFor.contains(previousToken))) break;
+ && openParentheses == 0)) {
+ break;
}
if (at(LPAR)) {
openParentheses++;
@@ -209,15 +194,65 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
else if (at(RBRACKET)) {
openBrackets--;
}
- previousToken = tt();
advance(); // skip token
}
currentPosition.rollbackTo();
- return lastOccurrence;
+ return pattern.result();
+ }
+
+ /*
+ * Looks for a the last top-level (not inside any {} [] () <>) '.' occurring before a
+ * top-level occurrence of a token from the stopSet
+ *
+ * Returns -1 if no occurrence is found
+ */
+ protected int findLastBefore(TokenSet lookFor, TokenSet stopAt, boolean dontStopRightAfterOccurrence) {
+ return matchTokenStreamPredicate(new LastBefore(new AtSet(lookFor), new AtSet(stopAt), dontStopRightAfterOccurrence));
}
protected boolean eol() {
return myBuilder.eolInLastWhitespace() || eof();
}
+ protected class At implements TokenStreamPredicate {
+
+ private final IElementType lookFor;
+ private final boolean topLevelOnly;
+
+ public At(IElementType lookFor, boolean topLevelOnly) {
+ this.lookFor = lookFor;
+ this.topLevelOnly = topLevelOnly;
+ }
+
+ public At(IElementType lookFor) {
+ this(lookFor, true);
+ }
+
+ @Override
+ public boolean matching(boolean topLevel) {
+ return (topLevel || !topLevelOnly) && at(lookFor);
+ }
+
+ }
+
+ protected class AtSet implements TokenStreamPredicate {
+ private final TokenSet lookFor;
+ private final boolean topLevelOnly;
+
+ public AtSet(TokenSet lookFor, boolean topLevelOnly) {
+ this.lookFor = lookFor;
+ this.topLevelOnly = topLevelOnly;
+ }
+
+ public AtSet(TokenSet lookFor) {
+ this(lookFor, true);
+ }
+
+ @Override
+ public boolean matching(boolean topLevel) {
+ return (topLevel || !topLevelOnly) && atSet(lookFor);
+ }
+ }
+
+
}
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java b/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java
new file mode 100644
index 00000000000..25f039f8f62
--- /dev/null
+++ b/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java
@@ -0,0 +1,15 @@
+package org.jetbrains.jet.lang.parsing;
+
+/**
+ * @author abreslav
+ */
+public abstract class AbstractTokenStreamPattern implements TokenStreamPattern {
+
+ protected int lastOccurrence = -1;
+
+ @Override
+ public int result() {
+ return lastOccurrence;
+ }
+ }
+
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/FirstBefore.java b/idea/src/org/jetbrains/jet/lang/parsing/FirstBefore.java
new file mode 100644
index 00000000000..b8dc05b8153
--- /dev/null
+++ b/idea/src/org/jetbrains/jet/lang/parsing/FirstBefore.java
@@ -0,0 +1,26 @@
+package org.jetbrains.jet.lang.parsing;
+
+/**
+* @author abreslav
+*/
+public class FirstBefore extends AbstractTokenStreamPattern {
+ private final TokenStreamPredicate lookFor;
+ private final TokenStreamPredicate stopAt;
+
+ public FirstBefore(TokenStreamPredicate lookFor, TokenStreamPredicate stopAt) {
+ this.lookFor = lookFor;
+ this.stopAt = stopAt;
+ }
+
+ @Override
+ public boolean processToken(int offset, boolean topLevel) {
+ if (lookFor.matching(topLevel)) {
+ lastOccurrence = offset;
+ return true;
+ }
+ if (stopAt.matching(topLevel)) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java
index 8931263b82f..ad4bcf573b3 100644
--- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java
+++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java
@@ -694,9 +694,26 @@ public class JetParsing extends AbstractJetParsing {
advance(); // VAL_KEYWORD or VAR_KEYWORD
// TODO: EOL_OR_SEMICOLON is too restrictive here
- TokenSet propertyNameFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON, EOL_OR_SEMICOLON);
+ TokenSet propertyNameFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON);
- int lastDot = findLastBefore(TokenSet.create(DOT), propertyNameFollow, true);
+// int lastDot = findLastBefore(TokenSet.create(DOT), propertyNameFollow, true);
+ // TODO: constant
+ int lastDot = matchTokenStreamPredicate(new FirstBefore(new TokenStreamPredicate() {
+ @Override
+ public boolean matching(boolean topLevel) {
+ return topLevel
+ && at(DOT);
+ }
+ }, new TokenStreamPredicate() {
+ @Override
+ public boolean matching(boolean topLevel) {
+ if (lookahead(1) == IDENTIFIER) {
+ IElementType lookahead2 = lookahead(2);
+ return lookahead2 != LT && lookahead2 != DOT;
+ }
+ return false;
+ }
+ }));
if (lastDot == -1) {
parseAttributeList();
@@ -1258,6 +1275,7 @@ public class JetParsing extends AbstractJetParsing {
int lastLPar = findLastBefore(TokenSet.create(LPAR), TokenSet.create(RBRACE, COLON), false);
if (lastLPar >= 0 && lastLPar > myBuilder.getCurrentOffset()) {
PsiBuilder.Marker receiverType = mark();
+ // TODO : -1 is a hack
createTruncatedBuilder(lastLPar - 1).parseTypeRef();
receiverType.done(RECEIVER_TYPE);
advance(); // DOT
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/LastBefore.java b/idea/src/org/jetbrains/jet/lang/parsing/LastBefore.java
new file mode 100644
index 00000000000..2212b5d7de2
--- /dev/null
+++ b/idea/src/org/jetbrains/jet/lang/parsing/LastBefore.java
@@ -0,0 +1,37 @@
+package org.jetbrains.jet.lang.parsing;
+
+/**
+* @author abreslav
+*/
+public class LastBefore extends AbstractTokenStreamPattern {
+ private final boolean dontStopRightAfterOccurrence;
+ private final TokenStreamPredicate lookFor;
+ private final TokenStreamPredicate stopAt;
+
+ private boolean previousLookForResult;
+
+ public LastBefore(TokenStreamPredicate lookFor, TokenStreamPredicate stopAt, boolean dontStopRightAfterOccurrence) {
+ this.lookFor = lookFor;
+ this.stopAt = stopAt;
+ this.dontStopRightAfterOccurrence = dontStopRightAfterOccurrence;
+ }
+
+ public LastBefore(TokenStreamPredicate lookFor, TokenStreamPredicate stopAt) {
+ this(lookFor, stopAt, false);
+ }
+
+ @Override
+ public boolean processToken(int offset, boolean topLevel) {
+ boolean lookForResult = lookFor.matching(topLevel);
+ if (lookForResult) {
+ lastOccurrence = offset;
+ }
+ if (stopAt.matching(topLevel)) {
+ if (topLevel
+ && (!dontStopRightAfterOccurrence
+ || !previousLookForResult)) return true;
+ }
+ previousLookForResult = lookForResult;
+ return false;
+ }
+}
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java b/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java
new file mode 100644
index 00000000000..9973567b1ec
--- /dev/null
+++ b/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java
@@ -0,0 +1,22 @@
+package org.jetbrains.jet.lang.parsing;
+
+/**
+ * @author abreslav
+ */
+public interface TokenStreamPattern {
+ /**
+ * Called on each token
+ *
+ *
+ *
+ * @param offset
+ * @param topLevel indicates if no brackets (of types () [] {} <>) are currently unmatched
+ * @return true to stop
+ */
+ boolean processToken(int offset, boolean topLevel);
+
+ /**
+ * @return the position where the predicate has matched, -1 if no match was found
+ */
+ int result();
+}
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPredicate.java b/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPredicate.java
new file mode 100644
index 00000000000..41db1f39f19
--- /dev/null
+++ b/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPredicate.java
@@ -0,0 +1,8 @@
+package org.jetbrains.jet.lang.parsing;
+
+/**
+ * @author abreslav
+ */
+public interface TokenStreamPredicate {
+ boolean matching(boolean topLevel);
+}
diff --git a/idea/testData/psi/Properties.jet b/idea/testData/psi/Properties.jet
index 37b60aff435..5f2e76d22e6 100644
--- a/idea/testData/psi/Properties.jet
+++ b/idea/testData/psi/Properties.jet
@@ -1,7 +1,9 @@
val foo
val [a] foo
val foo.bar
-val foo.bar.{() : ()}.foo
+
+val {() : ()}.foo
+val {foo.bar.() : ()}.foo
val foo : T
val [a] foo = bar
@@ -9,24 +11,24 @@ val foo.bar
get() {}
set(sad) = foo
-val foo.bar.{() : ()}.foo = foo
+val {foo.bar.() : ()}.foo = foo
get() {}
set(it) {}
-val foo.bar.{() : ()}.foo = foo
+val {foo.bar.() : ()}.foo = foo
get() : Foo {}
set(it) {}
-val foo.bar.{() : ()}.foo : bar = foo
+val {foo.bar.() : ()}.foo : bar = foo
[a] public get() {}
virtual set(a : b) {}
-val foo.bar.{() : ()}.foo : bar = foo
+val {foo.bar.() : ()}.foo : bar = foo
virtual set(a : b) {}
-val foo.bar.{() : ()}.foo : bar = foo
+val {foo.bar.() : ()}.foo : bar = foo
[a] public get() {}
diff --git a/idea/testData/psi/Properties.txt b/idea/testData/psi/Properties.txt
index 4152d42f23e..3367441a963 100644
--- a/idea/testData/psi/Properties.txt
+++ b/idea/testData/psi/Properties.txt
@@ -11,9 +11,8 @@ JetFile: Properties.jet
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
- TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('a')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
@@ -26,19 +25,41 @@ JetFile: Properties.jet
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
+ PsiWhiteSpace('\n\n')
+ PROPERTY
+ PsiElement(val)('val')
+ PsiWhiteSpace(' ')
+ TYPE_REFERENCE
+ FUNCTION_TYPE
+ PsiElement(LBRACE)('{')
+ VALUE_PARAMETER_LIST
+ PsiElement(LPAR)('(')
+ PsiElement(RPAR)(')')
+ PsiWhiteSpace(' ')
+ PsiElement(COLON)(':')
+ PsiWhiteSpace(' ')
+ TYPE_REFERENCE
+ TUPLE_TYPE
+ PsiElement(LPAR)('(')
+ PsiElement(RPAR)(')')
+ PsiElement(RBRACE)('}')
+ PsiElement(DOT)('.')
+ PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n')
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('foo')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('bar')
- PsiElement(DOT)('.')
FUNCTION_TYPE
PsiElement(LBRACE)('{')
+ RECEIVER_TYPE
+ TYPE_REFERENCE
+ USER_TYPE
+ PsiElement(IDENTIFIER)('foo')
+ PsiElement(DOT)('.')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('bar')
+ PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
@@ -70,9 +91,8 @@ JetFile: Properties.jet
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
- TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('a')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
@@ -114,14 +134,16 @@ JetFile: Properties.jet
PsiElement(val)('val')
PsiWhiteSpace(' ')
TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('foo')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('bar')
- PsiElement(DOT)('.')
FUNCTION_TYPE
PsiElement(LBRACE)('{')
+ RECEIVER_TYPE
+ TYPE_REFERENCE
+ USER_TYPE
+ PsiElement(IDENTIFIER)('foo')
+ PsiElement(DOT)('.')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('bar')
+ PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
@@ -164,14 +186,16 @@ JetFile: Properties.jet
PsiElement(val)('val')
PsiWhiteSpace(' ')
TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('foo')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('bar')
- PsiElement(DOT)('.')
FUNCTION_TYPE
PsiElement(LBRACE)('{')
+ RECEIVER_TYPE
+ TYPE_REFERENCE
+ USER_TYPE
+ PsiElement(IDENTIFIER)('foo')
+ PsiElement(DOT)('.')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('bar')
+ PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
@@ -220,14 +244,16 @@ JetFile: Properties.jet
PsiElement(val)('val')
PsiWhiteSpace(' ')
TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('foo')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('bar')
- PsiElement(DOT)('.')
FUNCTION_TYPE
PsiElement(LBRACE)('{')
+ RECEIVER_TYPE
+ TYPE_REFERENCE
+ USER_TYPE
+ PsiElement(IDENTIFIER)('foo')
+ PsiElement(DOT)('.')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('bar')
+ PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
@@ -257,9 +283,8 @@ JetFile: Properties.jet
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
- TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('a')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(public)('public')
@@ -296,14 +321,16 @@ JetFile: Properties.jet
PsiElement(val)('val')
PsiWhiteSpace(' ')
TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('foo')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('bar')
- PsiElement(DOT)('.')
FUNCTION_TYPE
PsiElement(LBRACE)('{')
+ RECEIVER_TYPE
+ TYPE_REFERENCE
+ USER_TYPE
+ PsiElement(IDENTIFIER)('foo')
+ PsiElement(DOT)('.')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('bar')
+ PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
@@ -352,14 +379,16 @@ JetFile: Properties.jet
PsiElement(val)('val')
PsiWhiteSpace(' ')
TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('foo')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('bar')
- PsiElement(DOT)('.')
FUNCTION_TYPE
PsiElement(LBRACE)('{')
+ RECEIVER_TYPE
+ TYPE_REFERENCE
+ USER_TYPE
+ PsiElement(IDENTIFIER)('foo')
+ PsiElement(DOT)('.')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('bar')
+ PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
@@ -389,9 +418,8 @@ JetFile: Properties.jet
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
- TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('a')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(public)('public')
diff --git a/idea/testData/psi/Properties_ERR.jet b/idea/testData/psi/Properties_ERR.jet
index cc1ae62c587..ebc1d4b9829 100644
--- a/idea/testData/psi/Properties_ERR.jet
+++ b/idea/testData/psi/Properties_ERR.jet
@@ -9,11 +9,11 @@ val foo.bar
public () {}
() = foo
-val foo.bar.{() : ()}.foo = foo
- dfget() {}
+val {foo.bar.() : ()}.foo = foo
set) {}
+ dfget() {}
-val foo.bar.{() : ()}.foo = foo
+val {foo.bar.() : ()}.foo = foo
get(foo) {}
set() {}
set() {}
diff --git a/idea/testData/psi/Properties_ERR.txt b/idea/testData/psi/Properties_ERR.txt
index 630459e5566..5f7311ac4d4 100644
--- a/idea/testData/psi/Properties_ERR.txt
+++ b/idea/testData/psi/Properties_ERR.txt
@@ -47,9 +47,8 @@ JetFile: Properties_ERR.jet
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
- TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('a')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('a')
PsiErrorElement:Expecting ']' to close an attribute annotation
PsiWhiteSpace(' ')
@@ -65,12 +64,10 @@ JetFile: Properties_ERR.jet
TYPE_REFERENCE
USER_TYPE
PsiElement(IDENTIFIER)('foo')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
- PsiErrorElement:Expecting property name
-
+ PsiElement(IDENTIFIER)('bar')
+ PsiErrorElement:Expecting namespace or top level declaration
+ PsiElement(DOT)('.')
PsiWhiteSpace('\n')
PROPERTY
PsiElement(val)('val')
@@ -78,9 +75,8 @@ JetFile: Properties_ERR.jet
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
- TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('a')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
@@ -131,14 +127,16 @@ JetFile: Properties_ERR.jet
PsiElement(val)('val')
PsiWhiteSpace(' ')
TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('foo')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('bar')
- PsiElement(DOT)('.')
FUNCTION_TYPE
PsiElement(LBRACE)('{')
+ RECEIVER_TYPE
+ TYPE_REFERENCE
+ USER_TYPE
+ PsiElement(IDENTIFIER)('foo')
+ PsiElement(DOT)('.')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('bar')
+ PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
@@ -156,6 +154,18 @@ JetFile: Properties_ERR.jet
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
+ PsiWhiteSpace('\n ')
+ PROPERTY_ACCESSOR
+ PsiElement(set)('set')
+ PsiErrorElement:Expecting '('
+
+ VALUE_PARAMETER
+
+ PsiElement(RPAR)(')')
+ PsiWhiteSpace(' ')
+ BLOCK
+ PsiElement(LBRACE)('{')
+ PsiElement(RBRACE)('}')
PsiWhiteSpace('\n ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(IDENTIFIER)('dfget')
@@ -164,16 +174,6 @@ JetFile: Properties_ERR.jet
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
- PsiErrorElement:Expecting namespace or top level declaration
- PsiElement(LBRACE)('{')
- PsiErrorElement:Expecting namespace or top level declaration
- PsiElement(RBRACE)('}')
- PsiWhiteSpace('\n ')
- PsiErrorElement:Expecting namespace or top level declaration
- PsiElement(IDENTIFIER)('set')
- PsiErrorElement:Expecting namespace or top level declaration
- PsiElement(RPAR)(')')
- PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(LBRACE)('{')
PsiErrorElement:Expecting namespace or top level declaration
@@ -183,14 +183,16 @@ JetFile: Properties_ERR.jet
PsiElement(val)('val')
PsiWhiteSpace(' ')
TYPE_REFERENCE
- USER_TYPE
- PsiElement(IDENTIFIER)('foo')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('bar')
- PsiElement(DOT)('.')
FUNCTION_TYPE
PsiElement(LBRACE)('{')
+ RECEIVER_TYPE
+ TYPE_REFERENCE
+ USER_TYPE
+ PsiElement(IDENTIFIER)('foo')
+ PsiElement(DOT)('.')
+ USER_TYPE
+ PsiElement(IDENTIFIER)('bar')
+ PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
@@ -250,15 +252,17 @@ JetFile: Properties_ERR.jet
TYPE_REFERENCE
USER_TYPE
PsiElement(IDENTIFIER)('f')
- PsiElement(DOT)('.')
- USER_TYPE
- PsiElement(IDENTIFIER)('d')
PsiElement(DOT)('.')
- PsiErrorElement:Expecting property name
- PsiElement(MINUS)('-')
- PsiWhiteSpace(' ')
+ PsiElement(IDENTIFIER)('d')
+ PsiErrorElement:Expecting namespace or top level declaration
+ PsiElement(DOT)('.')
+ PsiErrorElement:Expecting namespace or top level declaration
+ PsiElement(MINUS)('-')
+ PsiWhiteSpace(' ')
+ PsiErrorElement:Expecting namespace or top level declaration
PsiElement(EQ)('=')
- PsiWhiteSpace(' ')
+ PsiWhiteSpace(' ')
+ PsiErrorElement:Expecting namespace or top level declaration
PsiElement(IDENTIFIER)('f')
PsiWhiteSpace('\n\n')
PROPERTY