From 7ad71dab47da5c5083741e239eb2e1e505168962 Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Mon, 22 Apr 2013 13:32:38 +0400 Subject: [PATCH] CR-IC-765 - IDEA-105751 Convert line separators: Provide an inspection which reports files with line separator different from project's default 1. Caching ignored files set; 2. Corrected inspection description text; --- .../AbstractConvertLineSeparatorsAction.java | 23 +++++++++++++++---- .../InconsistentLineSeparatorsInspection.java | 2 +- .../InconsistentLineSeparators.html | 4 +++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/codeStyle/AbstractConvertLineSeparatorsAction.java b/platform/platform-impl/src/com/intellij/codeStyle/AbstractConvertLineSeparatorsAction.java index 972db5fda458..ff29feacef24 100644 --- a/platform/platform-impl/src/com/intellij/codeStyle/AbstractConvertLineSeparatorsAction.java +++ b/platform/platform-impl/src/com/intellij/codeStyle/AbstractConvertLineSeparatorsAction.java @@ -32,10 +32,12 @@ import com.intellij.util.LineSeparator; import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtilRt; import com.intellij.util.containers.Convertor; +import com.intellij.util.containers.WeakKeyWeakValueHashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.IOException; +import java.util.Map; import java.util.Set; /** @@ -43,7 +45,9 @@ import java.util.Set; */ public abstract class AbstractConvertLineSeparatorsAction extends AnAction { - private static Logger LOG = Logger.getInstance("#com.strintec.intellij.webmaster.lineSeparator.ConvertLineSeparatorsAction"); + private static Logger LOG = Logger.getInstance("#com.intellij.codeStyle.AbstractConvertLineSeparatorsAction"); + + private static final Map> CACHED_IGNORED_FILES = new WeakKeyWeakValueHashMap>(); @NotNull private final String mySeparator; @@ -51,7 +55,7 @@ public abstract class AbstractConvertLineSeparatorsAction extends AnAction { protected AbstractConvertLineSeparatorsAction(@Nullable String text, @NotNull LineSeparator separator) { this(separator.toString() + " - " + text, separator.getSeparatorString()); } - + protected AbstractConvertLineSeparatorsAction(@Nullable String text, @NotNull String separator) { super(text); mySeparator = separator; @@ -127,7 +131,13 @@ public abstract class AbstractConvertLineSeparatorsAction extends AnAction { @NotNull private static Set getIgnoredFiles(@NotNull Project project) { - final Set result = ContainerUtilRt.newHashSet(); + String key = project.getName() + project.getLocationHash(); + Set result = CACHED_IGNORED_FILES.get(key); + if (result != null) { + return result; + } + + result = ContainerUtilRt.newHashSet(); VirtualFile projectFile = project.getProjectFile(); if (projectFile != null) { @@ -145,9 +155,14 @@ public abstract class AbstractConvertLineSeparatorsAction extends AnAction { result.add(moduleFile); } } + synchronized (CACHED_IGNORED_FILES) { + // We're brave enough to not be scared by double-cached value recalculation. Critical section is introduced only for the + // data consistency. + CACHED_IGNORED_FILES.put(key, result); + } return result; } - + public static boolean shouldProcess(@NotNull VirtualFile file, @NotNull Project project) { return shouldProcess(file, getIgnoredFiles(project)); } diff --git a/platform/platform-impl/src/com/intellij/codeStyle/InconsistentLineSeparatorsInspection.java b/platform/platform-impl/src/com/intellij/codeStyle/InconsistentLineSeparatorsInspection.java index 127c469fd5a0..89aadd1e7eb7 100644 --- a/platform/platform-impl/src/com/intellij/codeStyle/InconsistentLineSeparatorsInspection.java +++ b/platform/platform-impl/src/com/intellij/codeStyle/InconsistentLineSeparatorsInspection.java @@ -55,7 +55,7 @@ public class InconsistentLineSeparatorsInspection extends LocalInspectionTool { holder.registerProblem( file, "Line separators in the current file (" + StringUtil.escapeStringCharacters(curLineSeparator) + ") " + - "differs from the project defaults (" + StringUtil.escapeStringCharacters(projectLineSeparator) + ")", + "differ from the project defaults (" + StringUtil.escapeStringCharacters(projectLineSeparator) + ")", SET_PROJECT_LINE_SEPARATORS); } } diff --git a/platform/platform-resources-en/src/inspectionDescriptions/InconsistentLineSeparators.html b/platform/platform-resources-en/src/inspectionDescriptions/InconsistentLineSeparators.html index 7a25414ed66a..66a02f255e20 100644 --- a/platform/platform-resources-en/src/inspectionDescriptions/InconsistentLineSeparators.html +++ b/platform/platform-resources-en/src/inspectionDescriptions/InconsistentLineSeparators.html @@ -1,7 +1,9 @@ - This inspection warns you of files which line separators differ from project defaults. + This inspection detects files with line separators different from the project default. + E.g. you set the line separator to "\n" in the Settings|Code Style|Line separator, + and the file you are editing uses '\r\n' as a line separator.