From d8e641596dac04b5d7785d70f9db605c5485a5da Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 24 Apr 2014 20:28:18 +0400 Subject: [PATCH] [by cdr] optimizations --- .../org/jetbrains/jps/incremental/Utils.java | 3 ++- .../jps/javac/OptimizedFileManager17.java | 12 +++++++++--- jps/lib/optimizedFileManager.jar | Bin 21844 -> 21896 bytes 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java index e2a47bba0570..14077688ebe5 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java @@ -17,6 +17,7 @@ package org.jetbrains.jps.incremental; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.builders.BuildTarget; @@ -94,7 +95,7 @@ public class Utils { public static URI toURI(String localPath) { try { - String p = FileUtil.toSystemIndependentName(localPath); + String p = FileUtilRt.toSystemIndependentName(localPath); if (!p.startsWith("/")) { p = "/" + p; } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java b/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java index 95fcd7d9ffa1..c6c67352387e 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java @@ -224,9 +224,11 @@ class OptimizedFileManager17 extends com.sun.tools.javac.file.JavacFileManager { return fileKinds.contains(getKind(name)); } - private class InputFileObject extends BaseFileObject { + private static class InputFileObject extends BaseFileObject { + private static final Kind[] ourAvailableKinds = Kind.values(); private final String name; private final File file; + private final Kind kind; private Reference absFileRef; public InputFileObject(JavacFileManager fileManager, File f) { @@ -237,9 +239,9 @@ class OptimizedFileManager17 extends com.sun.tools.javac.file.JavacFileManager { super(fileManager); this.name = name; this.file = f; + kind = findKind(name); } - @Override public URI toUri() { try { @@ -262,7 +264,11 @@ class OptimizedFileManager17 extends com.sun.tools.javac.file.JavacFileManager { @Override public JavaFileObject.Kind getKind() { - for (Kind kind : Kind.values()) { + return kind; + } + + private static JavaFileObject.Kind findKind(String name) { + for (Kind kind : ourAvailableKinds) { if (kind != Kind.OTHER && name.endsWith(kind.extension)) { return kind; } diff --git a/jps/lib/optimizedFileManager.jar b/jps/lib/optimizedFileManager.jar index cff0c64dfed83b4d58830de0d055511d02d4c740..49be7ded7896eb8bbc05e8515098d90264db66ac 100644 GIT binary patch delta 9002 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 E2RK(y1poj5 delta 8937 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