Decomposer patterns supported: any expression resolvable in the context of the matched one and returning a tuple is a decomposer
This commit is contained in:
@@ -125,7 +125,7 @@ public interface JetNodeTypes {
|
|||||||
JetNodeType TUPLE_PATTERN_ENTRY = new JetNodeType("TUPLE_PATTERN_ENTRY", JetTuplePatternEntry.class);
|
JetNodeType TUPLE_PATTERN_ENTRY = new JetNodeType("TUPLE_PATTERN_ENTRY", JetTuplePatternEntry.class);
|
||||||
JetNodeType DECOMPOSER_PATTERN = new JetNodeType("DECOMPOSER_PATTERN", JetDecomposerPattern.class);
|
JetNodeType DECOMPOSER_PATTERN = new JetNodeType("DECOMPOSER_PATTERN", JetDecomposerPattern.class);
|
||||||
JetNodeType DECOMPOSER_ARGUMENT_LIST = new JetNodeType("DECOMPOSER_ARGUMENT_LIST", JetTuplePattern.class);
|
JetNodeType DECOMPOSER_ARGUMENT_LIST = new JetNodeType("DECOMPOSER_ARGUMENT_LIST", JetTuplePattern.class);
|
||||||
JetNodeType DECOMPOSER_ARGUMENT = new JetNodeType("DECOMPOSER_ARGUMENT", JetTuplePatternEntry.class);
|
JetNodeType DECOMPOSER_ARGUMENT = TUPLE_PATTERN_ENTRY;//new JetNodeType("DECOMPOSER_ARGUMENT", JetTuplePatternEntry.class);
|
||||||
|
|
||||||
JetNodeType WHEN = new JetNodeType("WHEN", JetWhenExpression.class);
|
JetNodeType WHEN = new JetNodeType("WHEN", JetWhenExpression.class);
|
||||||
JetNodeType WHEN_ENTRY = new JetNodeType("WHEN_ENTRY", JetWhenEntry.class);
|
JetNodeType WHEN_ENTRY = new JetNodeType("WHEN_ENTRY", JetWhenEntry.class);
|
||||||
|
|||||||
@@ -33,8 +33,6 @@ public class JetPsiChecker implements Annotator {
|
|||||||
@Override
|
@Override
|
||||||
public void annotate(@NotNull PsiElement element, @NotNull final AnnotationHolder holder) {
|
public void annotate(@NotNull PsiElement element, @NotNull final AnnotationHolder holder) {
|
||||||
if (element instanceof JetFile) {
|
if (element instanceof JetFile) {
|
||||||
Project project = element.getProject();
|
|
||||||
|
|
||||||
JetFile file = (JetFile) element;
|
JetFile file = (JetFile) element;
|
||||||
try {
|
try {
|
||||||
final BindingContext bindingContext = AnalyzingUtils.analyzeFileWithCache(file);
|
final BindingContext bindingContext = AnalyzingUtils.analyzeFileWithCache(file);
|
||||||
@@ -89,9 +87,7 @@ public class JetPsiChecker implements Annotator {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
for (JetDiagnostic diagnostic : bindingContext.getDiagnostics()) {
|
AnalyzingUtils.applyHandler(errorHandler, bindingContext);
|
||||||
diagnostic.acceptHandler(errorHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
highlightBackingFields(holder, file, bindingContext);
|
highlightBackingFields(holder, file, bindingContext);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -672,6 +672,12 @@ public class JetControlFlowProcessor {
|
|||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitDecomposerPattern(JetDecomposerPattern pattern) {
|
||||||
|
value(pattern.getDecomposerExpression(), false, inCondition);
|
||||||
|
pattern.getArgumentList().accept(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitJetElement(JetElement elem) {
|
public void visitJetElement(JetElement elem) {
|
||||||
throw new UnsupportedOperationException("[JetControlFlowProcessor] " + elem.toString());
|
throw new UnsupportedOperationException("[JetControlFlowProcessor] " + elem.toString());
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.jetbrains.jet.lang.parsing;
|
package org.jetbrains.jet.lang.parsing;
|
||||||
|
|
||||||
|
import com.intellij.codeInspection.dataFlow.instructions.ReturnFromSubInstruction;
|
||||||
import com.intellij.lang.PsiBuilder;
|
import com.intellij.lang.PsiBuilder;
|
||||||
import com.intellij.psi.tree.IElementType;
|
import com.intellij.psi.tree.IElementType;
|
||||||
import com.intellij.psi.tree.TokenSet;
|
import com.intellij.psi.tree.TokenSet;
|
||||||
@@ -9,6 +10,7 @@ import org.jetbrains.jet.lexer.JetTokens;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lexer.JetTokens.*;
|
import static org.jetbrains.jet.lexer.JetTokens.*;
|
||||||
|
|
||||||
@@ -109,6 +111,10 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
*/
|
*/
|
||||||
protected boolean _at(IElementType expectation) {
|
protected boolean _at(IElementType expectation) {
|
||||||
IElementType token = tt();
|
IElementType token = tt();
|
||||||
|
return tokenMatches(token, expectation);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean tokenMatches(IElementType token, IElementType expectation) {
|
||||||
if (token == expectation) return true;
|
if (token == expectation) return true;
|
||||||
if (expectation == EOL_OR_SEMICOLON) {
|
if (expectation == EOL_OR_SEMICOLON) {
|
||||||
if (eof()) return true;
|
if (eof()) return true;
|
||||||
@@ -217,6 +223,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
|
|
||||||
protected int matchTokenStreamPredicate(TokenStreamPattern pattern) {
|
protected int matchTokenStreamPredicate(TokenStreamPattern pattern) {
|
||||||
PsiBuilder.Marker currentPosition = mark();
|
PsiBuilder.Marker currentPosition = mark();
|
||||||
|
Stack<IElementType> opens = new Stack<IElementType>();
|
||||||
int openAngleBrackets = 0;
|
int openAngleBrackets = 0;
|
||||||
int openBraces = 0;
|
int openBraces = 0;
|
||||||
int openParentheses = 0;
|
int openParentheses = 0;
|
||||||
@@ -229,18 +236,27 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
}
|
}
|
||||||
if (at(LPAR)) {
|
if (at(LPAR)) {
|
||||||
openParentheses++;
|
openParentheses++;
|
||||||
|
opens.push(LPAR);
|
||||||
}
|
}
|
||||||
else if (at(LT)) {
|
else if (at(LT)) {
|
||||||
openAngleBrackets++;
|
openAngleBrackets++;
|
||||||
|
opens.push(LT);
|
||||||
}
|
}
|
||||||
else if (at(LBRACE)) {
|
else if (at(LBRACE)) {
|
||||||
openBraces++;
|
openBraces++;
|
||||||
|
opens.push(LBRACE);
|
||||||
}
|
}
|
||||||
else if (at(LBRACKET)) {
|
else if (at(LBRACKET)) {
|
||||||
openBrackets++;
|
openBrackets++;
|
||||||
|
opens.push(LBRACKET);
|
||||||
}
|
}
|
||||||
else if (at(RPAR)) {
|
else if (at(RPAR)) {
|
||||||
openParentheses--;
|
openParentheses--;
|
||||||
|
if (opens.isEmpty() || opens.pop() != LPAR) {
|
||||||
|
if (pattern.handleUnmatchedClosing(RPAR)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (at(GT)) {
|
else if (at(GT)) {
|
||||||
openAngleBrackets--;
|
openAngleBrackets--;
|
||||||
@@ -279,7 +295,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
return create(new TruncatedSemanticWhitespaceAwarePsiBuilder(myBuilder, eofPosition));
|
return create(new TruncatedSemanticWhitespaceAwarePsiBuilder(myBuilder, eofPosition));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected class AtOffset implements TokenStreamPredicate {
|
protected class AtOffset extends AbstractTokenStreamPredicate {
|
||||||
|
|
||||||
private final int offset;
|
private final int offset;
|
||||||
|
|
||||||
@@ -294,7 +310,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected class At implements TokenStreamPredicate {
|
protected class At extends AbstractTokenStreamPredicate {
|
||||||
|
|
||||||
private final IElementType lookFor;
|
private final IElementType lookFor;
|
||||||
private final boolean topLevelOnly;
|
private final boolean topLevelOnly;
|
||||||
@@ -315,28 +331,52 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected class AtSet implements TokenStreamPredicate {
|
protected class AtSet extends AbstractTokenStreamPredicate {
|
||||||
private final TokenSet lookFor;
|
private final TokenSet lookFor;
|
||||||
private final boolean topLevelOnly;
|
private final TokenSet topLevelOnly;
|
||||||
|
|
||||||
public AtSet(TokenSet lookFor, boolean topLevelOnly) {
|
public AtSet(TokenSet lookFor, TokenSet topLevelOnly) {
|
||||||
this.lookFor = lookFor;
|
this.lookFor = lookFor;
|
||||||
this.topLevelOnly = topLevelOnly;
|
this.topLevelOnly = topLevelOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AtSet(TokenSet lookFor) {
|
public AtSet(TokenSet lookFor) {
|
||||||
this(lookFor, true);
|
this(lookFor, lookFor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AtSet(IElementType... lookFor) {
|
public AtSet(IElementType... lookFor) {
|
||||||
this(TokenSet.create(lookFor), true);
|
this(TokenSet.create(lookFor), TokenSet.create(lookFor));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matching(boolean topLevel) {
|
public boolean matching(boolean topLevel) {
|
||||||
return (topLevel || !topLevelOnly) && atSet(lookFor);
|
return (topLevel || !atSet(topLevelOnly)) && atSet(lookFor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected class AtFirstTokenOfTokens extends AbstractTokenStreamPredicate {
|
||||||
|
|
||||||
|
private final IElementType[] tokens;
|
||||||
|
|
||||||
|
public AtFirstTokenOfTokens(IElementType... tokens) {
|
||||||
|
assert tokens.length > 0;
|
||||||
|
this.tokens = tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean matching(boolean topLevel) {
|
||||||
|
int length = tokens.length;
|
||||||
|
if (!at(tokens[0])) return false;
|
||||||
|
|
||||||
|
for (int i = 1; i < length; i++) {
|
||||||
|
IElementType lookAhead = myBuilder.lookAhead(i);
|
||||||
|
if (lookAhead == null || !tokenMatches(lookAhead, tokens[i])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package org.jetbrains.jet.lang.parsing;
|
package org.jetbrains.jet.lang.parsing;
|
||||||
|
|
||||||
|
import com.intellij.psi.tree.IElementType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
@@ -7,6 +9,10 @@ public abstract class AbstractTokenStreamPattern implements TokenStreamPattern {
|
|||||||
|
|
||||||
protected int lastOccurrence = -1;
|
protected int lastOccurrence = -1;
|
||||||
|
|
||||||
|
protected void fail() {
|
||||||
|
lastOccurrence = -1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int result() {
|
public int result() {
|
||||||
return lastOccurrence;
|
return lastOccurrence;
|
||||||
@@ -16,5 +22,10 @@ public abstract class AbstractTokenStreamPattern implements TokenStreamPattern {
|
|||||||
public boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses) {
|
public boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses) {
|
||||||
return openBraces == 0 && openBrackets == 0 && openParentheses == 0 && openAngleBrackets == 0;
|
return openBraces == 0 && openBrackets == 0 && openParentheses == 0 && openAngleBrackets == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handleUnmatchedClosing(IElementType token) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package org.jetbrains.jet.lang.parsing;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author abreslav
|
||||||
|
*/
|
||||||
|
public abstract class AbstractTokenStreamPredicate implements TokenStreamPredicate {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TokenStreamPredicate or(final TokenStreamPredicate other) {
|
||||||
|
return new AbstractTokenStreamPredicate() {
|
||||||
|
@Override
|
||||||
|
public boolean matching(boolean topLevel) {
|
||||||
|
if (AbstractTokenStreamPredicate.this.matching(topLevel)) return true;
|
||||||
|
return other.matching(topLevel);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -395,11 +395,21 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
|||||||
}
|
}
|
||||||
else if (at(LT)) {
|
else if (at(LT)) {
|
||||||
// TODO: be (even) more clever
|
// TODO: be (even) more clever
|
||||||
int gtPos = matchTokenStreamPredicate(new FirstBefore(new At(GT), new AtSet(TYPE_ARGUMENT_LIST_STOPPERS, false)) {
|
int gtPos = matchTokenStreamPredicate(new FirstBefore(
|
||||||
|
new At(GT),
|
||||||
|
new AtSet(TYPE_ARGUMENT_LIST_STOPPERS, TokenSet.create(RPAR, RBRACE, RBRACKET))
|
||||||
|
.or(new AtFirstTokenOfTokens(IDENTIFIER, LPAR))
|
||||||
|
) {
|
||||||
@Override
|
@Override
|
||||||
public boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses) {
|
public boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses) {
|
||||||
return openAngleBrackets == 1 && openBrackets == 0 && openBraces == 0 && openParentheses == 0;
|
return openAngleBrackets == 1 && openBrackets == 0 && openBraces == 0 && openParentheses == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handleUnmatchedClosing(IElementType token) {
|
||||||
|
fail();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
if (gtPos >= 0) {
|
if (gtPos >= 0) {
|
||||||
myJetParsing.parseTypeArgumentList();
|
myJetParsing.parseTypeArgumentList();
|
||||||
|
|||||||
@@ -725,13 +725,14 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
|
|
||||||
// TODO: extract constant
|
// TODO: extract constant
|
||||||
int lastDot = matchTokenStreamPredicate(new FirstBefore(
|
int lastDot = matchTokenStreamPredicate(new FirstBefore(
|
||||||
new TokenStreamPredicate() {
|
new AbstractTokenStreamPredicate() {
|
||||||
@Override
|
@Override
|
||||||
public boolean matching(boolean topLevel) {
|
public boolean matching(boolean topLevel) {
|
||||||
return topLevel
|
return topLevel
|
||||||
&& at(DOT);
|
&& at(DOT);
|
||||||
}
|
}
|
||||||
}, new TokenStreamPredicate() {
|
},
|
||||||
|
new AbstractTokenStreamPredicate() {
|
||||||
@Override
|
@Override
|
||||||
public boolean matching(boolean topLevel) {
|
public boolean matching(boolean topLevel) {
|
||||||
if (topLevel && (at(EQ) || at(COLON))) return true;
|
if (topLevel && (at(EQ) || at(COLON))) return true;
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package org.jetbrains.jet.lang.parsing;
|
package org.jetbrains.jet.lang.parsing;
|
||||||
|
|
||||||
|
import com.intellij.psi.tree.IElementType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
@@ -18,9 +20,16 @@ public interface TokenStreamPattern {
|
|||||||
*/
|
*/
|
||||||
int result();
|
int result();
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Decides if the combination of open bracet counts makes a "top level position"
|
* Decides if the combination of open bracet counts makes a "top level position"
|
||||||
* Straightforward meaning would be: if all counts are zero, then it's a top level
|
* Straightforward meaning would be: if all counts are zero, then it's a top level
|
||||||
*/
|
*/
|
||||||
boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses);
|
boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called on right parentheses, brackets, braces and angles (>)
|
||||||
|
* @param token the closing bracket
|
||||||
|
* @return true to stop matching, false to proceed
|
||||||
|
*/
|
||||||
|
boolean handleUnmatchedClosing(IElementType token);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,4 +5,6 @@ package org.jetbrains.jet.lang.parsing;
|
|||||||
*/
|
*/
|
||||||
public interface TokenStreamPredicate {
|
public interface TokenStreamPredicate {
|
||||||
boolean matching(boolean topLevel);
|
boolean matching(boolean topLevel);
|
||||||
|
|
||||||
|
TokenStreamPredicate or(TokenStreamPredicate other);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package org.jetbrains.jet.lang.psi;
|
|||||||
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.jet.JetNodeTypes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
@@ -10,4 +12,18 @@ public class JetDecomposerPattern extends JetPattern {
|
|||||||
public JetDecomposerPattern(@NotNull ASTNode node) {
|
public JetDecomposerPattern(@NotNull ASTNode node) {
|
||||||
super(node);
|
super(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable @IfNotParsed
|
||||||
|
public JetExpression getDecomposerExpression() {
|
||||||
|
return findChildByClass(JetExpression.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JetTuplePattern getArgumentList() {
|
||||||
|
return (JetTuplePattern) findChildByType(JetNodeTypes.DECOMPOSER_ARGUMENT_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(@NotNull JetVisitor visitor) {
|
||||||
|
visitor.visitDecomposerPattern(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -385,4 +385,8 @@ public class JetVisitor extends PsiElementVisitor {
|
|||||||
private void visitPattern(JetPattern pattern) {
|
private void visitPattern(JetPattern pattern) {
|
||||||
visitJetElement(pattern);
|
visitJetElement(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void visitDecomposerPattern(JetDecomposerPattern pattern) {
|
||||||
|
visitPattern(pattern);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -888,7 +888,7 @@ public class JetTypeInferrer {
|
|||||||
List<JetExpression> entries = expression.getEntries();
|
List<JetExpression> entries = expression.getEntries();
|
||||||
List<JetType> types = new ArrayList<JetType>();
|
List<JetType> types = new ArrayList<JetType>();
|
||||||
for (JetExpression entry : entries) {
|
for (JetExpression entry : entries) {
|
||||||
types.add(getType(scope, entry, false));
|
types.add(safeGetType(scope, entry, false));
|
||||||
}
|
}
|
||||||
// TODO : labels
|
// TODO : labels
|
||||||
result = JetStandardClasses.getTupleType(types);
|
result = JetStandardClasses.getTupleType(types);
|
||||||
@@ -1069,7 +1069,7 @@ public class JetTypeInferrer {
|
|||||||
TypeConstructor typeConstructor = subjectType.getConstructor();
|
TypeConstructor typeConstructor = subjectType.getConstructor();
|
||||||
if (!JetStandardClasses.getTuple(entries.size()).getTypeConstructor().equals(typeConstructor)
|
if (!JetStandardClasses.getTuple(entries.size()).getTypeConstructor().equals(typeConstructor)
|
||||||
|| typeConstructor.getParameters().size() != entries.size()) {
|
|| typeConstructor.getParameters().size() != entries.size()) {
|
||||||
trace.getErrorHandler().genericError(pattern.getNode(), "Type mismatch: subject is of type " + subjectType + " but the pattern if of type Tuple" + entries.size()); // TODO : message
|
trace.getErrorHandler().genericError(pattern.getNode(), "Type mismatch: subject is of type " + subjectType + " but the pattern is of type Tuple" + entries.size()); // TODO : message
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (int i = 0, entriesSize = entries.size(); i < entriesSize; i++) {
|
for (int i = 0, entriesSize = entries.size(); i < entriesSize; i++) {
|
||||||
@@ -1090,6 +1090,13 @@ public class JetTypeInferrer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitDecomposerPattern(JetDecomposerPattern pattern) {
|
||||||
|
JetType selectorReturnType = getSelectorReturnType(subjectType, pattern.getDecomposerExpression());
|
||||||
|
|
||||||
|
checkPatternType(pattern.getArgumentList(), selectorReturnType == null ? ErrorUtils.createErrorType("No type") : selectorReturnType);
|
||||||
|
}
|
||||||
|
|
||||||
private void checkTypeCompatibility(@Nullable JetType type, @NotNull JetType subjectType, @NotNull JetElement reportErrorOn) {
|
private void checkTypeCompatibility(@Nullable JetType type, @NotNull JetType subjectType, @NotNull JetElement reportErrorOn) {
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -43,5 +43,9 @@ fun test() {
|
|||||||
is (1, 1) => 1
|
is (1, 1) => 1
|
||||||
is (1, <error>"1"</error>) => 1
|
is (1, <error>"1"</error>) => 1
|
||||||
is <error>(1, "1", *)</error> => 1
|
is <error>(1, "1", *)</error> => 1
|
||||||
|
is boo @ (1, <error>"a"</error>, *) => 1
|
||||||
|
is boo @ <error>(1, *)</error> => 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val (Int, Int).boo : (Int, Int, Int) = (1, 1, 1)
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ JetFile: RootNamespace.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
fun foo() {
|
fun foo() {
|
||||||
|
dd<(Int, Int, Int)>(if (true) (1, 1, 1) else (2, 2, 2))
|
||||||
foo(bar<a, b, c>(d))
|
foo(bar<a, b, c>(d))
|
||||||
foo(bar<a, b+1, c>(d))
|
foo(bar<a, b+1, c>(d))
|
||||||
foo(bar<a, f(), c>(d))
|
foo(bar<a, f(), c>(d))
|
||||||
|
|||||||
@@ -11,6 +11,78 @@ JetFile: TypeExpressionAmbiguities_ERR.jet
|
|||||||
BLOCK
|
BLOCK
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
PsiWhiteSpace('\n ')
|
PsiWhiteSpace('\n ')
|
||||||
|
CALL_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('dd')
|
||||||
|
TYPE_ARGUMENT_LIST
|
||||||
|
PsiElement(LT)('<')
|
||||||
|
TYPE_PROJECTION
|
||||||
|
TYPE_REFERENCE
|
||||||
|
TUPLE_TYPE
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('Int')
|
||||||
|
PsiElement(COMMA)(',')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('Int')
|
||||||
|
PsiElement(COMMA)(',')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('Int')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiElement(GT)('>')
|
||||||
|
VALUE_ARGUMENT_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
VALUE_ARGUMENT
|
||||||
|
IF
|
||||||
|
PsiElement(if)('if')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
CONDITION
|
||||||
|
BOOLEAN_CONSTANT
|
||||||
|
PsiElement(true)('true')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
THEN
|
||||||
|
TUPLE
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('1')
|
||||||
|
PsiElement(COMMA)(',')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('1')
|
||||||
|
PsiElement(COMMA)(',')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('1')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(else)('else')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
ELSE
|
||||||
|
TUPLE
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('2')
|
||||||
|
PsiElement(COMMA)(',')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('2')
|
||||||
|
PsiElement(COMMA)(',')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('2')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
CALL_EXPRESSION
|
CALL_EXPRESSION
|
||||||
REFERENCE_EXPRESSION
|
REFERENCE_EXPRESSION
|
||||||
PsiElement(IDENTIFIER)('foo')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
|||||||
+29
-29
@@ -145,7 +145,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -153,7 +153,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -178,7 +178,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -186,7 +186,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -465,13 +465,13 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
EXPRESSION_PATTERN
|
EXPRESSION_PATTERN
|
||||||
NULL
|
NULL
|
||||||
PsiElement(null)('null')
|
PsiElement(null)('null')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
BINDING_PATTERN
|
BINDING_PATTERN
|
||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
@@ -495,7 +495,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -503,7 +503,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -528,7 +528,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -536,7 +536,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -565,7 +565,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -573,7 +573,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -602,7 +602,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
PsiElement(IDENTIFIER)('foo')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(EQ)('=')
|
PsiElement(EQ)('=')
|
||||||
@@ -614,7 +614,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
PsiElement(IDENTIFIER)('bar')
|
PsiElement(IDENTIFIER)('bar')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(EQ)('=')
|
PsiElement(EQ)('=')
|
||||||
@@ -651,7 +651,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -659,7 +659,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -684,7 +684,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
BINDING_PATTERN
|
BINDING_PATTERN
|
||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
@@ -699,7 +699,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('T')
|
PsiElement(IDENTIFIER)('T')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -724,7 +724,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -732,7 +732,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('b')
|
PsiElement(IDENTIFIER)('b')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
EXPRESSION_PATTERN
|
EXPRESSION_PATTERN
|
||||||
INTEGER_CONSTANT
|
INTEGER_CONSTANT
|
||||||
PsiElement(INTEGER_LITERAL)('1')
|
PsiElement(INTEGER_LITERAL)('1')
|
||||||
@@ -952,7 +952,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -1080,13 +1080,13 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
EXPRESSION_PATTERN
|
EXPRESSION_PATTERN
|
||||||
NULL
|
NULL
|
||||||
PsiElement(null)('null')
|
PsiElement(null)('null')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
BINDING_PATTERN
|
BINDING_PATTERN
|
||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
@@ -1105,7 +1105,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -1113,7 +1113,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -1169,7 +1169,7 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -1177,7 +1177,7 @@ JetFile: When.jet
|
|||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -1206,14 +1206,14 @@ JetFile: When.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
BINDING_PATTERN
|
BINDING_PATTERN
|
||||||
PsiElement(val)('val')
|
PsiElement(val)('val')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(IDENTIFIER)('b')
|
PsiElement(IDENTIFIER)('b')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
|
|||||||
@@ -1351,13 +1351,13 @@ JetFile: BinaryTree.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
EXPRESSION_PATTERN
|
EXPRESSION_PATTERN
|
||||||
NULL
|
NULL
|
||||||
PsiElement(null)('null')
|
PsiElement(null)('null')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
EXPRESSION_PATTERN
|
EXPRESSION_PATTERN
|
||||||
NULL
|
NULL
|
||||||
PsiElement(null)('null')
|
PsiElement(null)('null')
|
||||||
@@ -1392,13 +1392,13 @@ JetFile: BinaryTree.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
EXPRESSION_PATTERN
|
EXPRESSION_PATTERN
|
||||||
NULL
|
NULL
|
||||||
PsiElement(null)('null')
|
PsiElement(null)('null')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -1435,7 +1435,7 @@ JetFile: BinaryTree.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -1443,7 +1443,7 @@ JetFile: BinaryTree.jet
|
|||||||
PsiElement(IDENTIFIER)('left')
|
PsiElement(IDENTIFIER)('left')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
EXPRESSION_PATTERN
|
EXPRESSION_PATTERN
|
||||||
NULL
|
NULL
|
||||||
PsiElement(null)('null')
|
PsiElement(null)('null')
|
||||||
@@ -1478,7 +1478,7 @@ JetFile: BinaryTree.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
@@ -1486,7 +1486,7 @@ JetFile: BinaryTree.jet
|
|||||||
PsiElement(IDENTIFIER)('left')
|
PsiElement(IDENTIFIER)('left')
|
||||||
PsiElement(COMMA)(',')
|
PsiElement(COMMA)(',')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
DECOMPOSER_ARGUMENT
|
TUPLE_PATTERN_ENTRY
|
||||||
TYPE_PATTERN
|
TYPE_PATTERN
|
||||||
TYPE_REFERENCE
|
TYPE_REFERENCE
|
||||||
USER_TYPE
|
USER_TYPE
|
||||||
|
|||||||
Reference in New Issue
Block a user