if (parentNode instanceof ArrayType && parentNode.getParent() instanceof VariableDeclarationStatement) return hasDirectProblems(parentNode, pm);
	private boolean hasDirectProblems(ASTNode node, IProgressMonitor pm) throws JavaModelException {		pm.beginTask("", 1);		try{			ASTNode parentNode= getUnparenthesizedParent(node);			if (parentNode instanceof TypeLiteral)				return true;			if (parentNode instanceof MethodInvocation)					return true;			if (parentNode instanceof FieldAccess)					return true;			if (parentNode instanceof QualifiedName)					return true;			if (parentNode instanceof ThisExpression)					return true;			if (parentNode instanceof SuperMethodInvocation)					return true;			if (parentNode instanceof ImportDeclaration)					return true;				if (parentNode instanceof InstanceofExpression)				return ! fUpdateInstanceOf;							if (parentNode instanceof ClassInstanceCreation){				if (node == ((ClassInstanceCreation)parentNode).getName())					return true;			}								if (parentNode instanceof MethodDeclaration){				MethodDeclaration md= (MethodDeclaration)parentNode;				if (md.thrownExceptions().contains(node))					return true;				if (node == md.getReturnType()){					ICompilationUnit cu= getCompilationUnit(node);					IMethodBinding binding= md.resolveBinding();					if (binding == null)						return true; //XXX					IMethod method= Binding2JavaModel.find(binding, cu.getJavaProject());					if (method != null && anyReferenceHasDirectProblems(method, new SubProgressMonitor(pm, 1)))						return true;					}			}										if (parentNode instanceof SingleVariableDeclaration && parentNode.getParent() instanceof CatchClause)				return true;							if (parentNode instanceof TypeDeclaration){				if(node == ((TypeDeclaration)parentNode).getSuperclass())				 	return true;				 if (((TypeDeclaration)parentNode).superInterfaces().contains(node))				 	return true;			}			if (parentNode instanceof FieldDeclaration){				FieldDeclaration fd= (FieldDeclaration)parentNode;				if (fd.getType() == node && ! canReplaceTypeInFieldDeclaration(fd, new SubProgressMonitor(pm, 1))){					addAllToBadVarSet(getVariableDeclarationFragments(fd));					return true;										}			}			if (parentNode instanceof VariableDeclarationStatement){				VariableDeclarationStatement vds= (VariableDeclarationStatement)parentNode;				if (vds.getType() == node && ! canReplaceTypeInVariableDeclarationStatement(vds, new SubProgressMonitor(pm, 1))){					addAllToBadVarSet(getVariableDeclarationFragments(vds));					return true; 				}				}					if (parentNode instanceof SingleVariableDeclaration){				if (anyVariableReferenceHasDirectProblems((SingleVariableDeclaration)parentNode, new SubProgressMonitor(pm, 1))){					if (! isMethodParameter(parentNode)){						addToBadVarSet((SingleVariableDeclaration)parentNode);						return true;					}											MethodDeclaration methodDeclaration= (MethodDeclaration)parentNode.getParent();						int parameterIndex= methodDeclaration.parameters().indexOf(parentNode);					IMethod[] methods= getAllRippleMethods(methodDeclaration, new SubProgressMonitor(pm, 1));										if (methods == null){ //XXX this can be null because of bug 22883						SingleVariableDeclaration svd= getParameterDeclarationNode(parameterIndex, methodDeclaration);						addToBadVarSet(svd);						return true;					}					for (int i= 0; i < methods.length; i++) {						SingleVariableDeclaration svd= getParameterDeclarationNode(parameterIndex, methods[i]);						addToBadVarSet(svd);					}					return true;				}				} 			if (parentNode instanceof CastExpression){				if (isNotUpdatableReference(parentNode, new SubProgressMonitor(pm, 1)))					return true;			}			return false;			} finally {			pm.done();		}		}