diff --git a/src/java/org/apache/lucene/analysis/CharacterCache.java b/src/java/org/apache/lucene/analysis/CharacterCache.java new file mode 100644 index 00000000000..1116cc3d87d --- /dev/null +++ b/src/java/org/apache/lucene/analysis/CharacterCache.java @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.lucene.analysis; + +/** + * Replacement for Java 1.5 Character.valueOf() + * @deprecated Move to Character.valueOf() in 3.0 + */ +class CharacterCache { + + private static final Character cache[] = new Character[128]; + + static { + for (int i = 0; i < cache.length; i++) { + cache[i] = new Character((char) i); + } + } + + /** + * Returns a Character instance representing the given char value + * + * @param c + * a char value + * @return a Charater representation of the given char value. + */ + public static Character valueOf(char c) { + if (c < cache.length) { + return cache[(int) c]; + } + return new Character(c); + } +} diff --git a/src/java/org/apache/lucene/analysis/MappingCharFilter.java b/src/java/org/apache/lucene/analysis/MappingCharFilter.java index 0e89e571d4c..7ec6a50972a 100644 --- a/src/java/org/apache/lucene/analysis/MappingCharFilter.java +++ b/src/java/org/apache/lucene/analysis/MappingCharFilter.java @@ -49,7 +49,7 @@ public class MappingCharFilter extends BaseCharFilter { int firstChar = nextChar(); if (firstChar == -1) return -1; NormalizeCharMap nm = normMap.submap != null ? - (NormalizeCharMap)normMap.submap.get(Character.valueOf((char) firstChar)) : null; + (NormalizeCharMap)normMap.submap.get(CharacterCache.valueOf((char) firstChar)) : null; if (nm == null) return firstChar; NormalizeCharMap result = match(nm); if (result == null) return firstChar; @@ -94,7 +94,7 @@ public class MappingCharFilter extends BaseCharFilter { if (map.submap != null) { int chr = nextChar(); if (chr != -1) { - NormalizeCharMap subMap = (NormalizeCharMap) map.submap.get(Character.valueOf((char) chr)); + NormalizeCharMap subMap = (NormalizeCharMap) map.submap.get(CharacterCache.valueOf((char) chr)); if (subMap != null) { result = match(subMap); } diff --git a/src/java/org/apache/lucene/analysis/NormalizeCharMap.java b/src/java/org/apache/lucene/analysis/NormalizeCharMap.java index c60449c39a9..dd304c1989c 100644 --- a/src/java/org/apache/lucene/analysis/NormalizeCharMap.java +++ b/src/java/org/apache/lucene/analysis/NormalizeCharMap.java @@ -39,7 +39,7 @@ public class NormalizeCharMap { if (currMap.submap == null) { currMap.submap = new HashMap(1); } - NormalizeCharMap map = (NormalizeCharMap) currMap.submap.get(Character.valueOf(c)); + NormalizeCharMap map = (NormalizeCharMap) currMap.submap.get(CharacterCache.valueOf(c)); if (map == null) { map = new NormalizeCharMap(); currMap.submap.put(new Character(c), map); diff --git a/src/test/org/apache/lucene/analysis/BaseTokenTestCase.java b/src/test/org/apache/lucene/analysis/BaseTokenTestCase.java index 6dcc3c569e8..1259d6138d7 100644 --- a/src/test/org/apache/lucene/analysis/BaseTokenTestCase.java +++ b/src/test/org/apache/lucene/analysis/BaseTokenTestCase.java @@ -27,7 +27,7 @@ import org.apache.lucene.util.LuceneTestCase; public abstract class BaseTokenTestCase extends LuceneTestCase { public static String tsToString(TokenStream in) throws IOException { - StringBuilder out = new StringBuilder(); + StringBuffer out = new StringBuffer(); Token t = in.next(); if (null != t) out.append(new String(t.termBuffer(), 0, t.termLength())); diff --git a/src/test/org/apache/lucene/analysis/TestCharacterCache.java b/src/test/org/apache/lucene/analysis/TestCharacterCache.java new file mode 100644 index 00000000000..4b7a0c25942 --- /dev/null +++ b/src/test/org/apache/lucene/analysis/TestCharacterCache.java @@ -0,0 +1,34 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.lucene.analysis; + +import junit.framework.TestCase; +/** + * Testcase for {@link CharacterCache} + */ +public class TestCharacterCache extends TestCase { + + public void testValueOf() { + for (int i = 0; i < 256; i++) { + Character valueOf = CharacterCache.valueOf((char)i); + assertEquals((char)i, valueOf.charValue()); + } + + + } + +}