Mercurial > hg > release > icedtea7-2.5
view patches/boot/ecj-stringswitch.patch @ 2750:121ad7411fd1
Bump to icedtea-2.5.3.
2014-10-14 Andrew John Hughes <gnu.andrew@member.fsf.org>
* patches/hotspot/aarch64/20140715-8030763-validate_global_memory_allocation.patch,
* patches/hotspot/aarch64/20140715-8032536-jvm_resolves_wrong_method.patch,
* patches/hotspot/aarch64/20140715-8035119-fix_exceptions_to_bytecode_verification.patch,
* patches/hotspot/aarch64/20140715-8036800-attribute_oom_to_right_code.patch,
* patches/hotspot/aarch64/20140715-8037076-check_constant_pool_constants.patch,
* patches/hotspot/aarch64/20140715-8037157-verify_init_call.patch,
* patches/hotspot/aarch64/20140715-8037167-better_method_signature_resolution.patch,
* patches/hotspot/aarch64/20140715-8043454-8037157_test_case_fix.patch:
Remove patches included in latest AArch64 drop.
* Makefile.am:
(CORBA_CHANGESET): Update to icedtea-2.5.3 tag.
(JAXP_CHANGESET): Likewise.
(JAXWS_CHANGESET): Likewise.
(JDK_CHANGESET): Likewise.
(LANGTOOLS_CHANGESET): Likewise.
(OPENJDK_CHANGESET): Likewise.
(CORBA_SHA256SUM): Likewise.
(JAXP_SHA256SUM): Likewise.
(JAXWS_SHA256SUM): Likewise.
(JDK_SHA256SUM): Likewise.
(LANGTOOLS_SHA256SUM): Likewise.
(OPENJDK_SHA256SUM): Likewise.
(ICEDTEA_PATCHES): Remove old AArch64 security patches and
add new ones from the 2014/10/14 update.
* NEWS: List changes from u71 and AArch64 port. Set release
date to today.
* configure.ac: Bump to 2.5.3.
* hotspot.map.in: Update to icedtea-2.5.3 tag for default.
Update AArch64 to jdk7u60_b04_aarch64_834 tag.
* patches/boot/ecj-multicatch.patch:
Remove defunct RSAClientKeyExchange patch. Add new cases
in CipherInputStream and CipherOutputStream.
* patches/boot/ecj-stringswitch.patch: Add new case in
AnnotationInvocationHandler.
* patches/hotspot/aarch64/20141014-8015256-better_class_accessibility.patch,
* patches/hotspot/aarch64/20141014-8036533-method_for_correct_defaults.patch,
* patches/hotspot/aarch64/20141014-8036805-correct_linker_method_lookup.patch,
* patches/hotspot/aarch64/20141014-8038898-safer_safepoints.patch,
* patches/hotspot/aarch64/20141014-8038903-more_native_monitor_monitoring.patch,
* patches/hotspot/aarch64/20141014-8041717-issue_with_class_file_parser.patch,
* patches/hotspot/aarch64/20141014-8042603-safepointpolloffset.patch,
* patches/hotspot/aarch64/20141014-8044269-analysis_of_archive_files.patch,
* patches/hotspot/aarch64/20141014-8046213-testemptybootstrapmethodsattr_failure.patch,
* patches/hotspot/aarch64/20141014-8050485-super_causes_verifyerror.patch:
OpenJDK 8 version of 2014/10/14 HotSpot security patches for AArch64.
author | Andrew John Hughes <gnu_andrew@member.fsf.org> |
---|---|
date | Tue, 14 Oct 2014 22:11:50 +0100 |
parents | 2ecadf456797 |
children |
line wrap: on
line source
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java --- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java 2013-12-26 19:50:56.000000000 +0000 +++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java 2013-12-26 22:14:29.670206162 +0000 @@ -350,19 +350,16 @@ if (attrCommands != null) { Object lkey = Attribute.keyForLookup(ctype, name); String cmd = (String) attrCommands.get(lkey); - if (cmd != null) { - switch (cmd) { - case "pass": - String message1 = "passing attribute bitwise in " + h; - throw new Attribute.FormatException(message1, ctype, name, cmd); - case "error": - String message2 = "attribute not allowed in " + h; - throw new Attribute.FormatException(message2, ctype, name, cmd); - case "strip": - skip(length, name + " attribute in " + h); - continue; - } - } + if ("pass".equals(cmd)) { + String message1 = "passing attribute bitwise in " + h; + throw new Attribute.FormatException(message1, ctype, name, cmd); + } else if ("error".equals(cmd)) { + String message2 = "attribute not allowed in " + h; + throw new Attribute.FormatException(message2, ctype, name, cmd); + } else if ("strip".equals(cmd)) { + skip(length, name + " attribute in " + h); + continue; + } } // Find canonical instance of the requested attribute. Attribute a = Attribute.lookup(Package.attrDefs, ctype, name); diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java --- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java 2013-12-26 19:50:56.000000000 +0000 +++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java 2013-12-26 22:14:29.670206162 +0000 @@ -73,16 +73,14 @@ { // Non-standard, undocumented "--unpack" switch enables unpack mode. String arg0 = av.isEmpty() ? "" : av.get(0); - switch (arg0) { - case "--pack": + if ("--pack".equals(arg0)) av.remove(0); - break; - case "--unpack": - av.remove(0); - doPack = false; - doUnpack = true; - break; - } + else if ("--unpack".equals(arg0)) + { + av.remove(0); + doPack = false; + doUnpack = true; + } } // Collect engine properties here: @@ -182,21 +180,16 @@ // Deal with remaining non-engine properties: for (String opt : avProps.keySet()) { String val = avProps.get(opt); - switch (opt) { - case "--repack": - doRepack = true; - break; - case "--no-gzip": - doZip = (val == null); - break; - case "--log-file=": - logFile = val; - break; - default: - throw new InternalError(MessageFormat.format( - RESOURCE.getString(DriverResource.BAD_OPTION), - opt, avProps.get(opt))); - } + if ("--repack".equals(opt)) + doRepack = true; + else if ("--no-gzip".equals(opt)) + doZip = (val == null); + else if ("--log-file=".equals(opt)) + logFile = val; + else + throw new InternalError(MessageFormat.format( + RESOURCE.getString(DriverResource.BAD_OPTION), + opt, avProps.get(opt))); } if (logFile != null && !logFile.equals("")) { diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java --- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java 2013-12-26 19:50:56.000000000 +0000 +++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java 2013-12-26 22:14:29.670206162 +0000 @@ -1116,30 +1116,25 @@ // what is one of { Debug, Compile, Constant, Exceptions, InnerClasses } if (verbose > 0) Utils.log.info("Stripping "+what.toLowerCase()+" data and attributes..."); - switch (what) { - case "Debug": - strip("SourceFile"); - strip("LineNumberTable"); - strip("LocalVariableTable"); - strip("LocalVariableTypeTable"); - break; - case "Compile": - // Keep the inner classes normally. - // Although they have no effect on execution, - // the Reflection API exposes them, and JCK checks them. - // NO: // strip("InnerClasses"); - strip("Deprecated"); - strip("Synthetic"); - break; - case "Exceptions": - // Keep the exceptions normally. - // Although they have no effect on execution, - // the Reflection API exposes them, and JCK checks them. - strip("Exceptions"); - break; - case "Constant": - stripConstantFields(); - break; + if ("Debug".equals(what)) { + strip("SourceFile"); + strip("LineNumberTable"); + strip("LocalVariableTable"); + strip("LocalVariableTypeTable"); + } else if ("Compile".equals(what)) { + // Keep the inner classes normally. + // Although they have no effect on execution, + // the Reflection API exposes them, and JCK checks them. + // NO: // strip("InnerClasses"); + strip("Deprecated"); + strip("Synthetic"); + } else if ("Exceptions".equals(what)) { + // Keep the exceptions normally. + // Although they have no effect on execution, + // the Reflection API exposes them, and JCK checks them. + strip("Exceptions"); + } else if ("Constant".equals(what)) { + stripConstantFields(); } } diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java openjdk-boot/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java --- openjdk-boot.orig/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java 2013-12-26 19:50:56.000000000 +0000 +++ openjdk-boot/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java 2013-12-26 22:14:29.670206162 +0000 @@ -64,17 +64,23 @@ protected NTLM(String version) throws NTLMException { if (version == null) version = "LMv2/NTLMv2"; - switch (version) { - case "LM": v = NTLM; writeLM = true; writeNTLM = false; break; - case "NTLM": v = NTLM; writeLM = false; writeNTLM = true; break; - case "LM/NTLM": v = NTLM; writeLM = writeNTLM = true; break; - case "NTLM2": v = NTLM2; writeLM = writeNTLM = true; break; - case "LMv2": v = NTLMv2; writeLM = true; writeNTLM = false; break; - case "NTLMv2": v = NTLMv2; writeLM = false; writeNTLM = true; break; - case "LMv2/NTLMv2": v = NTLMv2; writeLM = writeNTLM = true; break; - default: throw new NTLMException(NTLMException.BAD_VERSION, - "Unknown version " + version); - } + if (version.equals("LM")) + { v = NTLM; writeLM = true; writeNTLM = false; } + else if (version.equals("NTLM")) + { v = NTLM; writeLM = false; writeNTLM = true; } + else if (version.equals("LM/NTLM")) + { v = NTLM; writeLM = writeNTLM = true; } + else if (version.equals("NTLM2")) + { v = NTLM2; writeLM = writeNTLM = true; } + else if (version.equals("LMv2")) + { v = NTLMv2; writeLM = true; writeNTLM = false; } + else if (version.equals("NTLMv2")) + { v = NTLMv2; writeLM = false; writeNTLM = true; } + else if (version.equals("LMv2/NTLMv2")) + { v = NTLMv2; writeLM = writeNTLM = true; } + else + throw new NTLMException(NTLMException.BAD_VERSION, + "Unknown version " + version); try { fac = SecretKeyFactory.getInstance ("DES"); cipher = Cipher.getInstance ("DES/ECB/NoPadding"); diff -Nru openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java --- openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java 2013-12-26 19:50:56.000000000 +0000 +++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java 2013-12-26 22:19:11.986517834 +0000 @@ -328,12 +328,11 @@ Object[] appendixResult) { try { if (defc == MethodHandle.class && refKind == REF_invokeVirtual) { - switch (name) { - case "invoke": - return Invokers.genericInvokerMethod(fixMethodType(callerClass, type), appendixResult); - case "invokeExact": - return Invokers.exactInvokerMethod(fixMethodType(callerClass, type), appendixResult); - } + if ("invoke".equals(name)) { + return Invokers.genericInvokerMethod(fixMethodType(callerClass, type), appendixResult); + } else if ("invokeExact".equals(name)) { + return Invokers.exactInvokerMethod(fixMethodType(callerClass, type), appendixResult); + } } } catch (Throwable ex) { if (ex instanceof LinkageError) @@ -403,124 +402,120 @@ // this method is also called by test/sun/reflect/CallerSensitiveFinder // to validate the hand-maintained list private static boolean isCallerSensitiveMethod(Class<?> defc, String method) { - switch (method) { - case "doPrivileged": - case "doPrivilegedWithCombiner": + if ("doPrivileged".equals(method) || + "doPrivilegedWithCombiner".equals(method)) { return defc == java.security.AccessController.class; - case "checkMemberAccess": - return defc == java.lang.SecurityManager.class; - case "getUnsafe": - return defc == sun.misc.Unsafe.class; - case "lookup": - return defc == java.lang.invoke.MethodHandles.class; - case "invoke": - return defc == java.lang.reflect.Method.class; - case "get": - case "getBoolean": - case "getByte": - case "getChar": - case "getShort": - case "getInt": - case "getLong": - case "getFloat": - case "getDouble": - case "set": - case "setBoolean": - case "setByte": - case "setChar": - case "setShort": - case "setInt": - case "setLong": - case "setFloat": - case "setDouble": - return defc == java.lang.reflect.Field.class; - case "newInstance": - if (defc == java.lang.reflect.Constructor.class) return true; - if (defc == java.lang.Class.class) return true; - break; - case "getFields": - return defc == java.lang.Class.class || - defc == javax.sql.rowset.serial.SerialJavaObject.class; - case "forName": - case "getClassLoader": - case "getClasses": - case "getMethods": - case "getConstructors": - case "getDeclaredClasses": - case "getDeclaredFields": - case "getDeclaredMethods": - case "getDeclaredConstructors": - case "getField": - case "getMethod": - case "getConstructor": - case "getDeclaredField": - case "getDeclaredMethod": - case "getDeclaredConstructor": - case "getDeclaringClass": - case "getEnclosingClass": - case "getEnclosingMethod": - case "getEnclosingConstructor": - return defc == java.lang.Class.class; - case "getConnection": - case "getDriver": - case "getDrivers": - case "deregisterDriver": - return defc == java.sql.DriverManager.class; - case "newUpdater": - if (defc == java.util.concurrent.atomic.AtomicIntegerFieldUpdater.class) return true; - if (defc == java.util.concurrent.atomic.AtomicLongFieldUpdater.class) return true; - if (defc == java.util.concurrent.atomic.AtomicReferenceFieldUpdater.class) return true; - break; - case "getContextClassLoader": - return defc == java.lang.Thread.class; - case "getPackage": - case "getPackages": - return defc == java.lang.Package.class; - case "getParent": - case "getSystemClassLoader": - return defc == java.lang.ClassLoader.class; - case "load": - case "loadLibrary": - if (defc == java.lang.Runtime.class) return true; - if (defc == java.lang.System.class) return true; - break; - case "getCallerClass": - if (defc == sun.reflect.Reflection.class) return true; - if (defc == java.lang.System.class) return true; - break; - case "getCallerClassLoader": - return defc == java.lang.ClassLoader.class; - case "registerAsParallelCapable": - return defc == java.lang.ClassLoader.class; - case "getInvocationHandler": - case "getProxyClass": - case "newProxyInstance": - return defc == java.lang.reflect.Proxy.class; - case "asInterfaceInstance": - return defc == java.lang.invoke.MethodHandleProxies.class; - case "getBundle": - case "clearCache": - return defc == java.util.ResourceBundle.class; - case "getType": - return defc == java.io.ObjectStreamField.class; - case "forClass": - return defc == java.io.ObjectStreamClass.class; - case "getLogger": - return defc == java.util.logging.Logger.class; - case "getAnonymousLogger": - return defc == java.util.logging.Logger.class; - } - return false; + } else if ("checkMemberAccess".equals(method)) { + return defc == java.lang.SecurityManager.class; + } else if ("getUnsafe".equals(method)) { + return defc == sun.misc.Unsafe.class; + } else if ("lookup".equals(method)) { + return defc == java.lang.invoke.MethodHandles.class; + } else if ("invoke".equals(method)) { + return defc == java.lang.reflect.Method.class; + } else if ("get".equals(method) || + "getBoolean".equals(method) || + "getByte".equals(method) || + "getChar".equals(method) || + "getShort".equals(method) || + "getInt".equals(method) || + "getLong".equals(method) || + "getFloat".equals(method) || + "getDouble".equals(method) || + "set".equals(method) || + "setBoolean".equals(method) || + "setByte".equals(method) || + "setChar".equals(method) || + "setShort".equals(method) || + "setInt".equals(method) || + "setLong".equals(method) || + "setFloat".equals(method) || + "setDouble".equals(method)) { + return defc == java.lang.reflect.Field.class; + } else if ("newInstance".equals(method)) { + if (defc == java.lang.reflect.Constructor.class) return true; + if (defc == java.lang.Class.class) return true; + } else if ("getFields".equals(method)) { + return defc == java.lang.Class.class || + defc == javax.sql.rowset.serial.SerialJavaObject.class; + } else if ("forName".equals(method) || + "getClassLoader".equals(method) || + "getClasses".equals(method) || + "getFields".equals(method) || + "getMethods".equals(method) || + "getConstructors".equals(method) || + "getDeclaredClasses".equals(method) || + "getDeclaredFields".equals(method) || + "getDeclaredMethods".equals(method) || + "getDeclaredConstructors".equals(method) || + "getField".equals(method) || + "getMethod".equals(method) || + "getConstructor".equals(method) || + "getDeclaredField".equals(method) || + "getDeclaredMethod".equals(method) || + "getDeclaredConstructor".equals(method) || + "getDeclaringClass".equals(method) || + "getEnclosingClass".equals(method) || + "getEnclosingMethod".equals(method) || + "getEnclosingConstructor".equals(method)) { + return defc == java.lang.Class.class; + } else if ("getConnection".equals(method) || + "getDriver".equals(method) || + "getDrivers".equals(method) || + "deregisterDriver".equals(method)) { + return defc == java.sql.DriverManager.class; + } else if ("newUpdater".equals(method)) { + if (defc == java.util.concurrent.atomic.AtomicIntegerFieldUpdater.class) return true; + if (defc == java.util.concurrent.atomic.AtomicLongFieldUpdater.class) return true; + if (defc == java.util.concurrent.atomic.AtomicReferenceFieldUpdater.class) return true; + } else if ("getContextClassLoader".equals(method)) { + return defc == java.lang.Thread.class; + } else if ("getPackage".equals(method) || + "getPackages".equals(method)) { + return defc == java.lang.Package.class; + } else if ("getParent".equals(method) || + "getSystemClassLoader".equals(method)) { + return defc == java.lang.ClassLoader.class; + } else if ("load".equals(method) || + "loadLibrary".equals(method)) { + if (defc == java.lang.Runtime.class) return true; + if (defc == java.lang.System.class) return true; + } else if ("getCallerClass".equals(method)) { + if (defc == sun.reflect.Reflection.class) return true; + if (defc == java.lang.System.class) return true; + } else if ("getCallerClassLoader".equals(method)) { + return defc == java.lang.ClassLoader.class; + } else if ("registerAsParallelCapable".equals(method)) { + return defc == java.lang.ClassLoader.class; + } else if ("getProxyClass".equals(method) || + "getInvocationHandler".equals(method) || + "newProxyInstance".equals(method)) { + return defc == java.lang.reflect.Proxy.class; + } else if ("asInterfaceInstance".equals(method)) { + return defc == java.lang.invoke.MethodHandleProxies.class; + } else if ("getBundle".equals(method) || + "clearCache".equals(method)) { + return defc == java.util.ResourceBundle.class; + } else if ("getType".equals(method)) { + return defc == java.io.ObjectStreamField.class; + } else if ("forClass".equals(method)) { + return defc == java.io.ObjectStreamClass.class; + } else if ("getLogger".equals(method)) { + return defc == java.util.logging.Logger.class; + } else if ("getAnonymousLogger".equals(method)) { + return defc == java.util.logging.Logger.class; + } + return false; } private static boolean canBeCalledVirtual(MemberName mem) { assert(mem.isInvocable()); Class<?> defc = mem.getDeclaringClass(); - switch (mem.getName()) { - case "checkMemberAccess": + String memName = mem.getName(); + if ("checkMemberAccess".equals(memName)) { return canBeCalledVirtual(mem, java.lang.SecurityManager.class); - case "getContextClassLoader": + } else if ("getContextClassLoader".equals(memName)) { return canBeCalledVirtual(mem, java.lang.Thread.class); } return false; diff -Nru openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java --- openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java 2013-12-26 19:50:56.000000000 +0000 +++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java 2013-12-26 22:14:29.670206162 +0000 @@ -269,14 +269,16 @@ private static boolean isObjectMethod(Method m) { - switch (m.getName()) { - case "toString": + String name = m.getName(); + if ("toString".equals(name)) { return (m.getReturnType() == String.class && m.getParameterTypes().length == 0); - case "hashCode": + } + if ("hashCode".equals(name)) { return (m.getReturnType() == int.class && m.getParameterTypes().length == 0); - case "equals": + } + if ("equals".equals(name)) { return (m.getReturnType() == boolean.class && m.getParameterTypes().length == 1 && m.getParameterTypes()[0] == Object.class); @@ -287,12 +289,14 @@ private static Object callObjectMethod(Object self, Method m, Object[] args) { assert(isObjectMethod(m)) : m; - switch (m.getName()) { - case "toString": + String name = m.getName(); + if ("toString".equals(name)) { return self.getClass().getName() + "@" + Integer.toHexString(self.hashCode()); - case "hashCode": + } + if ("hashCode".equals(name)) { return System.identityHashCode(self); - case "equals": + } + if ("equals".equals(name)) { return (self == args[0]); } return null; diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/launcher/LauncherHelper.java openjdk-boot/jdk/src/share/classes/sun/launcher/LauncherHelper.java --- openjdk-boot.orig/jdk/src/share/classes/sun/launcher/LauncherHelper.java 2013-12-26 19:50:56.000000000 +0000 +++ openjdk-boot/jdk/src/share/classes/sun/launcher/LauncherHelper.java 2013-12-26 22:14:29.670206162 +0000 @@ -119,24 +119,20 @@ String optStr = (opts.length > 1 && opts[1] != null) ? opts[1].trim() : "all"; - switch (optStr) { - case "vm": + if ("vm".equals(optStr)) + printVmSettings(ostream, initialHeapSize, maxHeapSize, + stackSize, isServer); + else if ("properties".equals(optStr)) + printProperties(ostream); + else if ("locale".equals(optStr)) + printLocale(ostream); + else + { printVmSettings(ostream, initialHeapSize, maxHeapSize, - stackSize, isServer); - break; - case "properties": + stackSize, isServer); printProperties(ostream); - break; - case "locale": printLocale(ostream); - break; - default: - printVmSettings(ostream, initialHeapSize, maxHeapSize, - stackSize, isServer); - printProperties(ostream); - printLocale(ostream); - break; - } + } } /* diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java openjdk-boot/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java --- openjdk-boot.orig/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java 2013-12-26 19:50:56.000000000 +0000 +++ openjdk-boot/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java 2013-12-26 22:14:29.670206162 +0000 @@ -378,19 +378,23 @@ GE; // ">=" static Operator of(String s) { - switch (s) { - case "==": - return EQ; - case "!=": - return NE; - case "<": - return LT; - case "<=": - return LE; - case ">": - return GT; - case ">=": - return GE; + if ("==".equals(s)) { + return EQ; + } + if ("!=".equals(s)) { + return NE; + } + if ("<".equals(s)) { + return LT; + } + if ("<=".equals(s)) { + return LE; + } + if (">".equals(s)) { + return GT; + } + if (">=".equals(s)) { + return GE; } throw new IllegalArgumentException( diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java openjdk-boot/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java --- openjdk-boot.orig/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java 2014-10-14 19:33:10.606587037 +0100 +++ openjdk-boot/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java 2014-10-14 19:34:06.831372783 +0100 @@ -64,14 +64,12 @@ if (paramTypes.length != 0) throw new AssertionError("Too many parameters for an annotation method"); - switch(member) { - case "toString": + if ("toString".equals(member)) return toStringImpl(); - case "hashCode": + if ("hashCode".equals(member)) return hashCodeImpl(); - case "annotationType": + if ("annotationType".equals(member)) return type; - } // Handle annotation member accessors Object result = memberValues.get(member);