// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.codec.schema.metadata.ui;

import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.Codec;
import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.schema.config.Schema;
import com.hypixel.hytale.codec.lookup.CodecMapCodec;
import com.hypixel.hytale.codec.schema.metadata.Metadata;

public class UIEditor implements Metadata
{
    public static final CodecMapCodec<EditorComponent> CODEC;
    public static final Timeline TIMELINE;
    public static final WeightedTimeline WEIGHTED_TIMELINE;
    private final EditorComponent component;
    
    public UIEditor(final EditorComponent component) {
        this.component = component;
    }
    
    @Override
    public void modify(@Nonnull final Schema schema) {
        schema.getHytale().setUiEditorComponent(this.component);
    }
    
    public static void init() {
        UIEditor.CODEC.register("Timeline", Timeline.class, Timeline.CODEC);
        UIEditor.CODEC.register("WeightedTimeline", WeightedTimeline.class, WeightedTimeline.CODEC);
        UIEditor.CODEC.register("Number", FormattedNumber.class, FormattedNumber.CODEC);
        UIEditor.CODEC.register("Text", TextField.class, TextField.CODEC);
        UIEditor.CODEC.register("MultilineText", MultilineTextField.class, MultilineTextField.CODEC);
        UIEditor.CODEC.register("Dropdown", Dropdown.class, Dropdown.CODEC);
        UIEditor.CODEC.register("Icon", Icon.class, Icon.CODEC);
        UIEditor.CODEC.register("LocalizationKey", LocalizationKeyField.class, LocalizationKeyField.CODEC);
    }
    
    static {
        CODEC = new CodecMapCodec<EditorComponent>("component");
        TIMELINE = new Timeline();
        WEIGHTED_TIMELINE = new WeightedTimeline();
    }
    
    public static class Timeline implements EditorComponent
    {
        public static final BuilderCodec<Timeline> CODEC;
        
        static {
            CODEC = BuilderCodec.builder(Timeline.class, Timeline::new).build();
        }
    }
    
    public static class Icon implements EditorComponent
    {
        public static final BuilderCodec<Icon> CODEC;
        private String defaultPathTemplate;
        private int width;
        private int height;
        
        public Icon(final String defaultPathTemplate, final int width, final int height) {
            this.defaultPathTemplate = defaultPathTemplate;
            this.width = width;
            this.height = height;
        }
        
        public Icon() {
        }
        
