*/
@Override
public void serialize(Json json) throws IOException {
try {
AuraContext context = Aura.getContextService().getCurrentContext();
Mode mode = context.getMode();
boolean preloaded = context.isPreloaded(getDescriptor());
boolean preloading = context.isPreloading();
if (preloaded) {
json.writeValue(descriptor);
} else {
json.writeMapBegin();
json.writeMapEntry("descriptor", descriptor);
context.pushCallingDescriptor(descriptor);
try {
RendererDef rendererDef = getRendererDef();
if (rendererDef != null && !rendererDef.isLocal()) {
json.writeMapEntry("rendererDef", rendererDef);
}
} finally {
context.popCallingDescriptor();
}
HelperDef helperDef = getHelperDef();
if (helperDef != null && !helperDef.isLocal()) {
json.writeMapEntry("helperDef", helperDef);
}
json.writeMapEntry("styleDef", getStyleDef());
json.writeMapEntry("controllerDef", getControllerDef());
json.writeMapEntry("modelDef", getModelDef());
json.writeMapEntry("superDef", getSuperDef());
if (preloading) {
json.writeMapEntry("isCSSPreloaded", preloading);
}
Collection<AttributeDef> attrDefs = getAttributeDefs().values();
if (!attrDefs.isEmpty()) {
json.writeMapEntry("attributeDefs", attrDefs);
}
Set<DefDescriptor<InterfaceDef>> allInterfaces = getAllInterfaces();
if (allInterfaces != null && !allInterfaces.isEmpty()) {
json.writeMapEntry("interfaces", allInterfaces);
}
Collection<RegisterEventDef> regevents = getRegisterEventDefs().values();
if (!regevents.isEmpty()) {
json.writeMapEntry("registerEventDefs", regevents);
}
Collection<EventHandlerDef> handlers = getHandlerDefs();
if (!handlers.isEmpty()) {
json.writeMapEntry("handlerDefs", handlers);
}
Collection<ImportDef> imports = getImportDefs();
if (!imports.isEmpty()) {
json.writeMapEntry("imports", imports);
}
if (!facets.isEmpty()) {
json.writeMapEntry("facets", facets);
}
boolean local = hasLocalDependencies();
if (local) {
json.writeMapEntry("hasServerDeps", true);
}
if (isAbstract) {
json.writeMapEntry("isAbstract", isAbstract);
}
ProviderDef providerDef = getProviderDef();
if (providerDef != null && !providerDef.isLocal()) {
json.writeMapEntry("providerDef", providerDef);
}
if (subDefs != null) {
json.writeMapEntry("subDefs", subDefs.values());
}
if (mode.equals(Mode.AUTOJSTEST)) {
json.writeMapEntry("testSuiteDef", getTestSuiteDef());
}
serializeFields(json);
json.writeMapEnd();