Author: markt Date: Mon May 16 21:43:56 2016 New Revision: 1744151 URL: http://svn.apache.org/viewvc?rev=1744151&view=rev Log: Back-port Java 9 support to compatibility util class
Added: tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java (with props) Modified: tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/JreCompat.java Added: tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java?rev=1744151&view=auto ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java (added) +++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java Mon May 16 21:43:56 2016 @@ -0,0 +1,50 @@ +/* + * 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.tomcat.util.compat; + +class Jre9Compat extends Jre8Compat { + + private static final Class<?> inaccessibleObjectExceptionClazz; + + + static { + Class<?> c1 = null; + try { + c1 = Class.forName("java.lang.reflect.InaccessibleObjectException"); + } catch (SecurityException e) { + // Should never happen + } catch (ClassNotFoundException e) { + // Must be Java 8 + } + inaccessibleObjectExceptionClazz = c1; + } + + + static boolean isSupported() { + return inaccessibleObjectExceptionClazz != null; + } + + + @Override + public boolean isInstanceOfInaccessibleObjectException(Exception e) { + if (e == null) { + return false; + } + + return inaccessibleObjectExceptionClazz.isAssignableFrom(e.getClass()); + } +} Propchange: tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/JreCompat.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/JreCompat.java?rev=1744151&r1=1744150&r2=1744151&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/JreCompat.java (original) +++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/compat/JreCompat.java Mon May 16 21:43:56 2016 @@ -30,18 +30,26 @@ public class JreCompat { private static final JreCompat instance; private static StringManager sm = StringManager.getManager(JreCompat.class.getPackage().getName()); + private static final boolean jre9Available; private static final boolean jre8Available; static { // This is Tomcat 8 with a minimum Java version of Java 7. The latest - // Java version the optional features require is Java 8. + // Java version the optional features require is Java 9. // Look for the highest supported JVM first - if (Jre8Compat.isSupported()) { + if (Jre9Compat.isSupported()) { + instance = new Jre9Compat(); + jre9Available = true; + jre8Available = true; + } + else if (Jre8Compat.isSupported()) { instance = new Jre8Compat(); + jre9Available = false; jre8Available = true; } else { instance = new JreCompat(); + jre9Available = false; jre8Available = false; } } @@ -63,4 +71,26 @@ public class JreCompat { public void setUseServerCipherSuitesOrder(SSLEngine engine, boolean useCipherSuitesOrder) { throw new UnsupportedOperationException(sm.getString("jreCompat.noServerCipherSuiteOrder")); } + + + // Java 7 implementation of Java 9 methods + + public static boolean isJre9Available() { + return jre9Available; + } + + + /** + * Test if the provided exception is an instance of + * java.lang.reflect.InaccessibleObjectException. + * + * @param e The exception to test + * + * @return {@code true} if the exception is an instance of + * InaccessibleObjectException, otherwise {@code false} + */ + public boolean isInstanceOfInaccessibleObjectException(Exception e) { + // Exception does not exist prior to Java 9 + return false; + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org