        static {
            // 
            // This method could not be decompiled.
            // 
            // Original Bytecode:
            // 
            //     2: invokedynamic   BootstrapMethod #0, get:()Ljava/util/function/Supplier;
            //     7: invokestatic    com/hypixel/hytale/codec/builder/BuilderCodec.builder:(Ljava/lang/Class;Ljava/util/function/Supplier;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //    10: new             Lcom/hypixel/hytale/codec/KeyedCodec;
            //    13: dup            
            //    14: ldc             "defaultPathTemplate"
            //    16: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
            //    19: iconst_1       
            //    20: iconst_1       
            //    21: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;ZZ)V
            //    24: invokedynamic   BootstrapMethod #1, accept:()Ljava/util/function/BiConsumer;
            //    29: invokedynamic   BootstrapMethod #2, apply:()Ljava/util/function/Function;
            //    34: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.addField:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
            //    37: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //    40: new             Lcom/hypixel/hytale/codec/KeyedCodec;
            //    43: dup            
            //    44: ldc             "width"
            //    46: getstatic       com/hypixel/hytale/codec/Codec.INTEGER:Lcom/hypixel/hytale/codec/codecs/simple/IntegerCodec;
            //    49: iconst_1       
            //    50: iconst_1       
            //    51: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;ZZ)V
            //    54: invokedynamic   BootstrapMethod #3, accept:()Ljava/util/function/BiConsumer;
            //    59: invokedynamic   BootstrapMethod #4, apply:()Ljava/util/function/Function;
            //    64: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.addField:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
            //    67: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //    70: new             Lcom/hypixel/hytale/codec/KeyedCodec;
            //    73: dup            
            //    74: ldc             "height"
            //    76: getstatic       com/hypixel/hytale/codec/Codec.INTEGER:Lcom/hypixel/hytale/codec/codecs/simple/IntegerCodec;
            //    79: iconst_1       
            //    80: iconst_1       
            //    81: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;ZZ)V
            //    84: invokedynamic   BootstrapMethod #5, accept:()Ljava/util/function/BiConsumer;
            //    89: invokedynamic   BootstrapMethod #6, apply:()Ljava/util/function/Function;
            //    94: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.addField:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
            //    97: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //   100: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.build:()Lcom/hypixel/hytale/codec/builder/BuilderCodec;
            //   103: putstatic       com/hypixel/hytale/codec/schema/metadata/ui/UIEditor$Icon.CODEC:Lcom/hypixel/hytale/codec/builder/BuilderCodec;
            //   106: return         
            // 
            // The error that occurred was:
            // 
            // java.lang.UnsupportedOperationException: The requested operation is not supported.
            //     at com.strobel.util.ContractUtils.unsupported(ContractUtils.java:27)
            //     at com.strobel.assembler.metadata.TypeReference.getRawType(TypeReference.java:284)
            //     at com.strobel.assembler.metadata.TypeReference.getRawType(TypeReference.java:279)
            //     at com.strobel.assembler.metadata.TypeReference.makeGenericType(TypeReference.java:154)
            //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitParameterizedType(TypeSubstitutionVisitor.java:225)
            //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitParameterizedType(TypeSubstitutionVisitor.java:25)
            //     at com.strobel.assembler.metadata.ParameterizedType.accept(ParameterizedType.java:103)
            //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visit(TypeSubstitutionVisitor.java:40)
            //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitMethod(TypeSubstitutionVisitor.java:314)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2611)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:782)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1510)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:790)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2689)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:782)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1510)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:790)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2689)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:782)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1083)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:684)
            //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:667)
            //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:373)
            //     at com.strobel.decompiler.ast.TypeAnalysis.run(TypeAnalysis.java:95)
            //     at com.strobel.decompiler.ast.AstOptimizer.optimize(AstOptimizer.java:344)
            //     at com.strobel.decompiler.ast.AstOptimizer.optimize(AstOptimizer.java:42)
            //     at com.strobel.decompiler.languages.java.ast.AstMethodBodyBuilder.createMethodBody(AstMethodBodyBuilder.java:206)
            //     at com.strobel.decompiler.languages.java.ast.AstMethodBodyBuilder.createMethodBody(AstMethodBodyBuilder.java:93)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createMethodBody(AstBuilder.java:868)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createMethod(AstBuilder.java:761)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.addTypeMembers(AstBuilder.java:638)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeCore(AstBuilder.java:605)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeNoCache(AstBuilder.java:195)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.addTypeMembers(AstBuilder.java:662)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeCore(AstBuilder.java:605)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeNoCache(AstBuilder.java:195)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createType(AstBuilder.java:162)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.addType(AstBuilder.java:137)
            //     at com.strobel.decompiler.languages.java.JavaLanguage.buildAst(JavaLanguage.java:71)
            //     at com.strobel.decompiler.languages.java.JavaLanguage.decompileType(JavaLanguage.java:59)
            //     at com.strobel.decompiler.DecompilerDriver.decompileType(DecompilerDriver.java:333)
            //     at com.strobel.decompiler.DecompilerDriver.decompileJar(DecompilerDriver.java:254)
            //     at com.strobel.decompiler.DecompilerDriver.main(DecompilerDriver.java:129)
            // 
            throw new IllegalStateException("An error occurred while decompiling this method.");
        }
    }
    
    public static class WeightedTimeline implements EditorComponent
    {
        public static final BuilderCodec<WeightedTimeline> CODEC;
        
        static {
            CODEC = BuilderCodec.builder(WeightedTimeline.class, WeightedTimeline::new).build();
        }
    }
    
    public static class FormattedNumber implements EditorComponent
    {
        public static final BuilderCodec<FormattedNumber> CODEC;
        private Double step;
        private String suffix;
        private Integer maxDecimalPlaces;
        
        public FormattedNumber(final Double step, final String suffix, final Integer maxDecimalPlaces) {
            this.step = step;
            this.suffix = suffix;
            this.maxDecimalPlaces = maxDecimalPlaces;
        }
        
