Respect RWT locale in getMessage methods The original implementation of Compatibility#getMessage is loading the "org.eclipse.swt.internal.SWTMessages" message bundle with default Java locale. Respect RWT locle instead. Change-Id: Ib559f8544bfc548f2adb21b6ffa9f5b00ab01cf9
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/Compatibility.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/Compatibility.java index 2e3b272..1627b81 100755 --- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/Compatibility.java +++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/Compatibility.java
@@ -1,24 +1,32 @@ /******************************************************************************* - * Copyright (c) 2000, 2015 IBM Corporation and others. + * Copyright (c) 2000, 2019 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM Corporation - initial API and implementation + * IBM Corporation - initial API and implementation + * EclipseSource - ongoing development *******************************************************************************/ package org.eclipse.swt.internal; - -import java.io.*; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.text.MessageFormat; import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.zip.Deflater; -import java.util.zip.InflaterInputStream; import java.util.zip.DeflaterOutputStream; +import java.util.zip.InflaterInputStream; +import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; /** @@ -31,341 +39,341 @@ * </p> * <p> * IMPORTANT: some of the methods have been modified from their - * J2SE parents. Refer to the description of each method for + * J2SE parents. Refer to the description of each method for * specific changes. * </p> * <ul> - * <li>Exceptions thrown may differ since J2ME's set of + * <li>Exceptions thrown may differ since J2ME's set of * exceptions is a subset of J2SE's one. * </li> * <li>The range of the mathematic functions is subject to * change. - * </li> + * </li> * </ul> - * + * * @since 1.1 */ public final class Compatibility { -/** - * Returns the PI constant as a double. - */ -public static double PI = Math.PI; + /** + * Returns the PI constant as a double. + */ + public static double PI = Math.PI; -static double toRadians = PI / 180; + static double toRadians = PI / 180; -/** - * Answers the length of the side adjacent to the given angle - * of a right triangle. In other words, it returns the integer - * conversion of length * cos (angle). - * <p> - * IMPORTANT: the j2me version has an additional restriction on - * the argument. length must be between -32767 and 32767 (inclusive). - * </p> - * - * @param angle the angle in degrees - * @param length the length of the triangle's hypotenuse - * @return the integer conversion of length * cos (angle) - */ -public static int cos(int angle, int length) { - return (int)(Math.cos(angle * toRadians) * length); -} + /** + * Answers the length of the side adjacent to the given angle + * of a right triangle. In other words, it returns the integer + * conversion of length * cos (angle). + * <p> + * IMPORTANT: the j2me version has an additional restriction on + * the argument. length must be between -32767 and 32767 (inclusive). + * </p> + * + * @param angle the angle in degrees + * @param length the length of the triangle's hypotenuse + * @return the integer conversion of length * cos (angle) + */ + public static int cos(int angle, int length) { + return (int)(Math.cos(angle * toRadians) * length); + } -/** - * Answers the length of the side opposite to the given angle - * of a right triangle. In other words, it returns the integer - * conversion of length * sin (angle). - * <p> - * IMPORTANT: the j2me version has an additional restriction on - * the argument. length must be between -32767 and 32767 (inclusive). - * </p> - * - * @param angle the angle in degrees - * @param length the length of the triangle's hypotenuse - * @return the integer conversion of length * sin (angle) - */ -public static int sin(int angle, int length) { - return (int)(Math.sin(angle * toRadians) * length); -} + /** + * Answers the length of the side opposite to the given angle + * of a right triangle. In other words, it returns the integer + * conversion of length * sin (angle). + * <p> + * IMPORTANT: the j2me version has an additional restriction on + * the argument. length must be between -32767 and 32767 (inclusive). + * </p> + * + * @param angle the angle in degrees + * @param length the length of the triangle's hypotenuse + * @return the integer conversion of length * sin (angle) + */ + public static int sin(int angle, int length) { + return (int)(Math.sin(angle * toRadians) * length); + } -/** - * Answers the most negative (i.e. closest to negative infinity) - * integer value which is greater than the number obtained by dividing - * the first argument p by the second argument q. - * - * @param p numerator - * @param q denominator (must be different from zero) - * @return the ceiling of the rational number p / q. - */ -public static int ceil(int p, int q) { - return (int)Math.ceil((float)p / q); -} + /** + * Answers the most negative (i.e. closest to negative infinity) + * integer value which is greater than the number obtained by dividing + * the first argument p by the second argument q. + * + * @param p numerator + * @param q denominator (must be different from zero) + * @return the ceiling of the rational number p / q. + */ + public static int ceil(int p, int q) { + return (int)Math.ceil((float)p / q); + } -/** - * Answers whether the indicated file exists or not. - * - * @param parent the file's parent directory - * @param child the file's name - * @return true if the file exists - */ -public static boolean fileExists(String parent, String child) { - return new File (parent, child).exists(); -} + /** + * Answers whether the indicated file exists or not. + * + * @param parent the file's parent directory + * @param child the file's name + * @return true if the file exists + */ + public static boolean fileExists(String parent, String child) { + return new File (parent, child).exists(); + } -/** - * Answers the most positive (i.e. closest to positive infinity) - * integer value which is less than the number obtained by dividing - * the first argument p by the second argument q. - * - * @param p numerator - * @param q denominator (must be different from zero) - * @return the floor of the rational number p / q. - */ -public static int floor(int p, int q) { - return (int)Math.floor((double)p / q); -} + /** + * Answers the most positive (i.e. closest to positive infinity) + * integer value which is less than the number obtained by dividing + * the first argument p by the second argument q. + * + * @param p numerator + * @param q denominator (must be different from zero) + * @return the floor of the rational number p / q. + */ + public static int floor(int p, int q) { + return (int)Math.floor((double)p / q); + } -/** - * Answers the result of rounding to the closest integer the number obtained - * by dividing the first argument p by the second argument q. - * <p> - * IMPORTANT: the j2me version has an additional restriction on - * the arguments. p must be within the range 0 - 32767 (inclusive). - * q must be within the range 1 - 32767 (inclusive). - * </p> - * - * @param p numerator - * @param q denominator (must be different from zero) - * @return the closest integer to the rational number p / q - */ -public static int round(int p, int q) { - return Math.round((float)p / q); -} + /** + * Answers the result of rounding to the closest integer the number obtained + * by dividing the first argument p by the second argument q. + * <p> + * IMPORTANT: the j2me version has an additional restriction on + * the arguments. p must be within the range 0 - 32767 (inclusive). + * q must be within the range 1 - 32767 (inclusive). + * </p> + * + * @param p numerator + * @param q denominator (must be different from zero) + * @return the closest integer to the rational number p / q + */ + public static int round(int p, int q) { + return Math.round((float)p / q); + } -/** - * Returns 2 raised to the power of the argument. - * - * @param n an int value between 0 and 30 (inclusive) - * @return 2 raised to the power of the argument - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_INVALID_RANGE - if the argument is not between 0 and 30 (inclusive)</li> - * </ul> - */ -public static int pow2(int n) { - if (n >= 1 && n <= 30) - return 2 << (n - 1); - else if (n != 0) { - SWT.error(SWT.ERROR_INVALID_RANGE); - } - return 1; -} + /** + * Returns 2 raised to the power of the argument. + * + * @param n an int value between 0 and 30 (inclusive) + * @return 2 raised to the power of the argument + * + * @exception IllegalArgumentException <ul> + * <li>ERROR_INVALID_RANGE - if the argument is not between 0 and 30 (inclusive)</li> + * </ul> + */ + public static int pow2(int n) { + if (n >= 1 && n <= 30) { + return 2 << (n - 1); + } else if (n != 0) { + SWT.error(SWT.ERROR_INVALID_RANGE); + } + return 1; + } -/** - * Create a DeflaterOutputStream if such things are supported. - * - * @param stream the output stream - * @return a deflater stream or <code>null</code> - * @exception IOException - * - * @since 1.4 - */ -public static OutputStream newDeflaterOutputStream(OutputStream stream, int level) throws IOException { - return new DeflaterOutputStream(stream, new Deflater(level)); -} + /** + * Create a DeflaterOutputStream if such things are supported. + * + * @param stream the output stream + * @return a deflater stream or <code>null</code> + * @exception IOException + * + * @since 1.4 + */ + public static OutputStream newDeflaterOutputStream(OutputStream stream, int level) throws IOException { + return new DeflaterOutputStream(stream, new Deflater(level)); + } -/** - * Open a file if such things are supported. - * - * @param filename the name of the file to open - * @return a stream on the file if it could be opened. - * @exception IOException - */ -public static InputStream newFileInputStream(String filename) throws IOException { - return new FileInputStream(filename); -} + /** + * Open a file if such things are supported. + * + * @param filename the name of the file to open + * @return a stream on the file if it could be opened. + * @exception IOException + */ + public static InputStream newFileInputStream(String filename) throws IOException { + return new FileInputStream(filename); + } -/** - * Open a file if such things are supported. - * - * @param filename the name of the file to open - * @return a stream on the file if it could be opened. - * @exception IOException - */ -public static OutputStream newFileOutputStream(String filename) throws IOException { - return new FileOutputStream(filename); -} + /** + * Open a file if such things are supported. + * + * @param filename the name of the file to open + * @return a stream on the file if it could be opened. + * @exception IOException + */ + public static OutputStream newFileOutputStream(String filename) throws IOException { + return new FileOutputStream(filename); + } -/** - * Create an InflaterInputStream if such things are supported. - * - * @param stream the input stream - * @return a inflater stream or <code>null</code> - * @exception IOException - * - * @since 1.1 - */ -public static InputStream newInflaterInputStream(InputStream stream) throws IOException { - return new BufferedInputStream(new InflaterInputStream(stream)); -} + /** + * Create an InflaterInputStream if such things are supported. + * + * @param stream the input stream + * @return a inflater stream or <code>null</code> + * @exception IOException + * + * @since 1.1 + */ + public static InputStream newInflaterInputStream(InputStream stream) throws IOException { + return new BufferedInputStream(new InflaterInputStream(stream)); + } -/** - * Answers whether the character is a letter. - * - * @param c the character - * @return true when the character is a letter - */ -public static boolean isLetter(char c) { - return Character.isLetter(c); -} + /** + * Answers whether the character is a letter. + * + * @param c the character + * @return true when the character is a letter + */ + public static boolean isLetter(char c) { + return Character.isLetter(c); + } -/** - * Answers whether the character is a letter or a digit. - * - * @param c the character - * @return true when the character is a letter or a digit - */ -public static boolean isLetterOrDigit(char c) { - return Character.isLetterOrDigit(c); -} + /** + * Answers whether the character is a letter or a digit. + * + * @param c the character + * @return true when the character is a letter or a digit + */ + public static boolean isLetterOrDigit(char c) { + return Character.isLetterOrDigit(c); + } -/** - * Answers whether the character is a Unicode space character. - * - * @param c the character - * @return true when the character is a Unicode space character - */ -public static boolean isSpaceChar(char c) { - return Character.isSpaceChar(c); -} + /** + * Answers whether the character is a Unicode space character. + * + * @param c the character + * @return true when the character is a Unicode space character + */ + public static boolean isSpaceChar(char c) { + return Character.isSpaceChar(c); + } -/** - * Answers whether the character is a whitespace character. - * - * @param c the character to test - * @return true if the character is whitespace - */ -public static boolean isWhitespace(char c) { - return Character.isWhitespace(c); -} + /** + * Answers whether the character is a whitespace character. + * + * @param c the character to test + * @return true if the character is whitespace + */ + public static boolean isWhitespace(char c) { + return Character.isWhitespace(c); + } -/** - * Execute progArray[0] in a separate platform process if the - * underlying platform support this. - * <p> - * The new process inherits the environment of the caller. - * <p> - * - * @param progArray array containing the program to execute and its arguments - * - * @exception IOException - * if the program cannot be executed - * @exception SecurityException - * if the current SecurityManager disallows program execution - */ -public static void exec(String[] progArray) throws java.io.IOException{ - Runtime.getRuntime().exec(progArray); -} + /** + * Execute progArray[0] in a separate platform process if the + * underlying platform support this. + * <p> + * The new process inherits the environment of the caller. + * <p> + * + * @param progArray array containing the program to execute and its arguments + * + * @exception IOException + * if the program cannot be executed + * @exception SecurityException + * if the current SecurityManager disallows program execution + */ + public static void exec(String[] progArray) throws java.io.IOException{ + Runtime.getRuntime().exec(progArray); + } -/** - * Execute prog[0] in a separate platform process if the - * underlying platform supports this. - * <p> - * The new process inherits the environment of the caller. - * <p> - * - * @param prog array containing the program to execute and its arguments - * @param envp - * array of strings, each element of which has environment - * variable settings in the format name=value - * @param workingDir - * the working directory of the new process, or null if the new - * process should inherit the working directory of the caller - * - * @exception IOException - * if the program cannot be executed - * @exception SecurityException - * if the current SecurityManager disallows program execution - */ -public static void exec(String[] prog, String[] envp, String workingDir) throws java.io.IOException{ - Runtime.getRuntime().exec(prog, null, workingDir != null ? new File(workingDir) : null); -} + /** + * Execute prog[0] in a separate platform process if the + * underlying platform supports this. + * <p> + * The new process inherits the environment of the caller. + * <p> + * + * @param prog array containing the program to execute and its arguments + * @param envp + * array of strings, each element of which has environment + * variable settings in the format name=value + * @param workingDir + * the working directory of the new process, or null if the new + * process should inherit the working directory of the caller + * + * @exception IOException + * if the program cannot be executed + * @exception SecurityException + * if the current SecurityManager disallows program execution + */ + public static void exec(String[] prog, String[] envp, String workingDir) throws java.io.IOException{ + Runtime.getRuntime().exec(prog, null, workingDir != null ? new File(workingDir) : null); + } -private static ResourceBundle msgs = null; + private static ResourceBundle msgs = null; -/** - * Returns the NLS'ed message for the given argument. This is only being - * called from SWT. - * - * @param key the key to look up - * @return the message for the given key - * - * @see SWT#getMessage(String) - */ -public static String getMessage(String key) { - String answer = key; - - if (key == null) { - SWT.error (SWT.ERROR_NULL_ARGUMENT); - } - if (msgs == null) { - try { - msgs = ResourceBundle.getBundle("org.eclipse.swt.internal.SWTMessages"); //$NON-NLS-1$ - } catch (MissingResourceException ex) { - answer = key + " (no resource bundle)"; //$NON-NLS-1$ - } - } - if (msgs != null) { - try { - answer = msgs.getString(key); - } catch (MissingResourceException ex2) {} - } - return answer; -} + /** + * Returns the NLS'ed message for the given argument. This is only being + * called from SWT. + * + * @param key the key to look up + * @return the message for the given key + * + * @see SWT#getMessage(String) + */ + public static String getMessage(String key) { + String answer = key; -public static String getMessage(String key, Object[] args) { - String answer = key; - - if (key == null || args == null) { - SWT.error (SWT.ERROR_NULL_ARGUMENT); - } - if (msgs == null) { - try { - msgs = ResourceBundle.getBundle("org.eclipse.swt.internal.SWTMessages"); //$NON-NLS-1$ - } catch (MissingResourceException ex) { - answer = key + " (no resource bundle)"; //$NON-NLS-1$ - } - } - if (msgs != null) { - try { - MessageFormat formatter = new MessageFormat(""); - formatter.applyPattern(msgs.getString(key)); - answer = formatter.format(args); - } catch (MissingResourceException ex2) {} - } - return answer; -} + if (key == null) { + SWT.error (SWT.ERROR_NULL_ARGUMENT); + } + if (msgs == null) { + try { + msgs = ResourceBundle.getBundle("org.eclipse.swt.internal.SWTMessages", RWT.getLocale()); //$NON-NLS-1$ + } catch (MissingResourceException ex) { + answer = key + " (no resource bundle)"; //$NON-NLS-1$ + } + } + if (msgs != null) { + try { + answer = msgs.getString(key); + } catch (MissingResourceException ex2) {} + } + return answer; + } -/** - * Interrupt the current thread. - * <p> - * Note that this is not available on CLDC. - * </p> - */ -public static void interrupt() { - Thread.currentThread().interrupt(); -} + public static String getMessage(String key, Object[] args) { + String answer = key; -/** - * Compares two instances of class String ignoring the case of the - * characters and answers if they are equal. - * - * @param s1 string - * @param s2 string - * @return true if the two instances of class String are equal - */ -public static boolean equalsIgnoreCase(String s1, String s2) { - return s1.equalsIgnoreCase(s2); -} + if (key == null || args == null) { + SWT.error (SWT.ERROR_NULL_ARGUMENT); + } + if (msgs == null) { + try { + msgs = ResourceBundle.getBundle("org.eclipse.swt.internal.SWTMessages", RWT.getLocale()); //$NON-NLS-1$ + } catch (MissingResourceException ex) { + answer = key + " (no resource bundle)"; //$NON-NLS-1$ + } + } + if (msgs != null) { + try { + MessageFormat formatter = new MessageFormat(""); + formatter.applyPattern(msgs.getString(key)); + answer = formatter.format(args); + } catch (MissingResourceException ex2) {} + } + return answer; + } + + /** + * Interrupt the current thread. + * <p> + * Note that this is not available on CLDC. + * </p> + */ + public static void interrupt() { + Thread.currentThread().interrupt(); + } + + /** + * Compares two instances of class String ignoring the case of the + * characters and answers if they are equal. + * + * @param s1 string + * @param s2 string + * @return true if the two instances of class String are equal + */ + public static boolean equalsIgnoreCase(String s1, String s2) { + return s1.equalsIgnoreCase(s2); + } }