提交 db9c36ad 编写于 作者: A Andrey Breslav

Java imports work

上级 f71d2584
......@@ -154,23 +154,27 @@ public class JetParsing extends AbstractJetParsing {
PsiBuilder.Marker importDirective = mark();
advance(); // IMPORT_KEYWORD
PsiBuilder.Marker reference = mark();
PsiBuilder.Marker qualifiedName = mark();
if (at(NAMESPACE_KEYWORD)) {
advance(); // NAMESPACE_KEYWORD
expect(DOT, "Expecting '.'", TokenSet.create(IDENTIFIER, MUL, SEMICOLON));
}
PsiBuilder.Marker reference = mark();
expect(IDENTIFIER, "Expecting qualified name", TokenSet.create(DOT, AS_KEYWORD));
reference.done(REFERENCE_EXPRESSION);
while (at(DOT) && lookahead(1) != MUL) {
PsiBuilder.Marker precede = reference.precede();
reference.done(REFERENCE_EXPRESSION);
reference = precede;
advance(); // DOT
expect(IDENTIFIER, "Qualified name must be a '.'-separated identifier list", TokenSet.create(AS_KEYWORD, DOT, SEMICOLON));
reference = mark();
expect(IDENTIFIER, "Qualified name must be a '.'-separated identifier list", TokenSet.create(AS_KEYWORD, DOT, SEMICOLON));
reference.done(REFERENCE_EXPRESSION);
PsiBuilder.Marker precede = qualifiedName.precede();
qualifiedName.done(DOT_QIALIFIED_EXPRESSION);
qualifiedName = precede;
}
reference.done(REFERENCE_EXPRESSION);
qualifiedName.drop();
if (at(DOT)) {
advance(); // DOT
......@@ -1234,40 +1238,31 @@ public class JetParsing extends AbstractJetParsing {
*/
private void parseUserType() {
PsiBuilder.Marker userType = mark();
parseUserTypeOrQualifiedName();
userType.done(USER_TYPE);
}
public void parseUserTypeOrQualifiedName() {
PsiBuilder.Marker type = mark();
boolean typeClosed = false;
if (at(NAMESPACE_KEYWORD)) {
advance(); // NAMESPACE_KEYWORD
expect(DOT, "Expecting '.'", TokenSet.create(IDENTIFIER));
}
PsiBuilder.Marker reference = mark();
while (true) {
expect(IDENTIFIER, "Type name expected", TokenSet.create(LT));
PsiBuilder.Marker argsMarker = parseTypeArgumentList();
reference.done(REFERENCE_EXPRESSION);
parseTypeArgumentList();
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 = type.precede();
PsiBuilder.Marker precede = userType.precede();
userType.done(USER_TYPE);
userType = precede;
advance(); // DOT
reference = mark();
}
if (!typeClosed) {
type.done(REFERENCE_EXPRESSION);
}
userType.done(USER_TYPE);
}
/*
......
......@@ -4,7 +4,6 @@ import com.intellij.lang.ASTNode;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
import org.jetbrains.jet.lexer.JetTokens;
/**
......@@ -20,9 +19,13 @@ public class JetImportDirective extends JetElement {
visitor.visitImportDirective(this);
}
public boolean isAbsoluteInRootNamespace() {
return findChildByType(JetTokens.NAMESPACE_KEYWORD) != null;
}
@Nullable @IfNotParsed
public JetReferenceExpression getImportedName() {
return (JetReferenceExpression) findChildByType(JetNodeTypes.REFERENCE_EXPRESSION);
public JetExpression getImportedReference() {
return findChildByClass(JetExpression.class);
}
@Nullable
......
......@@ -22,15 +22,6 @@ public class JetReferenceExpression extends JetExpression {
super(node);
}
public boolean isAbsoluteInRootNamespace() {
return findChildByType(JetTokens.NAMESPACE_KEYWORD) != null;
}
@Nullable
public JetReferenceExpression getQualifier() {
return findChildByClass(JetReferenceExpression.class);
}
@Nullable @IfNotParsed
public String getReferencedName() {
ASTNode node = getNode().findChildByType(REFERENCE_TOKENS);
......
......@@ -4,6 +4,7 @@ import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.Collections;
import java.util.List;
......@@ -16,8 +17,12 @@ public class JetUserType extends JetTypeElement {
super(node);
}
public boolean isAbsoluteInRootNamespace() {
return findChildByType(JetTokens.NAMESPACE_KEYWORD) != null;
}
@Override
public void accept(JetVisitor visitor) {
public void accept(@NotNull JetVisitor visitor) {
visitor.visitUserType(this);
}
......@@ -31,11 +36,16 @@ public class JetUserType extends JetTypeElement {
return typeArgumentList == null ? Collections.<JetTypeProjection>emptyList() : typeArgumentList.getArguments();
}
@Nullable
@Nullable @IfNotParsed
public JetReferenceExpression getReferenceExpression() {
return (JetReferenceExpression) findChildByType(JetNodeTypes.REFERENCE_EXPRESSION);
}
@Nullable
public JetUserType getQualifier() {
return (JetUserType) findChildByType(JetNodeTypes.USER_TYPE);
}
@Nullable
public String getReferencedName() {
JetReferenceExpression referenceExpression = getReferenceExpression();
......
......@@ -20,7 +20,7 @@ public class ClassDescriptorResolver {
public ClassDescriptorResolver(JetSemanticServices semanticServices, BindingTrace trace) {
this.semanticServices = semanticServices;
this.typeResolver = new TypeResolver(trace, semanticServices.getErrorHandler());
this.typeResolver = new TypeResolver(trace, semanticServices);
this.trace = trace;
}
......
......@@ -59,15 +59,18 @@ public class TopDownAnalyzer {
ScopeWithImports scopeWithImports = new ScopeWithImports(declaringScope);
for (JetImportDirective importDirective : importDirectives) {
// if (importDirective.isAllUnder()) {
// // TODO: this works only for Java,
// // but should thoroughly resolve qualified names item-by-item
// // taking previous imports into account
// String importedName = importDirective.getImportedName();
// scopeWithImports.importScope(new JavaPackageScope(importedName, ));
// } else {
// throw new UnsupportedOperationException();
// }
if (importDirective.isAbsoluteInRootNamespace()) {
throw new UnsupportedOperationException();
}
if (importDirective.isAllUnder()) {
JetExpression importedReference = importDirective.getImportedReference();
Type type = semanticServices.getTypeInferrer(trace).getType(scopeWithImports, importedReference, false);
if (type != null) {
scopeWithImports.importScope(type.getMemberScope());
}
} else {
throw new UnsupportedOperationException();
}
}
WritableScope namespaceScope = new WritableScope(scopeWithImports);
collectTypeDeclarators(namespaceScope, namespace.getDeclarations());
......
......@@ -2,7 +2,7 @@ package org.jetbrains.jet.lang.resolve;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ErrorHandler;
import org.jetbrains.jet.lang.JetSemanticServices;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.types.*;
......@@ -17,11 +17,11 @@ import java.util.Set;
public class TypeResolver {
private final BindingTrace trace;
private final ErrorHandler errorHandler;
private final JetSemanticServices semanticServices;
public TypeResolver(BindingTrace trace, ErrorHandler errorHandler) {
public TypeResolver(BindingTrace trace, JetSemanticServices semanticServices) {
this.trace = trace;
this.errorHandler = errorHandler;
this.semanticServices = semanticServices;
}
@NotNull
......@@ -65,11 +65,11 @@ public class TypeResolver {
JetStandardClasses.STUB
);
} else {
errorHandler.unresolvedReference(type.getReferenceExpression());
semanticServices.getErrorHandler().unresolvedReference(type.getReferenceExpression());
}
}
else {
errorHandler.unresolvedReference(type.getReferenceExpression());
semanticServices.getErrorHandler().unresolvedReference(type.getReferenceExpression());
}
}
......@@ -163,54 +163,44 @@ public class TypeResolver {
@Nullable
public ClassDescriptor resolveClass(JetScope scope, JetUserType userType) {
return resolveClass(scope, userType.getReferenceExpression());
}
@Nullable
private ClassDescriptor resolveClass(JetScope scope, JetReferenceExpression expression) {
if (expression.isAbsoluteInRootNamespace()) {
return resolveClass(JetModuleUtil.getRootNamespaceScope(expression), expression);
JetReferenceExpression expression = userType.getReferenceExpression();
if (userType.isAbsoluteInRootNamespace()) {
return JetModuleUtil.getRootNamespaceScope(userType).getClass(expression.getReferencedName());
}
JetReferenceExpression qualifier = expression.getQualifier();
JetUserType qualifier = userType.getQualifier();
if (qualifier != null) {
// TODO: this is slow. The faster way would be to start with the first item in the qualified name
// TODO: priorities: class of namespace first?
throw new UnsupportedOperationException();
// MemberDomain domain = resolveClass(scope, qualifier);
// if (domain == null) {
// domain = resolveNamespace(scope, qualifier);
// }
//
// if (domain != null) {
// return domain.getClass(expression.getReferencedName());
// }
// return null;
scope = resolveClassLookupScope(scope, qualifier);
}
return scope.getClass(expression.getReferencedName());
}
assert qualifier == null;
private JetScope resolveClassLookupScope(JetScope scope, JetUserType userType) {
ClassDescriptor classDescriptor = resolveClass(scope, userType);
if (classDescriptor != null) {
return classDescriptor.getMemberScope(resolveTypeProjections(scope, classDescriptor.getTypeConstructor(), userType.getTypeArguments()));
}
return scope.getClass(expression.getReferencedName());
return resolveNamespace(scope, userType).getMemberScope();
}
@Nullable
private NamespaceDescriptor resolveNamespace(JetScope scope, JetReferenceExpression expression) {
if (expression.isAbsoluteInRootNamespace()) {
return resolveNamespace(JetModuleUtil.getRootNamespaceScope(expression), expression);
private NamespaceDescriptor resolveNamespace(JetScope scope, JetUserType userType) {
if (userType.isAbsoluteInRootNamespace()) {
return resolveNamespace(JetModuleUtil.getRootNamespaceScope(userType), userType);
}
JetReferenceExpression qualifier = expression.getQualifier();
JetUserType qualifier = userType.getQualifier();
if (qualifier != null) {
NamespaceDescriptor domain = resolveNamespace(scope, qualifier);
if (domain == null) {
return null;
}
return domain.getMemberScope().getNamespace(expression.getReferencedName());
return domain.getMemberScope().getNamespace(userType.getReferencedName());
}
assert qualifier == null;
return scope.getNamespace(expression.getReferencedName());
NamespaceDescriptor namespace = scope.getNamespace(userType.getReferencedName());
trace.recordReferenceResolution(userType.getReferenceExpression(), namespace);
return namespace;
}
}
......@@ -24,7 +24,7 @@ public class JetTypeInferrer {
public JetTypeInferrer(BindingTrace trace, JetSemanticServices semanticServices) {
this.trace = trace;
this.semanticServices = semanticServices;
this.typeResolver = new TypeResolver(trace, semanticServices.getErrorHandler());
this.typeResolver = new TypeResolver(trace, semanticServices);
this.classDescriptorResolver = new ClassDescriptorResolver(semanticServices, trace);
}
......@@ -445,6 +445,12 @@ public class JetTypeInferrer {
JetProperty property = (JetProperty) statement;
scope.addPropertyDescriptor(classDescriptorResolver.resolvePropertyDescriptor(scope, property));
}
else if (statement instanceof JetExpression) {
getType(scope, (JetExpression) statement, true);
}
else {
throw new UnsupportedOperationException(); // TODO
}
}
JetElement lastElement = block.get(block.size() - 1);
if (lastElement instanceof JetExpression) {
......
......@@ -78,45 +78,50 @@ JetFile: Attributes.jet
ATTRIBUTE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
USER_TYPE
USER_TYPE
USER_TYPE
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('goo')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('doo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('f')
PsiElement(GT)('>')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('goo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('foo')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('doo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('goo')
PsiElement(IDENTIFIER)('f')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('goo')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n')
......@@ -251,16 +256,19 @@ JetFile: Attributes.jet
ATTRIBUTE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
USER_TYPE
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('b')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('f')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('f')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('c')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n')
......
......@@ -84,45 +84,50 @@ JetFile: Attributes_ERR.jet
ATTRIBUTE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
USER_TYPE
USER_TYPE
USER_TYPE
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('goo')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('doo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('f')
PsiElement(GT)('>')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('goo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('foo')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('doo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('goo')
PsiElement(IDENTIFIER)('f')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('goo')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n')
......@@ -218,16 +223,19 @@ JetFile: Attributes_ERR.jet
ATTRIBUTE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
USER_TYPE
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('b')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('f')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('f')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('c')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n')
......
......@@ -585,10 +585,11 @@ JetFile: FunctionTypes.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -617,25 +618,26 @@ JetFile: FunctionTypes.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('B')
PsiElement(GT)('>')
PsiElement(DOT)('.')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('B')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
......@@ -767,10 +769,11 @@ JetFile: FunctionTypes.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -814,25 +817,26 @@ JetFile: FunctionTypes.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('B')
PsiElement(GT)('>')
PsiElement(DOT)('.')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('B')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
......@@ -976,10 +980,11 @@ JetFile: FunctionTypes.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -1017,25 +1022,26 @@ JetFile: FunctionTypes.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('B')
PsiElement(GT)('>')
PsiElement(DOT)('.')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('B')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
......@@ -1221,10 +1227,11 @@ JetFile: FunctionTypes.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -1286,25 +1293,26 @@ JetFile: FunctionTypes.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('B')
PsiElement(GT)('>')
PsiElement(DOT)('.')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('B')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
......
......@@ -3,17 +3,20 @@ JetFile: ImportSoftKW.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
DOT_QIALIFIED_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('import')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('import')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('import')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('import')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('import')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('import')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('import')
PsiWhiteSpace(' ')
PsiElement(as)('as')
PsiWhiteSpace(' ')
......
......@@ -12,9 +12,9 @@ JetFile: Imports.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
PsiElement(namespace)('namespace')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(namespace)('namespace')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n')
IMPORT_DIRECTIVE
......@@ -26,11 +26,12 @@ JetFile: Imports.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace('\n')
IMPORT_DIRECTIVE
PsiElement(import)('import')
......@@ -45,11 +46,12 @@ JetFile: Imports.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace(' ')
PsiElement(as)('as')
PsiWhiteSpace(' ')
......
......@@ -12,30 +12,30 @@ JetFile: Imports_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
PsiElement(namespace)('namespace')
PsiErrorElement:Expecting '.'
<empty list>
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(namespace)('namespace')
PsiErrorElement:Expecting '.'
<empty list>
PsiWhiteSpace(' ')
PsiErrorElement:Expecting qualified name
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n')
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
PsiElement(namespace)('namespace')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(namespace)('namespace')
PsiElement(DOT)('.')
PsiErrorElement:Expecting qualified name
PsiElement(MUL)('*')
PsiWhiteSpace('\n')
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
PsiElement(namespace)('namespace')
PsiElement(DOT)('.')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(namespace)('namespace')
PsiElement(DOT)('.')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting qualified name
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n\n')
......@@ -57,15 +57,17 @@ JetFile: Imports_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiWhiteSpace('\n')
PsiElement(IDENTIFIER)('import')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('import')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(IDENTIFIER)('foo')
......@@ -81,11 +83,12 @@ JetFile: Imports_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
......@@ -97,11 +100,12 @@ JetFile: Imports_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
......@@ -122,40 +126,44 @@ JetFile: Imports_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiWhiteSpace(' ')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n')
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiWhiteSpace(' ')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n')
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiWhiteSpace(' ')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
......@@ -165,11 +173,12 @@ JetFile: Imports_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
......@@ -183,11 +192,12 @@ JetFile: Imports_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
......
......@@ -31,11 +31,12 @@ JetFile: NamespaceBlock.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(MUL)('*')
PsiElement(SEMICOLON)(';')
......
......@@ -27,15 +27,17 @@ JetFile: NamespaceBlock_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiWhiteSpace('\n')
PsiElement(IDENTIFIER)('import')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('import')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting namespace or top level declaration
PsiElement(IDENTIFIER)('foo')
......@@ -60,11 +62,12 @@ JetFile: NamespaceBlock_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
......@@ -76,11 +79,12 @@ JetFile: NamespaceBlock_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
......@@ -101,40 +105,44 @@ JetFile: NamespaceBlock_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiWhiteSpace(' ')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ')
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiWhiteSpace(' ')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ')
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiWhiteSpace(' ')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiErrorElement:Qualified name must be a '.'-separated identifier list
<empty list>
PsiElement(as)('as')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
......@@ -144,11 +152,12 @@ JetFile: NamespaceBlock_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
......@@ -162,11 +171,12 @@ JetFile: NamespaceBlock_ERR.jet
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
......
......@@ -75,10 +75,11 @@ JetFile: Properties.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -165,10 +166,11 @@ JetFile: Properties.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -218,10 +220,11 @@ JetFile: Properties.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -278,10 +281,11 @@ JetFile: Properties.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -360,10 +364,11 @@ JetFile: Properties.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -421,10 +426,11 @@ JetFile: Properties.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......
......@@ -139,10 +139,11 @@ JetFile: Properties_ERR.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......@@ -194,10 +195,11 @@ JetFile: Properties_ERR.jet
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
......
......@@ -59,15 +59,17 @@ JetFile: RootNamespace.jet
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
USER_TYPE
USER_TYPE
PsiElement(namespace)('namespace')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(namespace)('namespace')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('X')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
......
......@@ -253,10 +253,11 @@ JetFile: When.jet
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(DOT)('.')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiWhiteSpace(' ')
PsiElement(DOUBLE_ARROW)('=>')
......
......@@ -53,13 +53,15 @@ JetFile: HashMap.jet
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('java')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('lang')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('lang')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Object')
PsiElement(RPAR)(')')
PsiElement(DOT)('.')
......@@ -76,13 +78,15 @@ JetFile: HashMap.jet
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('java')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('lang')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('lang')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Object')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n')
......@@ -141,13 +145,15 @@ JetFile: HashMap.jet
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('java')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('lang')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('lang')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Object')
PsiElement(RPAR)(')')
PsiElement(DOT)('.')
......
......@@ -90,13 +90,15 @@ JetFile: IOSamples.jet
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
REFERENCE_EXPRESSION
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('java')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('io')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('io')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Closeable')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
......
......@@ -321,7 +321,7 @@ public class JetTypeCheckerTest extends LightDaemonAnalyzerTestCase {
public void testBlocks() throws Exception {
assertType("if (1) {val a = 1; a} else {null}", "Int?");
assertType("if (1) {() => val a = 1; a} else {() => null}", "Function0<Int?>");
assertType("if (1) {() => val a = 1; a; var b : Boolean; b = true; b} else null", "Function0<Boolean>?");
assertType("if (1) {() => val a = 1; a; var b : Boolean; b} else null", "Function0<Boolean>?");
assertType("if (1) {() => val a = 1; a; var b = a; b} else null", "Function0<Int>?");
}
......@@ -488,8 +488,8 @@ public class JetTypeCheckerTest extends LightDaemonAnalyzerTestCase {
return makeType(classDefinitions.BASIC_SCOPE, typeStr);
}
private static Type makeType(JetScope scope, String typeStr) {
return new TypeResolver(BindingTrace.DUMMY, ErrorHandler.THROW_EXCEPTION).resolveType(scope, JetChangeUtil.createType(getProject(), typeStr));
private Type makeType(JetScope scope, String typeStr) {
return new TypeResolver(BindingTrace.DUMMY, semanticServices).resolveType(scope, JetChangeUtil.createType(getProject(), typeStr));
}
private class ClassDefinitions {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册