summaryrefslogtreecommitdiff
path: root/platform/util/src/com/intellij/openapi/util
diff options
context:
space:
mode:
Diffstat (limited to 'platform/util/src/com/intellij/openapi/util')
-rw-r--r--platform/util/src/com/intellij/openapi/util/JDOMUtil.java42
-rw-r--r--platform/util/src/com/intellij/openapi/util/LowMemoryWatcher.java20
-rw-r--r--platform/util/src/com/intellij/openapi/util/NotNullLazyValue.java1
-rw-r--r--platform/util/src/com/intellij/openapi/util/Ref.java2
-rw-r--r--platform/util/src/com/intellij/openapi/util/io/FileUtil.java3
-rw-r--r--platform/util/src/com/intellij/openapi/util/text/StringUtil.java14
6 files changed, 57 insertions, 25 deletions
diff --git a/platform/util/src/com/intellij/openapi/util/JDOMUtil.java b/platform/util/src/com/intellij/openapi/util/JDOMUtil.java
index 2cd5ed09bfdc..c82ee6df346b 100644
--- a/platform/util/src/com/intellij/openapi/util/JDOMUtil.java
+++ b/platform/util/src/com/intellij/openapi/util/JDOMUtil.java
@@ -204,34 +204,34 @@ public class JDOMUtil {
@NotNull
private static String intern(@NotNull final StringInterner interner, @NotNull final String s) {
- synchronized (interner) {
- return interner.intern(s);
- }
+ return interner.intern(s);
}
@NotNull
- public static String legalizeText(@NotNull final String str) {
- StringReader reader = new StringReader(str);
- StringBuilder result = new StringBuilder();
-
- while(true) {
- try {
- int each = reader.read();
- if (each == -1) break;
+ public static String legalizeText(@NotNull String str) {
+ return legalizeChars(str).toString();
+ }
- if (Verifier.isXMLCharacter(each)) {
- result.append((char)each);
- } else {
- result.append("0x").append(StringUtil.toUpperCase(Long.toHexString(each)));
- }
- }
- catch (IOException ignored) {
- }
+ @NotNull
+ public static CharSequence legalizeChars(@NotNull CharSequence str) {
+ StringBuilder result = new StringBuilder(str.length());
+ for (int i = 0, len = str.length(); i < len; i ++) {
+ appendLegalized(result, str.charAt(i));
}
-
- return result.toString().replaceAll("<", "&lt;").replaceAll(">", "&gt;");
+ return result;
}
+ public static void appendLegalized(@NotNull StringBuilder sb, char each) {
+ if (each == '<' || each == '>') {
+ sb.append(each == '<' ? "&lt;" : "&gt;");
+ }
+ else if (!Verifier.isXMLCharacter(each)) {
+ sb.append("0x").append(StringUtil.toUpperCase(Long.toHexString(each)));
+ }
+ else {
+ sb.append(each);
+ }
+ }
private static class EmptyTextFilter implements Filter {
@Override
diff --git a/platform/util/src/com/intellij/openapi/util/LowMemoryWatcher.java b/platform/util/src/com/intellij/openapi/util/LowMemoryWatcher.java
index 33bd953d422f..f6c7b924590a 100644
--- a/platform/util/src/com/intellij/openapi/util/LowMemoryWatcher.java
+++ b/platform/util/src/com/intellij/openapi/util/LowMemoryWatcher.java
@@ -15,6 +15,7 @@
*/
package com.intellij.openapi.util;
+import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.util.ConcurrencyUtil;
import com.intellij.util.containers.WeakList;
@@ -93,10 +94,29 @@ public class LowMemoryWatcher {
}, null, null);
}
+ /**
+ * Registers a runnable to run on low memory events
+ * @return a LowMemoryWatcher instance holding the runnable. This instance should be kept in memory while the
+ * low memory notification functionality is needed. As soon as it's garbage-collected, the runnable won't receive any further notifications.
+ */
public static LowMemoryWatcher register(Runnable runnable) {
return new LowMemoryWatcher(runnable);
}
+ /**
+ * Registers a runnable to run on low memory events. The notifications will be issued until parentDisposable is disposed.
+ */
+ public static void register(Runnable runnable, Disposable parentDisposable) {
+ final Ref<LowMemoryWatcher> watcher = Ref.create(new LowMemoryWatcher(runnable));
+ Disposer.register(parentDisposable, new Disposable() {
+ @Override
+ public void dispose() {
+ watcher.get().stop();
+ watcher.set(null);
+ }
+ });
+ }
+
private LowMemoryWatcher(Runnable runnable) {
myRunnable = runnable;
ourInstances.add(this);
diff --git a/platform/util/src/com/intellij/openapi/util/NotNullLazyValue.java b/platform/util/src/com/intellij/openapi/util/NotNullLazyValue.java
index 96eefe8ddf78..d604d5f41ed1 100644
--- a/platform/util/src/com/intellij/openapi/util/NotNullLazyValue.java
+++ b/platform/util/src/com/intellij/openapi/util/NotNullLazyValue.java
@@ -38,6 +38,7 @@ public abstract class NotNullLazyValue<T> {
return myValue;
}
+ @NotNull
public static <T> NotNullLazyValue<T> createConstantValue(@NotNull final T value) {
return new NotNullLazyValue<T>() {
@NotNull
diff --git a/platform/util/src/com/intellij/openapi/util/Ref.java b/platform/util/src/com/intellij/openapi/util/Ref.java
index d35b39de264b..0119c5626bf7 100644
--- a/platform/util/src/com/intellij/openapi/util/Ref.java
+++ b/platform/util/src/com/intellij/openapi/util/Ref.java
@@ -15,6 +15,7 @@
*/
package com.intellij.openapi.util;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
@@ -49,6 +50,7 @@ public class Ref<T> {
return false;
}
+ @NotNull
public static <T> Ref<T> create() {
return new Ref<T>();
}
diff --git a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java
index adec13d20412..7d3d6f557249 100644
--- a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java
+++ b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java
@@ -848,9 +848,10 @@ public class FileUtil extends FileUtilRt {
}
public static boolean isFilePathAcceptable(@NotNull File root, @Nullable FileFilter fileFilter) {
+ if (fileFilter == null) return true;
File file = root;
do {
- if (fileFilter != null && !fileFilter.accept(file)) return false;
+ if (!fileFilter.accept(file)) return false;
file = file.getParentFile();
}
while (file != null);
diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java
index e364a8568fda..af2b3dd4293e 100644
--- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java
+++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -96,7 +96,7 @@ public class StringUtil extends StringUtilRt {
@Nullable
@Override
public String fun(@Nullable String s) {
- return s == null ? null : s.trim();
+ return trim(s);
}
};
@@ -246,6 +246,7 @@ public class StringUtil extends StringUtilRt {
return html.replaceAll("<(.|\n)*?>", "");
}
+ @Contract("null -> null; !null -> !null")
public static String toLowerCase(@Nullable final String str) {
//noinspection ConstantConditions
return str == null ? null : str.toLowerCase();
@@ -852,6 +853,11 @@ public class StringUtil extends StringUtilRt {
return startsWithConcatenation(string, firstPrefix, secondPrefix, thirdPrefix);
}
+ @Contract("null -> null; !null -> !null")
+ public static String trim(@Nullable String s) {
+ return s == null ? null : s.trim();
+ }
+
@NotNull
public static String trimEnd(@NotNull String s, @NonNls @NotNull String suffix) {
if (s.endsWith(suffix)) {
@@ -1467,7 +1473,7 @@ public class StringUtil extends StringUtilRt {
/**
* @deprecated use #capitalize(String)
*/
- @Nullable
+ @Contract("null -> null; !null -> !null")
public static String firstLetterToUpperCase(@Nullable final String displayString) {
if (displayString == null || displayString.isEmpty()) return displayString;
char firstChar = displayString.charAt(0);
@@ -1827,11 +1833,13 @@ public class StringUtil extends StringUtilRt {
@NonNls private static final String[] REPLACES_REFS = {"&lt;", "&gt;", "&amp;", "&#39;", "&quot;"};
@NonNls private static final String[] REPLACES_DISP = {"<", ">", "&", "'", "\""};
+ @Contract("null -> null; !null -> !null")
public static String unescapeXml(@Nullable final String text) {
if (text == null) return null;
return replace(text, REPLACES_REFS, REPLACES_DISP);
}
+ @Contract("null -> null; !null -> !null")
public static String escapeXml(@Nullable final String text) {
if (text == null) return null;
return replace(text, REPLACES_DISP, REPLACES_REFS);