Package io.fathom.cloud.protobuf

Source Code of io.fathom.cloud.protobuf.ProtobufUtils

package io.fathom.cloud.protobuf;

import java.lang.reflect.Method;
import java.util.Map;

import com.google.common.collect.Maps;
import com.google.protobuf.Message;
import com.google.protobuf.Message.Builder;

public class ProtobufUtils {
    static final Map<Class<?>, Builder> builders = Maps.newHashMap();

    public static Builder newBuilder(Class<?> type) {
        Builder builder = builders.get(type);
        if (builder == null) {
            try {
                Class<?> messageClass;
                if (Message.Builder.class.isAssignableFrom(type)) {
                    messageClass = type.getEnclosingClass();
                    builder = newBuilder(messageClass);
                } else if (Message.class.isAssignableFrom(type)) {
                    Method method = type.getMethod("newBuilder");
                    builder = (Builder) method.invoke(null);
                } else {
                    throw new UnsupportedOperationException();
                }

                builders.put(type, builder);
            } catch (ReflectiveOperationException e) {
                throw new IllegalStateException("Error building instance", e);
            }
        }
        return builder.clone();
    }
}
TOP

Related Classes of io.fathom.cloud.protobuf.ProtobufUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.