        public FormattedNumber() {
        }
        
        @Nonnull
        public FormattedNumber setStep(final Double step) {
            this.step = step;
            return this;
        }
        
        @Nonnull
        public FormattedNumber setSuffix(final String suffix) {
            this.suffix = suffix;
            return this;
        }
        
        @Nonnull
        public FormattedNumber setMaxDecimalPlaces(final Integer maxDecimalPlaces) {
            this.maxDecimalPlaces = maxDecimalPlaces;
            return this;
        }
        
        static {
            // 
            // This method could not be decompiled.
            // 
            // Original Bytecode:
            // 
            //     2: invokedynamic   BootstrapMethod #0, get:()Ljava/util/function/Supplier;
            //     7: invokestatic    com/hypixel/hytale/codec/builder/BuilderCodec.builder:(Ljava/lang/Class;Ljava/util/function/Supplier;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //    10: new             Lcom/hypixel/hytale/codec/KeyedCodec;
            //    13: dup            
            //    14: ldc             "step"
            //    16: getstatic       com/hypixel/hytale/codec/Codec.DOUBLE:Lcom/hypixel/hytale/codec/codecs/simple/DoubleCodec;
            //    19: iconst_0       
            //    20: iconst_1       
            //    21: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;ZZ)V
            //    24: invokedynamic   BootstrapMethod #1, accept:()Ljava/util/function/BiConsumer;
            //    29: invokedynamic   BootstrapMethod #2, apply:()Ljava/util/function/Function;
            //    34: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.addField:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
            //    37: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //    40: new             Lcom/hypixel/hytale/codec/KeyedCodec;
            //    43: dup            
            //    44: ldc             "suffix"
            //    46: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
            //    49: iconst_0       
            //    50: iconst_1       
            //    51: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;ZZ)V
            //    54: invokedynamic   BootstrapMethod #3, accept:()Ljava/util/function/BiConsumer;
            //    59: invokedynamic   BootstrapMethod #4, apply:()Ljava/util/function/Function;
            //    64: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.addField:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
            //    67: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //    70: new             Lcom/hypixel/hytale/codec/KeyedCodec;
            //    73: dup            
            //    74: ldc             "maxDecimalPlaces"
            //    76: getstatic       com/hypixel/hytale/codec/Codec.INTEGER:Lcom/hypixel/hytale/codec/codecs/simple/IntegerCodec;
            //    79: iconst_0       
            //    80: iconst_1       
            //    81: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;ZZ)V
            //    84: invokedynamic   BootstrapMethod #5, accept:()Ljava/util/function/BiConsumer;
            //    89: invokedynamic   BootstrapMethod #6, apply:()Ljava/util/function/Function;
            //    94: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.addField:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
            //    97: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //   100: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.build:()Lcom/hypixel/hytale/codec/builder/BuilderCodec;
            //   103: putstatic       com/hypixel/hytale/codec/schema/metadata/ui/UIEditor$FormattedNumber.CODEC:Lcom/hypixel/hytale/codec/builder/BuilderCodec;
            //   106: return         
            // 
            // The error that occurred was:
            // 
            // java.lang.UnsupportedOperationException: The requested operation is not supported.
            //     at com.strobel.util.ContractUtils.unsupported(ContractUtils.java:27)
            //     at com.strobel.assembler.metadata.TypeReference.getRawType(TypeReference.java:284)
            //     at com.strobel.assembler.metadata.TypeReference.getRawType(TypeReference.java:279)
            //     at com.strobel.assembler.metadata.TypeReference.makeGenericType(TypeReference.java:154)
            //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitParameterizedType(TypeSubstitutionVisitor.java:225)
            //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitParameterizedType(TypeSubstitutionVisitor.java:25)
            //     at com.strobel.assembler.metadata.ParameterizedType.accept(ParameterizedType.java:103)
            //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visit(TypeSubstitutionVisitor.java:40)
            //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitMethod(TypeSubstitutionVisitor.java:314)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2611)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:782)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1510)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:790)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2689)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:782)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1510)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:790)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2689)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:782)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
            //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1083)
            //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
            //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:684)
            //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:667)
            //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:373)
            //     at com.strobel.decompiler.ast.TypeAnalysis.run(TypeAnalysis.java:95)
            //     at com.strobel.decompiler.ast.AstOptimizer.optimize(AstOptimizer.java:344)
            //     at com.strobel.decompiler.ast.AstOptimizer.optimize(AstOptimizer.java:42)
            //     at com.strobel.decompiler.languages.java.ast.AstMethodBodyBuilder.createMethodBody(AstMethodBodyBuilder.java:206)
            //     at com.strobel.decompiler.languages.java.ast.AstMethodBodyBuilder.createMethodBody(AstMethodBodyBuilder.java:93)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createMethodBody(AstBuilder.java:868)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createMethod(AstBuilder.java:761)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.addTypeMembers(AstBuilder.java:638)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeCore(AstBuilder.java:605)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeNoCache(AstBuilder.java:195)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.addTypeMembers(AstBuilder.java:662)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeCore(AstBuilder.java:605)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeNoCache(AstBuilder.java:195)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createType(AstBuilder.java:162)
            //     at com.strobel.decompiler.languages.java.ast.AstBuilder.addType(AstBuilder.java:137)
            //     at com.strobel.decompiler.languages.java.JavaLanguage.buildAst(JavaLanguage.java:71)
            //     at com.strobel.decompiler.languages.java.JavaLanguage.decompileType(JavaLanguage.java:59)
            //     at com.strobel.decompiler.DecompilerDriver.decompileType(DecompilerDriver.java:333)
            //     at com.strobel.decompiler.DecompilerDriver.decompileJar(DecompilerDriver.java:254)
            //     at com.strobel.decompiler.DecompilerDriver.main(DecompilerDriver.java:129)
            // 
            throw new IllegalStateException("An error occurred while decompiling this method.");
        }
    }
    
