ASTNode parent= node.getParent();
ASTNode parent= getUnparenthesizedParent(node);
	private boolean isReferenceUpdatable(ASTNode node, Collection nodesToRemove) throws JavaModelException{		ASTNode parent= node.getParent();		if (node instanceof SimpleName && parent instanceof ArrayInitializer){			//there are only 2 places where ArrayInitializers can be used			ArrayInitializer initializer= (ArrayInitializer)parent;			if (initializer.getParent() instanceof VariableDeclarationFragment)				return isReferenceUpdatable(initializer, nodesToRemove);			if (initializer.getParent() instanceof ArrayCreation){				ArrayCreation arrayCreation= (ArrayCreation)initializer.getParent();				return ! nodesToRemove.contains(arrayCreation.getType().getComponentType());			}			}		if (parent instanceof VariableDeclarationFragment){			VariableDeclarationFragment r1= (VariableDeclarationFragment)parent;			if (node == r1.getInitializer()){				IVariableBinding vb= r1.resolveBinding();				if (vb != null && fBadVarSet.contains(getCompilationUnitNode(node).findDeclaringNode(vb)))					return false;			}		} else if (parent instanceof Assignment){			Assignment assmnt= (Assignment)parent;			if (node == assmnt.getRightHandSide()){				Expression lhs= assmnt.getLeftHandSide();				if (lhs instanceof SimpleName){					IBinding binding= ((SimpleName)lhs).resolveBinding();					if (binding != null && fBadVarSet.contains(getCompilationUnitNode(lhs).findDeclaringNode(binding)))						return false;				} else if (lhs instanceof FieldAccess){					IBinding binding= ((FieldAccess)lhs).getName().resolveBinding();					if (binding != null && fBadVarSet.contains(getCompilationUnitNode(lhs).findDeclaringNode(binding)))						return false;				}			}		} else if (isInvocation(parent)) {			return isReferenceInInvocationUpdatable(node, nodesToRemove);		} else if (parent instanceof ReturnStatement){			MethodDeclaration md= (MethodDeclaration)ASTNodes.getParent(parent, MethodDeclaration.class);			if (nodesToRemove.contains(md.getReturnType()))				return false;		} 		return true;	}