/*********************************************************************************************************************** * * Copyright (C) 2010 by the Stratosphere project (http://stratosphere.eu) * * 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 eu.stratosphere.util; import com.esotericsoftware.kryo.DefaultSerializer; import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.Serializer; public class SopremoKryo extends Kryo { /** * Returns the best matching serializer for a class. This method can be overridden to implement custom logic to * choose a * serializer. */ @Override @SuppressWarnings({ "rawtypes", "cast" }) public Serializer getDefaultSerializer(final Class type) { if (type == null) throw new IllegalArgumentException("type cannot be null."); if (!type.isInterface()) for (Class<?> baseType = type; baseType != Object.class; baseType = baseType.getSuperclass()) if (baseType.isAnnotationPresent(DefaultSerializer.class)) return this.newSerializer( ((DefaultSerializer) baseType.getAnnotation(DefaultSerializer.class)).value(), type); return super.getDefaultSerializer(type); } }