Package com.intellij.coldFusion.model.psi

Source Code of com.intellij.coldFusion.model.psi.CfmlOperatorExpression

/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.coldFusion.model.psi;

import com.intellij.coldFusion.model.lexer.CfscriptTokenTypes;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiType;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;

/**
* Created by IntelliJ IDEA.
* User: vnikolaenko
* Date: 28.04.2009
* Time: 14:06:21
* To change this template use File | Settings | File Templates.
*/
public class CfmlOperatorExpression extends CfmlCompositeElement implements CfmlExpression {

  private final boolean myBinary;

  public CfmlOperatorExpression(@NotNull final ASTNode node, boolean binary) {
    super(node);
    myBinary = binary;
  }

  public PsiType getPsiType() {
    CfmlExpressionTypeCalculator typeCalculator = getOperationSign().getTypeCalculator();
    CfmlExpression operand1 = getOperand1();
    if (operand1 == null) {
      return null;
    }
    if (!myBinary) {
      return typeCalculator.calculateUnary(operand1);
    }
    CfmlExpression operand2 = getOperand2();
    if (operand2 == null) {
      return null;
    }
    return typeCalculator.calculateBinary(operand1, operand2);
  }

  @NotNull
  private CfmlOperatorTokenType getOperationSign() {
    final ASTNode operationNode = getNode().findChildByType(CfscriptTokenTypes.OPERATIONS);
    assert operationNode != null : getText();
    IElementType tokenType = operationNode.getElementType();
    assert tokenType instanceof CfmlOperatorTokenType : getText();
    return (CfmlOperatorTokenType)tokenType;
  }

  private CfmlExpression getOperand1() {
    return findChildByClass(CfmlExpression.class);
  }

  private CfmlExpression getOperand2() {
    CfmlExpression first = getOperand1();
    if (first == null) {
      return null;
    }
    PsiElement second = first.getNextSibling();
    while (second != null && !(second instanceof CfmlExpression)) {
      second = second.getNextSibling();
    }
    return (CfmlExpression)second;
  }
}
TOP

Related Classes of com.intellij.coldFusion.model.psi.CfmlOperatorExpression

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.