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

package com.hypixel.hytale.builtin.hytalegenerator.assets.biomes;

import com.hypixel.hytale.builtin.hytalegenerator.propdistributions.Assignments;
import com.hypixel.hytale.builtin.hytalegenerator.positionproviders.PositionProvider;
import com.hypixel.hytale.builtin.hytalegenerator.density.Density;
import com.hypixel.hytale.builtin.hytalegenerator.material.Material;
import com.hypixel.hytale.builtin.hytalegenerator.materialproviders.MaterialProvider;
import com.hypixel.hytale.builtin.hytalegenerator.PropField;
import com.hypixel.hytale.builtin.hytalegenerator.biome.SimpleBiomeType;
import com.hypixel.hytale.builtin.hytalegenerator.tintproviders.TintProvider;
import com.hypixel.hytale.builtin.hytalegenerator.environmentproviders.EnvironmentProvider;
import com.hypixel.hytale.builtin.hytalegenerator.biome.BiomeType;
import com.hypixel.hytale.builtin.hytalegenerator.threadindexer.WorkerIndexer;
import com.hypixel.hytale.builtin.hytalegenerator.referencebundle.ReferenceBundle;
import com.hypixel.hytale.builtin.hytalegenerator.seed.SeedBox;
import javax.annotation.Nonnull;
import com.hypixel.hytale.builtin.hytalegenerator.material.MaterialCache;
import com.hypixel.hytale.builtin.hytalegenerator.assets.tintproviders.ConstantTintProviderAsset;
import com.hypixel.hytale.builtin.hytalegenerator.assets.environmentproviders.ConstantEnvironmentProviderAsset;
import com.hypixel.hytale.builtin.hytalegenerator.assets.materialproviders.ConstantMaterialProviderAsset;
import com.hypixel.hytale.builtin.hytalegenerator.assets.terrains.DensityTerrainAsset;
import com.hypixel.hytale.assetstore.AssetRegistry;
import com.hypixel.hytale.builtin.hytalegenerator.assets.density.DensityAsset;
import com.hypixel.hytale.builtin.hytalegenerator.assets.tintproviders.TintProviderAsset;
import com.hypixel.hytale.builtin.hytalegenerator.assets.environmentproviders.EnvironmentProviderAsset;
import com.hypixel.hytale.builtin.hytalegenerator.assets.propstageiterations.PropRuntimeAsset;
import com.hypixel.hytale.builtin.hytalegenerator.assets.materialproviders.MaterialProviderAsset;
import com.hypixel.hytale.builtin.hytalegenerator.assets.terrains.TerrainAsset;
import com.hypixel.hytale.assetstore.AssetExtraInfo;
import com.hypixel.hytale.assetstore.codec.AssetBuilderCodec;
import com.hypixel.hytale.assetstore.AssetStore;
import com.hypixel.hytale.codec.validation.ValidatorCache;
import com.hypixel.hytale.builtin.hytalegenerator.assets.Cleanable;
import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;

public class BiomeAsset implements JsonAssetWithMap<String, DefaultAssetMap<String, BiomeAsset>>, Cleanable
{
    public static final ValidatorCache<String> VALIDATOR_CACHE;
    private static AssetStore<String, BiomeAsset, DefaultAssetMap<String, BiomeAsset>> STORE;
    public static final AssetBuilderCodec<String, BiomeAsset> CODEC;
    private String id;
    private AssetExtraInfo.Data data;
    private TerrainAsset terrainAsset;
    private MaterialProviderAsset materialProviderAsset;
    private PropRuntimeAsset[] propRuntimeAssets;
    private EnvironmentProviderAsset environmentProviderAsset;
    private TintProviderAsset tintProviderAsset;
    private String biomeName;
    private DensityAsset[] floatingFunctionNodeAssets;
    
    public static AssetStore<String, BiomeAsset, DefaultAssetMap<String, BiomeAsset>> getAssetStore() {
        if (BiomeAsset.STORE == null) {
            BiomeAsset.STORE = AssetRegistry.getAssetStore(BiomeAsset.class);
        }
        return BiomeAsset.STORE;
    }
    
    private BiomeAsset() {
        this.terrainAsset = new DensityTerrainAsset();
        this.materialProviderAsset = new ConstantMaterialProviderAsset();
        this.propRuntimeAssets = new PropRuntimeAsset[0];
        this.environmentProviderAsset = new ConstantEnvironmentProviderAsset();
        this.tintProviderAsset = new ConstantTintProviderAsset();
        this.biomeName = "DefaultName";
        this.floatingFunctionNodeAssets = new DensityAsset[0];
    }
    
    @Override
    public void cleanUp() {
        this.terrainAsset.cleanUp();
        this.materialProviderAsset.cleanUp();
        for (final PropRuntimeAsset propRuntimeAsset : this.propRuntimeAssets) {
            propRuntimeAsset.cleanUp();
        }
        this.environmentProviderAsset.cleanUp();
        this.tintProviderAsset.cleanUp();
        for (final DensityAsset densityAsset : this.floatingFunctionNodeAssets) {
            densityAsset.cleanUp();
        }
    }
    
