From d3abbc5b56faa60c4317d90856ad1bf9f9a35292 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 2 Dec 2011 20:05:32 +0300 Subject: [PATCH] Common superinterface for JetBinaryOperation and JetUnaryOperation --- .../org/jetbrains/jet/codegen/ExpressionCodegen.java | 4 ++-- .../jet/lang/cfg/JetControlFlowProcessor.java | 3 +-- .../jet/lang/cfg/JetFlowInformationProvider.java | 4 ++-- .../jetbrains/jet/lang/psi/JetBinaryExpression.java | 3 ++- .../org/jetbrains/jet/lang/psi/JetCallExpression.java | 2 +- .../jet/lang/psi/JetOperationExpression.java | 11 +++++++++++ .../jetbrains/jet/lang/psi/JetPrefixExpression.java | 2 +- .../src/org/jetbrains/jet/lang/psi/JetPsiUtil.java | 2 +- .../jetbrains/jet/lang/psi/JetUnaryExpression.java | 5 +++-- .../jetbrains/jet/lang/resolve/calls/CallMaker.java | 2 +- .../expressions/BasicExpressionTypingVisitor.java | 4 ++-- .../jet/lang/types/expressions/DataFlowUtils.java | 2 +- .../jet/plugin/annotations/LabelsAnnotator.java | 2 +- 13 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/psi/JetOperationExpression.java diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index a5ef0c787f7..c7f12d9cc34 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1830,7 +1830,7 @@ public class ExpressionCodegen extends JetVisitor { @Override public StackValue visitPrefixExpression(JetPrefixExpression expression, StackValue receiver) { - DeclarationDescriptor op = bindingContext.get(BindingContext.REFERENCE_TARGET, expression.getOperationSign()); + DeclarationDescriptor op = bindingContext.get(BindingContext.REFERENCE_TARGET, expression.getOperationReference()); final Callable callable = resolveToCallable(op, false); if (callable instanceof IntrinsicMethod) { IntrinsicMethod intrinsic = (IntrinsicMethod) callable; @@ -1847,7 +1847,7 @@ public class ExpressionCodegen extends JetVisitor { @Override public StackValue visitPostfixExpression(JetPostfixExpression expression, StackValue receiver) { - DeclarationDescriptor op = bindingContext.get(BindingContext.REFERENCE_TARGET, expression.getOperationSign()); + DeclarationDescriptor op = bindingContext.get(BindingContext.REFERENCE_TARGET, expression.getOperationReference()); if (op instanceof FunctionDescriptor) { final Type asmType = expressionType(expression); DeclarationDescriptor cls = op.getContainingDeclaration(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java index 7b1945f9351..8a2a0c575ef 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -14,7 +14,6 @@ import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.expressions.OperatorConventions; import org.jetbrains.jet.lexer.JetTokens; -import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -284,7 +283,7 @@ public class JetControlFlowProcessor { @Override public void visitUnaryExpression(JetUnaryExpression expression) { - JetSimpleNameExpression operationSign = expression.getOperationSign(); + JetSimpleNameExpression operationSign = expression.getOperationReference(); IElementType operationType = operationSign.getReferencedNameElementType(); JetExpression baseExpression = expression.getBaseExpression(); if (baseExpression == null) return; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java index 4c260399c57..60874ddca04 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java @@ -286,7 +286,7 @@ public class JetFlowInformationProvider { operationReference = ((JetBinaryExpression) parent).getOperationReference(); } else if (parent instanceof JetUnaryExpression) { - operationReference = ((JetUnaryExpression) parent).getOperationSign(); + operationReference = ((JetUnaryExpression) parent).getOperationReference(); } if (operationReference != null) { DeclarationDescriptor descriptor = trace.get(BindingContext.REFERENCE_TARGET, operationReference); @@ -471,7 +471,7 @@ public class JetFlowInformationProvider { } } else if (element instanceof JetPostfixExpression) { - IElementType operationToken = ((JetPostfixExpression) element).getOperationSign().getReferencedNameElementType(); + IElementType operationToken = ((JetPostfixExpression) element).getOperationReference().getReferencedNameElementType(); if (operationToken == JetTokens.PLUSPLUS || operationToken == JetTokens.MINUSMINUS) { trace.report(Errors.UNUSED_CHANGED_VALUE.on(element, element)); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java index 5d60411e203..01fdbc57ce2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java @@ -10,7 +10,7 @@ import org.jetbrains.jet.JetNodeTypes; /** * @author max */ -public class JetBinaryExpression extends JetExpression { +public class JetBinaryExpression extends JetExpression implements JetOperationExpression { public JetBinaryExpression(@NotNull ASTNode node) { super(node); } @@ -46,6 +46,7 @@ public class JetBinaryExpression extends JetExpression { return null; } + @Override @NotNull public JetSimpleNameExpression getOperationReference() { return (JetSimpleNameExpression) findChildByType(JetNodeTypes.OPERATION_REFERENCE); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallExpression.java index 987a7481529..7525985bf77 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallExpression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallExpression.java @@ -65,7 +65,7 @@ public class JetCallExpression extends JetExpression implements JetCallElement { } else if (psi instanceof JetPrefixExpression) { JetPrefixExpression prefixExpression = (JetPrefixExpression) psi; - if (JetTokens.LABELS.contains(prefixExpression.getOperationSign().getReferencedNameElementType())) { + if (JetTokens.LABELS.contains(prefixExpression.getOperationReference().getReferencedNameElementType())) { JetExpression labeledExpression = prefixExpression.getBaseExpression(); if (labeledExpression instanceof JetFunctionLiteralExpression) { result.add(labeledExpression); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetOperationExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetOperationExpression.java new file mode 100644 index 00000000000..9c658e8df21 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetOperationExpression.java @@ -0,0 +1,11 @@ +package org.jetbrains.jet.lang.psi; + +import org.jetbrains.annotations.NotNull; + +/** + * @author abreslav + */ +public interface JetOperationExpression { + @NotNull + JetSimpleNameExpression getOperationReference(); +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPrefixExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPrefixExpression.java index 451c00663b4..0c8d1aa2355 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPrefixExpression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPrefixExpression.java @@ -25,7 +25,7 @@ public class JetPrefixExpression extends JetUnaryExpression { @Nullable @IfNotParsed public JetExpression getBaseExpression() { - PsiElement expression = getOperationSign().getNextSibling(); + PsiElement expression = getOperationReference().getNextSibling(); while (expression != null && !(expression instanceof JetExpression)) { expression = expression.getNextSibling(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index bdd55b0b25e..7de3f510be0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -26,7 +26,7 @@ public class JetPsiUtil { } } else if (expression instanceof JetPrefixExpression) { - if (JetTokens.LABELS.contains(((JetPrefixExpression) expression).getOperationSign().getReferencedNameElementType())) { + if (JetTokens.LABELS.contains(((JetPrefixExpression) expression).getOperationReference().getReferencedNameElementType())) { JetExpression baseExpression = ((JetPrefixExpression) expression).getBaseExpression(); if (baseExpression != null) { expression = baseExpression; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetUnaryExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetUnaryExpression.java index ca81e0d0735..87d9a2f6758 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetUnaryExpression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetUnaryExpression.java @@ -8,7 +8,7 @@ import org.jetbrains.jet.JetNodeTypes; /** * @author abreslav */ -public abstract class JetUnaryExpression extends JetExpression { +public abstract class JetUnaryExpression extends JetExpression implements JetOperationExpression { public JetUnaryExpression(ASTNode node) { super(node); } @@ -16,8 +16,9 @@ public abstract class JetUnaryExpression extends JetExpression { @Nullable @IfNotParsed public abstract JetExpression getBaseExpression(); + @Override @NotNull - public JetSimpleNameExpression getOperationSign() { + public JetSimpleNameExpression getOperationReference() { return (JetSimpleNameExpression) findChildByType(JetNodeTypes.OPERATION_REFERENCE); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallMaker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallMaker.java index 1dc4a2e08c0..62f6a07f69b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallMaker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallMaker.java @@ -162,7 +162,7 @@ public class CallMaker { } public static Call makeCall(@NotNull ReceiverDescriptor baseAsReceiver, JetUnaryExpression expression) { - return makeCall(expression, baseAsReceiver, null, expression.getOperationSign(), Collections.emptyList()); + return makeCall(expression, baseAsReceiver, null, expression.getOperationReference(), Collections.emptyList()); } public static Call makeArraySetCall(@NotNull ReceiverDescriptor arrayAsReceiver, JetArrayAccessExpression arrayAccessExpression, JetExpression rightHandSide) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 09ef1b6e574..e76a1a383e1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -628,7 +628,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { public JetType visitUnaryExpression(JetUnaryExpression expression, ExpressionTypingContext context) { JetExpression baseExpression = expression.getBaseExpression(); if (baseExpression == null) return null; - JetSimpleNameExpression operationSign = expression.getOperationSign(); + JetSimpleNameExpression operationSign = expression.getOperationReference(); if (JetTokens.LABELS.contains(operationSign.getReferencedNameElementType())) { String referencedName = operationSign.getReferencedName(); referencedName = referencedName == null ? " " : referencedName; @@ -649,7 +649,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { FunctionDescriptor functionDescriptor = context.resolveCallWithGivenNameToDescriptor( CallMaker.makeCall(receiver, expression), - expression.getOperationSign(), + expression.getOperationReference(), name); if (functionDescriptor == null) return null; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java index 9d1fcc2974e..e8e4e992221 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java @@ -109,7 +109,7 @@ public class DataFlowUtils { @Override public void visitUnaryExpression(JetUnaryExpression expression) { - IElementType operationTokenType = expression.getOperationSign().getReferencedNameElementType(); + IElementType operationTokenType = expression.getOperationReference().getReferencedNameElementType(); if (operationTokenType == JetTokens.EXCL) { JetExpression baseExpression = expression.getBaseExpression(); if (baseExpression != null) { diff --git a/idea/src/org/jetbrains/jet/plugin/annotations/LabelsAnnotator.java b/idea/src/org/jetbrains/jet/plugin/annotations/LabelsAnnotator.java index f29c07db362..f7d227f4984 100644 --- a/idea/src/org/jetbrains/jet/plugin/annotations/LabelsAnnotator.java +++ b/idea/src/org/jetbrains/jet/plugin/annotations/LabelsAnnotator.java @@ -20,7 +20,7 @@ public class LabelsAnnotator implements Annotator { element.accept(new JetVisitorVoid() { @Override public void visitPrefixExpression(JetPrefixExpression expression) { - JetSimpleNameExpression operationSign = expression.getOperationSign(); + JetSimpleNameExpression operationSign = expression.getOperationReference(); if (JetTokens.LABELS.contains(operationSign.getReferencedNameElementType())) { holder.createInfoAnnotation(operationSign, null).setTextAttributes(JetHighlighter.JET_LABEL_IDENTIFIER); }