/** * Retrieves indent options for PSI file from an associated document or (if not defined in the * document) from file indent options providers. * * @param file The PSI file to retrieve options for. * @param formatRange The text range within the file for formatting purposes or null if there is * either no specific range or multiple ranges. If the range covers the entire file (full * reformat), options stored in the document are ignored and indent options are taken from * file indent options providers. * @param ignoreDocOptions Ignore options stored in the document and use file indent options * providers even if there is no text range or the text range doesn't cover the entire file. * @param providerProcessor A callback object containing a reference to indent option provider * which has returned indent options. * @return Indent options from the associated document or file indent options providers. * @see com.intellij.psi.codeStyle.FileIndentOptionsProvider */ @NotNull public IndentOptions getIndentOptionsByFile( @Nullable PsiFile file, @Nullable TextRange formatRange, boolean ignoreDocOptions, @Nullable Processor<FileIndentOptionsProvider> providerProcessor) { if (file != null && file.isValid() && file.isWritable()) { boolean isFullReformat = isFileFullyCoveredByRange(file, formatRange); if (!ignoreDocOptions && !isFullReformat) { IndentOptions docOptions = IndentOptions.retrieveFromAssociatedDocument(file); if (docOptions != null) return docOptions; } FileIndentOptionsProvider[] providers = Extensions.getExtensions(FileIndentOptionsProvider.EP_NAME); for (FileIndentOptionsProvider provider : providers) { if (!isFullReformat || provider.useOnFullReformat()) { IndentOptions indentOptions = provider.getIndentOptions(this, file); if (indentOptions != null) { if (providerProcessor != null) { providerProcessor.process(provider); } logIndentOptions(file, provider, indentOptions); return indentOptions; } } } return getIndentOptions(file.getFileType()); } else return OTHER_INDENT_OPTIONS; }
private static void logIndentOptions( @NotNull PsiFile file, @NotNull FileIndentOptionsProvider provider, @NotNull IndentOptions options) { LOG.debug( "Indent options returned by " + provider.getClass().getName() + " for " + file.getName() + ": indent size=" + options.INDENT_SIZE + ", use tabs=" + options.USE_TAB_CHARACTER + ", tab size=" + options.TAB_SIZE); }