KT-439 Support labeled function lliterals in call arguments
This commit is contained in:
@@ -6,6 +6,7 @@ import com.intellij.util.SmartList;
|
||||
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;
|
||||
@@ -49,26 +50,31 @@ public class JetCallExpression extends JetExpression implements JetCallElement {
|
||||
@NotNull
|
||||
public List<JetExpression> getFunctionLiteralArguments() {
|
||||
JetExpression calleeExpression = getCalleeExpression();
|
||||
ASTNode node;
|
||||
if (calleeExpression instanceof JetFunctionLiteralExpression) {
|
||||
List<JetExpression> result = new SmartList<JetExpression>();
|
||||
ASTNode treeNext = calleeExpression.getNode().getTreeNext();
|
||||
while (treeNext != null) {
|
||||
PsiElement psi = treeNext.getPsi();
|
||||
if (psi instanceof JetFunctionLiteralExpression) {
|
||||
result.add((JetFunctionLiteralExpression) psi);
|
||||
}
|
||||
else if (psi instanceof JetLabelQualifiedExpression) {
|
||||
JetLabelQualifiedExpression labelQualifiedExpression = (JetLabelQualifiedExpression) psi;
|
||||
JetExpression labeledExpression = labelQualifiedExpression.getLabeledExpression();
|
||||
node = calleeExpression.getNode().getTreeNext();
|
||||
}
|
||||
else {
|
||||
node = getNode().getFirstChildNode();
|
||||
}
|
||||
List<JetExpression> result = new SmartList<JetExpression>();
|
||||
while (node != null) {
|
||||
PsiElement psi = node.getPsi();
|
||||
if (psi instanceof JetFunctionLiteralExpression) {
|
||||
result.add((JetFunctionLiteralExpression) psi);
|
||||
}
|
||||
else if (psi instanceof JetPrefixExpression) {
|
||||
JetPrefixExpression prefixExpression = (JetPrefixExpression) psi;
|
||||
if (JetTokens.LABELS.contains(prefixExpression.getOperationSign().getReferencedNameElementType())) {
|
||||
JetExpression labeledExpression = prefixExpression.getBaseExpression();
|
||||
if (labeledExpression instanceof JetFunctionLiteralExpression) {
|
||||
result.add(labeledExpression);
|
||||
}
|
||||
}
|
||||
treeNext = treeNext.getTreeNext();
|
||||
}
|
||||
return result;
|
||||
node = node.getTreeNext();
|
||||
}
|
||||
return findChildrenByType(JetNodeTypes.FUNCTION_LITERAL_EXPRESSION);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// KT-439 Support labeled function lliterals in call arguments
|
||||
|
||||
inline fun run1<T>(body : fun() : T) : T = body()
|
||||
|
||||
fun main1(args : Array<String>) {
|
||||
run1 @l{ 1 } // should not be an error
|
||||
}
|
||||
Reference in New Issue
Block a user