Java 类com.intellij.psi.codeStyle.CommonCodeStyleSettings.IndentOptions 实例源码

项目:intellij-ce-playground    文件:PythonTemplateIndentOptionsProvider.java   
@Nullable
@Override
public final IndentOptions getIndentOptions(@NotNull final CodeStyleSettings settings,
                                            @NotNull final PsiFile file) {
  final Language language = file.getLanguage();
  if (!(language instanceof PythonTemplateLanguage)) {
    return null; // We only care about python template files
  }

  // This template language has no settings, lets use parent language then
  final Language templateDataLanguage = PyTemplatesUtil.getTemplateDataLanguage(file, null);
  if (templateDataLanguage == null) {
    return null; // No template data language
  }
  return settings.getIndentOptions(templateDataLanguage.getAssociatedFileType());
}
项目:intellij-snakeyaml    文件:YamlLanguageCodeStyleSettingsProvider.java   
public CommonCodeStyleSettings getDefaultCommonSettings()
{
    CommonCodeStyleSettings defaultSettings = new CommonCodeStyleSettings(YamlLanguage.INSTANCE);
    IndentOptions indentOptions = defaultSettings.initIndentOptions();
    indentOptions.INDENT_SIZE = 2;
    indentOptions.TAB_SIZE = 2;
    indentOptions.USE_TAB_CHARACTER = false;
    indentOptions.SMART_TABS = false;

    return defaultSettings;
}
项目:intellij    文件:BuildEnterHandler.java   
@Override
public Result preprocessEnter(
    PsiFile file,
    Editor editor,
    Ref<Integer> caretOffset,
    Ref<Integer> caretAdvance,
    DataContext dataContext,
    EditorActionHandler originalHandler) {
  int offset = caretOffset.get();
  if (editor instanceof EditorWindow) {
    file = InjectedLanguageManager.getInstance(file.getProject()).getTopLevelFile(file);
    editor = InjectedLanguageUtil.getTopLevelEditor(editor);
    offset = editor.getCaretModel().getOffset();
  }
  if (!isApplicable(file, dataContext)) {
    return Result.Continue;
  }

  // Previous enter handler's (e.g. EnterBetweenBracesHandler) can introduce a mismatch
  // between the editor's caret model and the offset we've been provided with.
  editor.getCaretModel().moveToOffset(offset);

  Document doc = editor.getDocument();
  PsiDocumentManager.getInstance(file.getProject()).commitDocument(doc);

  CodeStyleSettings currentSettings = CodeStyleSettingsManager.getSettings(file.getProject());
  IndentOptions indentOptions = currentSettings.getIndentOptions(file.getFileType());

  Integer indent = determineIndent(file, editor, offset, indentOptions);
  if (indent == null) {
    return Result.Continue;
  }

  removeTrailingWhitespace(doc, file, offset);
  originalHandler.execute(editor, editor.getCaretModel().getCurrentCaret(), dataContext);
  LogicalPosition position = editor.getCaretModel().getLogicalPosition();
  if (position.column == indent) {
    return Result.Stop;
  }
  if (position.column > indent) {
    //default enter handler has added too many spaces -- remove them
    int excess = position.column - indent;
    doc.deleteString(
        editor.getCaretModel().getOffset() - excess, editor.getCaretModel().getOffset());
  } else if (position.column < indent) {
    String spaces = StringUtil.repeatSymbol(' ', indent - position.column);
    doc.insertString(editor.getCaretModel().getOffset(), spaces);
  }
  editor.getCaretModel().moveToLogicalPosition(new LogicalPosition(position.line, indent));
  return Result.Stop;
}
项目:intellij    文件:BuildEnterHandler.java   
/**
 * Returns null if an appropriate indent cannot be found. In that case we do nothing, and pass it
 * along to the next EnterHandler.
 */
@Nullable
private static Integer determineIndent(
    PsiFile file, Editor editor, int offset, IndentOptions indentOptions) {
  if (offset == 0) {
    return null;
  }
  Document doc = editor.getDocument();
  PsiElement element = getRelevantElement(file, doc, offset);
  PsiElement parent = element != null ? element.getParent() : null;
  if (parent == null) {
    return null;
  }
  if (endsBlock(element)) {
    // current line indent subtract block indent
    return Math.max(0, getIndent(doc, element) - indentOptions.INDENT_SIZE);
  }

  if (parent instanceof BuildListType) {
    BuildListType list = (BuildListType) parent;
    if (endsList(list, element) && element.getTextOffset() < offset) {
      return null;
    }
    int listOffset = list.getStartOffset();
    LogicalPosition caretPosition = editor.getCaretModel().getLogicalPosition();
    LogicalPosition listStart = editor.offsetToLogicalPosition(listOffset);
    if (listStart.line != caretPosition.line) {
      // take the minimum of the current line's indent and the current caret position
      return indentOfLineUpToCaret(doc, caretPosition.line, offset);
    }
    BuildElement firstChild = ((BuildListType) parent).getFirstElement();
    if (firstChild != null && firstChild.getNode().getStartOffset() < offset) {
      return getIndent(doc, firstChild);
    }
    return lineIndent(doc, listStart.line) + additionalIndent(parent, indentOptions);
  }
  if (parent instanceof StatementListContainer && afterColon(doc, offset)) {
    return getIndent(doc, parent) + additionalIndent(parent, indentOptions);
  }
  return null;
}
项目:intellij    文件:BuildEnterHandler.java   
private static int additionalIndent(PsiElement parent, IndentOptions indentOptions) {
  return parent instanceof StatementListContainer
      ? indentOptions.INDENT_SIZE
      : indentOptions.CONTINUATION_INDENT_SIZE;
}