/* * Copyright 2013 Chris Pheby * * Licensed 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.jadira.reflection.core.platform; /** * This class safely detects whether optional feature libraries - sun.misc.Unsafe, * MutabilityDetector and Objenesis are available. */ public class FeatureDetection { private static final boolean HAS_UNSAFE; private static final boolean HAS_MUTABILITY_DETECTOR; private static final boolean HAS_OBJENESIS; static { boolean hasUnsafe = true; try { Class.forName("sun.misc.Unsafe"); } catch (ClassNotFoundException e) { hasUnsafe = false; } HAS_UNSAFE = hasUnsafe; } static { boolean hasMutabilityDetector = true; try { Class.forName("org.mutabilitydetector.ThreadUnsafeAnalysisSession"); } catch (ClassNotFoundException e) { hasMutabilityDetector = false; } HAS_MUTABILITY_DETECTOR = hasMutabilityDetector; } static { boolean hasObjenesis = true; try { Class.forName("org.objenesis.Objenesis"); } catch (ClassNotFoundException e) { hasObjenesis = false; } HAS_OBJENESIS = hasObjenesis; } /** * Detect sun.misc.Unsafe * @return True if available */ public static final boolean hasUnsafe() { return HAS_UNSAFE; } /** * Detect Mutability Detector Library * @return True if available */ public static final boolean hasMutabilityDetector() { return HAS_MUTABILITY_DETECTOR; } /** * Detect Objenesis * @return True if available */ public static final boolean hasObjenesis() { return HAS_OBJENESIS; } }