    public BiomeType build(@Nonnull final MaterialCache materialCache, @Nonnull final SeedBox parentSeed, @Nonnull final ReferenceBundle referenceBundle, @Nonnull final WorkerIndexer workerIndexer) {
        final MaterialProvider<Material> materialProvider = this.materialProviderAsset.build(new MaterialProviderAsset.Argument(parentSeed, materialCache, referenceBundle, workerIndexer));
        final Density density = this.terrainAsset.buildDensity(parentSeed, referenceBundle, workerIndexer);
        EnvironmentProvider environments = EnvironmentProvider.noEnvironmentProvider();
        if (this.environmentProviderAsset != null) {
            environments = this.environmentProviderAsset.build(new EnvironmentProviderAsset.Argument(parentSeed, materialCache, referenceBundle, workerIndexer));
        }
        TintProvider tints = TintProvider.noTintProvider();
        if (this.tintProviderAsset != null) {
            tints = this.tintProviderAsset.build(new TintProviderAsset.Argument(parentSeed, materialCache, referenceBundle, workerIndexer));
        }
        final SimpleBiomeType biome = new SimpleBiomeType(this.biomeName, density, materialProvider, environments, tints);
        for (final PropRuntimeAsset fieldAsset : this.propRuntimeAssets) {
            if (!fieldAsset.isSkip()) {
                final PositionProvider positionProvider = fieldAsset.buildPositionProvider(parentSeed, referenceBundle, workerIndexer);
                final Assignments distribution = fieldAsset.buildPropDistribution(parentSeed, materialCache, fieldAsset.getRuntime(), referenceBundle, workerIndexer);
                final PropField field = new PropField(fieldAsset.getRuntime(), distribution, positionProvider);
                biome.addPropFieldTo(field);
            }
        }
        return biome;
    }
    
    public String getBiomeName() {
        return this.biomeName;
    }
    
    @Override
    public String getId() {
        return this.id;
    }
    
