| /******************************************************************************* |
| * Copyright (c) 2000, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.internal.corext.refactoring.typeconstraints; |
| |
| import org.eclipse.core.runtime.Assert; |
| |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.dom.Assignment; |
| import org.eclipse.jdt.core.dom.ConditionalExpression; |
| import org.eclipse.jdt.core.dom.Expression; |
| import org.eclipse.jdt.core.dom.FieldAccess; |
| import org.eclipse.jdt.core.dom.IBinding; |
| import org.eclipse.jdt.core.dom.MethodInvocation; |
| import org.eclipse.jdt.core.dom.Name; |
| import org.eclipse.jdt.core.dom.ParenthesizedExpression; |
| import org.eclipse.jdt.core.dom.SuperFieldAccess; |
| import org.eclipse.jdt.core.dom.SuperMethodInvocation; |
| |
| public final class ExpressionVariable extends ConstraintVariable { |
| |
| private final CompilationUnitRange fRange; |
| private final String fSource; |
| private final IBinding fExpressionBinding; |
| private final int fExpressionType; |
| |
| public ExpressionVariable(Expression expression){ |
| super(expression.resolveTypeBinding()); |
| fSource= expression.toString(); |
| ICompilationUnit cu= ASTCreator.getCu(expression); |
| Assert.isNotNull(cu); |
| fRange= new CompilationUnitRange(cu, expression); |
| fExpressionBinding= resolveBinding(expression); |
| fExpressionType= expression.getNodeType(); |
| } |
| |
| /* (non-Javadoc) |
| * @see java.lang.Object#toString() |
| */ |
| public String toString() { |
| return "[" + fSource + "]"; //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| |
| public CompilationUnitRange getCompilationUnitRange() { |
| return fRange; |
| } |
| |
| public int getExpressionType() { |
| return fExpressionType; |
| } |
| |
| public IBinding getExpressionBinding() { |
| return fExpressionBinding; |
| } |
| |
| public static IBinding resolveBinding(Expression expression){ |
| if (expression instanceof Name) |
| return ((Name)expression).resolveBinding(); |
| if (expression instanceof ParenthesizedExpression) |
| return resolveBinding(((ParenthesizedExpression)expression).getExpression()); |
| else if (expression instanceof Assignment) |
| return resolveBinding(((Assignment)expression).getLeftHandSide());//TODO ??? |
| else if (expression instanceof MethodInvocation) |
| return ((MethodInvocation)expression).resolveMethodBinding(); |
| else if (expression instanceof SuperMethodInvocation) |
| return ((SuperMethodInvocation)expression).resolveMethodBinding(); |
| else if (expression instanceof FieldAccess) |
| return ((FieldAccess)expression).resolveFieldBinding(); |
| else if (expression instanceof SuperFieldAccess) |
| return ((SuperFieldAccess)expression).resolveFieldBinding(); |
| else if (expression instanceof ConditionalExpression) |
| return resolveBinding(((ConditionalExpression)expression).getThenExpression()); |
| return null; |
| } |
| |
| } |