FIle masks option (-m,-mask)
authorRustam Vishnyakov <rustam.vishnyakov@jetbrains.com>
Fri, 5 Aug 2016 11:56:58 +0000 (14:56 +0300)
committerRustam Vishnyakov <rustam.vishnyakov@jetbrains.com>
Fri, 5 Aug 2016 12:00:16 +0000 (15:00 +0300)
java/java-tests/testSrc/com/intellij/formatting/commandLine/FileSetFormatterTest.java
platform/lang-impl/src/com/intellij/formatting/commandLine/FileSetProcessor.java
platform/lang-impl/src/com/intellij/formatting/commandLine/FormatterStarter.java

index e82aa7439654dd5f65e51b5a6c72d7a4b7f28294..69895d5897cf550795f2548e163c7e649b243660 100644 (file)
@@ -43,6 +43,7 @@ public class FileSetFormatterTest extends LightPlatformTestCase {
     MessageOutput messageOutput = new MessageOutput(new PrintWriter(System.out), new PrintWriter(System.err));
     FileSetFormatter formatter = new FileSetFormatter(messageOutput);
     formatter.addEntry(fileSpec);
+    formatter.addFileMask("*.java");
     formatter.setRecursive();
     formatter.setCodeStyleSettings(settings);
     formatter.processFiles();
index 3e1e4f6d018cf2672df0b57998415e2b5cd1d9f8..b934ff543d6c9074608cb7fc9ea7d20be71e5156 100644 (file)
@@ -18,7 +18,7 @@ package com.intellij.formatting.commandLine;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.vfs.LocalFileSystem;
 import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.containers.hash.HashSet;
+import com.intellij.util.containers.ContainerUtil;
 import org.jetbrains.annotations.NotNull;
 
 import java.io.File;
@@ -28,7 +28,8 @@ import java.util.Set;
 public abstract class FileSetProcessor {
   private static final Logger LOG = Logger.getInstance("#" + FileSetProcessor.class.getName());
 
-  private Set<File> myTopEntries = new HashSet<>();
+  private Set<File> myTopEntries = ContainerUtil.newHashSet();
+  private Set<String> myFileMasks = ContainerUtil.newHashSet();
   private int myProcessedFiles;
   private boolean isRecursive;
 
@@ -42,6 +43,21 @@ public abstract class FileSetProcessor {
     isRecursive = true;
   }
 
+  public void addFileMask(@NotNull String fileMask) {
+    String fileMaskRegexp = fileMaskToRegexp(fileMask);
+    LOG.info("File mask regexp: " + fileMaskRegexp);
+    myFileMasks.add(fileMaskRegexp);
+  }
+
+  private static String fileMaskToRegexp(@NotNull String fileMask) {
+    return
+      fileMask
+        .replace(".", "\\.")
+        .replace("*", ".*")
+        .replace("?", ".")
+        .replace("+", "\\+");
+  }
+
   public void addEntry(@NotNull String filePath) throws IOException {
     File file = new File(filePath);
     if (!file.exists()) {
@@ -64,17 +80,28 @@ public abstract class FileSetProcessor {
         }
       }
       else {
-        VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(entry);
-        if (virtualFile == null) {
-          throw new IOException("Can not find " + entry.getPath());
+        if (matchesFileMask(entry.getName())) {
+          VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(entry);
+          if (virtualFile == null) {
+            throw new IOException("Can not find " + entry.getPath());
+          }
+          LOG.info("Processing " + virtualFile.getPath());
+          processFile(virtualFile);
+          myProcessedFiles++;
         }
-        LOG.info("Processing " + virtualFile.getPath());
-        processFile(virtualFile);
-        myProcessedFiles++;
       }
     }
   }
 
+  private boolean matchesFileMask(@NotNull String name) {
+    for (String fileMask : myFileMasks) {
+      if (name.matches(fileMask)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   protected abstract void processFile(@NotNull VirtualFile virtualFile);
 
   public int getProcessedFiles() {
index 5abf46e9d46f22a60b53311f294d9a56323d88a7..8f7ad7f66d8134612301017070b484fe81156df3 100644 (file)
@@ -75,7 +75,7 @@ public class FormatterStarter extends ApplicationStarterEx {
           //noinspection AssignmentToForLoopParameter
           i ++;
           if (i >= args.length) {
-            fatalError(messageOutput, "Mising settings file path.");
+            fatalError(messageOutput, "Missing settings file path.");
           }
           try {
             CodeStyleSettings settings = readSettings(args[i]);
@@ -88,6 +88,18 @@ public class FormatterStarter extends ApplicationStarterEx {
         else if (checkOption(args[i], "-r", "-R")) {
           fileSetFormatter.setRecursive();
         }
+        else if (checkOption(args[i], "-m", "-mask")) {
+          //noinspection AssignmentToForLoopParameter
+          i ++;
+          if (i >= args.length) {
+            fatalError(messageOutput, "Missing file mask(s).");
+          }
+          for (String mask : args[i].split(",")) {
+            if (!mask.isEmpty()) {
+              fileSetFormatter.addFileMask(mask);
+            }
+          }
+        }
         else {
           fatalError(messageOutput, "Unknown option " + args[i]);
         }
@@ -143,6 +155,7 @@ public class FormatterStarter extends ApplicationStarterEx {
     messageOutput.info("  -h|-help       Show a help message and exit.");
     messageOutput.info("  -s|-settings   A path to Intellij IDEA code style settings .xml file.\n");
     messageOutput.info("  -r|-R          Scan directories recursively.\n");
+    messageOutput.info("  -m|-mask       A comma-separated list of file masks.");
     messageOutput.info("  path<n>        A path to a file or a directory.\n");
     System.exit(0);
   }