// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.sdk.internal.wip.tools.protocolgenerator;
import java.util.Arrays;
import java.util.Collections;
import org.chromium.sdk.internal.protocolparser.JsonParseMethod;
import org.chromium.sdk.internal.protocolparser.JsonParserRoot;
import org.chromium.sdk.internal.protocolparser.JsonProtocolModelParseException;
import org.chromium.sdk.internal.protocolparser.JsonProtocolParseException;
import org.chromium.sdk.internal.protocolparser.dynamicimpl.DynamicParserImpl;
import org.chromium.sdk.internal.wip.tools.protocolgenerator.WipMetamodel.Root;
/**
* Parser for WIP JSON metamodel.
*/
@JsonParserRoot
interface WipMetamodelParser {
@JsonParseMethod
Root parseRoot(Object jsonValue) throws JsonProtocolParseException;
/**
* Creates dynamic parser implementation.
*/
class Impl {
static WipMetamodelParser get() {
return INTSTANCE;
}
private static final WipMetamodelParser INTSTANCE;
static {
Class<?>[] classes = {
WipMetamodel.Root.class,
WipMetamodel.Domain.class,
WipMetamodel.Command.class,
WipMetamodel.Parameter.class,
WipMetamodel.Event.class,
WipMetamodel.StandaloneType.class,
WipMetamodel.ObjectProperty.class,
WipMetamodel.ArrayItemType.class,
};
DynamicParserImpl<WipMetamodelParser> dynamicParserImpl;
try {
dynamicParserImpl = new DynamicParserImpl<WipMetamodelParser>(WipMetamodelParser.class,
Arrays.asList(classes), Collections.<DynamicParserImpl<?>>emptyList(), true);
} catch (JsonProtocolModelParseException e) {
throw new RuntimeException("Failed to build metamodel parser", e);
}
INTSTANCE = dynamicParserImpl.getParserRoot();
}
}
}