diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 420e95ee0fc961e0a51535fa5ed0cda52af574ae..92f175396bbbb70a80191d9a4e13c55327e4d4c0 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -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.Bar.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); } /* diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetImportDirective.java b/idea/src/org/jetbrains/jet/lang/psi/JetImportDirective.java index 00695a7706f5c19b0f0e1380c25866bcb304306b..70dec29467c435b494a4cfd6ca5448e70672cd1c 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetImportDirective.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetImportDirective.java @@ -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 diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java index 3bee8e2514b5d71ebb68e39a1ae3ec8c0bf29f69..e86a45a71655b1304432a2e7ecc9d4f37ea70049 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java @@ -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); diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetUserType.java b/idea/src/org/jetbrains/jet/lang/psi/JetUserType.java index 2e1e884e67a5cc9c61928c1370348fda67413cc4..e7c383956dc51374c56457b17dae056c8dd2b17a 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetUserType.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetUserType.java @@ -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.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(); diff --git a/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java index 1b2e28ea37f90284f7cac2cbe64c7b696307665f..fe25304891bdbf8fa5b1f6087a5ac958ad9e6356 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java @@ -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; } diff --git a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index ab735608a65ef1a20c4eb3d7915859ff263ecd84..63b416af0e3f19cb364af7a7fda703d8ee55ae76 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -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()); diff --git a/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java index e7049e35d1cc274c4da0beba5bcda4570aa9cc3f..73efea33728103d95ae40050f6735d59aba133e7 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java @@ -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; } } diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 187fcbbbc94f5246cadbffc7c4b66f53898c22db..afeb4d1c41742f78ccb54ea90352950468f19914 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -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) { diff --git a/idea/testData/psi/Attributes.txt b/idea/testData/psi/Attributes.txt index a265cf8e07c85bcaf6957eeb79babf1e28e3fe08..ee7b2874f6e1d236ef58d7974843ab209dbe5efd 100644 --- a/idea/testData/psi/Attributes.txt +++ b/idea/testData/psi/Attributes.txt @@ -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') diff --git a/idea/testData/psi/Attributes_ERR.txt b/idea/testData/psi/Attributes_ERR.txt index 4d963bcd56139d651de1a63290b8b10a553e5bdd..62b6940d4e087bb257671184579ec8d6cf3627c1 100644 --- a/idea/testData/psi/Attributes_ERR.txt +++ b/idea/testData/psi/Attributes_ERR.txt @@ -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') diff --git a/idea/testData/psi/FunctionTypes.txt b/idea/testData/psi/FunctionTypes.txt index c65245e55b824a1e1ee167cab2e86882ec907f2b..354469402dd072cda888d6770db9a87c9416dac1 100644 --- a/idea/testData/psi/FunctionTypes.txt +++ b/idea/testData/psi/FunctionTypes.txt @@ -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)('<') diff --git a/idea/testData/psi/ImportSoftKW.txt b/idea/testData/psi/ImportSoftKW.txt index 47cbcbb2e665e4f6674eebdcb156aa89a47647dd..b2acfd635fff5479b811f28529ed3127133109f7 100644 --- a/idea/testData/psi/ImportSoftKW.txt +++ b/idea/testData/psi/ImportSoftKW.txt @@ -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(' ') diff --git a/idea/testData/psi/Imports.txt b/idea/testData/psi/Imports.txt index 693941aa2c4425c3c039ca99b4f5ea323b8c5d98..6ec60621c16ad8c6c79c07249c109883192f38f9 100644 --- a/idea/testData/psi/Imports.txt +++ b/idea/testData/psi/Imports.txt @@ -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(' ') diff --git a/idea/testData/psi/Imports_ERR.txt b/idea/testData/psi/Imports_ERR.txt index 1599d5d869d843caec500d5c8424e9a190949807..9bf736c3949161ede97d42a4e4de4cc15a0646a9 100644 --- a/idea/testData/psi/Imports_ERR.txt +++ b/idea/testData/psi/Imports_ERR.txt @@ -12,30 +12,30 @@ JetFile: Imports_ERR.jet IMPORT_DIRECTIVE PsiElement(import)('import') PsiWhiteSpace(' ') + PsiElement(namespace)('namespace') + PsiErrorElement:Expecting '.' + + PsiWhiteSpace(' ') REFERENCE_EXPRESSION - PsiElement(namespace)('namespace') - PsiErrorElement:Expecting '.' - - 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 - - PsiWhiteSpace(' ') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiErrorElement:Qualified name must be a '.'-separated identifier 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 - - PsiWhiteSpace(' ') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiErrorElement:Qualified name must be a '.'-separated identifier 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 - - PsiWhiteSpace(' ') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiErrorElement:Qualified name must be a '.'-separated identifier 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(' ') diff --git a/idea/testData/psi/NamespaceBlock.txt b/idea/testData/psi/NamespaceBlock.txt index ca99238338a95106be03f7eed56f9bdcf19c729c..18c8a3b705fd2b760ceb123aa22f9c963ac4c798 100644 --- a/idea/testData/psi/NamespaceBlock.txt +++ b/idea/testData/psi/NamespaceBlock.txt @@ -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)(';') diff --git a/idea/testData/psi/NamespaceBlock_ERR.txt b/idea/testData/psi/NamespaceBlock_ERR.txt index c4eacb3a814b99b5578c1af085b5e906fd13e2fa..2973036a63f2fddaaf66969de85014003d8940f9 100644 --- a/idea/testData/psi/NamespaceBlock_ERR.txt +++ b/idea/testData/psi/NamespaceBlock_ERR.txt @@ -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 - - PsiWhiteSpace(' ') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiErrorElement:Qualified name must be a '.'-separated identifier 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 - - PsiWhiteSpace(' ') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiErrorElement:Qualified name must be a '.'-separated identifier 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 - - PsiWhiteSpace(' ') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiErrorElement:Qualified name must be a '.'-separated identifier 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(' ') diff --git a/idea/testData/psi/Properties.txt b/idea/testData/psi/Properties.txt index d1e2a1e434d2facbaa8af9d36b282205afb384d8..881ea58f09939072b067dfa5c5cbdedb53565e60 100644 --- a/idea/testData/psi/Properties.txt +++ b/idea/testData/psi/Properties.txt @@ -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 diff --git a/idea/testData/psi/Properties_ERR.txt b/idea/testData/psi/Properties_ERR.txt index 04a063074d4d66d0364c38caf32a187935a13ff0..86eea34e3bf1cf99be3b1f9698b4e01958e746b1 100644 --- a/idea/testData/psi/Properties_ERR.txt +++ b/idea/testData/psi/Properties_ERR.txt @@ -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 diff --git a/idea/testData/psi/RootNamespace.txt b/idea/testData/psi/RootNamespace.txt index 634fb5163a8c09b5071104127d05de5b416ef7fa..142b0f90146a3c0ec6df11cdc79d475011d832d3 100644 --- a/idea/testData/psi/RootNamespace.txt +++ b/idea/testData/psi/RootNamespace.txt @@ -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)('(') diff --git a/idea/testData/psi/When.txt b/idea/testData/psi/When.txt index b52bd165774b318aeb9118e53934d5b4e1f3ca0a..36eaa97603a023d4c807e80cfca8188999631314 100644 --- a/idea/testData/psi/When.txt +++ b/idea/testData/psi/When.txt @@ -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)('=>') diff --git a/idea/testData/psi/examples/collections/HashMap.txt b/idea/testData/psi/examples/collections/HashMap.txt index 1f72270326b26e073a3ae913b060307f9a16e65f..bb863e7c19a168b3d1dfffd36bb14d56dc066746 100644 --- a/idea/testData/psi/examples/collections/HashMap.txt +++ b/idea/testData/psi/examples/collections/HashMap.txt @@ -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)('.') diff --git a/idea/testData/psi/examples/io/IOSamples.txt b/idea/testData/psi/examples/io/IOSamples.txt index 19e04d11407b545bdf8060218d3ba7e1cf9d7003..32887ace2a6c86cb3d367c32cb18f8db07b99945 100644 --- a/idea/testData/psi/examples/io/IOSamples.txt +++ b/idea/testData/psi/examples/io/IOSamples.txt @@ -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(' ') diff --git a/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java b/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java index 2edc4cbffc854375f2385b29d132b62993cd80ad..f5884301402e64474ad70342c58effad8bbe0001 100644 --- a/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java +++ b/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java @@ -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"); - assertType("if (1) {() => val a = 1; a; var b : Boolean; b = true; b} else null", "Function0?"); + assertType("if (1) {() => val a = 1; a; var b : Boolean; b} else null", "Function0?"); assertType("if (1) {() => val a = 1; a; var b = a; b} else null", "Function0?"); } @@ -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 {