You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2011/10/04 01:04:54 UTC

svn commit: r1178626 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java

Author: sebb
Date: Mon Oct  3 23:04:54 2011
New Revision: 1178626

URL: http://svn.apache.org/viewvc?rev=1178626&view=rev
Log:
LANG-744 Use IOD for stripAccent init

Modified:
    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java

Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java?rev=1178626&r1=1178625&r2=1178626&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java (original)
+++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java Mon Oct  3 23:04:54 2011
@@ -630,15 +630,15 @@ public class StringUtils {
         }
         try {
             String result = null;
-            if (java6NormalizeMethod != null) {
+            if (InitStripAccents.java6NormalizeMethod != null) {
                 result = removeAccentsJava6(input);
-            } else if (sunDecomposeMethod != null) {
+            } else if (InitStripAccents.sunDecomposeMethod != null) {
                 result = removeAccentsSUN(input);
             } else {
                 throw new UnsupportedOperationException(
                     "The stripAccents(CharSequence) method requires at least"
-                        +" Java6, but got: "+java6Exception
-                        +"; or a Sun JVM: "+sunException);
+                        +" Java6, but got: "+InitStripAccents.java6Exception
+                        +"; or a Sun JVM: "+InitStripAccents.sunException);
             }
             // Note that none of the above methods correctly remove ligatures...
             return result;
@@ -669,12 +669,12 @@ public class StringUtils {
         String decomposed = java.text.Normalizer.normalize(CharSequence, Normalizer.Form.NFD);
         return java6Pattern.matcher(decomposed).replaceAll("");//$NON-NLS-1$
         */
-        if (java6NormalizeMethod == null || java6NormalizerFormNFD == null) {
-            throw new IllegalStateException("java.text.Normalizer is not available", java6Exception);
+        if (InitStripAccents.java6NormalizeMethod == null || InitStripAccents.java6NormalizerFormNFD == null) {
+            throw new IllegalStateException("java.text.Normalizer is not available", InitStripAccents.java6Exception);
         }
         String result;
-        result = (String) java6NormalizeMethod.invoke(null, new Object[] {text, java6NormalizerFormNFD});
-        result = java6Pattern.matcher(result).replaceAll("");//$NON-NLS-1$
+        result = (String) InitStripAccents.java6NormalizeMethod.invoke(null, new Object[] {text, InitStripAccents.java6NormalizerFormNFD});
+        result = InitStripAccents.java6Pattern.matcher(result).replaceAll("");//$NON-NLS-1$
         return result;
     }
 
@@ -693,62 +693,65 @@ public class StringUtils {
         String decomposed = sun.text.Normalizer.decompose(text, false, 0);
         return sunPattern.matcher(decomposed).replaceAll("");//$NON-NLS-1$
         */
-        if (sunDecomposeMethod == null) {
-            throw new IllegalStateException("sun.text.Normalizer is not available", sunException);
+        if (InitStripAccents.sunDecomposeMethod == null) {
+            throw new IllegalStateException("sun.text.Normalizer is not available", InitStripAccents.sunException);
         }
         String result;
-        result = (String) sunDecomposeMethod.invoke(null, new Object[] {text, Boolean.FALSE, Integer.valueOf(0)});
-        result = sunPattern.matcher(result).replaceAll("");//$NON-NLS-1$
+        result = (String) InitStripAccents.sunDecomposeMethod.invoke(null, new Object[] {text, Boolean.FALSE, Integer.valueOf(0)});
+        result = InitStripAccents.sunPattern.matcher(result).replaceAll("");//$NON-NLS-1$
         return result;
     }
 
-    // SUN internal, Java 1.3 -> Java 5
-    private static final Throwable sunException;
-    private static final Method  sunDecomposeMethod;
-    private static final Pattern sunPattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");//$NON-NLS-1$
-    // Java 6+
-    private static final Throwable java6Exception;
-    private static final Method  java6NormalizeMethod;
-    private static final Object  java6NormalizerFormNFD;
-    private static final Pattern java6Pattern = sunPattern;
-
-    static {
-        // Set up defaults for final static fields
-        Object _java6NormalizerFormNFD = null;
-        Method _java6NormalizeMethod = null;
-        Method _sunDecomposeMethod = null;
-        Throwable _java6Exception = null;
-        Throwable _sunException = null;
-        try {
-            // java.text.Normalizer.normalize(CharSequence, Normalizer.Form.NFD);
-            // Be careful not to get Java 1.3 java.text.Normalizer!
-            Class<?> normalizerFormClass = Thread.currentThread().getContextClassLoader()
-                .loadClass("java.text.Normalizer$Form");//$NON-NLS-1$
-            _java6NormalizerFormNFD = normalizerFormClass.getField("NFD").get(null);//$NON-NLS-1$
-            Class<?> normalizerClass = Thread.currentThread().getContextClassLoader()
-                .loadClass("java.text.Normalizer");//$NON-NLS-1$
-            _java6NormalizeMethod = normalizerClass.getMethod("normalize",//$NON-NLS-1$
-                    new Class[] {CharSequence.class, normalizerFormClass});//$NON-NLS-1$
-        } catch (Exception e1) {
-            // Only check for Sun method if Java 6 method is not available
-            _java6Exception = e1;
+    // IOD container for stripAccent() initialisation
+    private static class InitStripAccents {
+        // SUN internal, Java 1.3 -> Java 5
+        private static final Throwable sunException;
+        private static final Method  sunDecomposeMethod;
+        private static final Pattern sunPattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");//$NON-NLS-1$
+        // Java 6+
+        private static final Throwable java6Exception;
+        private static final Method  java6NormalizeMethod;
+        private static final Object  java6NormalizerFormNFD;
+        private static final Pattern java6Pattern = sunPattern;
+    
+        static {
+            // Set up defaults for final static fields
+            Object _java6NormalizerFormNFD = null;
+            Method _java6NormalizeMethod = null;
+            Method _sunDecomposeMethod = null;
+            Throwable _java6Exception = null;
+            Throwable _sunException = null;
             try {
-                // sun.text.Normalizer.decompose(text, false, 0);
+                // java.text.Normalizer.normalize(CharSequence, Normalizer.Form.NFD);
+                // Be careful not to get Java 1.3 java.text.Normalizer!
+                Class<?> normalizerFormClass = Thread.currentThread().getContextClassLoader()
+                    .loadClass("java.text.Normalizer$Form");//$NON-NLS-1$
+                _java6NormalizerFormNFD = normalizerFormClass.getField("NFD").get(null);//$NON-NLS-1$
                 Class<?> normalizerClass = Thread.currentThread().getContextClassLoader()
-                    .loadClass("sun.text.Normalizer");//$NON-NLS-1$
-                _sunDecomposeMethod = normalizerClass.getMethod("decompose",//$NON-NLS-1$
-                        new Class[] {String.class, Boolean.TYPE, Integer.TYPE});//$NON-NLS-1$
-            } catch (Exception e2) {
-                _sunException = e2;
+                    .loadClass("java.text.Normalizer");//$NON-NLS-1$
+                _java6NormalizeMethod = normalizerClass.getMethod("normalize",//$NON-NLS-1$
+                        new Class[] {CharSequence.class, normalizerFormClass});//$NON-NLS-1$
+            } catch (Exception e1) {
+                // Only check for Sun method if Java 6 method is not available
+                _java6Exception = e1;
+                try {
+                    // sun.text.Normalizer.decompose(text, false, 0);
+                    Class<?> normalizerClass = Thread.currentThread().getContextClassLoader()
+                        .loadClass("sun.text.Normalizer");//$NON-NLS-1$
+                    _sunDecomposeMethod = normalizerClass.getMethod("decompose",//$NON-NLS-1$
+                            new Class[] {String.class, Boolean.TYPE, Integer.TYPE});//$NON-NLS-1$
+                } catch (Exception e2) {
+                    _sunException = e2;
+                }
             }
+    
+            // Set up final static fields
+            java6Exception = _java6Exception;
+            java6NormalizerFormNFD = _java6NormalizerFormNFD;
+            java6NormalizeMethod = _java6NormalizeMethod;
+            sunException = _sunException;
+            sunDecomposeMethod = _sunDecomposeMethod;
         }
-
-        // Set up final static fields
-        java6Exception = _java6Exception;
-        java6NormalizerFormNFD = _java6NormalizerFormNFD;
-        java6NormalizeMethod = _java6NormalizeMethod;
-        sunException = _sunException;
-        sunDecomposeMethod = _sunDecomposeMethod;
     }
 
     // Equals