All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.glowroot.weaving.PreInitializeStorageShutdownClasses Maven / Gradle / Ivy

/*
 * Copyright 2012-2015 the original author or authors.
 *
 * 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.glowroot.weaving;

import java.util.List;

import javax.annotation.Nullable;

import org.glowroot.shaded.google.common.annotations.VisibleForTesting;
import org.glowroot.shaded.google.common.collect.Lists;
import org.glowroot.shaded.slf4j.Logger;
import org.glowroot.shaded.slf4j.LoggerFactory;

// Class loading is also a bad idea inside of JVM shutdown hooks, see
// https://bugs.openjdk.java.net/browse/JDK-7142035
public class PreInitializeStorageShutdownClasses {

    private static final Logger logger =
            LoggerFactory.getLogger(PreInitializeStorageShutdownClasses.class);

    private PreInitializeStorageShutdownClasses() {}

    public static void preInitializeClasses() {
        ClassLoader loader = PreInitializeStorageShutdownClasses.class.getClassLoader();
        for (String type : usedTypes()) {
            initialize(type, loader);
        }
        for (String type : maybeUsedTypes()) {
            if (exists(type)) {
                initialize(type, loader);
            }
        }
    }

    private static void initialize(String type, @Nullable ClassLoader loader) {
        if (type.equals("org.glowroot.shaded.h2.value.ValueGeometry")) {
            // this type depends on an optional third party library and is not really used
            // (initializing the class throws an error due to the dependency)
            return;
        }
        try {
            Class.forName(type, true, loader);
        } catch (ClassNotFoundException e) {
            logger.warn("class not found: {}", type);
            // log exception at trace level
            logger.trace(e.getMessage(), e);
        }
    }

    @VisibleForTesting
    static List usedTypes() {
        List types = Lists.newArrayList();
        types.addAll(getGuavaUsedTypes());
        types.addAll(getGlowrootUsedTypes());
        types.addAll(getH2UsedTypes());
        return types;

    }

    private static List getGuavaUsedTypes() {
        List types = Lists.newArrayList();
        types.add("org.glowroot.shaded.google.common.base.Ascii");
        types.add("org.glowroot.shaded.google.common.base.Equivalence");
        types.add("org.glowroot.shaded.google.common.base.Equivalence$Equals");
        types.add("org.glowroot.shaded.google.common.base.Equivalence$Identity");
        types.add("org.glowroot.shaded.google.common.base.Function");
        types.add("org.glowroot.shaded.google.common.base.MoreObjects");
        types.add("org.glowroot.shaded.google.common.base.MoreObjects$1");
        types.add("org.glowroot.shaded.google.common.base.MoreObjects$ToStringHelper");
        types.add("org.glowroot.shaded.google.common.base.MoreObjects$ToStringHelper$ValueHolder");
        types.add("org.glowroot.shaded.google.common.base.Objects");
        types.add("org.glowroot.shaded.google.common.base.Platform");
        types.add("org.glowroot.shaded.google.common.base.Preconditions");
        types.add("org.glowroot.shaded.google.common.base.Stopwatch");
        types.add("org.glowroot.shaded.google.common.base.Stopwatch$1");
        types.add("org.glowroot.shaded.google.common.base.Supplier");
        types.add("org.glowroot.shaded.google.common.base.Suppliers");
        types.add("org.glowroot.shaded.google.common.base.Suppliers$SupplierOfInstance");
        types.add("org.glowroot.shaded.google.common.base.Ticker");
        types.add("org.glowroot.shaded.google.common.base.Ticker$1");
        types.add("org.glowroot.shaded.google.common.cache.AbstractCache$SimpleStatsCounter");
        types.add("org.glowroot.shaded.google.common.cache.AbstractCache$StatsCounter");
        types.add("org.glowroot.shaded.google.common.cache.Cache");
        types.add("org.glowroot.shaded.google.common.cache.CacheBuilder");
        types.add("org.glowroot.shaded.google.common.cache.CacheBuilder$1");
        types.add("org.glowroot.shaded.google.common.cache.CacheBuilder$2");
        types.add("org.glowroot.shaded.google.common.cache.CacheBuilder$3");
        types.add("org.glowroot.shaded.google.common.cache.CacheBuilder$NullListener");
        types.add("org.glowroot.shaded.google.common.cache.CacheBuilder$OneWeigher");
        types.add("org.glowroot.shaded.google.common.cache.CacheLoader");
        types.add("org.glowroot.shaded.google.common.cache.CacheLoader$InvalidCacheLoadException");
        types.add("org.glowroot.shaded.google.common.cache.CacheStats");
        types.add("org.glowroot.shaded.google.common.cache.LoadingCache");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$1");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$2");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$AbstractCacheSet");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$AbstractReferenceEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$AccessQueue");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$AccessQueue$1");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$AccessQueue$2");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryFactory");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryFactory$1");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryFactory$2");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryFactory$3");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryFactory$4");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryFactory$5");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryFactory$6");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryFactory$7");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryFactory$8");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntryIterator");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$EntrySet");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$HashIterator");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$KeyIterator");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$KeySet");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$LoadingValueReference");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$LoadingValueReference$1");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$LocalLoadingCache");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$LocalManualCache");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$NullEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$ReferenceEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$Segment");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$Segment$1");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$SoftValueReference");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$Strength");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$Strength$1");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$Strength$2");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$Strength$3");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$StrongAccessEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$StrongAccessWriteEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$StrongEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$StrongValueReference");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$StrongWriteEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$ValueIterator");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$ValueReference");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$Values");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WeakAccessEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WeakAccessWriteEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WeakEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WeakValueReference");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WeakWriteEntry");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WeightedSoftValueReference");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WeightedStrongValueReference");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WeightedWeakValueReference");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WriteQueue");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WriteQueue$1");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WriteQueue$2");
        types.add("org.glowroot.shaded.google.common.cache.LocalCache$WriteThroughEntry");
        types.add("org.glowroot.shaded.google.common.cache.LongAddable");
        types.add("org.glowroot.shaded.google.common.cache.LongAddables");
        types.add("org.glowroot.shaded.google.common.cache.LongAddables$1");
        types.add("org.glowroot.shaded.google.common.cache.LongAddables$2");
        types.add("org.glowroot.shaded.google.common.cache.LongAddables$PureJavaLongAddable");
        types.add("org.glowroot.shaded.google.common.cache.LongAdder");
        types.add("org.glowroot.shaded.google.common.cache.RemovalCause");
        types.add("org.glowroot.shaded.google.common.cache.RemovalCause$1");
        types.add("org.glowroot.shaded.google.common.cache.RemovalCause$2");
        types.add("org.glowroot.shaded.google.common.cache.RemovalCause$3");
        types.add("org.glowroot.shaded.google.common.cache.RemovalCause$4");
        types.add("org.glowroot.shaded.google.common.cache.RemovalCause$5");
        types.add("org.glowroot.shaded.google.common.cache.RemovalListener");
        types.add("org.glowroot.shaded.google.common.cache.RemovalNotification");
        types.add("org.glowroot.shaded.google.common.cache.Striped64");
        types.add("org.glowroot.shaded.google.common.cache.Striped64$1");
        types.add("org.glowroot.shaded.google.common.cache.Striped64$Cell");
        types.add("org.glowroot.shaded.google.common.cache.Weigher");
        types.add("org.glowroot.shaded.google.common.collect.AbstractSequentialIterator");
        types.add("org.glowroot.shaded.google.common.collect.ByFunctionOrdering");
        types.add("org.glowroot.shaded.google.common.collect.CollectPreconditions");
        types.add("org.glowroot.shaded.google.common.collect.EmptyImmutableSet");
        types.add("org.glowroot.shaded.google.common.collect.ImmutableCollection");
        types.add("org.glowroot.shaded.google.common.collect.ImmutableSet");
        types.add("org.glowroot.shaded.google.common.collect.Iterators");
        types.add("org.glowroot.shaded.google.common.collect.Iterators$1");
        types.add("org.glowroot.shaded.google.common.collect.Iterators$2");
        types.add("org.glowroot.shaded.google.common.collect.NaturalOrdering");
        types.add("org.glowroot.shaded.google.common.collect.ObjectArrays");
        types.add("org.glowroot.shaded.google.common.collect.Ordering");
        types.add("org.glowroot.shaded.google.common.collect.Platform");
        types.add("org.glowroot.shaded.google.common.collect.ReverseNaturalOrdering");
        types.add("org.glowroot.shaded.google.common.collect.ReverseOrdering");
        types.add("org.glowroot.shaded.google.common.collect.Sets");
        types.add("org.glowroot.shaded.google.common.collect.UnmodifiableIterator");
        types.add("org.glowroot.shaded.google.common.collect.UnmodifiableListIterator");
        types.add("org.glowroot.shaded.google.common.primitives.Ints");
        types.add("org.glowroot.shaded.google.common.util.concurrent.AbstractFuture");
        types.add("org.glowroot.shaded.google.common.util.concurrent.AbstractFuture$Sync");
        types.add("org.glowroot.shaded.google.common.util.concurrent.AsyncFunction");
        types.add("org.glowroot.shaded.google.common.util.concurrent.ExecutionError");
        types.add("org.glowroot.shaded.google.common.util.concurrent.ExecutionList");
        types.add("org.glowroot.shaded.google.common.util.concurrent.ExecutionList$RunnableExecutorPair");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$1");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$1$1");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$2");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$4");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$7");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$ChainingListenableFuture");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$ChainingListenableFuture$1");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$ImmediateFailedFuture");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$ImmediateFuture");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Futures$ImmediateSuccessfulFuture");
        types.add("org.glowroot.shaded.google.common.util.concurrent.ListenableFuture");
        types.add("org.glowroot.shaded.google.common.util.concurrent.MoreExecutors");
        types.add("org.glowroot.shaded.google.common.util.concurrent.MoreExecutors$DirectExecutor");
        types.add("org.glowroot.shaded.google.common.util.concurrent.SettableFuture");
        types.add("org.glowroot.shaded.google.common.util.concurrent.UncheckedExecutionException");
        types.add("org.glowroot.shaded.google.common.util.concurrent.Uninterruptibles");
        return types;
    }

    private static List getGlowrootUsedTypes() {
        List types = Lists.newArrayList();
        types.add("org.glowroot.local.store.CappedDatabase");
        types.add("org.glowroot.local.store.CappedDatabase$ShutdownHookThread");
        types.add("org.glowroot.local.store.CappedDatabaseOutputStream");
        types.add("org.glowroot.local.store.DataSource");
        types.add("org.glowroot.local.store.DataSource$1");
        types.add("org.glowroot.local.store.DataSource$ShutdownHookThread");
        return types;
    }

    private static List getH2UsedTypes() {
        List types = Lists.newArrayList();
        types.add("org.glowroot.shaded.h2.api.DatabaseEventListener");
        types.add("org.glowroot.shaded.h2.api.ErrorCode");
        types.add("org.glowroot.shaded.h2.api.JavaObjectSerializer");
        types.add("org.glowroot.shaded.h2.command.CommandInterface");
        types.add("org.glowroot.shaded.h2.command.CommandRemote");
        types.add("org.glowroot.shaded.h2.command.dml.SetTypes");
        types.add("org.glowroot.shaded.h2.compress.CompressDeflate");
        types.add("org.glowroot.shaded.h2.compress.CompressLZF");
        types.add("org.glowroot.shaded.h2.compress.CompressNo");
        types.add("org.glowroot.shaded.h2.compress.Compressor");
        types.add("org.glowroot.shaded.h2.engine.ConnectionInfo");
        types.add("org.glowroot.shaded.h2.engine.Constants");
        types.add("org.glowroot.shaded.h2.engine.DbSettings");
        types.add("org.glowroot.shaded.h2.engine.SessionFactory");
        types.add("org.glowroot.shaded.h2.engine.SessionInterface");
        types.add("org.glowroot.shaded.h2.engine.SessionRemote");
        types.add("org.glowroot.shaded.h2.engine.SessionWithState");
        types.add("org.glowroot.shaded.h2.engine.SettingsBase");
        types.add("org.glowroot.shaded.h2.engine.SysProperties");
        types.add("org.glowroot.shaded.h2.expression.ParameterInterface");
        types.add("org.glowroot.shaded.h2.expression.ParameterRemote");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcArray");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcBatchUpdateException");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcBlob");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcBlob$1");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcBlob$2");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcCallableStatement");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcClob");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcClob$1");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcClob$2");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcConnection");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcDatabaseMetaData");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcParameterMetaData");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcPreparedStatement");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcResultSet");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcResultSetMetaData");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcSQLException");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcSavepoint");
        types.add("org.glowroot.shaded.h2.jdbc.JdbcStatement");
        types.add("org.glowroot.shaded.h2.message.DbException");
        types.add("org.glowroot.shaded.h2.message.Trace");
        types.add("org.glowroot.shaded.h2.message.TraceObject");
        types.add("org.glowroot.shaded.h2.message.TraceSystem");
        types.add("org.glowroot.shaded.h2.message.TraceWriter");
        types.add("org.glowroot.shaded.h2.mvstore.DataUtils");
        types.add("org.glowroot.shaded.h2.result.ResultColumn");
        types.add("org.glowroot.shaded.h2.result.ResultInterface");
        types.add("org.glowroot.shaded.h2.result.ResultRemote");
        types.add("org.glowroot.shaded.h2.result.UpdatableRow");
        types.add("org.glowroot.shaded.h2.security.AES");
        types.add("org.glowroot.shaded.h2.security.BlockCipher");
        types.add("org.glowroot.shaded.h2.security.CipherFactory");
        types.add("org.glowroot.shaded.h2.security.Fog");
        types.add("org.glowroot.shaded.h2.security.SHA256");
        types.add("org.glowroot.shaded.h2.security.SecureFileStore");
        types.add("org.glowroot.shaded.h2.security.XTEA");
        types.add("org.glowroot.shaded.h2.store.Data");
        types.add("org.glowroot.shaded.h2.store.DataHandler");
        types.add("org.glowroot.shaded.h2.store.DataReader");
        types.add("org.glowroot.shaded.h2.store.DataReader$FastEOFException");
        types.add("org.glowroot.shaded.h2.store.FileStore");
        types.add("org.glowroot.shaded.h2.store.FileStoreInputStream");
        types.add("org.glowroot.shaded.h2.store.FileStoreOutputStream");
        types.add("org.glowroot.shaded.h2.store.LobStorageFrontend");
        types.add("org.glowroot.shaded.h2.store.LobStorageInterface");
        types.add("org.glowroot.shaded.h2.store.LobStorageRemoteInputStream");
        types.add("org.glowroot.shaded.h2.store.fs.FileBase");
        types.add("org.glowroot.shaded.h2.store.fs.FileChannelInputStream");
        types.add("org.glowroot.shaded.h2.store.fs.FileChannelOutputStream");
        types.add("org.glowroot.shaded.h2.store.fs.FilePath");
        types.add("org.glowroot.shaded.h2.store.fs.FilePathEncrypt");
        types.add("org.glowroot.shaded.h2.store.fs.FilePathEncrypt$FileEncrypt");
        types.add("org.glowroot.shaded.h2.store.fs.FilePathEncrypt$XTS");
        types.add("org.glowroot.shaded.h2.store.fs.FilePathRec");
        types.add("org.glowroot.shaded.h2.store.fs.FilePathWrapper");
        types.add("org.glowroot.shaded.h2.store.fs.FileRec");
        types.add("org.glowroot.shaded.h2.store.fs.FileUtils");
        types.add("org.glowroot.shaded.h2.store.fs.Recorder");
        types.add("org.glowroot.shaded.h2.tools.CompressTool");
        types.add("org.glowroot.shaded.h2.tools.SimpleResultSet");
        types.add("org.glowroot.shaded.h2.tools.SimpleResultSet$Column");
        types.add("org.glowroot.shaded.h2.tools.SimpleResultSet$SimpleArray");
        types.add("org.glowroot.shaded.h2.tools.SimpleRowSource");
        types.add("org.glowroot.shaded.h2.util.BitField");
        types.add("org.glowroot.shaded.h2.util.CloseWatcher");
        types.add("org.glowroot.shaded.h2.util.DateTimeUtils");
        types.add("org.glowroot.shaded.h2.util.IOUtils");
        types.add("org.glowroot.shaded.h2.util.MathUtils");
        types.add("org.glowroot.shaded.h2.util.MathUtils$1");
        types.add("org.glowroot.shaded.h2.util.NetUtils");
        types.add("org.glowroot.shaded.h2.util.New");
        types.add("org.glowroot.shaded.h2.util.SmallLRUCache");
        types.add("org.glowroot.shaded.h2.util.SortedProperties");
        types.add("org.glowroot.shaded.h2.util.StatementBuilder");
        types.add("org.glowroot.shaded.h2.util.StringUtils");
        types.add("org.glowroot.shaded.h2.util.Task");
        types.add("org.glowroot.shaded.h2.util.TempFileDeleter");
        types.add("org.glowroot.shaded.h2.util.Utils");
        types.add("org.glowroot.shaded.h2.util.Utils$1");
        types.add("org.glowroot.shaded.h2.util.Utils$ClassFactory");
        types.add("org.glowroot.shaded.h2.value.CompareMode");
        types.add("org.glowroot.shaded.h2.value.CompareModeDefault");
        types.add("org.glowroot.shaded.h2.value.CompareModeIcu4J");
        types.add("org.glowroot.shaded.h2.value.DataType");
        types.add("org.glowroot.shaded.h2.value.Transfer");
        types.add("org.glowroot.shaded.h2.value.Value");
        types.add("org.glowroot.shaded.h2.value.Value$ValueBlob");
        types.add("org.glowroot.shaded.h2.value.Value$ValueClob");
        types.add("org.glowroot.shaded.h2.value.ValueArray");
        types.add("org.glowroot.shaded.h2.value.ValueBoolean");
        types.add("org.glowroot.shaded.h2.value.ValueByte");
        types.add("org.glowroot.shaded.h2.value.ValueBytes");
        types.add("org.glowroot.shaded.h2.value.ValueDate");
        types.add("org.glowroot.shaded.h2.value.ValueDecimal");
        types.add("org.glowroot.shaded.h2.value.ValueDouble");
        types.add("org.glowroot.shaded.h2.value.ValueFloat");
        types.add("org.glowroot.shaded.h2.value.ValueGeometry");
        types.add("org.glowroot.shaded.h2.value.ValueInt");
        types.add("org.glowroot.shaded.h2.value.ValueJavaObject");
        types.add("org.glowroot.shaded.h2.value.ValueJavaObject$NotSerialized");
        types.add("org.glowroot.shaded.h2.value.ValueLobDb");
        types.add("org.glowroot.shaded.h2.value.ValueLong");
        types.add("org.glowroot.shaded.h2.value.ValueNull");
        types.add("org.glowroot.shaded.h2.value.ValueResultSet");
        types.add("org.glowroot.shaded.h2.value.ValueShort");
        types.add("org.glowroot.shaded.h2.value.ValueString");
        types.add("org.glowroot.shaded.h2.value.ValueStringFixed");
        types.add("org.glowroot.shaded.h2.value.ValueStringIgnoreCase");
        types.add("org.glowroot.shaded.h2.value.ValueTime");
        types.add("org.glowroot.shaded.h2.value.ValueTimestamp");
        types.add("org.glowroot.shaded.h2.value.ValueUuid");
        return types;
    }

    @VisibleForTesting
    static List maybeUsedTypes() {
        List types = Lists.newArrayList();
        // these are special classes generated by javac (but not by the eclipse compiler) to handle
        // accessing the private constructor in an enclosed type
        // (see http://stackoverflow.com/questions/2883181)
        types.add("org.glowroot.common.Reflections$1");
        types.add("org.glowroot.trace.model.TraceGcInfo$1");
        types.add("org.glowroot.weaving.AnalyzedClass$1");
        types.add("org.glowroot.weaving.Weaver$1");
        types.add("org.glowroot.weaving.WeavingMethodVisitor$1");
        // this is a special class generated by javac (but not by the eclipse compiler) to handle
        // enum switch statements
        // (see http://stackoverflow.com/questions/1834632/java-enum-and-additional-class-files)
        types.add("org.glowroot.weaving.AdviceMatcher$1");
        return types;
    }

    private static boolean exists(String type) {
        try {
            Class.forName(type);
            return true;
        } catch (ClassNotFoundException e) {
            // log exception at trace level
            logger.trace(e.getMessage(), e);
            return false;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy