Java imports work

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