case ASTNode.CLASS_INSTANCE_CREATION:
} case ASTNode.CLASS_INSTANCE_CREATION: {
	private static ITypeBinding getPossibleReferenceBinding(ASTNode node) {			ASTNode parent= node.getParent();		switch (parent.getNodeType()) {		case ASTNode.ASSIGNMENT:			Assignment assignment= (Assignment) parent;			if (node.equals(assignment.getLeftHandSide())) {				// field write access: xx= expression				return assignment.getRightHandSide().resolveTypeBinding();			}			// read access			return assignment.getLeftHandSide().resolveTypeBinding();		case ASTNode.INFIX_EXPRESSION:			InfixExpression infix= (InfixExpression) parent;			InfixExpression.Operator op= infix.getOperator();			if (op == InfixExpression.Operator.CONDITIONAL_AND || op == InfixExpression.Operator.CONDITIONAL_OR) {				// boolean operation				return infix.getAST().resolveWellKnownType("boolean"); //$NON-NLS-1$			} else if (op == InfixExpression.Operator.LEFT_SHIFT || op == InfixExpression.Operator.RIGHT_SHIFT_UNSIGNED || op == InfixExpression.Operator.RIGHT_SHIFT_SIGNED) {				// assymetric operation				return infix.getAST().resolveWellKnownType("int"); //$NON-NLS-1$			}			if (node.equals(infix.getLeftOperand())) {				//	xx op expression				ITypeBinding rigthHandBinding= infix.getRightOperand().resolveTypeBinding();				if (rigthHandBinding != null) {					return rigthHandBinding;				}			} else {				// expression op xx				ITypeBinding leftHandBinding= infix.getLeftOperand().resolveTypeBinding();				if (leftHandBinding != null) {					return leftHandBinding;				}			}			if (op != InfixExpression.Operator.EQUALS && op != InfixExpression.Operator.NOT_EQUALS) {				return infix.getAST().resolveWellKnownType("int"); //$NON-NLS-1$ 			}			break;		case ASTNode.INSTANCEOF_EXPRESSION:			InstanceofExpression instanceofExpression= (InstanceofExpression) parent;			return instanceofExpression.getRightOperand().resolveBinding();		case ASTNode.VARIABLE_DECLARATION_FRAGMENT:			VariableDeclarationFragment frag= (VariableDeclarationFragment) parent;			if (frag.getInitializer().equals(node)) {				return frag.getName().resolveTypeBinding();			}			break;		case ASTNode.SUPER_METHOD_INVOCATION:			SuperMethodInvocation superMethodInvocation= (SuperMethodInvocation) parent;			IMethodBinding superMethodBinding= ASTNodes.getMethodBinding(superMethodInvocation.getName());			if (superMethodBinding != null) {				return getParameterTypeBinding(node, superMethodInvocation.arguments(), superMethodBinding);			}			break;					case ASTNode.METHOD_INVOCATION:			MethodInvocation methodInvocation= (MethodInvocation) parent;			IMethodBinding methodBinding= methodInvocation.resolveMethodBinding();			if (methodBinding != null) {				return getParameterTypeBinding(node, methodInvocation.arguments(), methodBinding);			}			break;					case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:			SuperConstructorInvocation superInvocation= (SuperConstructorInvocation) parent;			IMethodBinding superBinding= superInvocation.resolveConstructorBinding();			if (superBinding != null) {				return getParameterTypeBinding(node, superInvocation.arguments(), superBinding);			}			break;		case ASTNode.CONSTRUCTOR_INVOCATION:			ConstructorInvocation constrInvocation= (ConstructorInvocation) parent;			IMethodBinding constrBinding= constrInvocation.resolveConstructorBinding();			if (constrBinding != null) {				return getParameterTypeBinding(node, constrInvocation.arguments(), constrBinding);			}			break;		case ASTNode.CLASS_INSTANCE_CREATION:			ClassInstanceCreation creation= (ClassInstanceCreation) parent;			IMethodBinding creationBinding= creation.resolveConstructorBinding();			if (creationBinding != null) {				return getParameterTypeBinding(node, creation.arguments(), creationBinding);			}			break;		case ASTNode.PARENTHESIZED_EXPRESSION:			return guessBindingForReference(parent);		case ASTNode.ARRAY_ACCESS:			if (((ArrayAccess) parent).getIndex().equals(node)) {				return parent.getAST().resolveWellKnownType("int"); //$NON-NLS-1$			} else {				return getPossibleReferenceBinding(parent);			}		case ASTNode.ARRAY_CREATION:			if (((ArrayCreation) parent).dimensions().contains(node)) {				return parent.getAST().resolveWellKnownType("int"); //$NON-NLS-1$			}			break;				case ASTNode.ARRAY_INITIALIZER:			ASTNode initializerParent= parent.getParent();			int dim= 1;			while (initializerParent instanceof ArrayInitializer) {				initializerParent= initializerParent.getParent();				dim++;			}			Type creationType= null;			if (initializerParent instanceof ArrayCreation) {				creationType= ((ArrayCreation) initializerParent).getType();			} else if (initializerParent instanceof VariableDeclaration) {				VariableDeclaration varDecl= (VariableDeclaration) initializerParent;				creationType= ASTNodes.getType(varDecl);				dim-= ASTNodes.getExtraDimensions(varDecl);			}			if (creationType != null) {				while ((creationType instanceof ArrayType) && dim > 0) {					creationType= ((ArrayType) creationType).getComponentType();					dim--;				}				return creationType.resolveBinding();			}			break;		case ASTNode.CONDITIONAL_EXPRESSION:			ConditionalExpression expression= (ConditionalExpression) parent;			if (node.equals(expression.getExpression())) {				return parent.getAST().resolveWellKnownType("boolean"); //$NON-NLS-1$			}			if (node.equals(expression.getElseExpression())) {				return expression.getThenExpression().resolveTypeBinding();			}			return expression.getElseExpression().resolveTypeBinding();		case ASTNode.POSTFIX_EXPRESSION:			return parent.getAST().resolveWellKnownType("int"); //$NON-NLS-1$		case ASTNode.PREFIX_EXPRESSION:			if (((PrefixExpression) parent).getOperator() == PrefixExpression.Operator.NOT) {				return parent.getAST().resolveWellKnownType("boolean"); //$NON-NLS-1$			}			return parent.getAST().resolveWellKnownType("int"); //$NON-NLS-1$		case ASTNode.IF_STATEMENT:		case ASTNode.WHILE_STATEMENT:		case ASTNode.DO_STATEMENT:			if (node instanceof Expression) {				return parent.getAST().resolveWellKnownType("boolean"); //$NON-NLS-1$			}			break;		case ASTNode.SWITCH_STATEMENT:			if (((SwitchStatement) parent).getExpression().equals(node)) {				return parent.getAST().resolveWellKnownType("int"); //$NON-NLS-1$			}			break;		case ASTNode.RETURN_STATEMENT:			MethodDeclaration decl= findParentMethodDeclaration(parent);			if (decl != null && !decl.isConstructor()) {				if (decl.getAST().apiLevel() == AST.JLS2) {					return decl.getReturnType().resolveBinding();				} else {					return decl.getReturnType2().resolveBinding();				}			}			break;		case ASTNode.CAST_EXPRESSION:			return ((CastExpression) parent).getType().resolveBinding();		case ASTNode.THROW_STATEMENT:		case ASTNode.CATCH_CLAUSE:            return parent.getAST().resolveWellKnownType("java.lang.Exception"); //$NON-NLS-1$		case ASTNode.FIELD_ACCESS:			if (node.equals(((FieldAccess) parent).getName())) {				return getPossibleReferenceBinding(parent);			}			break;			case ASTNode.SUPER_FIELD_ACCESS:				return getPossibleReferenceBinding(parent);		case ASTNode.QUALIFIED_NAME:			if (node.equals(((QualifiedName) parent).getName())) {				return getPossibleReferenceBinding(parent);			}			break;		case ASTNode.SWITCH_CASE:			if (node.equals(((SwitchCase) parent).getExpression()) && parent.getParent() instanceof SwitchStatement) {				return ((SwitchStatement) parent.getParent()).getExpression().resolveTypeBinding();			}			break;					default:			// do nothing		}					return null;	}