    public static class Dropdown implements EditorComponent
    {
        public static final BuilderCodec<Dropdown> CODEC;
        private String dataSet;
        
        public Dropdown(final String dataSet) {
            this.dataSet = dataSet;
        }
        
        protected Dropdown() {
        }
        
        static {
            CODEC = BuilderCodec.builder(Dropdown.class, Dropdown::new).addField(new KeyedCodec<String>("dataSet", Codec.STRING, false, true), (o, i) -> o.dataSet = i, o -> o.dataSet).build();
        }
    }
    
    public static class TextField implements EditorComponent
    {
        public static final BuilderCodec<TextField> CODEC;
        private String dataSet;
        
        public TextField(final String dataSet) {
            this.dataSet = dataSet;
        }
        
        protected TextField() {
        }
        
        static {
            CODEC = BuilderCodec.builder(TextField.class, TextField::new).addField(new KeyedCodec<String>("dataSet", Codec.STRING, false, true), (o, i) -> o.dataSet = i, o -> o.dataSet).build();
        }
    }
    
    public static class MultilineTextField implements EditorComponent
    {
        public static final BuilderCodec<MultilineTextField> CODEC;
        
        static {
            CODEC = BuilderCodec.builder(MultilineTextField.class, MultilineTextField::new).build();
        }
    }
    
    public static class LocalizationKeyField implements EditorComponent
    {
        public static final BuilderCodec<LocalizationKeyField> CODEC;
        private String keyTemplate;
        private boolean generateDefaultKey;
        
        public LocalizationKeyField(final String keyTemplate) {
            this(keyTemplate, false);
        }
        
        public LocalizationKeyField(final String keyTemplate, final boolean generateDefaultKey) {
            this.keyTemplate = keyTemplate;
            this.generateDefaultKey = generateDefaultKey;
        }
        
        public LocalizationKeyField() {
        }
        
        static {
            CODEC = BuilderCodec.builder(LocalizationKeyField.class, LocalizationKeyField::new).addField(new KeyedCodec<String>("keyTemplate", Codec.STRING, false, true), (o, i) -> o.keyTemplate = i, o -> o.keyTemplate).addField(new KeyedCodec("generateDefaultKey", Codec.BOOLEAN, false, true), (o, i) -> o.generateDefaultKey = i, o -> o.generateDefaultKey).build();
        }
    }
    
    public interface EditorComponent
    {
    }
}
