  private ItemStack setCreativeItem(String who, ItemStack item) {
    if (item != null && item.getType() != Material.AIR && item.getType() != Material.WRITABLE_BOOK) {
      if (Bukkit.getServer().getPlayer(who) != null && Bukkit.getServer().getPlayer(who).hasPermission("limitcreative.nolore")) {
        return item;
      }
      if (!isCreativeItem(item)) {
        ItemMeta meta = item.getItemMeta();
        List<String> lore = new ArrayList<>();
        if (meta.hasLore()) {
          lore = meta.getLore();
        }
        lore.add(0, creativeMessage.replace("%Name%", who));
        meta.setLore(lore);
        item.setItemMeta(meta);
      }
    }
    return item;
  }

  private ItemStack setCreativeItem(String who, ItemStack item) {
    if (item != null && item.getType() != Material.AIR && item.getType() != Material.WRITABLE_BOOK) {
      if (Bukkit.getServer().getPlayer(who) != null && Bukkit.getServer().getPlayer(who).hasPermission("limitcreative.nolore")) {
        return item;
      }
      if (!isCreativeItem(item)) {
        ItemMeta meta = item.getItemMeta();
        List<String> lore = new ArrayList<String>();
        if (meta.hasLore()) {
          lore = meta.getLore();
        }
        lore.add(0, creativeMessage.replace("%Name%", who));
        meta.setLore(lore);
        item.setItemMeta(meta);
      }
    }
    return item;
  }

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method private setCreativeItem(who String, item ItemStack) : ItemStack from class com.zenya.limitcreative.InteractionListener


  public static void markBlock(final String world, final Loc loc, final String msg) {
    if (!markedBlocks.containsKey(world)) {
      markedBlocks.put(world, new HashMap<>());
    }
    markedBlocks.get(world).put(loc, msg);
    Bukkit.getScheduler().scheduleAsyncDelayedTask(mainPlugin, () -> {
      if (useMysql) {
        try {
          PreparedStatement stmt = getConnection().prepareStatement(
                  "INSERT INTO LimitCreative (`world`, `x`, `y`, `z`, `lore`) VALUES (?, ?, ?, ?, ?);");
          stmt.setString(1, world);
          stmt.setInt(2, loc.x);
          stmt.setInt(3, loc.y);
          stmt.setInt(4, loc.z);
          stmt.setString(5, msg);
          stmt.execute();
        } catch (SQLException ex) {
          ex.printStackTrace();
        }
      } else {
        File file = new File(mainPlugin.getDataFolder(), "blocks.yml");
        try {
          if (!file.exists()) {
            file.createNewFile();
          }
          YamlConfiguration config = YamlConfiguration.loadConfiguration(file);
          config.set(world + "." + loc.x + "." + loc.y + "." + loc.z, msg);
          config.save(file);
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    });
  }

  public static void markBlock(final String world, final Loc loc, final String msg) {
    if (!markedBlocks.containsKey(world)) {
      markedBlocks.put(world, new HashMap<Loc, String>());
    }
    markedBlocks.get(world).put(loc, msg);
    Bukkit.getScheduler().scheduleAsyncDelayedTask(mainPlugin, new Runnable() {
      public void run() {
        if (useMysql) {
          try {
            PreparedStatement stmt = getConnection().prepareStatement(
                    "INSERT INTO LimitCreative (`world`, `x`, `y`, `z`, `lore`) VALUES (?, ?, ?, ?, ?);");
            stmt.setString(1, world);
            stmt.setInt(2, loc.x);
            stmt.setInt(3, loc.y);
            stmt.setInt(4, loc.z);
            stmt.setString(5, msg);
            stmt.execute();
          } catch (Exception ex) {
            ex.printStackTrace();
          }
        } else {
          File file = new File(mainPlugin.getDataFolder(), "blocks.yml");
          try {
            if (!file.exists()) {
              file.createNewFile();
            }
            YamlConfiguration config = YamlConfiguration.loadConfiguration(file);
            config.set(world + "." + loc.x + "." + loc.y + "." + loc.z, msg);
            config.save(file);
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
    });
  }

Replace Anonymous With Lambda com.zenya.limitcreative.StorageApi.markBlock.scheduleAsyncDelayedTask.new Runnable with () -> {if(useMysql){tryPreparedStatement stmt=getConnection().prepareStatement("INSERT INTO LimitCreative (`world`, `x`, `y`, `z`, `lore`) VALUES (?, ?, ?, ?, ?);"); in method public markBlock(world String, loc Loc, msg String) : void from class com.zenya.limitcreative.StorageApi


  public static String unmarkBlock(final String world, final Loc loc) {
    String msg = markedBlocks.get(world).remove(loc);
    if (markedBlocks.get(world).isEmpty()) {
      markedBlocks.remove(world);
    }
    Bukkit.getScheduler().scheduleAsyncDelayedTask(mainPlugin, () -> {
      if (useMysql) {
        try {
          PreparedStatement stmt = getConnection().prepareStatement(
                  "DELETE FROM `LimitCreative` WHERE `world`=? AND `x`=? AND `y`=? AND `z`=?");
          stmt.setString(1, world);
          stmt.setInt(2, loc.x);
          stmt.setInt(3, loc.y);
          stmt.setInt(4, loc.z);
          stmt.execute();
        } catch (SQLException ex) {
          ex.printStackTrace();
        }
      } else {
        File file = new File(mainPlugin.getDataFolder(), "blocks.yml");
        if (file.exists()) {
          YamlConfiguration config = YamlConfiguration.loadConfiguration(file);
          String blockPath = world + "." + loc.x + "." + loc.y + "." + loc.z;
          if (config.contains(blockPath)) {
            config.set(blockPath, null);
          }
          try {
            config.save(file);
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
    });
    return msg;
  }

  public static String unmarkBlock(final String world, final Loc loc) {
    String msg = markedBlocks.get(world).remove(loc);
    if (markedBlocks.get(world).isEmpty()) {
      markedBlocks.remove(world);
    }
    Bukkit.getScheduler().scheduleAsyncDelayedTask(mainPlugin, new Runnable() {
      public void run() {
        if (useMysql) {
          try {
            PreparedStatement stmt = getConnection().prepareStatement(
                    "DELETE FROM `LimitCreative` WHERE `world`=? AND `x`=? AND `y`=? AND `z`=?");
            stmt.setString(1, world);
            stmt.setInt(2, loc.x);
            stmt.setInt(3, loc.y);
            stmt.setInt(4, loc.z);
            stmt.execute();
          } catch (Exception ex) {
            ex.printStackTrace();
          }
        } else {
          File file = new File(mainPlugin.getDataFolder(), "blocks.yml");
          if (file.exists()) {
            YamlConfiguration config = YamlConfiguration.loadConfiguration(file);
            String blockPath = world + "." + loc.x + "." + loc.y + "." + loc.z;
            if (config.contains(blockPath)) {
              config.set(blockPath, null);
            }
            try {
              config.save(file);
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
      }
    });
    return msg;
  }

Replace Anonymous With Lambda com.zenya.limitcreative.StorageApi.unmarkBlock.scheduleAsyncDelayedTask.new Runnable with () -> {if(useMysql){tryPreparedStatement stmt=getConnection().prepareStatement("DELETE FROM `LimitCreative` WHERE `world`=? AND `x`=? AND `y`=? AND `z`=?"); in method public unmarkBlock(world String, loc Loc) : String from class com.zenya.limitcreative.StorageApi


	@Override
	public void getGherkinFromTestCloud(String id) {

		//create header
		HashMap<String,String> headerMap = new HashMap<String,String>();

		headerMap.put("Authorization", "Basic "+auth);
		headerMap.put("Content-Type", "application/json");

		// get Issue
		Response response = given().headers(headerMap).log().all().get(jiraXraylUrl+"/rest/raven/1.0/export/test?keys="+id+ "&fz=true");

		// write feature files to disk
				try (InputStream fis =  response.body().asInputStream();
					ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis))) {
					ZipEntry ze;

					Path outDir = Paths.get("src/test/features/");

					while ((ze = zis.getNextEntry()) != null) {
						byte[] buffer = new byte[2048];
						Path filePath = outDir.resolve(ze.getName());

						try(FileOutputStream fos = new FileOutputStream(filePath.toFile());
						BufferedOutputStream bos = new BufferedOutputStream(fos, buffer.length)) {
						int len = 0;
						while ((len = zis.read(buffer)) > 0) {
							bos.write(buffer, 0, len);
						}
						bos.flush();
						fos.flush();
					}
					}
				}
				catch(Exception e) {
					System.out.println(e.toString());
				}
	}

	@Override
	public void getGherkinFromTestCloud(String id) {

		//create header
		HashMap<String,String> headerMap = new HashMap<String,String>();

		headerMap.put("Authorization", "Basic "+auth);
		headerMap.put("Content-Type", "application/json");

		// get Issue
		Response response = given().headers(headerMap).log().all().get(jiraXraylUrl+"/rest/raven/1.0/export/test?keys="+id);

		// write feature files to disk
				try {

					InputStream fis =  response.body().asInputStream();
					byte[] buffer = new byte[2048];

					ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
					ZipEntry ze;

					Path outDir = Paths.get("src/test/features/");

					while ((ze = zis.getNextEntry()) != null) {

						Path filePath = outDir.resolve(ze.getName());

						FileOutputStream fos = new FileOutputStream(filePath.toFile());
						BufferedOutputStream bos = new BufferedOutputStream(fos, buffer.length);

						int len;
						while ((len = zis.read(buffer)) > 0) {
							bos.write(buffer, 0, len);
						}
						bos.flush();
						bos.close();
						fos.flush();
						fos.close();
					}
				}
				catch(Exception e) {
					System.out.println(e.toString());
				}
	}

Try With Resources try(InputStream fis=response.body().asInputStream(); ZipInputStream zis=new ZipInputStream(new BufferedInputStream(fis))) in method public getGherkinFromTestCloud(id String) : void from class org.perfectglue.connector.XrayServerConnector


    /**
     * Gets a list of classes that implement the given interface
     *
     * @param interfaceClass
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public List<Class> getServiceImplementations(Class interfaceClass) throws IOException, ClassNotFoundException {
        List<Class> implementations = new ArrayList<>();
        List<String> strings = findAllStrings(interfaceClass.getName());
        for (String className : strings) {
            Class impl = classLoader.loadClass(className);
            if (!interfaceClass.isAssignableFrom(impl)) {
                throw new ClassCastException("Class not of type: " + interfaceClass.getName());
            }
            implementations.add(impl);
        }
        return implementations;
    }

    /**
     * Gets a list of classes that implement the given interface
     *
     * @param interfaceClass
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public List<Class> getServiceImplementations(Class interfaceClass) throws IOException, ClassNotFoundException {
        List<Class> implementations = new ArrayList<Class>();
        List<String> strings = findAllStrings(interfaceClass.getName());
        for (String className : strings) {
            Class impl = classLoader.loadClass(className);
            if (!interfaceClass.isAssignableFrom(impl)) {
                throw new ClassCastException("Class not of type: " + interfaceClass.getName());
            }
            implementations.add(impl);
        }
        return implementations;
    }

Replace Generic With Diamond ArrayList<Class> with ArrayList<> in method public getServiceImplementations(interfaceClass Class) : List<Class> from class de.root1.spf.utils.ServiceFinder


    public void split(String csvFileName, List<String> csvFileList, String firstRelease, int featureNumber) throws IOException {

        try (CSVReader reader = new CSVReader(new FileReader(csvFileName))){

            String[] nextLine;
            int currentRow = 1;
            StringBuilder attributeList = new StringBuilder();
            int version = 1;

            try (FileWriter csv = new FileWriter(csvFileList.get(version - 1))) {
                String currentVersion = firstRelease;
            }

            // legge una linea alla volta
            while((nextLine = reader.readNext()) != null){
                for(String token : nextLine){
                    if(currentRow >= featureNumber + 2){
                        if(token.equals(currentVersion)){
                            currentRow = addAttribute(currentRow, featureNumber, csv, attributeList);
                        } else {
                            version++;
                            csv.close();

                            try(FileWriter csv = new FileWriter(csvFileList.get(version - 1))) {
                                csv.append(attributeList + "\n");
                                currentVersion = token;
                            }
                        }
                        addRow(nextLine, csv);
                        break;
                    } else {
                        attributeList.append(token);
                        currentRow = addFirstRow(currentRow, featureNumber, attributeList);
                    }
                }

            }
            csv.close();
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    public void split(String csvFileName, List<String> csvFileList, String firstRelease, int featureNumber) throws IOException {
        CSVReader reader = null;

        try{
            reader = new CSVReader(new FileReader(csvFileName));

            String[] nextLine;
            int currentRow = 1;
            StringBuilder attributeList = new StringBuilder();
            int version = 1;

            FileWriter csv = new FileWriter(csvFileList.get(version - 1));
            // crea csv STORM_N vuoto

            String currentVersion = firstRelease;

            // legge una linea alla volta
            while((nextLine = reader.readNext()) != null){
                for(String token : nextLine){
                    if(currentRow >= featureNumber + 2){
                        if(token.equals(currentVersion)){
                            currentRow = addAttribute(currentRow, featureNumber, csv, attributeList);
                        } else {
                            version++;
                            csv.close();

                            csv = new FileWriter(csvFileList.get(version - 1));
                            csv.append(attributeList + "\n");
                            currentVersion = token;
                        }
                        addRow(nextLine, csv);
                        break;
                    } else {
                        attributeList.append(token);
                        currentRow = addFirstRow(currentRow, featureNumber, attributeList);
                    }
                }

            }
            csv.close();
        } catch (Exception e){
            e.printStackTrace();
        }
    }

Try With Resources try(CSVReader reader=new CSVReader(new FileReader(csvFileName))) in method public split(csvFileName String, csvFileList List<String>, firstRelease String, featureNumber int) : void from class main.java.controller2.MLcsvController


		CongruenceClass() {
			super((o1, o2) -> {
				if (o1 == o2)
					return 0;
				return ((defuse.defIndex.get(o1) - defuse.defIndex.get(o2))) >> 31 | 1;
			});
		}

		CongruenceClass() {
			super(new Comparator<Local>() {
				@Override
				public int compare(Local o1, Local o2) {
					if (o1 == o2)
						return 0;
					return ((defuse.defIndex.get(o1) - defuse.defIndex.get(o2))) >> 31 | 1;
				}
			});
		}

Replace Anonymous With Lambda org.mapleir.ir.algorithms.BoissinotDestructor.CongruenceClass.CongruenceClass.new Comparator<Local> with (o1, o2) -> {if(o1 == o2)return 0; in method package CongruenceClass() from class org.mapleir.ir.algorithms.BoissinotDestructor.CongruenceClass


	public void testSimpleDfsPre() {
		DepthFirstSearch<OrderedNode> dfs = new SimpleDfs<>(g, getNode(g, 1), SimpleDfs.PRE);
		List<OrderedNode> res = dfs.getPreOrder();
		assertPreOrdered(res);
	}

	public void testSimpleDfsPre() {
		DepthFirstSearch<OrderedNode> dfs = new SimpleDfs<OrderedNode>(g, getNode(g, 1), SimpleDfs.PRE);
		List<OrderedNode> res = dfs.getPreOrder();
		assertPreOrdered(res);
	}

Replace Generic With Diamond SimpleDfs<OrderedNode> with SimpleDfs<> in method public testSimpleDfsPre() : void from class org.mapleir.stdlib.collections.graph.algorithms.DfsTest


	public void testSimpleDfsTopo() {
		DepthFirstSearch<OrderedNode> dfs = new SimpleDfs<>(g, getNode(g, 1), SimpleDfs.TOPO);
		List<OrderedNode> res = dfs.getTopoOrder();
		assertTopoOrdered(res);
	}

	public void testSimpleDfsTopo() {
		DepthFirstSearch<OrderedNode> dfs = new SimpleDfs<OrderedNode>(g, getNode(g, 1), SimpleDfs.TOPO);
		List<OrderedNode> res = dfs.getTopoOrder();
		assertTopoOrdered(res);
	}

Replace Generic With Diamond SimpleDfs<OrderedNode> with SimpleDfs<> in method public testSimpleDfsTopo() : void from class org.mapleir.stdlib.collections.graph.algorithms.DfsTest


	private void processQueue() {
		while(!queue.isEmpty()) {
			LabelNode label = queue.removeFirst();
			process(label);
		}

		ensureMarks();

		List<BasicBlock> blocks = new ArrayList<>(builder.graph.vertices());
		blocks.sort((o1, o2) -> {
			int i1 = insns.indexOf(o1.getLabelNode());
			int i2 = insns.indexOf(o2.getLabelNode());
			return Integer.compare(i1, i2);
		});
		builder.graph.relabel(blocks);
		orderMap.clear(); // since we're changing the "natural" order of the blocks, we need to rebuild the order map.
		for (int i = 0; i < blocks.size(); i++)
			orderMap.put(blocks.get(i), i);
		makeRanges(blocks);
	}

	private void processQueue() {
		while(!queue.isEmpty()) {
			LabelNode label = queue.removeFirst();
			process(label);
		}

		ensureMarks();

		List<BasicBlock> blocks = new ArrayList<>(builder.graph.vertices());
		blocks.sort(new Comparator<BasicBlock>() {
			@Override
			public int compare(BasicBlock o1, BasicBlock o2) {
				int i1 = insns.indexOf(o1.getLabelNode());
				int i2 = insns.indexOf(o2.getLabelNode());
				return Integer.compare(i1, i2);
			}
		});

		builder.graph.relabel(blocks);
		makeRanges(blocks);
	}

Replace Anonymous With Lambda org.mapleir.ir.cfg.builder.GenerationPass.processQueue.sort.new Comparator<BasicBlock> with (o1, o2) -> {int i1=insns.indexOf(o1.getLabelNode()); in method private processQueue() : void from class org.mapleir.ir.cfg.builder.GenerationPass


	public Iterable<Stmt> stmts() {
		return () -> new ChainIterator.CollectionChainIterator<>(vertices());
	}

	public Iterable<Stmt> stmts() {
		return new Iterable<Stmt>() {
			@Override
			public Iterator<Stmt> iterator() {
				return new ChainIterator.CollectionChainIterator<>(vertices());
			}
		};
	}

Replace Anonymous With Lambda org.mapleir.ir.cfg.ControlFlowGraph.stmts.new Iterable<Stmt> with () -> new ChainIterator.CollectionChainIterator<>(vertices()) in method public stmts() : Iterable<Stmt> from class org.mapleir.ir.cfg.ControlFlowGraph


	public ExtendedDfs(FastDirectedGraph<N, ? extends FastGraphEdge<N>> graph, int opt) {
		this.opt = opt;
		this.graph = graph;
		colours = new NullPermeableHashMap<>(k -> {
			if(opt(COLOUR_VISITOR)) coloured(k, WHITE);
			return WHITE;
		});

		parents = opt(PARENTS) ? new HashMap<>() : null;
		preorder = opt(PRE) ? new ArrayList<>() : null;
		postorder = opt(POST) ? new ArrayList<>() : null;

		if(opt(EDGES)) {
			edges = new HashMap<>();
			edges.put(TREE, new HashSet<>());
			edges.put(BACK, new HashSet<>());
			edges.put(FOR_CROSS, new HashSet<>());
		} else {
			edges = null;
		}
		mask = null;
	}

	public ExtendedDfs(FastDirectedGraph<N, ? extends FastGraphEdge<N>> graph, int opt) {
		this.opt = opt;
		this.graph = graph;
		colours = new NullPermeableHashMap<>(new KeyedValueCreator<N, Integer>() {
			@Override
			public Integer create(N k) {
				if(opt(COLOUR_VISITOR)) coloured(k, WHITE);
				return WHITE;
			}
		});

		parents = opt(PARENTS) ? new HashMap<>() : null;
		preorder = opt(PRE) ? new ArrayList<>() : null;
		postorder = opt(POST) ? new ArrayList<>() : null;

		if(opt(EDGES)) {
			edges = new HashMap<>();
			edges.put(TREE, new HashSet<>());
			edges.put(BACK, new HashSet<>());
			edges.put(FOR_CROSS, new HashSet<>());
		} else {
			edges = null;
		}
	}

Replace Anonymous With Lambda org.mapleir.stdlib.collections.graph.algorithms.ExtendedDfs.ExtendedDfs.new NullPermeableHashMap<>.new KeyedValueCreator<N,Integer> with k -> {if(opt(COLOUR_VISITOR))coloured(k,WHITE); in method public ExtendedDfs(graph FastDirectedGraph<N,? extends FastGraphEdge<N>>, opt int) from class org.mapleir.stdlib.collections.graph.algorithms.ExtendedDfs


	public static void main(String[] args) throws Exception {
		sections = new LinkedList<>();
		logging = true;
		/* if(args.length < 1) {
			System.err.println("Usage: <rev:int>");
			System.exit(1);
			return;
		} */

//		File f = locateRevFile(135);
		File f = new File("res/allatori6.1.jar");
		section("Preparing to run on " + f.getAbsolutePath());
		SingleJarDownloader<ClassNode> dl = new SingleJarDownloader<>(new JarInfo(f));
		dl.download();
//
//		for(ClassNode cn : dl.getJarContents().getClassContents()) {
//			for(MethodNode m : cn.methods) {
//				if(m.toString().equals("com/allatori/IIiIiiiIII.IIiIiiIiII(Ljava/lang/String;)Ljava/lang/String;")) {
//					ControlFlowGraph cfg = ControlFlowGraphBuilder.build(m);
//					System.out.println(cfg);
//				}
//			}
//		}
//
//		if("".equals("")) {
//			return;
//		}
		String name = f.getName().substring(0, f.getName().length() - 4);

		ApplicationClassSource app = new ApplicationClassSource(name, dl.getJarContents().getClassContents());
		InstalledRuntimeClassSource jre = new InstalledRuntimeClassSource(app);
		app.addLibraries(jre);
		section("Initialising context.");

		IContext cxt = new BasicContext.BasicContextBuilder()
				.setApplication(app)
				.setInvocationResolver(new InvocationResolver(app))
				.setCache(new IRCache(ControlFlowGraphBuilder::build))
				.build();

		section("Expanding callgraph and generating cfgs.");

		CallTracer tracer = new IRCallTracer(cxt);
		for(MethodNode m : findEntries(app)) {
			tracer.trace(m);
		}

		section0("...generated " + cxt.getIRCache().size() + " cfgs in %fs.%n", "Preparing to transform.");

		PassGroup masterGroup = new PassGroup("MasterController");
		for(IPass p : getTransformationPasses()) {
			masterGroup.add(p);
		}
		run(cxt, masterGroup);

		section("Retranslating SSA IR to standard flavour.");
		for(Entry<MethodNode, ControlFlowGraph> e : cxt.getIRCache().entrySet()) {
			MethodNode mn = e.getKey();
			ControlFlowGraph cfg = e.getValue();
			BoissinotDestructor.leaveSSA(cfg);
			cfg.getLocals().realloc(cfg);
			ControlFlowGraphDumper.dump(cfg, mn);
		}

		section("Rewriting jar.");
		JarDumper dumper = new CompleteResolvingJarDumper(dl.getJarContents(), app) {
			@Override
			public int dumpResource(JarOutputStream out, String name, byte[] file) throws IOException {
				if(name.startsWith("META-INF")) {
					System.out.println(" ignore " + name);
					return 0;
				}
				return super.dumpResource(out, name, file);
			}
		};
		dumper.dump(new File("out/osb4.jar"));

		section("Finished.");
	}

	public static void main(String[] args) throws Exception {
		sections = new LinkedList<>();
		logging = true;
		/* if(args.length < 1) {
			System.err.println("Usage: <rev:int>");
			System.exit(1);
			return;
		} */

//		File f = locateRevFile(135);
		File f = new File("res/allatori6.1.jar");
		section("Preparing to run on " + f.getAbsolutePath());
		SingleJarDownloader<ClassNode> dl = new SingleJarDownloader<>(new JarInfo(f));
		dl.download();
//
//		for(ClassNode cn : dl.getJarContents().getClassContents()) {
//			for(MethodNode m : cn.methods) {
//				if(m.toString().equals("com/allatori/IIiIiiiIII.IIiIiiIiII(Ljava/lang/String;)Ljava/lang/String;")) {
//					ControlFlowGraph cfg = ControlFlowGraphBuilder.build(m);
//					System.out.println(cfg);
//				}
//			}
//		}
//
//		if("".equals("")) {
//			return;
//		}
		String name = f.getName().substring(0, f.getName().length() - 4);

		ApplicationClassSource app = new ApplicationClassSource(name, dl.getJarContents().getClassContents());
		InstalledRuntimeClassSource jre = new InstalledRuntimeClassSource(app);
		app.addLibraries(jre);
		section("Initialising context.");

		IContext cxt = new BasicContext.BasicContextBuilder()
				.setApplication(app)
				.setInvocationResolver(new InvocationResolver(app))
				.setCache(new IRCache(new KeyedValueCreator<MethodNode, ControlFlowGraph>() {
					/*private void attemptLoadType(Type t) {
						if(t.getSort() == Type.ARRAY) {
							t = t.getElementType();
						}

						if(TypeUtils.isPrimitive(t) || t == Type.VOID_TYPE) {
							return;
						}

						ClassNode n = app.findClassNode(t.getInternalName());
						if(n != null) {
							ClassTree tree = app.getStructures();

							if(!tree.containsVertex(n)) {
								tree.addVertex(n);
							}
						}
					}*/

					@Override
					public ControlFlowGraph create(MethodNode m) {
						/* lazy load types */
						ControlFlowGraph cfg = ControlFlowGraphBuilder.build(m);

						/*for(BasicBlock b : cfg.vertices()) {
							for(Stmt stmt : b) {
								for(Expr e : stmt.enumerateOnlyChildren()) {
									attemptLoadType(e.getType());
								}
							}
						}*/

						return cfg;
					}
				}))
				.build();

		section("Expanding callgraph and generating cfgs.");

		CallTracer tracer = new IRCallTracer(cxt);
		for(MethodNode m : findEntries(app)) {
			tracer.trace(m);
		}

		section0("...generated " + cxt.getIRCache().size() + " cfgs in %fs.%n", "Preparing to transform.");

		PassGroup masterGroup = new PassGroup("MasterController");
		for(IPass p : getTransformationPasses()) {
			masterGroup.add(p);
		}
		run(cxt, masterGroup);

		section("Retranslating SSA IR to standard flavour.");
		for(Entry<MethodNode, ControlFlowGraph> e : cxt.getIRCache().entrySet()) {
			MethodNode mn = e.getKey();
			ControlFlowGraph cfg = e.getValue();
			BoissinotDestructor.leaveSSA(cfg);
			cfg.getLocals().realloc(cfg);
			ControlFlowGraphDumper.dump(cfg, mn);
		}

		section("Rewriting jar.");
		JarDumper dumper = new CompleteResolvingJarDumper(dl.getJarContents(), app) {
			@Override
			public int dumpResource(JarOutputStream out, String name, byte[] file) throws IOException {
				if(name.startsWith("META-INF")) {
					System.out.println(" ignore " + name);
					return 0;
				}
				return super.dumpResource(out, name, file);
			}
		};
		dumper.dump(new File("out/osb4.jar"));

		section("Finished.");
	}

Replace Anonymous With Lambda org.mapleir.Boot.main.cxt.build.setCache.new IRCache.new KeyedValueCreator<MethodNode,ControlFlowGraph> with ControlFlowGraphBuilder::build in method public main(args String[]) : void from class org.mapleir.Boot


	public SSABlockLivenessAnalyser(ControlFlowGraph cfg) {
		locals = cfg.getLocals();
		use = new NullPermeableHashMap<>(locals);
		def = new NullPermeableHashMap<>(locals);
		phiUse = new NullPermeableHashMap<>(() -> new NullPermeableHashMap<>(locals));
		phiDef = new NullPermeableHashMap<>(locals);

		out = new NullPermeableHashMap<>(locals);
		in = new NullPermeableHashMap<>(locals);

		queue = new LinkedList<>();

		this.cfg = cfg;

		init();
	}

	public SSABlockLivenessAnalyser(ControlFlowGraph cfg) {
		locals = cfg.getLocals();
		use = new NullPermeableHashMap<>(locals);
		def = new NullPermeableHashMap<>(locals);
		phiUse = new NullPermeableHashMap<>(new ValueCreator<NullPermeableHashMap<BasicBlock, GenericBitSet<Local>>>() {
			@Override
			public NullPermeableHashMap<BasicBlock, GenericBitSet<Local>> create() {
				return new NullPermeableHashMap<>(locals);
			}
		});
		phiDef = new NullPermeableHashMap<>(locals);

		out = new NullPermeableHashMap<>(locals);
		in = new NullPermeableHashMap<>(locals);

		queue = new LinkedList<>();

		this.cfg = cfg;

		init();
	}

Replace Anonymous With Lambda org.mapleir.ir.analysis.SSABlockLivenessAnalyser.SSABlockLivenessAnalyser.new NullPermeableHashMap<>.new ValueCreator<NullPermeableHashMap<BasicBlock,GenericBitSet<Local>>> with () -> new NullPermeableHashMap<>(locals) in method public SSABlockLivenessAnalyser(cfg ControlFlowGraph) from class org.mapleir.ir.analysis.SSABlockLivenessAnalyser


		IndexMap(ValueCreator<N> c) {
			super(() -> new NullPermeableHashMap<>(c));
		}

		IndexMap(ValueCreator<N> c) {
			super(new ValueCreator<NullPermeableHashMap<Integer, N>>() {
				@Override
				public NullPermeableHashMap<Integer, N> create() {
					return new NullPermeableHashMap<>(c);
				}
			});
		}

Replace Anonymous With Lambda org.mapleir.deobimpl2.ConstantParameterPass2.IndexMap.IndexMap.new ValueCreator<NullPermeableHashMap<Integer,N>> with () -> new NullPermeableHashMap<>(c) in method package IndexMap(c ValueCreator<N>) from class org.mapleir.deobimpl2.ConstantParameterPass2.IndexMap


	public boolean addVertex(V vertex) {
		if (super.containsKey(vertex))
			return false;
		super.put(vertex, new HashSet<>());
		return true;
	}

	public boolean addVertex(V vertex) {
		if (super.containsKey(vertex))
			return false;
		super.put(vertex, new HashSet<E>());
		return true;
	}

Replace Generic With Diamond HashSet<E> with HashSet<> in method public addVertex(vertex V) : boolean from class org.mapleir.stdlib.collections.DirectedGraph


	public Set<E> getHashEdgesOf(V vertex) {
		return new HashSet<>(super.get(vertex));
	}

	public Set<E> getHashEdgesOf(V vertex) {
		return new HashSet<E>(super.get(vertex));
	}

Replace Generic With Diamond HashSet<E> with HashSet<> in method public getHashEdgesOf(vertex V) : Set<E> from class org.mapleir.stdlib.collections.DirectedGraph


	@Override
	public List<T> create() {
		return new ArrayList<>();
	}

	@Override
	public List<T> create() {
		return new ArrayList<T>();
	}

Replace Generic With Diamond ArrayList<T> with ArrayList<> in method public create() : List<T> from class org.mapleir.stdlib.collections.ListCreator


	public NullPermeableLinkedHashMap() {
		this(new NullCreator<>());
	}

	public NullPermeableLinkedHashMap() {
		this(new NullCreator<V>());
	}

Replace Generic With Diamond NullCreator<V> with NullCreator<> in method public NullPermeableLinkedHashMap() from class org.mapleir.stdlib.collections.NullPermeableLinkedHashMap


	default Iterable<N> iterable(FlowGraph<N, ?> graph) {
		return () -> iterator(graph);
	}

	default Iterable<N> iterable(FlowGraph<N, ?> graph) {
		return new Iterable<N>() {
			@Override
			public Iterator<N> iterator() {
				return Sorter.this.iterator(graph);
			}
		};
	}

Replace Anonymous With Lambda org.mapleir.stdlib.collections.graph.flow.Sorter.iterable.new Iterable<N> with () -> iterator(graph) in method public iterable(graph FlowGraph<N,?>) : Iterable<N> from class org.mapleir.stdlib.collections.graph.flow.Sorter


	public ChainData(MethodNode m, Set<MethodNode> supers, Set<MethodNode> delegates) {
		this.centre    = m;
		this.supers    = supers;
		this.delegates = delegates;

		this.supers.remove(m);
		this.delegates.remove(m);

		aggregates     = new HashSet<>();
		aggregates.addAll(supers);
		aggregates.addAll(delegates);
	}

	public ChainData(MethodNode m, Set<MethodNode> supers, Set<MethodNode> delegates) {
		this.centre    = m;
		this.supers    = supers;
		this.delegates = delegates;

		this.supers.remove(m);
		this.delegates.remove(m);

		aggregates     = new HashSet<MethodNode>();
		aggregates.addAll(supers);
		aggregates.addAll(delegates);
	}

Replace Generic With Diamond HashSet<MethodNode> with HashSet<> in method public ChainData(m MethodNode, supers Set<MethodNode>, delegates Set<MethodNode>) from class org.mapleir.stdlib.klass.ChainData


	public DataCache(Filter<T> filter) {
		this.filter = filter;
		map = new HashMap<>();
	}

	public DataCache(Filter<T> filter) {
		this.filter = filter;
		map = new HashMap<String, T>();
	}

Replace Generic With Diamond HashMap<String,T> with HashMap<> in method public DataCache(filter Filter<T>) from class org.mapleir.stdlib.klass.DataCache


	public ReverseDataCache(Filter<T> filter) {
		this.filter = filter;
		map = new HashMap<>();
	}

	public ReverseDataCache(Filter<T> filter) {
		this.filter = filter;
		map = new HashMap<T, String>();
	}

Replace Generic With Diamond HashMap<T,String> with HashMap<> in method public ReverseDataCache(filter Filter<T>) from class org.mapleir.stdlib.klass.ReverseDataCache


	public static Map<String, ClassNode> convertToMap(Collection<ClassNode> classes) {
		Map<String, ClassNode> map = new HashMap<>();
		for (ClassNode cn : classes) {
			map.put(cn.name, cn);
		}
		return map;
	}

	public static Map<String, ClassNode> convertToMap(Collection<ClassNode> classes) {
		Map<String, ClassNode> map = new HashMap<String, ClassNode>();
		for (ClassNode cn : classes) {
			map.put(cn.name, cn);
		}
		return map;
	}

Replace Generic With Diamond HashMap<String,ClassNode> with HashMap<> in method public convertToMap(classes Collection<ClassNode>) : Map<String,ClassNode> from class org.mapleir.stdlib.klass.ClassHelper


	public static <T, K> Map<T, K> copyOf(Map<T, K> src) {
		Map<T, K> dst = new HashMap<>();
		copy(src, dst);
		return dst;
	}

	public static <T, K> Map<T, K> copyOf(Map<T, K> src) {
		Map<T, K> dst = new HashMap<T, K>();
		copy(src, dst);
		return dst;
	}

Replace Generic With Diamond HashMap<T,K> with HashMap<> in method public copyOf(src Map<T,K>) : Map<T,K> from class org.mapleir.stdlib.klass.ClassHelper


	@Override
	public Set<T> create() {
		return new HashSet<>();
	}

	@Override
	public Set<T> create() {
		return new HashSet<T>();
	}

Replace Generic With Diamond HashSet<T> with HashSet<> in method public create() : Set<T> from class org.mapleir.stdlib.collections.SetCreator


    /**
     * Constructs a new frame with the given size.
     *
     * @param nLocals
     *            the maximum number of local variables of the frame.
     * @param nStack
     *            the maximum stack size of the frame.
     * @return the created frame.
     */
    protected Frame<V> newFrame(final int nLocals, final int nStack) {
        return new Frame<>(nLocals, nStack);
    }

    /**
     * Constructs a new frame with the given size.
     *
     * @param nLocals
     *            the maximum number of local variables of the frame.
     * @param nStack
     *            the maximum stack size of the frame.
     * @return the created frame.
     */
    protected Frame<V> newFrame(final int nLocals, final int nStack) {
        return new Frame<V>(nLocals, nStack);
    }

Replace Generic With Diamond Frame<V> with Frame<> in method protected newFrame(nLocals int, nStack int) : Frame<V> from class org.objectweb.asm.tree.analysis.Analyzer


    /**
     * Constructs a new frame that is identical to the given frame.
     *
     * @param src
     *            a frame.
     * @return the created frame.
     */
    protected Frame<V> newFrame(final Frame<? extends V> src) {
        return new Frame<>(src);
    }

    /**
     * Constructs a new frame that is identical to the given frame.
     *
     * @param src
     *            a frame.
     * @return the created frame.
     */
    protected Frame<V> newFrame(final Frame<? extends V> src) {
        return new Frame<V>(src);
    }

Replace Generic With Diamond Frame<V> with Frame<> in method protected newFrame(src Frame<? extends V>) : Frame<V> from class org.objectweb.asm.tree.analysis.Analyzer


        @Override
        public final void begin(final String name, final Attributes attrs) {
            int major = Integer.parseInt(attrs.getValue("major"));
            int minor = Integer.parseInt(attrs.getValue("minor"));
            HashMap<String, Object> vals = new HashMap<>();
            vals.put("version", new Integer(minor << 16 | major));
            vals.put("access", attrs.getValue("access"));
            vals.put("name", attrs.getValue("name"));
            vals.put("parent", attrs.getValue("parent"));
            vals.put("source", attrs.getValue("source"));
            vals.put("signature", attrs.getValue("signature"));
            vals.put("interfaces", new ArrayList<String>());
            push(vals);
            // values will be extracted in InterfacesRule.end();
        }

        @Override
        public final void begin(final String name, final Attributes attrs) {
            int major = Integer.parseInt(attrs.getValue("major"));
            int minor = Integer.parseInt(attrs.getValue("minor"));
            HashMap<String, Object> vals = new HashMap<String, Object>();
            vals.put("version", new Integer(minor << 16 | major));
            vals.put("access", attrs.getValue("access"));
            vals.put("name", attrs.getValue("name"));
            vals.put("parent", attrs.getValue("parent"));
            vals.put("source", attrs.getValue("source"));
            vals.put("signature", attrs.getValue("signature"));
            vals.put("interfaces", new ArrayList<String>());
            push(vals);
            // values will be extracted in InterfacesRule.end();
        }

Replace Generic With Diamond HashMap<String,Object> with HashMap<> in method public begin(name String, attrs Attributes) : void from class org.objectweb.asm.xml.ASMContentHandler.ClassRule


        @Override
        public final void begin(final String name, final Attributes attrs) {
            HashMap<String, Object> vals = new HashMap<>();
            vals.put("min", attrs.getValue("min"));
            vals.put("max", attrs.getValue("max"));
            vals.put("dflt", attrs.getValue("dflt"));
            vals.put("labels", new ArrayList<String>());
            push(vals);
        }

        @Override
        public final void begin(final String name, final Attributes attrs) {
            HashMap<String, Object> vals = new HashMap<String, Object>();
            vals.put("min", attrs.getValue("min"));
            vals.put("max", attrs.getValue("max"));
            vals.put("dflt", attrs.getValue("dflt"));
            vals.put("labels", new ArrayList<String>());
            push(vals);
        }

Replace Generic With Diamond HashMap<String,Object> with HashMap<> in method public begin(name String, attrs Attributes) : void from class org.objectweb.asm.xml.ASMContentHandler.TableSwitchRule


        @Override
        public final void begin(final String name, final Attributes attrs) {
            HashMap<String, Object> vals = new HashMap<>();
            vals.put("dflt", attrs.getValue("dflt"));
            vals.put("labels", new ArrayList<Label>());
            vals.put("keys", new ArrayList<String>());
            push(vals);
        }

        @Override
        public final void begin(final String name, final Attributes attrs) {
            HashMap<String, Object> vals = new HashMap<String, Object>();
            vals.put("dflt", attrs.getValue("dflt"));
            vals.put("labels", new ArrayList<Label>());
            vals.put("keys", new ArrayList<String>());
            push(vals);
        }

Replace Generic With Diamond HashMap<String,Object> with HashMap<> in method public begin(name String, attrs Attributes) : void from class org.objectweb.asm.xml.ASMContentHandler.LookupSwitchRule


        @Override
        public final void begin(final String element, final Attributes attrs)
                throws SAXException {
            push(attrs.getValue("name"));
            push(attrs.getValue("desc"));
            push(decodeHandle(attrs.getValue("bsm")));
            push(new ArrayList<>());
        }

        @Override
        public final void begin(final String element, final Attributes attrs)
                throws SAXException {
            push(attrs.getValue("name"));
            push(attrs.getValue("desc"));
            push(decodeHandle(attrs.getValue("bsm")));
            push(new ArrayList<Object>());
        }

Replace Generic With Diamond ArrayList<Object> with ArrayList<> in method public begin(element String, attrs Attributes) : void from class org.objectweb.asm.xml.ASMContentHandler.InvokeDynamicRule


    @Override
    public void visitAttribute(final Attribute attr) {
        if (attrs == null) {
            attrs = new ArrayList<>(1);
        }
        attrs.add(attr);
    }

    @Override
    public void visitAttribute(final Attribute attr) {
        if (attrs == null) {
            attrs = new ArrayList<Attribute>(1);
        }
        attrs.add(attr);
    }

Replace Generic With Diamond ArrayList<Attribute> with ArrayList<> in method public visitAttribute(attr Attribute) : void from class org.objectweb.asm.tree.ClassNode


            @Override
            public void visitEnd() {
                Analyzer<BasicValue> a = new Analyzer<>(
                        new BasicVerifier());
                try {
                    a.analyze("dummy", this);
                } catch (Exception e) {
                    if (e instanceof IndexOutOfBoundsException
                            && maxLocals == 0 && maxStack == 0) {
                        throw new RuntimeException(
                                "Data flow checking option requires valid, non zero maxLocals and maxStack values.");
                    }
                    e.printStackTrace();
                    StringWriter sw = new StringWriter();
                    PrintWriter pw = new PrintWriter(sw, true);
                    CheckClassAdapter.printAnalyzerResult(this, a, pw);
                    pw.close();
                    throw new RuntimeException(e.getMessage() + ' '
                            + sw.toString());
                }
                accept(cmv);
            }

            @Override
            public void visitEnd() {
                Analyzer<BasicValue> a = new Analyzer<BasicValue>(
                        new BasicVerifier());
                try {
                    a.analyze("dummy", this);
                } catch (Exception e) {
                    if (e instanceof IndexOutOfBoundsException
                            && maxLocals == 0 && maxStack == 0) {
                        throw new RuntimeException(
                                "Data flow checking option requires valid, non zero maxLocals and maxStack values.");
                    }
                    e.printStackTrace();
                    StringWriter sw = new StringWriter();
                    PrintWriter pw = new PrintWriter(sw, true);
                    CheckClassAdapter.printAnalyzerResult(this, a, pw);
                    pw.close();
                    throw new RuntimeException(e.getMessage() + ' '
                            + sw.toString());
                }
                accept(cmv);
            }

Replace Generic With Diamond Analyzer<BasicValue> with Analyzer<> in method public visitEnd() : void from class org.objectweb.asm.util.CheckMethodAdapter.CheckMethodAdapter.new MethodNode


    /**
     * Constructs a new {@link CheckMethodAdapter} object. This method adapter
     * will perform basic data flow checks. For instance in a method whose
     * signature is <tt>void m ()</tt>, the invalid instruction IRETURN, or the
     * invalid sequence IADD L2I will be detected.
     *
     * @param access
     *            the method's access flags.
     * @param name
     *            the method's name.
     * @param desc
     *            the method's descriptor (see {@link Type Type}).
     * @param cmv
     *            the method visitor to which this adapter must delegate calls.
     * @param labels
     *            a map of already visited labels (in other methods).
     */
    public CheckMethodAdapter(final int access, final String name,
            final String desc, final MethodVisitor cmv,
            final Map<Label, Integer> labels) {
        this(new MethodNode(Opcodes.ASM5, null, access, name, desc, null, null) {
            @Override
            public void visitEnd() {
                Analyzer<BasicValue> a = new Analyzer<>(
                        new BasicVerifier());
                try {
                    a.analyze("dummy", this);
                } catch (Exception e) {
                    if (e instanceof IndexOutOfBoundsException
                            && maxLocals == 0 && maxStack == 0) {
                        throw new RuntimeException(
                                "Data flow checking option requires valid, non zero maxLocals and maxStack values.");
                    }
                    e.printStackTrace();
                    StringWriter sw = new StringWriter();
                    PrintWriter pw = new PrintWriter(sw, true);
                    CheckClassAdapter.printAnalyzerResult(this, a, pw);
                    pw.close();
                    throw new RuntimeException(e.getMessage() + ' '
                            + sw.toString());
                }
                accept(cmv);
            }
        }, labels);
        this.access = access;
    }

    /**
     * Constructs a new {@link CheckMethodAdapter} object. This method adapter
     * will perform basic data flow checks. For instance in a method whose
     * signature is <tt>void m ()</tt>, the invalid instruction IRETURN, or the
     * invalid sequence IADD L2I will be detected.
     *
     * @param access
     *            the method's access flags.
     * @param name
     *            the method's name.
     * @param desc
     *            the method's descriptor (see {@link Type Type}).
     * @param cmv
     *            the method visitor to which this adapter must delegate calls.
     * @param labels
     *            a map of already visited labels (in other methods).
     */
    public CheckMethodAdapter(final int access, final String name,
            final String desc, final MethodVisitor cmv,
            final Map<Label, Integer> labels) {
        this(new MethodNode(Opcodes.ASM5, null, access, name, desc, null, null) {
            @Override
            public void visitEnd() {
                Analyzer<BasicValue> a = new Analyzer<BasicValue>(
                        new BasicVerifier());
                try {
                    a.analyze("dummy", this);
                } catch (Exception e) {
                    if (e instanceof IndexOutOfBoundsException
                            && maxLocals == 0 && maxStack == 0) {
                        throw new RuntimeException(
                                "Data flow checking option requires valid, non zero maxLocals and maxStack values.");
                    }
                    e.printStackTrace();
                    StringWriter sw = new StringWriter();
                    PrintWriter pw = new PrintWriter(sw, true);
                    CheckClassAdapter.printAnalyzerResult(this, a, pw);
                    pw.close();
                    throw new RuntimeException(e.getMessage() + ' '
                            + sw.toString());
                }
                accept(cmv);
            }
        }, labels);
        this.access = access;
    }

Replace Generic With Diamond Analyzer<BasicValue> with Analyzer<> in method public CheckMethodAdapter(access int, name String, desc String, cmv MethodVisitor, labels Map<Label,Integer>) from class org.objectweb.asm.util.CheckMethodAdapter


	public SSAGenPass(ControlFlowGraphBuilder builder) {
		super(builder);

		svar0 = builder.graph.getLocals().newLocal(0, true);

		types = new HashMap<>();

		counters = new HashMap<>();
		stacks = new HashMap<>();
		order = new ArrayList<>();

		insertion = new HashMap<>();
		process = new HashMap<>();

		preorder = new HashMap<>();
		handlers = new HashSet<>();

		latest = new HashMap<>();
		deferred = new HashSet<>();
		shadowed = new NullPermeableHashMap<>(k -> {
			Set<VersionedLocal> set = new HashSet<>();
			set.add(k);
			return set;
		});
	}

	public SSAGenPass(ControlFlowGraphBuilder builder) {
		super(builder);

		svar0 = builder.graph.getLocals().newLocal(0, true);

		types = new HashMap<>();

		counters = new HashMap<>();
		stacks = new HashMap<>();
		order = new ArrayList<>();

		insertion = new HashMap<>();
		process = new HashMap<>();

		preorder = new HashMap<>();
		handlers = new HashSet<>();

		latest = new HashMap<>();
		deferred = new HashSet<>();
		shadowed = new NullPermeableHashMap<>(new KeyedValueCreator<VersionedLocal, Set<VersionedLocal>>() {
			@Override
			public Set<VersionedLocal> create(VersionedLocal k) {
				Set<VersionedLocal> set = new HashSet<>();
				set.add(k);
				return set;
			}
		});
	}

Replace Anonymous With Lambda org.mapleir.ir.cfg.builder.SSAGenPass.SSAGenPass.new NullPermeableHashMap<>.new KeyedValueCreator<VersionedLocal,Set<VersionedLocal>> with k -> {Set<VersionedLocal> set=new HashSet<>(); in method public SSAGenPass(builder ControlFlowGraphBuilder) from class org.mapleir.ir.cfg.builder.SSAGenPass


	public Set<MethodNode> getMethodsFromSuper(ClassNode node, String name, String desc, boolean isStatic) {
		Set<MethodNode> methods = new HashSet<>();
		for (ClassNode super_ : getSupers(node)) {
			for (MethodNode mn : super_.methods) {
				if (mn.name.equals(name) && mn.desc.equals(desc) && ((mn.access & Opcodes.ACC_STATIC) != 0) == isStatic) {
					methods.add(mn);
				}
			}
		}
		return methods;
	}

	public Set<MethodNode> getMethodsFromSuper(ClassNode node, String name, String desc, boolean isStatic) {
		Set<MethodNode> methods = new HashSet<MethodNode>();
		for (ClassNode super_ : getSupers(node)) {
			for (MethodNode mn : super_.methods) {
				if (mn.name.equals(name) && mn.desc.equals(desc) && ((mn.access & Opcodes.ACC_STATIC) != 0) == isStatic) {
					methods.add(mn);
				}
			}
		}
		return methods;
	}

Replace Generic With Diamond HashSet<MethodNode> with HashSet<> in method public getMethodsFromSuper(node ClassNode, name String, desc String, isStatic boolean) : Set<MethodNode> from class org.mapleir.stdlib.klass.ClassTree


	public Set<MethodNode> getMethodsFromDelegates(ClassNode node, String name, String desc, boolean isStatic) {
		Set<MethodNode> methods = new HashSet<>();
		for (ClassNode delegate : getDelegates(node)) {
			for (MethodNode mn : delegate.methods) {
				if (mn.name.equals(name) && mn.desc.equals(desc) && ((mn.access & Opcodes.ACC_STATIC) != 0) == isStatic) {
					methods.add(mn);
				}
			}
		}
		return methods;
	}

	public Set<MethodNode> getMethodsFromDelegates(ClassNode node, String name, String desc, boolean isStatic) {
		Set<MethodNode> methods = new HashSet<MethodNode>();
		for (ClassNode delegate : getDelegates(node)) {
			for (MethodNode mn : delegate.methods) {
				if (mn.name.equals(name) && mn.desc.equals(desc) && ((mn.access & Opcodes.ACC_STATIC) != 0) == isStatic) {
					methods.add(mn);
				}
			}
		}
		return methods;
	}

Replace Generic With Diamond HashSet<MethodNode> with HashSet<> in method public getMethodsFromDelegates(node ClassNode, name String, desc String, isStatic boolean) : Set<MethodNode> from class org.mapleir.stdlib.klass.ClassTree


	public InstructionPrinter(MethodNode m) {
		mNode = m;
		labels = new HashMap<>();
		// matchedInsns = new ArrayList<AbstractInsnNode>(); // ingnored because match = false
		match = false;
	}

	public InstructionPrinter(MethodNode m) {
		mNode = m;
		labels = new HashMap<LabelNode, Integer>();
		// matchedInsns = new ArrayList<AbstractInsnNode>(); // ingnored because match = false
		match = false;
	}

Replace Generic With Diamond HashMap<LabelNode,Integer> with HashMap<> in method public InstructionPrinter(m MethodNode) from class org.topdank.banalysis.asm.insn.InstructionPrinter


	/**
	 * Creates the print
	 * @return The print as an ArrayList
	 */
	public ArrayList<String> createPrint() {
		ArrayList<String> info = new ArrayList<>();
		ListIterator<?> it = mNode.instructions.iterator();
		while (it.hasNext()) {
			AbstractInsnNode ain = (AbstractInsnNode) it.next();
			String line = "";
			if (ain instanceof VarInsnNode) {
				line = printVarInsnNode((VarInsnNode) ain, it);
			} else if (ain instanceof IntInsnNode) {
				line = printIntInsnNode((IntInsnNode) ain, it);
			} else if (ain instanceof FieldInsnNode) {
				line = printFieldInsnNode((FieldInsnNode) ain, it);
			} else if (ain instanceof MethodInsnNode) {
				line = printMethodInsnNode((MethodInsnNode) ain, it);
			} else if (ain instanceof LdcInsnNode) {
				line = printLdcInsnNode((LdcInsnNode) ain, it);
			} else if (ain instanceof InsnNode) {
				line = printInsnNode((InsnNode) ain, it);
			} else if (ain instanceof JumpInsnNode) {
				line = printJumpInsnNode((JumpInsnNode) ain, it);
			} else if (ain instanceof LineNumberNode) {
				line = printLineNumberNode((LineNumberNode) ain, it);
			} else if (ain instanceof LabelNode) {
				line = printLabelnode((LabelNode) ain);
			} else if (ain instanceof TypeInsnNode) {
				line = printTypeInsnNode((TypeInsnNode) ain);
			} else if (ain instanceof FrameNode) {
				line = printFrameNode((FrameNode) ain);
			} else if (ain instanceof IincInsnNode) {
				line = printIincInsnNode((IincInsnNode) ain);
			} else if (ain instanceof TableSwitchInsnNode) {
				line = printTableSwitchInsnNode((TableSwitchInsnNode) ain);
			} else if (ain instanceof LookupSwitchInsnNode) {
				line = printLookupSwitchInsnNode((LookupSwitchInsnNode) ain);
			} else if (ain instanceof MultiANewArrayInsnNode) {
				line = printMultiANewArrayInsnNode((MultiANewArrayInsnNode) ain);
			} else {
				line += "UNKNOWN-NODE: " + nameOpcode(ain.opcode()) + " " + ain.toString();
			}
			if (!line.equals("")) {
				if (match)
					if (matchedInsns.contains(ain))
						line = "   -> " + line;

				info.add(line);
			}
		}
		return info;
	}

	/**
	 * Creates the print
	 * @return The print as an ArrayList
	 */
	public ArrayList<String> createPrint() {
		ArrayList<String> info = new ArrayList<String>();
		ListIterator<?> it = mNode.instructions.iterator();
		while (it.hasNext()) {
			AbstractInsnNode ain = (AbstractInsnNode) it.next();
			String line = "";
			if (ain instanceof VarInsnNode) {
				line = printVarInsnNode((VarInsnNode) ain, it);
			} else if (ain instanceof IntInsnNode) {
				line = printIntInsnNode((IntInsnNode) ain, it);
			} else if (ain instanceof FieldInsnNode) {
				line = printFieldInsnNode((FieldInsnNode) ain, it);
			} else if (ain instanceof MethodInsnNode) {
				line = printMethodInsnNode((MethodInsnNode) ain, it);
			} else if (ain instanceof LdcInsnNode) {
				line = printLdcInsnNode((LdcInsnNode) ain, it);
			} else if (ain instanceof InsnNode) {
				line = printInsnNode((InsnNode) ain, it);
			} else if (ain instanceof JumpInsnNode) {
				line = printJumpInsnNode((JumpInsnNode) ain, it);
			} else if (ain instanceof LineNumberNode) {
				line = printLineNumberNode((LineNumberNode) ain, it);
			} else if (ain instanceof LabelNode) {
				line = printLabelnode((LabelNode) ain);
			} else if (ain instanceof TypeInsnNode) {
				line = printTypeInsnNode((TypeInsnNode) ain);
			} else if (ain instanceof FrameNode) {
				line = printFrameNode((FrameNode) ain);
			} else if (ain instanceof IincInsnNode) {
				line = printIincInsnNode((IincInsnNode) ain);
			} else if (ain instanceof TableSwitchInsnNode) {
				line = printTableSwitchInsnNode((TableSwitchInsnNode) ain);
			} else if (ain instanceof LookupSwitchInsnNode) {
				line = printLookupSwitchInsnNode((LookupSwitchInsnNode) ain);
			} else if (ain instanceof MultiANewArrayInsnNode) {
				line = printMultiANewArrayInsnNode((MultiANewArrayInsnNode) ain);
			} else {
				line += "UNKNOWN-NODE: " + nameOpcode(ain.opcode()) + " " + ain.toString();
			}
			if (!line.equals("")) {
				if (match)
					if (matchedInsns.contains(ain))
						line = "   -> " + line;

				info.add(line);
			}
		}
		return info;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public createPrint() : ArrayList<String> from class org.topdank.banalysis.asm.insn.InstructionPrinter


    @Override
    public void visitParameter(String name, int access) {
        if (parameters == null) {
            parameters = new ArrayList<>(5);
        }
        parameters.add(new ParameterNode(name, access));
    }

    @Override
    public void visitParameter(String name, int access) {
        if (parameters == null) {
            parameters = new ArrayList<ParameterNode>(5);
        }
        parameters.add(new ParameterNode(name, access));
    }

Replace Generic With Diamond ArrayList<ParameterNode> with ArrayList<> in method public visitParameter(name String, access int) : void from class org.objectweb.asm.tree.MethodNode


    @Override
    @SuppressWarnings("unchecked")
    public AnnotationVisitor visitParameterAnnotation(final int parameter,
            final String desc, final boolean visible) {
        AnnotationNode an = new AnnotationNode(desc);
        if (visible) {
            if (visibleParameterAnnotations == null) {
                int params = Type.getArgumentTypes(this.desc).length;
                visibleParameterAnnotations = (List<AnnotationNode>[]) new List<?>[params];
            }
            if (visibleParameterAnnotations[parameter] == null) {
                visibleParameterAnnotations[parameter] = new ArrayList<>(
                        1);
            }
            visibleParameterAnnotations[parameter].add(an);
        } else {
            if (invisibleParameterAnnotations == null) {
                int params = Type.getArgumentTypes(this.desc).length;
                invisibleParameterAnnotations = (List<AnnotationNode>[]) new List<?>[params];
            }
            if (invisibleParameterAnnotations[parameter] == null) {
                invisibleParameterAnnotations[parameter] = new ArrayList<>(
                        1);
            }
            invisibleParameterAnnotations[parameter].add(an);
        }
        return an;
    }

    @Override
    @SuppressWarnings("unchecked")
    public AnnotationVisitor visitParameterAnnotation(final int parameter,
            final String desc, final boolean visible) {
        AnnotationNode an = new AnnotationNode(desc);
        if (visible) {
            if (visibleParameterAnnotations == null) {
                int params = Type.getArgumentTypes(this.desc).length;
                visibleParameterAnnotations = (List<AnnotationNode>[]) new List<?>[params];
            }
            if (visibleParameterAnnotations[parameter] == null) {
                visibleParameterAnnotations[parameter] = new ArrayList<AnnotationNode>(
                        1);
            }
            visibleParameterAnnotations[parameter].add(an);
        } else {
            if (invisibleParameterAnnotations == null) {
                int params = Type.getArgumentTypes(this.desc).length;
                invisibleParameterAnnotations = (List<AnnotationNode>[]) new List<?>[params];
            }
            if (invisibleParameterAnnotations[parameter] == null) {
                invisibleParameterAnnotations[parameter] = new ArrayList<AnnotationNode>(
                        1);
            }
            invisibleParameterAnnotations[parameter].add(an);
        }
        return an;
    }

Replace Generic With Diamond ArrayList<AnnotationNode> with ArrayList<> in method public visitParameterAnnotation(parameter int, desc String, visible boolean) : AnnotationVisitor from class org.objectweb.asm.tree.MethodNode


    @Override
    public AnnotationVisitor visitInsnAnnotation(int typeRef,
            TypePath typePath, String desc, boolean visible) {
        // Finds the last real instruction, i.e. the instruction targeted by
        // this annotation.
        AbstractInsnNode insn = instructions.getLast();
        while (insn.opcode() == -1) {
            insn = insn.getPrevious();
        }
        // Adds the annotation to this instruction.
        TypeAnnotationNode an = new TypeAnnotationNode(typeRef, typePath, desc);
        if (visible) {
            if (insn.visibleTypeAnnotations == null) {
                insn.visibleTypeAnnotations = new ArrayList<>(
                        1);
            }
            insn.visibleTypeAnnotations.add(an);
        } else {
            if (insn.invisibleTypeAnnotations == null) {
                insn.invisibleTypeAnnotations = new ArrayList<>(
                        1);
            }
            insn.invisibleTypeAnnotations.add(an);
        }
        return an;
    }

    @Override
    public AnnotationVisitor visitInsnAnnotation(int typeRef,
            TypePath typePath, String desc, boolean visible) {
        // Finds the last real instruction, i.e. the instruction targeted by
        // this annotation.
        AbstractInsnNode insn = instructions.getLast();
        while (insn.opcode() == -1) {
            insn = insn.getPrevious();
        }
        // Adds the annotation to this instruction.
        TypeAnnotationNode an = new TypeAnnotationNode(typeRef, typePath, desc);
        if (visible) {
            if (insn.visibleTypeAnnotations == null) {
                insn.visibleTypeAnnotations = new ArrayList<TypeAnnotationNode>(
                        1);
            }
            insn.visibleTypeAnnotations.add(an);
        } else {
            if (insn.invisibleTypeAnnotations == null) {
                insn.invisibleTypeAnnotations = new ArrayList<TypeAnnotationNode>(
                        1);
            }
            insn.invisibleTypeAnnotations.add(an);
        }
        return an;
    }

Replace Generic With Diamond ArrayList<TypeAnnotationNode> with ArrayList<> in method public visitInsnAnnotation(typeRef int, typePath TypePath, desc String, visible boolean) : AnnotationVisitor from class org.objectweb.asm.tree.MethodNode


    @Override
    public AnnotationVisitor visitTryCatchAnnotation(int typeRef,
            TypePath typePath, String desc, boolean visible) {
        TryCatchBlockNode tcb = tryCatchBlocks.get((typeRef & 0x00FFFF00) >> 8);
        TypeAnnotationNode an = new TypeAnnotationNode(typeRef, typePath, desc);
        if (visible) {
            if (tcb.visibleTypeAnnotations == null) {
                tcb.visibleTypeAnnotations = new ArrayList<>(
                        1);
            }
            tcb.visibleTypeAnnotations.add(an);
        } else {
            if (tcb.invisibleTypeAnnotations == null) {
                tcb.invisibleTypeAnnotations = new ArrayList<>(
                        1);
            }
            tcb.invisibleTypeAnnotations.add(an);
        }
        return an;
    }

    @Override
    public AnnotationVisitor visitTryCatchAnnotation(int typeRef,
            TypePath typePath, String desc, boolean visible) {
        TryCatchBlockNode tcb = tryCatchBlocks.get((typeRef & 0x00FFFF00) >> 8);
        TypeAnnotationNode an = new TypeAnnotationNode(typeRef, typePath, desc);
        if (visible) {
            if (tcb.visibleTypeAnnotations == null) {
                tcb.visibleTypeAnnotations = new ArrayList<TypeAnnotationNode>(
                        1);
            }
            tcb.visibleTypeAnnotations.add(an);
        } else {
            if (tcb.invisibleTypeAnnotations == null) {
                tcb.invisibleTypeAnnotations = new ArrayList<TypeAnnotationNode>(
                        1);
            }
            tcb.invisibleTypeAnnotations.add(an);
        }
        return an;
    }

Replace Generic With Diamond ArrayList<TypeAnnotationNode> with ArrayList<> in method public visitTryCatchAnnotation(typeRef int, typePath TypePath, desc String, visible boolean) : AnnotationVisitor from class org.objectweb.asm.tree.MethodNode


    @Override
    public AnnotationVisitor visitLocalVariableAnnotation(int typeRef,
            TypePath typePath, Label[] start, Label[] end, int[] index,
            String desc, boolean visible) {
        LocalVariableAnnotationNode an = new LocalVariableAnnotationNode(
                typeRef, typePath, getLabelNodes(start), getLabelNodes(end),
                index, desc);
        if (visible) {
            if (visibleLocalVariableAnnotations == null) {
                visibleLocalVariableAnnotations = new ArrayList<>(
                        1);
            }
            visibleLocalVariableAnnotations.add(an);
        } else {
            if (invisibleLocalVariableAnnotations == null) {
                invisibleLocalVariableAnnotations = new ArrayList<>(
                        1);
            }
            invisibleLocalVariableAnnotations.add(an);
        }
        return an;
    }

    @Override
    public AnnotationVisitor visitLocalVariableAnnotation(int typeRef,
            TypePath typePath, Label[] start, Label[] end, int[] index,
            String desc, boolean visible) {
        LocalVariableAnnotationNode an = new LocalVariableAnnotationNode(
                typeRef, typePath, getLabelNodes(start), getLabelNodes(end),
                index, desc);
        if (visible) {
            if (visibleLocalVariableAnnotations == null) {
                visibleLocalVariableAnnotations = new ArrayList<LocalVariableAnnotationNode>(
                        1);
            }
            visibleLocalVariableAnnotations.add(an);
        } else {
            if (invisibleLocalVariableAnnotations == null) {
                invisibleLocalVariableAnnotations = new ArrayList<LocalVariableAnnotationNode>(
                        1);
            }
            invisibleLocalVariableAnnotations.add(an);
        }
        return an;
    }

Replace Generic With Diamond ArrayList<LocalVariableAnnotationNode> with ArrayList<> in method public visitLocalVariableAnnotation(typeRef int, typePath TypePath, start Label[], end Label[], index int[], desc String, visible boolean) : AnnotationVisitor from class org.objectweb.asm.tree.MethodNode


	public NullPermeableHashMap() {
		this(new NullCreator<>());
	}

	public NullPermeableHashMap() {
		this(new NullCreator<V>());
	}

Replace Generic With Diamond NullCreator<V> with NullCreator<> in method public NullPermeableHashMap() from class org.mapleir.stdlib.collections.NullPermeableHashMap


	@Override
	public ConditionalJumpEdge<N> clone(N src, N dst) {
		return new ConditionalJumpEdge<>(src, dst, opcode);
	}

	@Override
	public ConditionalJumpEdge<N> clone(N src, N dst) {
		return new ConditionalJumpEdge<N>(src, dst, opcode);
	}

Replace Generic With Diamond ConditionalJumpEdge<N> with ConditionalJumpEdge<> in method public clone(src N, dst N) : ConditionalJumpEdge<N> from class org.mapleir.stdlib.cfg.edge.ConditionalJumpEdge


	@Override
	public DefaultSwitchEdge<N> clone(N src, N dst) {
		return new DefaultSwitchEdge<>(src, dst, insn);
	}

	@Override
	public DefaultSwitchEdge<N> clone(N src, N dst) {
		return new DefaultSwitchEdge<N>(src, dst, insn);
	}

Replace Generic With Diamond DefaultSwitchEdge<N> with DefaultSwitchEdge<> in method public clone(src N, dst N) : DefaultSwitchEdge<N> from class org.mapleir.stdlib.cfg.edge.DefaultSwitchEdge


	@Override
	public ImmediateEdge<N> clone(N src, N dst) {
		return new ImmediateEdge<>(src, dst);
	}

	@Override
	public ImmediateEdge<N> clone(N src, N dst) {
		return new ImmediateEdge<N>(src, dst);
	}

Replace Generic With Diamond ImmediateEdge<N> with ImmediateEdge<> in method public clone(src N, dst N) : ImmediateEdge<N> from class org.mapleir.stdlib.cfg.edge.ImmediateEdge


	@Override
	public SwitchEdge<N> clone(N src, N dst) {
		return new SwitchEdge<>(src, dst, insn, value);
	}

	@Override
	public SwitchEdge<N> clone(N src, N dst) {
		return new SwitchEdge<N>(src, dst, insn, value);
	}

Replace Generic With Diamond SwitchEdge<N> with SwitchEdge<> in method public clone(src N, dst N) : SwitchEdge<N> from class org.mapleir.stdlib.cfg.edge.SwitchEdge


	@Override
	public TryCatchEdge<N> clone(N src, N dst) {
		return new TryCatchEdge<>(src, erange);
	}

	@Override
	public TryCatchEdge<N> clone(N src, N dst) {
		return new TryCatchEdge<N>(src, erange);
	}

Replace Generic With Diamond TryCatchEdge<N> with TryCatchEdge<> in method public clone(src N, dst N) : TryCatchEdge<N> from class org.mapleir.stdlib.cfg.edge.TryCatchEdge


	@Override
	public UnconditionalJumpEdge<N> clone(N src, N dst) {
		return new UnconditionalJumpEdge<>(src, dst, opcode);
	}

	@Override
	public UnconditionalJumpEdge<N> clone(N src, N dst) {
		return new UnconditionalJumpEdge<N>(src, dst, opcode);
	}

Replace Generic With Diamond UnconditionalJumpEdge<N> with UnconditionalJumpEdge<> in method public clone(src N, dst N) : UnconditionalJumpEdge<N> from class org.mapleir.stdlib.cfg.edge.UnconditionalJumpEdge


	public SSABlockLivenessAnalyser(ControlFlowGraph cfg) {
		use = new NullPermeableHashMap<>(HashSet::new);
		def = new NullPermeableHashMap<>(HashSet::new);
		phiUse = new NullPermeableHashMap<>(() -> new NullPermeableHashMap<>(HashSet::new));
		phiDef = new NullPermeableHashMap<>(HashSet::new);

		out = new NullPermeableHashMap<>(HashSet::new);
		in = new NullPermeableHashMap<>(HashSet::new);

		queue = new LinkedList<>();

		this.cfg = cfg;

		init();
	}

	public SSABlockLivenessAnalyser(ControlFlowGraph cfg) {
		use = new NullPermeableHashMap<>(HashSet::new);
		def = new NullPermeableHashMap<>(HashSet::new);
		phiUse = new NullPermeableHashMap<>(() -> new NullPermeableHashMap<BasicBlock, Set<Local>>(HashSet::new));
		phiDef = new NullPermeableHashMap<>(HashSet::new);

		out = new NullPermeableHashMap<>(HashSet::new);
		in = new NullPermeableHashMap<>(HashSet::new);

		queue = new LinkedList<>();

		this.cfg = cfg;

		init();
	}

Replace Generic With Diamond NullPermeableHashMap<BasicBlock,Set<Local>> with NullPermeableHashMap<> in method public SSABlockLivenessAnalyser(cfg ControlFlowGraph) from class org.mapleir.stdlib.ir.transform.ssa.SSABlockLivenessAnalyser


	public static List<BasicBlock> collectSuccessors(ControlFlowGraph cfg, Collection<BasicBlock> blocks, BasicBlock block) {
		if(!cfg.containsVertex(block)) {
			System.out.println(cfg.vertices());
			throw new IllegalStateException("no block for " + cfg.getMethod() + " " + block);
		}
		List<BasicBlock> list = new ArrayList<>();
		for(FlowEdge<BasicBlock> e : cfg.getEdges(block)) {
			if(blocks.contains(e.dst) && !list.contains(e.dst)) {
				list.add(e.dst);
			}
		}
		return list;
	}

	public static List<BasicBlock> collectSuccessors(ControlFlowGraph cfg, Collection<BasicBlock> blocks, BasicBlock block) {
		if(!cfg.containsVertex(block)) {
			System.out.println(cfg.vertices());
			throw new IllegalStateException("no block for " + cfg.getMethod() + " " + block);
		}
		List<BasicBlock> list = new ArrayList<BasicBlock>();
		for(FlowEdge<BasicBlock> e : cfg.getEdges(block)) {
			if(blocks.contains(e.dst) && !list.contains(e.dst)) {
				list.add(e.dst);
			}
		}
		return list;
	}

Replace Generic With Diamond ArrayList<BasicBlock> with ArrayList<> in method public collectSuccessors(cfg ControlFlowGraph, blocks Collection<BasicBlock>, block BasicBlock) : List<BasicBlock> from class org.mapleir.stdlib.collections.graph.util.GraphUtils


	public static List<BasicBlock> collectSuccessors(ControlFlowGraph cfg, BasicBlock block) {
		if(!cfg.containsVertex(block)) {
			System.out.println(cfg.vertices());
			throw new IllegalStateException("no block for " + cfg.getMethod() + " " + block);
		}
		List<BasicBlock> list = new ArrayList<>();
		for(FlowEdge<BasicBlock> e : cfg.getEdges(block)) {
			if(!list.contains(e.dst)) {
				list.add(e.dst);
			}
		}
		return list;
	}

	public static List<BasicBlock> collectSuccessors(ControlFlowGraph cfg, BasicBlock block) {
		if(!cfg.containsVertex(block)) {
			System.out.println(cfg.vertices());
			throw new IllegalStateException("no block for " + cfg.getMethod() + " " + block);
		}
		List<BasicBlock> list = new ArrayList<BasicBlock>();
		for(FlowEdge<BasicBlock> e : cfg.getEdges(block)) {
			if(!list.contains(e.dst)) {
				list.add(e.dst);
			}
		}
		return list;
	}

Replace Generic With Diamond ArrayList<BasicBlock> with ArrayList<> in method public collectSuccessors(cfg ControlFlowGraph, block BasicBlock) : List<BasicBlock> from class org.mapleir.stdlib.collections.graph.util.GraphUtils


	public static Set<BasicBlock> collectPredecessors(ControlFlowGraph cfg, BasicBlock block) {
		Set<BasicBlock> list = new HashSet<>();
		for(FlowEdge<BasicBlock> e : cfg.getReverseEdges(block)) {
			if(!list.contains(e.src)) {
				list.add(e.src);
			}
		}
		return list;
	}

	public static Set<BasicBlock> collectPredecessors(ControlFlowGraph cfg, BasicBlock block) {
		Set<BasicBlock> list = new HashSet<BasicBlock>();
		for(FlowEdge<BasicBlock> e : cfg.getReverseEdges(block)) {
			if(!list.contains(e.src)) {
				list.add(e.src);
			}
		}
		return list;
	}

Replace Generic With Diamond HashSet<BasicBlock> with HashSet<> in method public collectPredecessors(cfg ControlFlowGraph, block BasicBlock) : Set<BasicBlock> from class org.mapleir.stdlib.collections.graph.util.GraphUtils


	public static List<BasicBlock> range(List<BasicBlock> gblocks, int start, int end) {
		if(start > end) {
			throw new IllegalArgumentException("start > end: " + start + " > " + end);
		}
		BasicBlock startBlock = null, endBlock = null;
		int startIndex = 0, endIndex = 0;
		String startName = LabelHelper.createBlockName(start);
		String endName = LabelHelper.createBlockName(end);
		int blockIndex = 0;
		for(BasicBlock b : gblocks) {
			if(b.getId().equals(startName)) {
				startBlock = b;
				startIndex = blockIndex;
			}
			if(b.getId().equals(endName)) {
				endBlock = b;
				endIndex = blockIndex;
			}

			if(startBlock != null && endBlock != null) {
				break;
			}
			blockIndex++;
		}

		if(startBlock == null || endBlock == null) {
			throw new UnsupportedOperationException("start or end null, " + start + " " + end);
		} else if(startIndex > endIndex) {
			throw new IllegalArgumentException("startIndex > endIndex: " + startIndex + " > " + endIndex);
		}

		List<BasicBlock> blocks = new ArrayList<>();
		for(int i=startIndex; i <= endIndex; i++) {
			BasicBlock block = gblocks.get(i);
			if(block == null) {
				throw new IllegalArgumentException("block " + LabelHelper.createBlockName(i) + "not in range");
			}
			blocks.add(block);
		}

		return blocks;
	}

	public static List<BasicBlock> range(List<BasicBlock> gblocks, int start, int end) {
		if(start > end) {
			throw new IllegalArgumentException("start > end: " + start + " > " + end);
		}
		BasicBlock startBlock = null, endBlock = null;
		int startIndex = 0, endIndex = 0;
		String startName = LabelHelper.createBlockName(start);
		String endName = LabelHelper.createBlockName(end);
		int blockIndex = 0;
		for(BasicBlock b : gblocks) {
			if(b.getId().equals(startName)) {
				startBlock = b;
				startIndex = blockIndex;
			}
			if(b.getId().equals(endName)) {
				endBlock = b;
				endIndex = blockIndex;
			}

			if(startBlock != null && endBlock != null) {
				break;
			}
			blockIndex++;
		}

		if(startBlock == null || endBlock == null) {
			throw new UnsupportedOperationException("start or end null, " + start + " " + end);
		} else if(startIndex > endIndex) {
			throw new IllegalArgumentException("startIndex > endIndex: " + startIndex + " > " + endIndex);
		}

		List<BasicBlock> blocks = new ArrayList<BasicBlock>();
		for(int i=startIndex; i <= endIndex; i++) {
			BasicBlock block = gblocks.get(i);
			if(block == null) {
				throw new IllegalArgumentException("block " + LabelHelper.createBlockName(i) + "not in range");
			}
			blocks.add(block);
		}

		return blocks;
	}

Replace Generic With Diamond ArrayList<BasicBlock> with ArrayList<> in method public range(gblocks List<BasicBlock>, start int, end int) : List<BasicBlock> from class org.mapleir.stdlib.collections.graph.util.GraphUtils


	public static List<FlowEdge<BasicBlock>> findCommonEdges(ControlFlowGraph cfg, BasicBlock src, BasicBlock dst) {
		List<FlowEdge<BasicBlock>> edges = new ArrayList<>();
		for(FlowEdge<BasicBlock> e : cfg.getEdges(src)) {
			if(e.dst == dst) {
				edges.add(e);
			}
		}
		return edges;
	}

	public static List<FlowEdge<BasicBlock>> findCommonEdges(ControlFlowGraph cfg, BasicBlock src, BasicBlock dst) {
		List<FlowEdge<BasicBlock>> edges = new ArrayList<FlowEdge<BasicBlock>>();
		for(FlowEdge<BasicBlock> e : cfg.getEdges(src)) {
			if(e.dst == dst) {
				edges.add(e);
			}
		}
		return edges;
	}

Replace Generic With Diamond ArrayList<FlowEdge<BasicBlock>> with ArrayList<> in method public findCommonEdges(cfg ControlFlowGraph, src BasicBlock, dst BasicBlock) : List<FlowEdge<BasicBlock>> from class org.mapleir.stdlib.collections.graph.util.GraphUtils


	public static List<Type> getCommonType(Type a, Type b, ClassTree tree) {
		ClassNode an = tree.getClass(a.getClassName());
		ClassNode bn = tree.getClass(b.getClassName());

		Set<ClassNode> ancestorsa = getClassesBfs(an, tree);
		Set<ClassNode> ancestorsb = getClassesBfs(bn, tree);

		// ancestorsa ∩ ancestorsb
		ancestorsa.retainAll(ancestorsb);

		List<Type> types = new ArrayList<>();

		for (ClassNode cn : ancestorsa) {
			types.add(Type.getType(cn.name));
		}

		return types;
	}

	public static List<Type> getCommonType(Type a, Type b, ClassTree tree) {
		ClassNode an = tree.getClass(a.getClassName());
		ClassNode bn = tree.getClass(b.getClassName());

		Set<ClassNode> ancestorsa = getClassesBfs(an, tree);
		Set<ClassNode> ancestorsb = getClassesBfs(bn, tree);

		// ancestorsa ∩ ancestorsb
		ancestorsa.retainAll(ancestorsb);

		List<Type> types = new ArrayList<Type>();

		for (ClassNode cn : ancestorsa) {
			types.add(Type.getType(cn.name));
		}

		return types;
	}

Replace Generic With Diamond ArrayList<Type> with ArrayList<> in method public getCommonType(a Type, b Type, tree ClassTree) : List<Type> from class org.mapleir.stdlib.cfg.util.TypeUtils


	public SSAGenerator(CodeBody body, ControlFlowGraph cfg, Map<BasicBlock, BlockHeaderStatement> headers) {
		this.body = body;
		this.cfg = cfg;
		this.headers = headers;

		handler = body.getLocals();

		translation = new HashMap<>();

		locals = new HashSet<>();
		queue = new LinkedList<>();
		assigns = new SetMultimap<>();
		insertion = new HashMap<>();
		process = new HashMap<>();
		exit = new BasicBlock(cfg, "fakeexit", null);

		counters = new HashMap<>();
		stacks = new HashMap<>();

		liveness = new LivenessAnalyser(StatementGraphBuilder.create(cfg));

		init();
		doms = new TarjanDominanceComputor<>(cfg);
	}

	public SSAGenerator(CodeBody body, ControlFlowGraph cfg, Map<BasicBlock, BlockHeaderStatement> headers) {
		this.body = body;
		this.cfg = cfg;
		this.headers = headers;

		handler = body.getLocals();

		translation = new HashMap<>();

		locals = new HashSet<>();
		queue = new LinkedList<>();
		assigns = new SetMultimap<Local, BasicBlock>();
		insertion = new HashMap<>();
		process = new HashMap<>();
		exit = new BasicBlock(cfg, "fakeexit", null);

		counters = new HashMap<>();
		stacks = new HashMap<>();

		liveness = new LivenessAnalyser(StatementGraphBuilder.create(cfg));

		init();
		doms = new TarjanDominanceComputor<>(cfg);
	}

Replace Generic With Diamond SetMultimap<Local,BasicBlock> with SetMultimap<> in method public SSAGenerator(body CodeBody, cfg ControlFlowGraph, headers Map<BasicBlock,BlockHeaderStatement>) from class org.rsdeob.stdlib.ir.gen.SSAGenerator


	public BasicBlock(ControlFlowGraph cfg, String id, LabelNode label, ExpressionStack stack) {
		this.cfg = cfg;
		this.id = id;
		this.label = label;
		inputStack = stack;

		hashcode = 31 + id.hashCode();
		insns = new ArrayList<>();
		statements = new ArrayList<>();
	}

	public BasicBlock(ControlFlowGraph cfg, String id, LabelNode label, ExpressionStack stack) {
		this.cfg = cfg;
		this.id = id;
		this.label = label;
		inputStack = stack;

		hashcode = 31 + id.hashCode();
		insns = new ArrayList<AbstractInsnNode>();
		statements = new ArrayList<>();
	}

Replace Generic With Diamond ArrayList<AbstractInsnNode> with ArrayList<> in method public BasicBlock(cfg ControlFlowGraph, id String, label LabelNode, stack ExpressionStack) from class org.rsdeob.stdlib.cfg.BasicBlock


	@Override
	public Iterator<N> iterator(FlowGraph<N, ?> graph) {
		return new DepthFirstSorterImplIteratorImpl<>(graph);
	}

	@Override
	public Iterator<N> iterator(FlowGraph<N, ?> graph) {
		return new DepthFirstSorterImplIteratorImpl<N>(graph);
	}

Replace Generic With Diamond DepthFirstSorterImplIteratorImpl<N> with DepthFirstSorterImplIteratorImpl<> in method public iterator(graph FlowGraph<N,?>) : Iterator<N> from class org.rsdeob.stdlib.collections.graph.flow.DepthFirstSorterImpl


	private List<MethodNode> findEntries(ClassTree tree, ClassNode cn) {
		List<MethodNode> methods = new ArrayList<>();
		for (MethodNode mn : cn.methods) {
			if (adapter.shouldMap(this, mn)) {
				methods.add(mn);
			}
		}
		return methods;
	}

	private List<MethodNode> findEntries(ClassTree tree, ClassNode cn) {
		List<MethodNode> methods = new ArrayList<MethodNode>();
		for (MethodNode mn : cn.methods) {
			if (adapter.shouldMap(this, mn)) {
				methods.add(mn);
			}
		}
		return methods;
	}

Replace Generic With Diamond ArrayList<MethodNode> with ArrayList<> in method private findEntries(tree ClassTree, cn ClassNode) : List<MethodNode> from class org.rsdeob.stdlib.call.CallGraph


	public void write(Statement node) {
		if(shouldExpand()) {
			expand();
		}

		if (children[ptr] == null) {
			writeAt(ptr, node);
			onChildUpdated(ptr++);
		} else {
			List<Statement> writeable = new ArrayList<>();
			for (int i = ptr; i < children.length; i++) {
				if (children[i] != null) {
					writeable.add(children[i]);
					writeAt(i, null);
				}
			}
			writeAt(ptr, node);
			onChildUpdated(ptr);
			int writePtr = ++ptr;
			for (Statement n : writeable) {
				writeAt(writePtr, n);
				onChildUpdated(writePtr++);
			}
		}
	}

	public void write(Statement node) {
		if(shouldExpand()) {
			expand();
		}

		if (children[ptr] == null) {
			writeAt(ptr, node);
			onChildUpdated(ptr++);
		} else {
			List<Statement> writeable = new ArrayList<Statement>();
			for (int i = ptr; i < children.length; i++) {
				if (children[i] != null) {
					writeable.add(children[i]);
					writeAt(i, null);
				}
			}
			writeAt(ptr, node);
			onChildUpdated(ptr);
			int writePtr = ++ptr;
			for (Statement n : writeable) {
				writeAt(writePtr, n);
				onChildUpdated(writePtr++);
			}
		}
	}

Replace Generic With Diamond ArrayList<Statement> with ArrayList<> in method public write(node Statement) : void from class org.rsdeob.stdlib.cfg.ir.stat.Statement


	public List<Statement> getChildren() {
		List<Statement> list = new ArrayList<>();
		for (int i = 0; i < children.length; i++) {
			if (children[i] != null) {
				list.add(children[i]);
			}
		}
		return list;
	}

	public List<Statement> getChildren() {
		List<Statement> list = new ArrayList<Statement>();
		for (int i = 0; i < children.length; i++) {
			if (children[i] != null) {
				list.add(children[i]);
			}
		}
		return list;
	}

Replace Generic With Diamond ArrayList<Statement> with ArrayList<> in method public getChildren() : List<Statement> from class org.rsdeob.stdlib.cfg.ir.stat.Statement


    /**
     * Returns the mathematical combination of a set of Integer: it's used to generate all the possible combinations of targets
     * @param size size of the set to combine
     * @param r size of the combinations to generate
     * @return a HashMap containing the combinations and their indexes
     */
    private HashMap<Integer, ArrayList<Integer>> combinations(int size, int r) {
        int[] i = new int[size];
        ArrayList<Integer> param = new ArrayList<>();
        for(int k=0; k < size; k++) i[k] = k+1;
        recursiveCombinations(param, i, new int[size], 0, size-1, 0, r);
        HashMap<Integer, ArrayList<Integer>> combs = new HashMap<>();

        for(int j = 0; j < param.size(); j++) {
            combs.put(j, new ArrayList<>());
            int x = 10;
            while(param.get(j)>=x) x*=10;
            x /= 10;
            int cifra=0;
            while(x>=1)
            {
                cifra = param.get(j)/x;
                combs.get(j).add(cifra);
                int box = param.get(j) - cifra*x;
                param.remove(j);
                param.add(j, box);
                x /= 10;
            }
        }

        return combs;
    }

    /**
     * Returns the mathematical combination of a set of Integer: it's used to generate all the possible combinations of targets
     * @param size size of the set to combine
     * @param r size of the combinations to generate
     * @return a HashMap containing the combinations and their indexes
     */
    private HashMap<Integer, ArrayList<Integer>> combinations(int size, int r) {
        int[] i = new int[size];
        ArrayList<Integer> param = new ArrayList<Integer>();
        for(int k=0; k < size; k++) i[k] = k+1;
        recursiveCombinations(param, i, new int[size], 0, size-1, 0, r);
        HashMap<Integer, ArrayList<Integer>> combs = new HashMap<>();

        for(int j = 0; j < param.size(); j++) {
            combs.put(j, new ArrayList<>());
            int x = 10;
            while(param.get(j)>=x) x*=10;
            x /= 10;
            int cifra=0;
            while(x>=1)
            {
                cifra = param.get(j)/x;
                combs.get(j).add(cifra);
                int box = param.get(j) - cifra*x;
                param.remove(j);
                param.add(j, box);
                x /= 10;
            }
        }

        return combs;
    }

Replace Generic With Diamond ArrayList<Integer> with ArrayList<> in method private combinations(size int, r int) : HashMap<Integer,ArrayList<Integer>> from class it.polimi.ingsw.GameLogic


    public ArrayList<Weapon> showWeapons(AmmoColor color) {
        ArrayList<Weapon> decksweapons = new ArrayList<>();
        decksweapons.addAll(weapons.get(color));
        return decksweapons;
    }

    public ArrayList<Weapon> showWeapons(AmmoColor color) {
        ArrayList<Weapon> decksweapons = new ArrayList<Weapon>();
        decksweapons.addAll(weapons.get(color));
        return decksweapons;
    }

Replace Generic With Diamond ArrayList<Weapon> with ArrayList<> in method public showWeapons(color AmmoColor) : ArrayList<Weapon> from class it.polimi.ingsw.Board


    public void addBloodFrom(PlayerColor player, Integer count) {
        int i=0;
        ArrayList<PlayerColor> playerColors = new ArrayList<>();
        do {
            i++;
        } while (skullTrack.get(i).size()!=0);
        for (int j=0; j<count; j++){
            playerColors.add(player);
        }
        skullTrack.replace(i, playerColors );
    }

    public void addBloodFrom(PlayerColor player, Integer count) {
        int i=0;
        ArrayList<PlayerColor> playerColors = new ArrayList<PlayerColor>();
        do {
            i++;
        } while (skullTrack.get(i).size()!=0);
        for (int j=0; j<count; j++){
            playerColors.add(player);
        }
        skullTrack.replace(i, playerColors );
    }

Replace Generic With Diamond ArrayList<PlayerColor> with ArrayList<> in method public addBloodFrom(player PlayerColor, count Integer) : void from class it.polimi.ingsw.Board


    public Cell (ArrayList<Border> borders, CellColor color, boolean respawner, AmmoTile ammoCard) {
        this.borders= new ArrayList<>();
        this.borders.addAll(borders);
        this.color=color;
        this.respawner=respawner;
        this.ammoCard=ammoCard;
    }

    public Cell (ArrayList<Border> borders, CellColor color, boolean respawner, AmmoTile ammoCard) {
        this.borders= new ArrayList<Border>();
        this.borders.addAll(borders);
        this.color=color;
        this.respawner=respawner;
        this.ammoCard=ammoCard;
    }

Replace Generic With Diamond ArrayList<Border> with ArrayList<> in method public Cell(borders ArrayList<Border>, color CellColor, respawner boolean, ammoCard AmmoTile) from class it.polimi.ingsw.Cell


    public ArrayList<Cell> getRoomFromCell (Cell cell) {
        ArrayList<Cell> room = new ArrayList<>();
        int i,j;
        for (i=0; i<rows; i++) {
            for(j=0; j<columns; j++){
                if (map[i][j].getColor().equals(cell.getColor())) room.add(map[i][j]);
            }
        }
        return room;
    }

    public ArrayList<Cell> getRoomFromCell (Cell cell) {
        ArrayList<Cell> room = new ArrayList<Cell>();
        int i,j;
        for (i=0; i<rows; i++) {
            for(j=0; j<columns; j++){
                if (map[i][j].getColor().equals(cell.getColor())) room.add(map[i][j]);
            }
        }
        return room;
    }

Replace Generic With Diamond ArrayList<Cell> with ArrayList<> in method public getRoomFromCell(cell Cell) : ArrayList<Cell> from class it.polimi.ingsw.GameMap


    private ArrayList<Player> getPlayersFromCell (Cell cell){
        ArrayList<Player> playersInThatCell = new ArrayList<>();
        for (Player player : playersPosition.keySet()){
            if (playersPosition.get(player).equals(cell)) playersInThatCell.add(player);
        }
        return playersInThatCell;
    }

    private ArrayList<Player> getPlayersFromCell (Cell cell){
        ArrayList<Player> playersInThatCell = new ArrayList<Player>();
        for (Player player : playersPosition.keySet()){
            if (playersPosition.get(player).equals(cell)) playersInThatCell.add(player);
        }
        return playersInThatCell;
    }

Replace Generic With Diamond ArrayList<Player> with ArrayList<> in method private getPlayersFromCell(cell Cell) : ArrayList<Player> from class it.polimi.ingsw.GameMap


    public ArrayList<Player> getOneMoveAwayTargets (Player player){
        ArrayList<Player> targets = new ArrayList<>();
        for (Direction direction : Direction.values()) {
           if(playersPosition.get(player).adiacency(direction) != Border.wall) {
               targets.addAll(getPlayersFromCell(getCellFromDirection(player, direction)));
           }
        }
        return targets;
    }

    public ArrayList<Player> getOneMoveAwayTargets (Player player){
        ArrayList<Player> targets = new ArrayList<Player>();
        for (Direction direction : Direction.values()) {
           if(playersPosition.get(player).adiacency(direction) != Border.wall) {
               targets.addAll(getPlayersFromCell(getCellFromDirection(player, direction)));
           }
        }
        return targets;
    }

Replace Generic With Diamond ArrayList<Player> with ArrayList<> in method public getOneMoveAwayTargets(player Player) : ArrayList<Player> from class it.polimi.ingsw.GameMap


    public List<String> getInfo() {
        List<String> listInfo = new ArrayList<>();
        listInfo.add("Name: " + name);
        listInfo.add("Family: " + family);
        listInfo.add("Type: " + type);
        return listInfo;
    }

    public List<String> getInfo() {
        List<String> listInfo = new ArrayList<String>();
        listInfo.add("Name: " + name);
        listInfo.add("Family: " + family);
        listInfo.add("Type: " + type);
        return listInfo;
    }

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getInfo() : List<String> from class com.iceapinan.zoo.model.Animal


/**
	 * Retrieves a Guise asset keyed to its location. Assets are cached for quick future retrieval. Due to race conditions, an asset may initially be loaded more
	 * than once in this implementation before its final value is placed in the cache.
	 * @param guiseAssetKey The location of the asset.
	 * @return The asset, or null if there is no such asset.
	 * @throws IllegalArgumentException if the asset key does not begin with {@value #GUISE_ASSETS_BASE_KEY}.
	 * @throws IOException if there is an error loading the asset.
	 * @see #GUISE_ASSETS_BASE_KEY
	 */
	public byte[] getGuiseAsset(final String guiseAssetKey) throws IOException {
		final String key = normalizePath(guiseAssetKey); //normalize the asset key
		if(!key.startsWith(GUISE_ASSETS_BASE_KEY)) { //if this isn't an asset key
			throw new IllegalArgumentException("String " + guiseAssetKey + " is not a Guise asset key.");
		}
		final Reference<byte[]> reference = assetMap.get(key); //get a reference to the asset
		byte[] asset = reference != null ? reference.get() : null; //dereference the reference, if there is a reference
		if(asset == null) { //if we haven't yet loaded the asset, or it has been dereferenced
			final InputStream assetInputStream = getClass().getResourceAsStream(key); //get an input stream to the asset
			if(assetInputStream != null) { //if we got an input stream to the asset
				asset = getBytes(assetInputStream); //load the asset
				assetMap.put(key, new SoftReference<>(asset)); //cache the asset
			}
		}
		return asset; //return whatever asset we found
	}

/**
	 * Retrieves a Guise asset keyed to its location. Assets are cached for quick future retrieval. Due to race conditions, an asset may initially be loaded more
	 * than once in this implementation before its final value is placed in the cache.
	 * @param guiseAssetKey The location of the asset.
	 * @return The asset, or null if there is no such asset.
	 * @throws IllegalArgumentException if the asset key does not begin with {@value #GUISE_ASSETS_BASE_KEY}.
	 * @throws IOException if there is an error loading the asset.
	 * @see #GUISE_ASSETS_BASE_KEY
	 */
	public byte[] getGuiseAsset(final String guiseAssetKey) throws IOException {
		final String key = normalizePath(guiseAssetKey); //normalize the asset key
		if(!key.startsWith(GUISE_ASSETS_BASE_KEY)) { //if this isn't an asset key
			throw new IllegalArgumentException("String " + guiseAssetKey + " is not a Guise asset key.");
		}
		final Reference<byte[]> reference = assetMap.get(key); //get a reference to the asset
		byte[] asset = reference != null ? reference.get() : null; //dereference the reference, if there is a reference
		if(asset == null) { //if we haven't yet loaded the asset, or it has been dereferenced
			final InputStream assetInputStream = getClass().getResourceAsStream(key); //get an input stream to the asset
			if(assetInputStream != null) { //if we got an input stream to the asset
				asset = getBytes(assetInputStream); //load the asset
				assetMap.put(key, new SoftReference<byte[]>(asset)); //cache the asset
			}
		}
		return asset; //return whatever asset we found
	}

Replace Generic With Diamond SoftReference<byte[]> with SoftReference<> in method public getGuiseAsset(guiseAssetKey String) : byte[] from class io.guise.framework.Guise


	/**
	 * Creates a map with contents reflecting the properties of a given RDF resource. Resource values are determined according to the algorithm used by
	 * {@link #getResourceValue(RDFObject)}.
	 * @param rdfResource The RDF resource the properties of which should be turned into a map.
	 * @param rdfPropertyNamespaceURI The namespace of the properties to gather, using the property local name as the map entry key.
	 * @return A map with contents reflecting the property/value pairs of the given resource.
	 */
	public static Map<String, Object> toMap(final RDFResource rdfResource, final URI rdfPropertyNamespaceURI) {
		final HashMap<String, Object> resourceHashMap = new HashMap<>(rdfResource.getPropertyCount()); //create a new hash map with enough initial room for all properties
		for(final RDFPropertyValuePair propertyValuePair : rdfResource.getProperties()) { //for each resource property/value pair
			final RDFResource property = propertyValuePair.getProperty(); //get the property
			final URI propertyURI = property.getURI(); //get the property URI
			if(propertyURI != null && rdfPropertyNamespaceURI.equals(getNamespaceURI(propertyURI))) { //if this property is in the resourceKey namespace
				final String resourceKey = getLocalName(propertyURI); //use the local name as the resource key
				final Object resourceValue = getResourceValue(propertyValuePair.getValue()); //determine the resource value from the RDF property value
				if(resourceValue != null) { //if we found a resource value
					resourceHashMap.put(resourceKey, resourceValue); //store the resource key/value pair in the map
				}
			}
		}
		return resourceHashMap; //return the map
	}

	/**
	 * Creates a map with contents reflecting the properties of a given RDF resource. Resource values are determined according to the algorithm used by
	 * {@link #getResourceValue(RDFObject)}.
	 * @param rdfResource The RDF resource the properties of which should be turned into a map.
	 * @param rdfPropertyNamespaceURI The namespace of the properties to gather, using the property local name as the map entry key.
	 * @return A map with contents reflecting the property/value pairs of the given resource.
	 */
	public static Map<String, Object> toMap(final RDFResource rdfResource, final URI rdfPropertyNamespaceURI) {
		final HashMap<String, Object> resourceHashMap = new HashMap<String, Object>(rdfResource.getPropertyCount()); //create a new hash map with enough initial room for all properties
		for(final RDFPropertyValuePair propertyValuePair : rdfResource.getProperties()) { //for each resource property/value pair
			final RDFResource property = propertyValuePair.getProperty(); //get the property
			final URI propertyURI = property.getURI(); //get the property URI
			if(propertyURI != null && rdfPropertyNamespaceURI.equals(getNamespaceURI(propertyURI))) { //if this property is in the resourceKey namespace
				final String resourceKey = getLocalName(propertyURI); //use the local name as the resource key
				final Object resourceValue = getResourceValue(propertyValuePair.getValue()); //determine the resource value from the RDF property value
				if(resourceValue != null) { //if we found a resource value
					resourceHashMap.put(resourceKey, resourceValue); //store the resource key/value pair in the map
				}
			}
		}
		return resourceHashMap; //return the map
	}

Replace Generic With Diamond HashMap<String,Object> with HashMap<> in method public toMap(rdfResource RDFResource, rdfPropertyNamespaceURI URI) : Map<String,Object> from class io.guise.framework.ResourceBundles