From 4f5aaa647b43a3f29ba67a479e86822d8a67cb68 Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Thu, 11 Jun 2015 18:29:42 +0300 Subject: [PATCH] [AutoDetectIndent] added registry flag to switch between formatter-based and document-based detector --- .../autodetect/IndentOptionsDetectorImpl.java | 25 ++++++++++++++----- .../util/resources/misc/registry.properties | 2 ++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/IndentOptionsDetectorImpl.java b/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/IndentOptionsDetectorImpl.java index 9ce9c929fbfb..a0ed4174e22d 100644 --- a/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/IndentOptionsDetectorImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/IndentOptionsDetectorImpl.java @@ -19,6 +19,7 @@ import com.intellij.lang.Language; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.registry.Registry; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; @@ -38,12 +39,14 @@ public class IndentOptionsDetectorImpl implements IndentOptionsDetector { private final Project myProject; private final Document myDocument; private final Language myLanguage; + private final boolean myUseFormatterBasedLineIndentBuilder; public IndentOptionsDetectorImpl(@NotNull PsiFile file) { myFile = file; myLanguage = file.getLanguage(); myProject = file.getProject(); myDocument = PsiDocumentManager.getInstance(myProject).getDocument(myFile); + myUseFormatterBasedLineIndentBuilder = Registry.is("editor.detect.indent.by.formatter"); } @Override @@ -51,17 +54,27 @@ public class IndentOptionsDetectorImpl implements IndentOptionsDetector { public IndentOptions getIndentOptions() { IndentOptions indentOptions = (IndentOptions)CodeStyleSettingsManager.getSettings(myProject).getIndentOptions(myFile.getFileType()).clone(); - if (myDocument != null) { - List linesInfo = new FormatterBasedLineIndentInfoBuilder(myFile).build(); - if (linesInfo != null) { - IndentUsageStatistics stats = new IndentUsageStatisticsImpl(linesInfo); - adjustIndentOptions(indentOptions, stats); - } + long start = System.currentTimeMillis(); + List linesInfo = calcLineIndentInfo(); + long end = System.currentTimeMillis(); + LOG.info("Formatter-based: " + myUseFormatterBasedLineIndentBuilder + ". Line info building time: " + (end - start)); + + if (linesInfo != null) { + IndentUsageStatistics stats = new IndentUsageStatisticsImpl(linesInfo); + adjustIndentOptions(indentOptions, stats); } return indentOptions; } + private List calcLineIndentInfo() { + if (myDocument == null) return null; + if (myUseFormatterBasedLineIndentBuilder) { + return new FormatterBasedLineIndentInfoBuilder(myFile).build(); + } + return new LineIndentInfoBuilder(myDocument.getCharsSequence(), myLanguage).build(); + } + private void adjustIndentOptions(@NotNull IndentOptions indentOptions, @NotNull IndentUsageStatistics stats) { int linesWithTabs = stats.getTotalLinesWithLeadingTabs(); int linesWithWhiteSpaceIndent = stats.getTotalLinesWithLeadingSpaces(); diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 941f2f758cc6..8da517e45a2a 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -608,3 +608,5 @@ tfs.set.connection.timeout=false ide.mac.yosemite.laf=false ide.mac.yosemite.laf.restartRequired=true ide.mac.yosemite.laf.description=Replaces Aqua LaF to enhanced IntelliJ LaF + +editor.detect.indent.by.formatter=false \ No newline at end of file