8039567: Duplicated code in DataTransferer

Reviewed-by: serb, azvegint
This commit is contained in:
Petr Pchelko 2014-04-23 18:07:12 +04:00
parent 1b4d763c77
commit 39ba3c9ea6
4 changed files with 22 additions and 81 deletions

View File

@ -31,6 +31,7 @@ import sun.awt.image.ImageRepresentation;
import java.io.*;
import java.net.URL;
import java.nio.charset.Charset;
import java.text.Normalizer;
import java.text.Normalizer.Form;
import java.util.*;
@ -126,7 +127,7 @@ public class CDataTransferer extends DataTransferer {
if (format == CF_URL && URL.class.equals(flavor.getRepresentationClass()))
{
String charset = getDefaultTextCharset();
String charset = Charset.defaultCharset().name();
if (transferable != null && transferable.isDataFlavorSupported(javaTextEncodingFlavor)) {
try {
charset = new String((byte[])transferable.getTransferData(javaTextEncodingFlavor), "UTF-8");

View File

@ -57,6 +57,7 @@ import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.IllegalCharsetNameException;
import java.nio.charset.StandardCharsets;
import java.nio.charset.UnsupportedCharsetException;
import java.lang.reflect.Constructor;
@ -149,7 +150,7 @@ public abstract class DataTransferer {
tempSet.add("UTF-16BE");
tempSet.add("UTF-16LE");
tempSet.add("UTF-16");
tempSet.add(getDefaultTextCharset());
tempSet.add(Charset.defaultCharset().name());
return Collections.unmodifiableSortedSet(tempSet);
}
}
@ -162,12 +163,6 @@ public abstract class DataTransferer {
*/
private static final Map<String, Boolean> textMIMESubtypeCharsetSupport;
/**
* Cache of the platform default encoding as specified in the
* "file.encoding" system property.
*/
private static String defaultEncoding;
/**
* A collection of all natives listed in flavormap.properties with
* a primary MIME type of "text".
@ -266,17 +261,7 @@ public abstract class DataTransferer {
String encoding = flavor.getParameter("charset");
return (encoding != null) ? encoding : getDefaultTextCharset();
}
/**
* Returns the platform's default character encoding.
*/
public static String getDefaultTextCharset() {
if (defaultEncoding != null) {
return defaultEncoding;
}
return defaultEncoding = Charset.defaultCharset().name();
return (encoding != null) ? encoding : Charset.defaultCharset().name();
}
/**
@ -470,7 +455,7 @@ public abstract class DataTransferer {
textNatives.add(format);
nativeCharsets.put(format, (charset != null && charset.length() != 0)
? charset : getDefaultTextCharset());
? charset : Charset.defaultCharset().name());
if (eoln != null && eoln.length() != 0 && !eoln.equals("\n")) {
nativeEOLNs.put(format, eoln);
}
@ -771,19 +756,17 @@ public abstract class DataTransferer {
* clipboard string encoding/decoding, basing on clipboard
* format and localeTransferable(on decoding, if available)
*/
private String getBestCharsetForTextFormat(Long lFormat,
protected String getBestCharsetForTextFormat(Long lFormat,
Transferable localeTransferable) throws IOException
{
String charset = null;
if (localeTransferable != null &&
isLocaleDependentTextFormat(lFormat) &&
localeTransferable.isDataFlavorSupported(javaTextEncodingFlavor))
{
localeTransferable.isDataFlavorSupported(javaTextEncodingFlavor)) {
try {
charset = new String(
(byte[])localeTransferable.getTransferData(javaTextEncodingFlavor),
"UTF-8"
);
byte[] charsetNameBytes = (byte[])localeTransferable
.getTransferData(javaTextEncodingFlavor);
charset = new String(charsetNameBytes, StandardCharsets.UTF_8);
} catch (UnsupportedFlavorException cannotHappen) {
}
} else {
@ -791,7 +774,7 @@ public abstract class DataTransferer {
}
if (charset == null) {
// Only happens when we have a custom text type.
charset = getDefaultTextCharset();
charset = Charset.defaultCharset().name();
}
return charset;
}
@ -1716,28 +1699,8 @@ search:
{
Long lFormat = format;
String sourceEncoding = null;
if (isLocaleDependentTextFormat(format) &&
localeTransferable != null &&
localeTransferable.
isDataFlavorSupported(javaTextEncodingFlavor))
{
try {
sourceEncoding = new String((byte[])localeTransferable.
getTransferData(javaTextEncodingFlavor),
"UTF-8");
} catch (UnsupportedFlavorException cannotHappen) {
}
} else {
sourceEncoding = getCharsetForTextFormat(lFormat);
}
if (sourceEncoding == null) {
// Only happens when we have a custom text type.
sourceEncoding = getDefaultTextCharset();
}
wrapped = new BufferedReader
(new InputStreamReader(bytestream, sourceEncoding));
String sourceEncoding = getBestCharsetForTextFormat(format, localeTransferable);
wrapped = new BufferedReader(new InputStreamReader(bytestream, sourceEncoding));
if (targetEncoding == null) {
// Throw NullPointerException for compatibility with the former
@ -2318,7 +2281,6 @@ search:
*/
public static class CharsetComparator extends IndexedComparator<String> {
private static final Map<String, Integer> charsets;
private static final String defaultEncoding;
private static final Integer DEFAULT_CHARSET_INDEX = 2;
private static final Integer OTHER_CHARSET_INDEX = 1;
@ -2339,8 +2301,7 @@ search:
// US-ASCII is the worst charset supported
charsetsMap.put(canonicalName("US-ASCII"), WORST_CHARSET_INDEX);
defaultEncoding = DataTransferer.canonicalName(DataTransferer.getDefaultTextCharset());
charsetsMap.putIfAbsent(defaultEncoding, DEFAULT_CHARSET_INDEX);
charsetsMap.putIfAbsent(Charset.defaultCharset().name(), DEFAULT_CHARSET_INDEX);
charsetsMap.put(UNSUPPORTED_CHARSET, UNSUPPORTED_CHARSET_INDEX);

View File

@ -259,28 +259,9 @@ public class XDataTransferer extends DataTransferer {
Transferable localeTransferable)
throws IOException {
String charset = null;
if (localeTransferable != null &&
isLocaleDependentTextFormat(format) &&
localeTransferable.isDataFlavorSupported(javaTextEncodingFlavor)) {
try {
charset = new String(
(byte[])localeTransferable.getTransferData(javaTextEncodingFlavor),
"UTF-8"
);
} catch (UnsupportedFlavorException cannotHappen) {
}
} else {
charset = getCharsetForTextFormat(format);
}
if (charset == null) {
// Only happens when we have a custom text type.
charset = getDefaultTextCharset();
}
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(stream, charset));
String charset = getBestCharsetForTextFormat(format, localeTransferable);
try (InputStreamReader isr = new InputStreamReader(stream, charset);
BufferedReader reader = new BufferedReader(isr)) {
String line;
ArrayList<URI> uriList = new ArrayList<>();
URI uri;
@ -293,9 +274,6 @@ public class XDataTransferer extends DataTransferer {
uriList.add(uri);
}
return uriList.toArray(new URI[uriList.size()]);
} finally {
if (reader != null)
reader.close();
}
}

View File

@ -59,6 +59,7 @@ import java.io.File;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@ -268,9 +269,9 @@ final class WDataTransferer extends DataTransferer {
if (format == CFSTR_INETURL &&
URL.class.equals(flavor.getRepresentationClass()))
{
String charset = getDefaultTextCharset();
if (localeTransferable != null && localeTransferable.
isDataFlavorSupported(javaTextEncodingFlavor))
String charset = Charset.defaultCharset().name();
if (localeTransferable != null
&& localeTransferable.isDataFlavorSupported(javaTextEncodingFlavor))
{
try {
charset = new String((byte[])localeTransferable.