Put type arguments next to the type reference (to make every type and application)
This commit is contained in:
@@ -1206,6 +1206,8 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
*/
|
*/
|
||||||
public void parseUserType() {
|
public void parseUserType() {
|
||||||
PsiBuilder.Marker type = mark();
|
PsiBuilder.Marker type = mark();
|
||||||
|
boolean typeClosed = false;
|
||||||
|
|
||||||
if (at(NAMESPACE_KEYWORD)) {
|
if (at(NAMESPACE_KEYWORD)) {
|
||||||
advance(); // NAMESPACE_KEYWORD
|
advance(); // NAMESPACE_KEYWORD
|
||||||
expect(DOT, "Expecting '.'", TokenSet.create(IDENTIFIER));
|
expect(DOT, "Expecting '.'", TokenSet.create(IDENTIFIER));
|
||||||
@@ -1213,22 +1215,32 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
expect(IDENTIFIER, "Type name expected", TokenSet.create(LT));
|
expect(IDENTIFIER, "Type name expected", TokenSet.create(LT));
|
||||||
parseTypeArgumentList();
|
PsiBuilder.Marker argsMarker = parseTypeArgumentList();
|
||||||
|
|
||||||
if (!at(DOT)) break;
|
if (!at(DOT)) {
|
||||||
|
// For recovery reasons, we allow to write Foo<A>.Bar<F, B>.X, but we need to place
|
||||||
|
// the last argument list next to the reference, not a its child
|
||||||
|
if (argsMarker != null) {
|
||||||
|
type.doneBefore(REFERENCE_EXPRESSION, argsMarker);
|
||||||
|
typeClosed = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
type.done(REFERENCE_EXPRESSION);
|
type.done(REFERENCE_EXPRESSION);
|
||||||
type = type.precede();
|
type = type.precede();
|
||||||
advance(); // DOT
|
advance(); // DOT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!typeClosed) {
|
||||||
type.done(REFERENCE_EXPRESSION);
|
type.done(REFERENCE_EXPRESSION);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (optionalProjection type){","}
|
* (optionalProjection type){","}
|
||||||
*/
|
*/
|
||||||
public void parseTypeArgumentList() {
|
public PsiBuilder.Marker parseTypeArgumentList() {
|
||||||
if (!at(LT)) return;
|
if (!at(LT)) return null;
|
||||||
|
|
||||||
PsiBuilder.Marker list = mark();
|
PsiBuilder.Marker list = mark();
|
||||||
|
|
||||||
@@ -1246,6 +1258,7 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
myBuilder.restoreNewlinesState();
|
myBuilder.restoreNewlinesState();
|
||||||
|
|
||||||
list.done(TYPE_ARGUMENT_LIST);
|
list.done(TYPE_ARGUMENT_LIST);
|
||||||
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user