public ExcFile(File f) throws IOException
    {
        srgMethodName2ExcData = new HashMap<String, ExcData>();
        srgParamName2ExcData = new HashMap<String, ExcData>();
        // example lines:
        // net/minecraft/util/ChunkCoordinates=CL_00001555
        // net/minecraft/world/chunk/storage/AnvilChunkLoader.func_75816_a(Lnet/minecraft/world/World;Lnet/minecraft/world/chunk/Chunk;)V=net/minecraft/world/MinecraftException,java/io/IOException|p_75816_1_,p_75816_2_
        // net/minecraft/world/biome/BiomeGenMutated.func_150571_c(III)I=|p_150571_1_,p_150571_2_,p_150571_3_
        // net/minecraft/world/chunk/storage/AnvilChunkLoader.func_75818_b()V=|
        // net/minecraft/server/MinecraftServer.func_145747_a(Lnet/minecraft/util/IChatComponent;)V=|p_145747_1_

        Scanner in = new Scanner(new FileReader(f));
        try
        {
            while (in.hasNextLine())
            {
                if (in.hasNext("#"))
                {
                    in.nextLine();
                    continue;
                }

                in.useDelimiter("\\.");
                String srgOwner = in.next();
                in.useDelimiter("\\(");

                if (!in.hasNext())
                    if (in.hasNextLine())
                        in.nextLine();
                    else
                        break;

                String srgName = in.next().substring(1);
                in.useDelimiter("=");
                String descriptor = in.next();
                in.useDelimiter("\\|");
                String excs = in.next().substring(1);
                String params = in.nextLine().substring(1);

                ExcData toAdd = new ExcData(srgOwner, srgName, descriptor,
                        (excs.length() > 0 ? excs.split(",") : new String[0]),
                        (params.length() > 0 ? params.split(",") : new String[0]));

                ExcData existing = srgMethodName2ExcData.get(srgName);

                if ((existing == null) || (existing.getParameters().length < toAdd.getParameters().length))
                {
                    srgMethodName2ExcData.put(srgName, toAdd);

                    for (String parameter : toAdd.getParameters())
                        srgParamName2ExcData.put(parameter, toAdd);
                }
            }
        }
        finally
        {
            in.close();
        }
    }