/* bd is a static field declaration or static initializer */
  private static boolean depends(IExpressionFragment selected, BodyDeclaration bd) {
    /* We currently consider selected to depend on bd only if db includes a declaration
     * of a static field on which selected depends.
     *
     * A more accurate strategy might be to also check if bd contains (or is) a
     * static initializer containing code which changes the value of a static field on
     * which selected depends.  However, if a static is written to multiple times within
     * during class initialization, it is difficult to predict which value should be used.
     * This would depend on which value is used by expressions instances for which the new
     * constant will be substituted, and there may be many of these; in each, the
     * static field in question may have taken on a different value (if some of these uses
     * occur within static initializers).
     */

    if (bd instanceof FieldDeclaration) {
      FieldDeclaration fieldDecl = (FieldDeclaration) bd;
      for (Iterator<VariableDeclarationFragment> fragments = fieldDecl.fragments().iterator();
          fragments.hasNext(); ) {
        VariableDeclarationFragment fragment = fragments.next();
        SimpleName staticFieldName = fragment.getName();
        if (selected.getSubFragmentsMatching(
                    ASTFragmentFactory.createFragmentForFullSubtree(staticFieldName))
                .length
            != 0) return true;
      }
    }
    return false;
  }
 private IASTFragment[] getFragmentsToReplace() throws JavaModelException {
   List<IASTFragment> toReplace = new ArrayList<>();
   if (fReplaceAllOccurrences) {
     Iterator<ASTNode> replacementScope = getReplacementScope();
     while (replacementScope.hasNext()) {
       ASTNode scope = replacementScope.next();
       IASTFragment[] allMatches =
           ASTFragmentFactory.createFragmentForFullSubtree(scope)
               .getSubFragmentsMatching(getSelectedExpression());
       IASTFragment[] replaceableMatches = retainOnlyReplacableMatches(allMatches);
       for (int i = 0; i < replaceableMatches.length; i++) toReplace.add(replaceableMatches[i]);
     }
   } else if (canReplace(getSelectedExpression())) toReplace.add(getSelectedExpression());
   return toReplace.toArray(new IASTFragment[toReplace.size()]);
 }
  private IExpressionFragment getSelectedExpression() throws JavaModelException {
    if (fSelectedExpression != null) return fSelectedExpression;

    IASTFragment selectedFragment =
        ASTFragmentFactory.createFragmentForSourceRange(
            new SourceRange(fSelectionStart, fSelectionLength), fCuRewrite.getRoot(), fCu);

    if (selectedFragment instanceof IExpressionFragment
        && !Checks.isInsideJavadoc(selectedFragment.getAssociatedNode())) {
      fSelectedExpression = (IExpressionFragment) selectedFragment;
    }

    if (fSelectedExpression != null
        && Checks.isEnumCase(fSelectedExpression.getAssociatedExpression().getParent())) {
      fSelectedExpression = null;
    }

    return fSelectedExpression;
  }