public final boolean isRefactoringAvailable() {
    // TODO support glued/concatenated string literal with multiple nodes
    if (myPyString.getStringNodes().size() > 1 || myNodeInfo.isBytes() || myNodeInfo.isFormatted()) return false;

    final PsiElement valuesSource = getValuesSource();
    if (valuesSource == null) return false;
    final List<T> chunks = extractAllSubstitutionChunks();
    for (T chunk : chunks) {
      if (!checkChunk(chunk)) return false;
      final PySubstitutionChunkReference reference = createReference(chunk);
      final PyExpression referencedExpr = adjustResolveResult(reference.resolve());
      if (referencedExpr == null) return false;
      if (!PsiTreeUtil.isAncestor(valuesSource, referencedExpr, false)) return false;
      if (referencedExpr instanceof PyStarExpression || referencedExpr instanceof PyStarArgument) return false;
      if (!checkReferencedExpression(chunks, chunk, valuesSource, referencedExpr)) return false;
    }
    return true;
  }
public final boolean isRefactoringAvailable()