package org.develnext.jphp.zend.ext.json; import com.google.gson.GsonBuilder; import org.develnext.jphp.json.gson.MemoryDeserializer; import org.develnext.jphp.json.gson.MemorySerializer; import php.runtime.Memory; import php.runtime.env.CompileScope; import php.runtime.ext.support.Extension; import php.runtime.memory.*; import php.runtime.memory.helper.UndefinedMemory; public class JsonExtension extends Extension { public final static GsonBuilder DEFAULT_GSON_BUILDER; public final static GsonBuilder DEFAULT_GSON_BUILDER_FOR_DECODE; @Override public String getName() { return "json"; } @Override public String[] getRequiredExtensions() { return new String[]{ org.develnext.jphp.json.JsonExtension.class.getName() }; } @Override public String getVersion() { return "~"; } @Override public Status getStatus() { return Status.ZEND_LEGACY; } @Override public void onRegister(CompileScope scope) { registerConstants(new JsonConstants()); registerFunctions(new JsonFunctions()); } public static GsonBuilder createGsonBuilder(MemorySerializer memorySerializer) { GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Memory.class, memorySerializer); builder.registerTypeAdapter(NullMemory.class, memorySerializer); builder.registerTypeAdapter(UndefinedMemory.class, memorySerializer); builder.registerTypeAdapter(ReferenceMemory.class, memorySerializer); builder.registerTypeAdapter(TrueMemory.class, memorySerializer); builder.registerTypeAdapter(FalseMemory.class, memorySerializer); builder.registerTypeAdapter(LongMemory.class, memorySerializer); builder.registerTypeAdapter(DoubleMemory.class, memorySerializer); builder.registerTypeAdapter(ObjectMemory.class, memorySerializer); builder.registerTypeAdapter(ArrayMemory.class, memorySerializer); builder.registerTypeAdapter(BinaryMemory.class, memorySerializer); builder.registerTypeAdapter(CharMemory.class, memorySerializer); builder.registerTypeAdapter(KeyValueMemory.class, memorySerializer); builder.registerTypeAdapter(StringBuilderMemory.class, memorySerializer); builder.registerTypeAdapter(StringMemory.class, memorySerializer); return builder; } public static GsonBuilder createGsonBuilderForDecode(MemoryDeserializer memoryDeserializer){ GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Memory.class, memoryDeserializer); return builder; } static { DEFAULT_GSON_BUILDER = createGsonBuilder(new MemorySerializer()); DEFAULT_GSON_BUILDER.disableHtmlEscaping(); DEFAULT_GSON_BUILDER_FOR_DECODE = createGsonBuilderForDecode(new MemoryDeserializer()); } }