    static {
        // 
        // This method could not be decompiled.
        // 
        // Original Bytecode:
        // 
        //     3: dup            
        //     4: new             Lcom/hypixel/hytale/assetstore/AssetKeyValidator;
        //     7: dup            
        //     8: invokedynamic   BootstrapMethod #0, get:()Ljava/util/function/Supplier;
        //    13: invokespecial   com/hypixel/hytale/assetstore/AssetKeyValidator.<init>:(Ljava/util/function/Supplier;)V
        //    16: invokespecial   com/hypixel/hytale/codec/validation/ValidatorCache.<init>:(Lcom/hypixel/hytale/codec/validation/Validator;)V
        //    19: putstatic       com/hypixel/hytale/builtin/hytalegenerator/assets/biomes/BiomeAsset.VALIDATOR_CACHE:Lcom/hypixel/hytale/codec/validation/ValidatorCache;
        //    22: ldc             Lcom/hypixel/hytale/builtin/hytalegenerator/assets/biomes/BiomeAsset;.class
        //    24: invokedynamic   BootstrapMethod #1, get:()Ljava/util/function/Supplier;
        //    29: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //    32: invokedynamic   BootstrapMethod #2, accept:()Ljava/util/function/BiConsumer;
        //    37: invokedynamic   BootstrapMethod #3, apply:()Ljava/util/function/Function;
        //    42: invokedynamic   BootstrapMethod #4, accept:()Ljava/util/function/BiConsumer;
        //    47: invokedynamic   BootstrapMethod #5, apply:()Ljava/util/function/Function;
        //    52: invokestatic    com/hypixel/hytale/assetstore/codec/AssetBuilderCodec.builder:(Ljava/lang/Class;Ljava/util/function/Supplier;Lcom/hypixel/hytale/codec/Codec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder;
        //    55: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //    58: dup            
        //    59: ldc             "Terrain"
        //    61: getstatic       com/hypixel/hytale/builtin/hytalegenerator/assets/terrains/TerrainAsset.CODEC:Lcom/hypixel/hytale/assetstore/codec/AssetCodecMapCodec;
        //    64: iconst_1       
        //    65: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;Z)V
        //    68: invokedynamic   BootstrapMethod #6, accept:()Ljava/util/function/BiConsumer;
        //    73: invokedynamic   BootstrapMethod #7, apply:()Ljava/util/function/Function;
        //    78: invokevirtual   com/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //    81: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //    84: checkcast       Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder;
        //    87: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //    90: dup            
        //    91: ldc             "FloatingFunctionNodes"
        //    93: new             Lcom/hypixel/hytale/codec/codecs/array/ArrayCodec;
        //    96: dup            
        //    97: getstatic       com/hypixel/hytale/builtin/hytalegenerator/assets/density/DensityAsset.CODEC:Lcom/hypixel/hytale/assetstore/codec/AssetCodecMapCodec;
        //   100: invokedynamic   BootstrapMethod #8, apply:()Ljava/util/function/IntFunction;
        //   105: invokespecial   com/hypixel/hytale/codec/codecs/array/ArrayCodec.<init>:(Lcom/hypixel/hytale/codec/Codec;Ljava/util/function/IntFunction;)V
        //   108: iconst_1       
        //   109: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;Z)V
        //   112: invokedynamic   BootstrapMethod #9, accept:()Ljava/util/function/BiConsumer;
        //   117: invokedynamic   BootstrapMethod #10, apply:()Ljava/util/function/Function;
        //   122: invokevirtual   com/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   125: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   128: checkcast       Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder;
        //   131: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   134: dup            
        //   135: ldc             "Name"
        //   137: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //   140: iconst_1       
        //   141: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;Z)V
        //   144: invokedynamic   BootstrapMethod #11, accept:()Ljava/util/function/BiConsumer;
        //   149: invokedynamic   BootstrapMethod #12, apply:()Ljava/util/function/Function;
        //   154: invokevirtual   com/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   157: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   160: checkcast       Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder;
        //   163: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   166: dup            
        //   167: ldc             "MaterialProvider"
        //   169: getstatic       com/hypixel/hytale/builtin/hytalegenerator/assets/materialproviders/MaterialProviderAsset.CODEC:Lcom/hypixel/hytale/assetstore/codec/AssetCodecMapCodec;
        //   172: iconst_1       
        //   173: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;Z)V
        //   176: invokedynamic   BootstrapMethod #13, accept:()Ljava/util/function/BiConsumer;
        //   181: invokedynamic   BootstrapMethod #14, apply:()Ljava/util/function/Function;
        //   186: invokevirtual   com/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   189: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   192: checkcast       Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder;
        //   195: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   198: dup            
        //   199: ldc             "Props"
        //   201: new             Lcom/hypixel/hytale/codec/codecs/array/ArrayCodec;
        //   204: dup            
        //   205: getstatic       com/hypixel/hytale/builtin/hytalegenerator/assets/propstageiterations/PropRuntimeAsset.CODEC:Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec;
        //   208: invokedynamic   BootstrapMethod #15, apply:()Ljava/util/function/IntFunction;
        //   213: invokespecial   com/hypixel/hytale/codec/codecs/array/ArrayCodec.<init>:(Lcom/hypixel/hytale/codec/Codec;Ljava/util/function/IntFunction;)V
        //   216: iconst_1       
        //   217: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;Z)V
        //   220: invokedynamic   BootstrapMethod #16, accept:()Ljava/util/function/BiConsumer;
        //   225: invokedynamic   BootstrapMethod #17, apply:()Ljava/util/function/Function;
        //   230: invokevirtual   com/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   233: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   236: checkcast       Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder;
        //   239: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   242: dup            
        //   243: ldc             "EnvironmentProvider"
        //   245: getstatic       com/hypixel/hytale/builtin/hytalegenerator/assets/environmentproviders/EnvironmentProviderAsset.CODEC:Lcom/hypixel/hytale/assetstore/codec/AssetCodecMapCodec;
        //   248: iconst_1       
        //   249: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;Z)V
        //   252: invokedynamic   BootstrapMethod #18, accept:()Ljava/util/function/BiConsumer;
        //   257: invokedynamic   BootstrapMethod #19, apply:()Ljava/util/function/Function;
        //   262: invokevirtual   com/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   265: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   268: checkcast       Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder;
        //   271: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   274: dup            
        //   275: ldc_w           "TintProvider"
        //   278: getstatic       com/hypixel/hytale/builtin/hytalegenerator/assets/tintproviders/TintProviderAsset.CODEC:Lcom/hypixel/hytale/assetstore/codec/AssetCodecMapCodec;
        //   281: iconst_1       
        //   282: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;Z)V
        //   285: invokedynamic   BootstrapMethod #20, accept:()Ljava/util/function/BiConsumer;
        //   290: invokedynamic   BootstrapMethod #21, apply:()Ljava/util/function/Function;
        //   295: invokevirtual   com/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   298: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   301: checkcast       Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder;
        //   304: invokevirtual   com/hypixel/hytale/assetstore/codec/AssetBuilderCodec$Builder.build:()Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec;
        //   307: putstatic       com/hypixel/hytale/builtin/hytalegenerator/assets/biomes/BiomeAsset.CODEC:Lcom/hypixel/hytale/assetstore/codec/AssetBuilderCodec;
        //   310: 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.visitClassType(TypeSubstitutionVisitor.java:267)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitClassType(TypeSubstitutionVisitor.java:25)
        //     at com.strobel.assembler.metadata.TypeDefinition.accept(TypeDefinition.java:189)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visit(TypeSubstitutionVisitor.java:40)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitMethod(TypeSubstitutionVisitor.java:324)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2586)
        //     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: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: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: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: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: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.inferCall(TypeAnalysis.java:2483)
        //     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:782)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2483)
        //     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.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.");
    }
}
