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

Reply via email to