type= (IType)WorkingCopyUtil.getWorkingCopyIfExists(type);
	private boolean isNotUpdatableReference(ASTNode parentNode, IProgressMonitor pm) throws JavaModelException{		ASTNode unparenthesizedParent= getUnparenthesizedParent(parentNode);		if (unparenthesizedParent instanceof ArrayAccess){			ArrayAccess arrayAccess= (ArrayAccess)unparenthesizedParent;			if (parentNode.equals(arrayAccess.getArray()))				return isNotUpdatableReference(arrayAccess, pm);			if (ASTNodes.isParent(parentNode, arrayAccess.getArray()))				return isNotUpdatableReference(arrayAccess, pm);		}		if (unparenthesizedParent instanceof FieldAccess){			if (fSuperTypeToUse == null)				return true;			IBinding binding= ((FieldAccess)unparenthesizedParent).getName().resolveBinding();			if (binding instanceof IVariableBinding)				return !(isVariableBindingOk((IVariableBinding)binding));			return true;			}						if (unparenthesizedParent instanceof QualifiedName){			if (fSuperTypeToUse == null)				return true;			IBinding binding= ((QualifiedName)unparenthesizedParent).resolveBinding();			if (binding instanceof IVariableBinding)				return !(isVariableBindingOk((IVariableBinding)binding));			return true;			}					if (unparenthesizedParent instanceof MethodInvocation){			MethodInvocation mi= (MethodInvocation)unparenthesizedParent;			//XXX			if (parentNode == mi.getExpression() && ! isMethodInvocationOk(mi, pm)) 				return true;			if (mi.getExpression() != null && ASTNodes.isParent(parentNode, mi.getExpression()) && ! isMethodInvocationOk(mi, pm))				return true;						int argumentIndex= mi.arguments().indexOf(parentNode);			if (argumentIndex != -1){				IBinding bin= mi.getName().resolveBinding();				if (! (bin instanceof IMethodBinding))					return true;				IMethod method= Binding2JavaModel.find((IMethodBinding)bin, fInputClass.getJavaProject());				if (method == null)					return true;				IType paramType= getMethodParameterType(method, argumentIndex);				if ( fSuperTypeToUse != null && 				     ! fSuperTypeSet.contains(paramType) && 					 ! fSuperTypeToUse.equals(paramType) && 					 ! paramType.equals(fInputClass))					return true;			}		}		if (unparenthesizedParent instanceof Assignment){			Assignment assign= (Assignment)unparenthesizedParent;			if (parentNode == assign.getRightHandSide()){				IType type= findType(assign.getLeftHandSide().resolveTypeBinding());				if (type == null)					return true;									if (!type.equals(fInputClass) && ! fSuperTypeSet.contains(type))						return true;			}			}		if (unparenthesizedParent instanceof VariableDeclaration){			VariableDeclaration vd= (VariableDeclaration)unparenthesizedParent;			if (parentNode == vd.getInitializer()){				IType type= findType(vd.getName().resolveTypeBinding());				if (type == null)					return true;				if (!type.equals(fInputClass) && ! fSuperTypeSet.contains(type))						return true;			}		}		return false;	}