OpenJDK / jdk8u / jdk8u / jdk
changeset 9206:e62c77845b2b
8029893: Remove reflection from DataTransferer.getInstance
Reviewed-by: anthony, serb
author | pchelko |
---|---|
date | Wed, 12 Mar 2014 17:31:51 +0400 |
parents | ee0d57022dac |
children | 783550e90dca |
files | src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java src/share/classes/java/awt/datatransfer/DataFlavor.java src/share/classes/sun/awt/HToolkit.java src/share/classes/sun/awt/SunToolkit.java src/share/classes/sun/awt/datatransfer/DataTransferer.java src/solaris/classes/sun/awt/X11/XDataTransferer.java src/solaris/classes/sun/awt/X11/XToolkit.java src/windows/classes/sun/awt/windows/WDataTransferer.java src/windows/classes/sun/awt/windows/WToolkit.java |
diffstat | 10 files changed, 61 insertions(+), 137 deletions(-) [+] |
line wrap: on
line diff
--- a/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java Wed Mar 12 17:31:51 2014 +0400 @@ -89,7 +89,7 @@ private static CDataTransferer fTransferer; - public static synchronized CDataTransferer getInstanceImpl() { + static synchronized CDataTransferer getInstanceImpl() { if (fTransferer == null) { fTransferer = new CDataTransferer(); }
--- a/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Wed Mar 12 17:31:51 2014 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,6 +42,7 @@ import java.net.MalformedURLException; import sun.awt.*; +import sun.awt.datatransfer.DataTransferer; import sun.lwawt.*; import sun.lwawt.LWWindowPeer.PeerType; import sun.security.action.GetBooleanAction; @@ -112,8 +113,6 @@ private static final boolean inAWT; public LWCToolkit() { - SunToolkit.setDataTransfererClassName("sun.lwawt.macosx.CDataTransferer"); - areExtraMouseButtonsEnabled = Boolean.parseBoolean(System.getProperty("sun.awt.enableExtraMouseButtons", "true")); //set system property if not yet assigned System.setProperty("sun.awt.enableExtraMouseButtons", ""+areExtraMouseButtonsEnabled); @@ -442,6 +441,11 @@ } @Override + public DataTransferer getDataTransferer() { + return CDataTransferer.getInstanceImpl(); + } + + @Override public boolean isAlwaysOnTopSupported() { return true; }
--- a/src/share/classes/java/awt/datatransfer/DataFlavor.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/share/classes/java/awt/datatransfer/DataFlavor.java Wed Mar 12 17:31:51 2014 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -570,7 +570,7 @@ if (DataTransferer.isFlavorCharsetTextType(this) && (isRepresentationClassInputStream() || isRepresentationClassByteBuffer() || - DataTransferer.byteArrayClass.equals(representationClass))) + byte[].class.equals(representationClass))) { params += ";charset=" + DataTransferer.getTextCharset(this); } @@ -1015,7 +1015,7 @@ !(isRepresentationClassReader() || String.class.equals(representationClass) || isRepresentationClassCharBuffer() || - DataTransferer.charArrayClass.equals(representationClass))) + char[].class.equals(representationClass))) { String thisCharset = DataTransferer.canonicalName(getParameter("charset")); @@ -1100,8 +1100,7 @@ !(isRepresentationClassReader() || String.class.equals(representationClass) || isRepresentationClassCharBuffer() || - DataTransferer.charArrayClass.equals - (representationClass))) + char[].class.equals(representationClass))) { String charset = DataTransferer.canonicalName(getParameter("charset"));
--- a/src/share/classes/sun/awt/HToolkit.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/share/classes/sun/awt/HToolkit.java Wed Mar 12 17:31:51 2014 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package sun.awt; +import sun.awt.datatransfer.DataTransferer; + import java.awt.*; import java.awt.dnd.*; import java.awt.dnd.peer.DragSourceContextPeer; @@ -184,6 +186,11 @@ return false; } + @Override + public DataTransferer getDataTransferer() { + return null; + } + public GlobalCursorManager getGlobalCursorManager() throws HeadlessException { throw new HeadlessException();
--- a/src/share/classes/sun/awt/SunToolkit.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/share/classes/sun/awt/SunToolkit.java Wed Mar 12 17:31:51 2014 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import sun.awt.datatransfer.DataTransferer; import sun.security.util.SecurityConstants; import sun.util.logging.PlatformLogger; import sun.misc.SoftCache; @@ -203,6 +204,8 @@ public abstract boolean isTraySupported(); + public abstract DataTransferer getDataTransferer(); + @SuppressWarnings("deprecation") public abstract FontPeer getFontPeer(String name, int style); @@ -1191,19 +1194,6 @@ return getStartupLocale(); } - private static String dataTransfererClassName = null; - - protected static void setDataTransfererClassName(String className) { - dataTransfererClassName = className; - } - - public static String getDataTransfererClassName() { - if (dataTransfererClassName == null) { - Toolkit.getDefaultToolkit(); // transferer set during toolkit init - } - return dataTransfererClassName; - } - // Support for window closing event notifications private transient WindowClosingListener windowClosingListener = null; /**
--- a/src/share/classes/sun/awt/datatransfer/DataTransferer.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/share/classes/sun/awt/datatransfer/DataTransferer.java Wed Mar 12 17:31:51 2014 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,10 +25,10 @@ package sun.awt.datatransfer; -import java.awt.AWTError; import java.awt.EventQueue; +import java.awt.Graphics; import java.awt.Image; -import java.awt.Graphics; +import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.FlavorMap; @@ -138,16 +138,6 @@ public abstract class DataTransferer { /** - * Cached value of Class.forName("[C"); - */ - public static final Class charArrayClass; - - /** - * Cached value of Class.forName("[B"); - */ - public static final Class byteArrayClass; - - /** * The <code>DataFlavor</code> representing plain text with Unicode * encoding, where: * <pre> @@ -241,15 +231,6 @@ private static final PlatformLogger dtLog = PlatformLogger.getLogger("sun.awt.datatransfer.DataTransfer"); static { - Class tCharArrayClass = null, tByteArrayClass = null; - try { - tCharArrayClass = Class.forName("[C"); - tByteArrayClass = Class.forName("[B"); - } catch (ClassNotFoundException cannotHappen) { - } - charArrayClass = tCharArrayClass; - byteArrayClass = tByteArrayClass; - DataFlavor tPlainTextStringFlavor = null; try { tPlainTextStringFlavor = new DataFlavor @@ -290,63 +271,8 @@ * that in a headless environment, there may be no DataTransferer instance; * instead, null will be returned. */ - public static DataTransferer getInstance() { - synchronized (DataTransferer.class) { - if (transferer == null) { - final String name = SunToolkit.getDataTransfererClassName(); - if (name != null) { - PrivilegedAction<DataTransferer> action = new PrivilegedAction<DataTransferer>() - { - public DataTransferer run() { - Class cls = null; - Method method = null; - DataTransferer ret = null; - - try { - cls = Class.forName(name); - } catch (ClassNotFoundException e) { - ClassLoader cl = ClassLoader. - getSystemClassLoader(); - if (cl != null) { - try { - cls = cl.loadClass(name); - } catch (ClassNotFoundException ee) { - ee.printStackTrace(); - throw new AWTError("DataTransferer not found: " + name); - } - } - } - if (cls != null) { - try { - method = cls.getDeclaredMethod("getInstanceImpl"); - method.setAccessible(true); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - throw new AWTError("Cannot instantiate DataTransferer: " + name); - } catch (SecurityException e) { - e.printStackTrace(); - throw new AWTError("Access is denied for DataTransferer: " + name); - } - } - if (method != null) { - try { - ret = (DataTransferer) method.invoke(null); - } catch (InvocationTargetException e) { - e.printStackTrace(); - throw new AWTError("Cannot instantiate DataTransferer: " + name); - } catch (IllegalAccessException e) { - e.printStackTrace(); - throw new AWTError("Cannot access DataTransferer: " + name); - } - } - return ret; - } - }; - transferer = AccessController.doPrivileged(action); - } - } - } - return transferer; + public static synchronized DataTransferer getInstance() { + return ((SunToolkit) Toolkit.getDefaultToolkit()).getDataTransferer(); } /** @@ -459,14 +385,14 @@ if (flavor.isRepresentationClassReader() || String.class.equals(rep_class) || flavor.isRepresentationClassCharBuffer() || - DataTransferer.charArrayClass.equals(rep_class)) + char[].class.equals(rep_class)) { return true; } if (!(flavor.isRepresentationClassInputStream() || flavor.isRepresentationClassByteBuffer() || - DataTransferer.byteArrayClass.equals(rep_class))) { + byte[].class.equals(rep_class))) { return false; } @@ -490,8 +416,7 @@ return (flavor.isRepresentationClassInputStream() || flavor.isRepresentationClassByteBuffer() || - DataTransferer.byteArrayClass. - equals(flavor.getRepresentationClass())); + byte[].class.equals(flavor.getRepresentationClass())); } /** @@ -1243,7 +1168,7 @@ format); // Source data is a char array. Convert to a String and recur. - } else if (charArrayClass.equals(flavor.getRepresentationClass())) { + } else if (char[].class.equals(flavor.getRepresentationClass())) { if (!(isFlavorCharsetTextType(flavor) && isTextFormat(format))) { throw new IOException ("cannot transfer non-text data as char array"); @@ -1274,7 +1199,7 @@ // Source data is a byte array. For arbitrary flavors, simply return // the array. For text flavors, decode back to a String and recur to // reencode according to the requested format. - } else if (byteArrayClass.equals(flavor.getRepresentationClass())) { + } else if (byte[].class.equals(flavor.getRepresentationClass())) { byte[] bytes = (byte[])obj; if (isFlavorCharsetTextType(flavor) && isTextFormat(format)) { @@ -1651,7 +1576,7 @@ // Target data is a char array. Recur to obtain String and convert to // char array. - } else if (charArrayClass.equals(flavor.getRepresentationClass())) { + } else if (char[].class.equals(flavor.getRepresentationClass())) { if (!(isFlavorCharsetTextType(flavor) && isTextFormat(format))) { throw new IOException ("cannot transfer non-text data as char array"); @@ -1679,7 +1604,7 @@ // the raw bytes. For text flavors, convert to a String to strip // terminators and search-and-replace EOLN, then reencode according to // the requested flavor. - } else if (byteArrayClass.equals(flavor.getRepresentationClass())) { + } else if (byte[].class.equals(flavor.getRepresentationClass())) { if (isFlavorCharsetTextType(flavor) && isTextFormat(format)) { theObject = translateBytesToString( bytes, format, localeTransferable @@ -1807,7 +1732,7 @@ theObject = constructFlavoredObject(reader, flavor, Reader.class); // Target data is a byte array - } else if (byteArrayClass.equals(flavor.getRepresentationClass())) { + } else if (byte[].class.equals(flavor.getRepresentationClass())) { if(isFlavorCharsetTextType(flavor) && isTextFormat(format)) { theObject = translateBytesToString(inputStreamToByteArray(str), format, localeTransferable) .getBytes(DataTransferer.getTextCharset(flavor)); @@ -2857,7 +2782,7 @@ HashMap decodedTextRepresentationsMap = new HashMap(4, 1.0f); decodedTextRepresentationsMap.put - (DataTransferer.charArrayClass, Integer.valueOf(0)); + (char[].class, Integer.valueOf(0)); decodedTextRepresentationsMap.put (java.nio.CharBuffer.class, Integer.valueOf(1)); decodedTextRepresentationsMap.put @@ -2873,7 +2798,7 @@ HashMap encodedTextRepresentationsMap = new HashMap(3, 1.0f); encodedTextRepresentationsMap.put - (DataTransferer.byteArrayClass, Integer.valueOf(0)); + (byte[].class, Integer.valueOf(0)); encodedTextRepresentationsMap.put (java.nio.ByteBuffer.class, Integer.valueOf(1)); encodedTextRepresentationsMap.put
--- a/src/solaris/classes/sun/awt/X11/XDataTransferer.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/solaris/classes/sun/awt/X11/XDataTransferer.java Wed Mar 12 17:31:51 2014 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -77,11 +77,9 @@ private static XDataTransferer transferer; - static XDataTransferer getInstanceImpl() { - synchronized (XDataTransferer.class) { - if (transferer == null) { - transferer = new XDataTransferer(); - } + static synchronized XDataTransferer getInstanceImpl() { + if (transferer == null) { + transferer = new XDataTransferer(); } return transferer; } @@ -411,7 +409,7 @@ if (df.getRepresentationClass() != null && (df.isRepresentationClassInputStream() || df.isRepresentationClassByteBuffer() || - byteArrayClass.equals(df.getRepresentationClass()))) { + byte[].class.equals(df.getRepresentationClass()))) { natives.add(mimeType); }
--- a/src/solaris/classes/sun/awt/X11/XToolkit.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/solaris/classes/sun/awt/X11/XToolkit.java Wed Mar 12 17:31:51 2014 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ import javax.swing.LookAndFeel; import javax.swing.UIDefaults; import sun.awt.*; +import sun.awt.datatransfer.DataTransferer; import sun.font.FontConfigManager; import sun.java2d.SunGraphicsEnvironment; import sun.misc.PerformanceLogger; @@ -300,8 +301,6 @@ return awtAppClassName; } - static final String DATA_TRANSFERER_CLASS_NAME = "sun.awt.X11.XDataTransferer"; - public XToolkit() { super(); if (PerformanceLogger.loggingEnabled()) { @@ -323,7 +322,6 @@ init(); XWM.init(); - SunToolkit.setDataTransfererClassName(DATA_TRANSFERER_CLASS_NAME); PrivilegedAction<Thread> action = new PrivilegedAction() { public Thread run() { @@ -1125,6 +1123,11 @@ return false; } + @Override + public DataTransferer getDataTransferer() { + return XDataTransferer.getInstanceImpl(); + } + /** * Returns the supported cursor size */
--- a/src/windows/classes/sun/awt/windows/WDataTransferer.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/windows/classes/sun/awt/windows/WDataTransferer.java Wed Mar 12 17:31:51 2014 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -159,13 +159,9 @@ private static WDataTransferer transferer; - public static WDataTransferer getInstanceImpl() { + static synchronized WDataTransferer getInstanceImpl() { if (transferer == null) { - synchronized (WDataTransferer.class) { - if (transferer == null) { - transferer = new WDataTransferer(); - } - } + transferer = new WDataTransferer(); } return transferer; }
--- a/src/windows/classes/sun/awt/windows/WToolkit.java Wed Mar 12 17:24:56 2014 +0400 +++ b/src/windows/classes/sun/awt/windows/WToolkit.java Wed Mar 12 17:31:51 2014 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,6 +41,7 @@ import sun.awt.SunToolkit; import sun.awt.Win32GraphicsDevice; import sun.awt.Win32GraphicsEnvironment; +import sun.awt.datatransfer.DataTransferer; import sun.java2d.d3d.D3DRenderQueue; import sun.java2d.opengl.OGLRenderQueue; @@ -210,8 +211,6 @@ */ public native void embeddedEventLoopIdleProcessing(); - public static final String DATA_TRANSFERER_CLASS_NAME = "sun.awt.windows.WDataTransferer"; - static class ToolkitDisposer implements sun.java2d.DisposerRecord { public void dispose() { WToolkit.postDispose(); @@ -255,8 +254,6 @@ // swallow the exception } - SunToolkit.setDataTransfererClassName(DATA_TRANSFERER_CLASS_NAME); - // Enabled "live resizing" by default. It remains controlled // by the native system though. setDynamicLayout(true); @@ -514,6 +511,11 @@ return true; } + @Override + public DataTransferer getDataTransferer() { + return WDataTransferer.getInstanceImpl(); + } + public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() throws HeadlessException {