Token stream predicates for lookahead
This commit is contained in:
@@ -155,35 +155,20 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
error.error(mesage);
|
error.error(mesage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
protected int matchTokenStreamPredicate(TokenStreamPattern pattern) {
|
||||||
* Looks for a the last top-level (not inside any {} [] () <>) '.' occurring before a
|
|
||||||
* top-level occurrence of a token from the <code>stopSet</code>
|
|
||||||
*
|
|
||||||
* Returns -1 if no occurrence is found
|
|
||||||
*/
|
|
||||||
protected int findLastBefore(TokenSet lookFor, TokenSet stopAt, boolean dontStopRightAfterOccurrence) {
|
|
||||||
PsiBuilder.Marker currentPosition = mark();
|
PsiBuilder.Marker currentPosition = mark();
|
||||||
int lastOccurrence = -1;
|
|
||||||
int openAngleBrackets = 0;
|
int openAngleBrackets = 0;
|
||||||
int openBraces = 0;
|
int openBraces = 0;
|
||||||
int openParentheses = 0;
|
int openParentheses = 0;
|
||||||
int openBrackets = 0;
|
int openBrackets = 0;
|
||||||
IElementType previousToken = null;
|
|
||||||
while (!eof()) {
|
while (!eof()) {
|
||||||
if (atSet(lookFor)
|
if (pattern.processToken(
|
||||||
&& openAngleBrackets == 0
|
myBuilder.getCurrentOffset(),
|
||||||
|
openAngleBrackets == 0
|
||||||
&& openBrackets == 0
|
&& openBrackets == 0
|
||||||
&& openBraces == 0
|
&& openBraces == 0
|
||||||
&& openParentheses == 0) {
|
&& openParentheses == 0)) {
|
||||||
lastOccurrence = myBuilder.getCurrentOffset();
|
break;
|
||||||
}
|
|
||||||
if (atSet(stopAt)) {
|
|
||||||
if (openAngleBrackets == 0
|
|
||||||
&& openBrackets == 0
|
|
||||||
&& openBraces == 0
|
|
||||||
&& openParentheses == 0
|
|
||||||
&& (!dontStopRightAfterOccurrence
|
|
||||||
|| !lookFor.contains(previousToken))) break;
|
|
||||||
}
|
}
|
||||||
if (at(LPAR)) {
|
if (at(LPAR)) {
|
||||||
openParentheses++;
|
openParentheses++;
|
||||||
@@ -209,15 +194,65 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
else if (at(RBRACKET)) {
|
else if (at(RBRACKET)) {
|
||||||
openBrackets--;
|
openBrackets--;
|
||||||
}
|
}
|
||||||
previousToken = tt();
|
|
||||||
advance(); // skip token
|
advance(); // skip token
|
||||||
}
|
}
|
||||||
currentPosition.rollbackTo();
|
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 <code>stopSet</code>
|
||||||
|
*
|
||||||
|
* 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() {
|
protected boolean eol() {
|
||||||
return myBuilder.eolInLastWhitespace() || eof();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -694,9 +694,26 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
advance(); // VAL_KEYWORD or VAR_KEYWORD
|
advance(); // VAL_KEYWORD or VAR_KEYWORD
|
||||||
|
|
||||||
// TODO: EOL_OR_SEMICOLON is too restrictive here
|
// 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) {
|
if (lastDot == -1) {
|
||||||
parseAttributeList();
|
parseAttributeList();
|
||||||
@@ -1258,6 +1275,7 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
int lastLPar = findLastBefore(TokenSet.create(LPAR), TokenSet.create(RBRACE, COLON), false);
|
int lastLPar = findLastBefore(TokenSet.create(LPAR), TokenSet.create(RBRACE, COLON), false);
|
||||||
if (lastLPar >= 0 && lastLPar > myBuilder.getCurrentOffset()) {
|
if (lastLPar >= 0 && lastLPar > myBuilder.getCurrentOffset()) {
|
||||||
PsiBuilder.Marker receiverType = mark();
|
PsiBuilder.Marker receiverType = mark();
|
||||||
|
// TODO : -1 is a hack
|
||||||
createTruncatedBuilder(lastLPar - 1).parseTypeRef();
|
createTruncatedBuilder(lastLPar - 1).parseTypeRef();
|
||||||
receiverType.done(RECEIVER_TYPE);
|
receiverType.done(RECEIVER_TYPE);
|
||||||
advance(); // DOT
|
advance(); // DOT
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 <code>true</code> to stop
|
||||||
|
*/
|
||||||
|
boolean processToken(int offset, boolean topLevel);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the position where the predicate has matched, -1 if no match was found
|
||||||
|
*/
|
||||||
|
int result();
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package org.jetbrains.jet.lang.parsing;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author abreslav
|
||||||
|
*/
|
||||||
|
public interface TokenStreamPredicate {
|
||||||
|
boolean matching(boolean topLevel);
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
val foo
|
val foo
|
||||||
val [a] foo
|
val [a] foo
|
||||||
val foo.bar
|
val foo.bar
|
||||||
val foo.bar.{() : ()}.foo
|
|
||||||
|
val {() : ()}.foo
|
||||||
|
val {foo.bar.() : ()}.foo
|
||||||
|
|
||||||
val foo : T
|
val foo : T
|
||||||
val [a] foo = bar
|
val [a] foo = bar
|
||||||
@@ -9,24 +11,24 @@ val foo.bar
|
|||||||
get() {}
|
get() {}
|
||||||
set(sad) = foo
|
set(sad) = foo
|
||||||
|
|
||||||
val foo.bar.{() : ()}.foo = foo
|
val {foo.bar.() : ()}.foo = foo
|
||||||
get() {}
|
get() {}
|
||||||
set(it) {}
|
set(it) {}
|
||||||
|
|
||||||
val foo.bar.{() : ()}.foo = foo
|
val {foo.bar.() : ()}.foo = foo
|
||||||
get() : Foo {}
|
get() : Foo {}
|
||||||
set(it) {}
|
set(it) {}
|
||||||
|
|
||||||
|
|
||||||
val foo.bar.{() : ()}.foo : bar = foo
|
val {foo.bar.() : ()}.foo : bar = foo
|
||||||
[a] public get() {}
|
[a] public get() {}
|
||||||
virtual set(a : b) {}
|
virtual set(a : b) {}
|
||||||
|
|
||||||
|
|
||||||
val foo.bar.{() : ()}.foo : bar = foo
|
val {foo.bar.() : ()}.foo : bar = foo
|
||||||
virtual set(a : b) {}
|
virtual set(a : b) {}
|
||||||
|
|
||||||
|
|
||||||
val foo.bar.{() : ()}.foo : bar = foo
|
val {foo.bar.() : ()}.foo : bar = foo
|
||||||
[a] public get() {}
|
[a] public get() {}
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,8 @@ JetFile: Properties.jet
|
|||||||
ATTRIBUTE_ANNOTATION
|
ATTRIBUTE_ANNOTATION
|
||||||
PsiElement(LBRACKET)('[')
|
PsiElement(LBRACKET)('[')
|
||||||
ATTRIBUTE
|
ATTRIBUTE
|
||||||
TYPE_REFERENCE
|
USER_TYPE
|
||||||
USER_TYPE
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiElement(RBRACKET)(']')
|
PsiElement(RBRACKET)(']')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(IDENTIFIER)('foo')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
@@ -26,19 +25,41 @@ JetFile: Properties.jet
|
|||||||
PsiElement(IDENTIFIER)('foo')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
PsiElement(DOT)('.')
|
PsiElement(DOT)('.')
|
||||||
PsiElement(IDENTIFIER)('bar')
|
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')
|
PsiWhiteSpace('\n')
|
||||||
PROPERTY
|
PROPERTY
|
||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
FUNCTION_TYPE
|
FUNCTION_TYPE
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
|
RECEIVER_TYPE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
VALUE_PARAMETER_LIST
|
VALUE_PARAMETER_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
@@ -70,9 +91,8 @@ JetFile: Properties.jet
|
|||||||
ATTRIBUTE_ANNOTATION
|
ATTRIBUTE_ANNOTATION
|
||||||
PsiElement(LBRACKET)('[')
|
PsiElement(LBRACKET)('[')
|
||||||
ATTRIBUTE
|
ATTRIBUTE
|
||||||
TYPE_REFERENCE
|
USER_TYPE
|
||||||
USER_TYPE
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiElement(RBRACKET)(']')
|
PsiElement(RBRACKET)(']')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(IDENTIFIER)('foo')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
@@ -114,14 +134,16 @@ JetFile: Properties.jet
|
|||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
FUNCTION_TYPE
|
FUNCTION_TYPE
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
|
RECEIVER_TYPE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
VALUE_PARAMETER_LIST
|
VALUE_PARAMETER_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
@@ -164,14 +186,16 @@ JetFile: Properties.jet
|
|||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
FUNCTION_TYPE
|
FUNCTION_TYPE
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
|
RECEIVER_TYPE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
VALUE_PARAMETER_LIST
|
VALUE_PARAMETER_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
@@ -220,14 +244,16 @@ JetFile: Properties.jet
|
|||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
FUNCTION_TYPE
|
FUNCTION_TYPE
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
|
RECEIVER_TYPE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
VALUE_PARAMETER_LIST
|
VALUE_PARAMETER_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
@@ -257,9 +283,8 @@ JetFile: Properties.jet
|
|||||||
ATTRIBUTE_ANNOTATION
|
ATTRIBUTE_ANNOTATION
|
||||||
PsiElement(LBRACKET)('[')
|
PsiElement(LBRACKET)('[')
|
||||||
ATTRIBUTE
|
ATTRIBUTE
|
||||||
TYPE_REFERENCE
|
USER_TYPE
|
||||||
USER_TYPE
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiElement(RBRACKET)(']')
|
PsiElement(RBRACKET)(']')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(public)('public')
|
PsiElement(public)('public')
|
||||||
@@ -296,14 +321,16 @@ JetFile: Properties.jet
|
|||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
FUNCTION_TYPE
|
FUNCTION_TYPE
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
|
RECEIVER_TYPE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
VALUE_PARAMETER_LIST
|
VALUE_PARAMETER_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
@@ -352,14 +379,16 @@ JetFile: Properties.jet
|
|||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
FUNCTION_TYPE
|
FUNCTION_TYPE
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
|
RECEIVER_TYPE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
VALUE_PARAMETER_LIST
|
VALUE_PARAMETER_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
@@ -389,9 +418,8 @@ JetFile: Properties.jet
|
|||||||
ATTRIBUTE_ANNOTATION
|
ATTRIBUTE_ANNOTATION
|
||||||
PsiElement(LBRACKET)('[')
|
PsiElement(LBRACKET)('[')
|
||||||
ATTRIBUTE
|
ATTRIBUTE
|
||||||
TYPE_REFERENCE
|
USER_TYPE
|
||||||
USER_TYPE
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiElement(RBRACKET)(']')
|
PsiElement(RBRACKET)(']')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(public)('public')
|
PsiElement(public)('public')
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ val foo.bar
|
|||||||
public () {}
|
public () {}
|
||||||
() = foo
|
() = foo
|
||||||
|
|
||||||
val foo.bar.{() : ()}.foo = foo
|
val {foo.bar.() : ()}.foo = foo
|
||||||
dfget() {}
|
|
||||||
set) {}
|
set) {}
|
||||||
|
dfget() {}
|
||||||
|
|
||||||
val foo.bar.{() : ()}.foo = foo
|
val {foo.bar.() : ()}.foo = foo
|
||||||
get(foo) {}
|
get(foo) {}
|
||||||
set() {}
|
set() {}
|
||||||
set() {}
|
set() {}
|
||||||
|
|||||||
@@ -47,9 +47,8 @@ JetFile: Properties_ERR.jet
|
|||||||
ATTRIBUTE_ANNOTATION
|
ATTRIBUTE_ANNOTATION
|
||||||
PsiElement(LBRACKET)('[')
|
PsiElement(LBRACKET)('[')
|
||||||
ATTRIBUTE
|
ATTRIBUTE
|
||||||
TYPE_REFERENCE
|
USER_TYPE
|
||||||
USER_TYPE
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiErrorElement:Expecting ']' to close an attribute annotation
|
PsiErrorElement:Expecting ']' to close an attribute annotation
|
||||||
<empty list>
|
<empty list>
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
@@ -65,12 +64,10 @@ JetFile: Properties_ERR.jet
|
|||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
PsiElement(IDENTIFIER)('foo')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
PsiElement(DOT)('.')
|
||||||
PsiErrorElement:Expecting property name
|
PsiElement(IDENTIFIER)('bar')
|
||||||
<empty list>
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(DOT)('.')
|
||||||
PsiWhiteSpace('\n')
|
PsiWhiteSpace('\n')
|
||||||
PROPERTY
|
PROPERTY
|
||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
@@ -78,9 +75,8 @@ JetFile: Properties_ERR.jet
|
|||||||
ATTRIBUTE_ANNOTATION
|
ATTRIBUTE_ANNOTATION
|
||||||
PsiElement(LBRACKET)('[')
|
PsiElement(LBRACKET)('[')
|
||||||
ATTRIBUTE
|
ATTRIBUTE
|
||||||
TYPE_REFERENCE
|
USER_TYPE
|
||||||
USER_TYPE
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiElement(RBRACKET)(']')
|
PsiElement(RBRACKET)(']')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(IDENTIFIER)('foo')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
@@ -131,14 +127,16 @@ JetFile: Properties_ERR.jet
|
|||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
FUNCTION_TYPE
|
FUNCTION_TYPE
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
|
RECEIVER_TYPE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
VALUE_PARAMETER_LIST
|
VALUE_PARAMETER_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
@@ -156,6 +154,18 @@ JetFile: Properties_ERR.jet
|
|||||||
PsiElement(EQ)('=')
|
PsiElement(EQ)('=')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(IDENTIFIER)('foo')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
PROPERTY_ACCESSOR
|
||||||
|
PsiElement(set)('set')
|
||||||
|
PsiErrorElement:Expecting '('
|
||||||
|
<empty list>
|
||||||
|
VALUE_PARAMETER
|
||||||
|
<empty list>
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
PsiWhiteSpace('\n ')
|
PsiWhiteSpace('\n ')
|
||||||
PsiErrorElement:Expecting namespace or top level declaration
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiElement(IDENTIFIER)('dfget')
|
PsiElement(IDENTIFIER)('dfget')
|
||||||
@@ -164,16 +174,6 @@ JetFile: Properties_ERR.jet
|
|||||||
PsiErrorElement:Expecting namespace or top level declaration
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
PsiWhiteSpace(' ')
|
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
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
PsiErrorElement:Expecting namespace or top level declaration
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
@@ -183,14 +183,16 @@ JetFile: Properties_ERR.jet
|
|||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
FUNCTION_TYPE
|
FUNCTION_TYPE
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
|
RECEIVER_TYPE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
USER_TYPE
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
VALUE_PARAMETER_LIST
|
VALUE_PARAMETER_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
@@ -250,15 +252,17 @@ JetFile: Properties_ERR.jet
|
|||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
PsiElement(IDENTIFIER)('f')
|
PsiElement(IDENTIFIER)('f')
|
||||||
PsiElement(DOT)('.')
|
|
||||||
USER_TYPE
|
|
||||||
PsiElement(IDENTIFIER)('d')
|
|
||||||
PsiElement(DOT)('.')
|
PsiElement(DOT)('.')
|
||||||
PsiErrorElement:Expecting property name
|
PsiElement(IDENTIFIER)('d')
|
||||||
PsiElement(MINUS)('-')
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiWhiteSpace(' ')
|
PsiElement(DOT)('.')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
PsiElement(MINUS)('-')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiElement(EQ)('=')
|
PsiElement(EQ)('=')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiElement(IDENTIFIER)('f')
|
PsiElement(IDENTIFIER)('f')
|
||||||
PsiWhiteSpace('\n\n')
|
PsiWhiteSpace('\n\n')
|
||||||
PROPERTY
|
PROPERTY
|
||||||
|
|||||||
Reference in New Issue
Block a user