	/**
	 * Get all WorldGuard regions intersecting with a WorldEdit selection
	 * @param selection The selection to check
	 * @return A list with all the WorldGuard regions intersecting with the selection
	 */
	public static List<ProtectedRegion> getWERegionsInSelection(Selection selection) {
		// Get all regions inside or intersecting with the WorldEdit selection of the player
		World world = selection.getWorld();
		RegionManager regionManager = AreaShop.getInstance().getWorldGuard().getRegionManager(world);
		ArrayList<ProtectedRegion> result = new ArrayList<>();
		Location selectionMin = selection.getMinimumPoint();
		Location selectionMax = selection.getMaximumPoint();
		for(ProtectedRegion region : regionManager.getRegions().values()) {
			BlockVector regionMin = region.getMinimumPoint();
			BlockVector regionMax = region.getMaximumPoint();
			if(
					(      // x part, resolves to true if the selection and region overlap anywhere on the x-axis
						   (regionMin.getBlockX() <= selectionMax.getBlockX() && regionMin.getBlockX() >= selectionMin.getBlockX())
						|| (regionMax.getBlockX() <= selectionMax.getBlockX() && regionMax.getBlockX() >= selectionMin.getBlockX())
						|| (selectionMin.getBlockX() >= regionMin.getBlockX() && selectionMin.getBlockX() <= regionMax.getBlockX())
						|| (selectionMax.getBlockX() >= regionMin.getBlockX() && selectionMax.getBlockX() <= regionMax.getBlockX())
					) && ( // Y part, resolves to true if the selection and region overlap anywhere on the y-axis
					       (regionMin.getBlockY() <= selectionMax.getBlockY() && regionMin.getBlockY() >= selectionMin.getBlockY())
						|| (regionMax.getBlockY() <= selectionMax.getBlockY() && regionMax.getBlockY() >= selectionMin.getBlockY())
						|| (selectionMin.getBlockY() >= regionMin.getBlockY() && selectionMin.getBlockY() <= regionMax.getBlockY())
						|| (selectionMax.getBlockY() >= regionMin.getBlockY() && selectionMax.getBlockY() <= regionMax.getBlockY())
					) && ( // Z part, resolves to true if the selection and region overlap anywhere on the z-axis
				           (regionMin.getBlockZ() <= selectionMax.getBlockZ() && regionMin.getBlockZ() >= selectionMin.getBlockZ())
						|| (regionMax.getBlockZ() <= selectionMax.getBlockZ() && regionMax.getBlockZ() >= selectionMin.getBlockZ())
						|| (selectionMin.getBlockZ() >= regionMin.getBlockZ() && selectionMin.getBlockZ() <= regionMax.getBlockZ())
						|| (selectionMax.getBlockZ() >= regionMin.getBlockZ() && selectionMax.getBlockZ() <= regionMax.getBlockZ())
					)
				) {
				result.add(region);
			}
		}
		return result;
	}

	/**
	 * Get all WorldGuard regions intersecting with a WorldEdit selection
	 * @param selection The selection to check
	 * @return A list with all the WorldGuard regions intersecting with the selection
	 */
	public static List<ProtectedRegion> getWERegionsInSelection(Selection selection) {
		// Get all regions inside or intersecting with the WorldEdit selection of the player
		World world = selection.getWorld();
		RegionManager regionManager = AreaShop.getInstance().getWorldGuard().getRegionManager(world);
		ArrayList<ProtectedRegion> result = new ArrayList<ProtectedRegion>();
		Location selectionMin = selection.getMinimumPoint();
		Location selectionMax = selection.getMaximumPoint();
		for(ProtectedRegion region : regionManager.getRegions().values()) {
			BlockVector regionMin = region.getMinimumPoint();
			BlockVector regionMax = region.getMaximumPoint();
			if(
					(      // x part, resolves to true if the selection and region overlap anywhere on the x-axis
						   (regionMin.getBlockX() <= selectionMax.getBlockX() && regionMin.getBlockX() >= selectionMin.getBlockX())
						|| (regionMax.getBlockX() <= selectionMax.getBlockX() && regionMax.getBlockX() >= selectionMin.getBlockX())
						|| (selectionMin.getBlockX() >= regionMin.getBlockX() && selectionMin.getBlockX() <= regionMax.getBlockX())
						|| (selectionMax.getBlockX() >= regionMin.getBlockX() && selectionMax.getBlockX() <= regionMax.getBlockX())
					) && ( // Y part, resolves to true if the selection and region overlap anywhere on the y-axis
					       (regionMin.getBlockY() <= selectionMax.getBlockY() && regionMin.getBlockY() >= selectionMin.getBlockY())
						|| (regionMax.getBlockY() <= selectionMax.getBlockY() && regionMax.getBlockY() >= selectionMin.getBlockY())
						|| (selectionMin.getBlockY() >= regionMin.getBlockY() && selectionMin.getBlockY() <= regionMax.getBlockY())
						|| (selectionMax.getBlockY() >= regionMin.getBlockY() && selectionMax.getBlockY() <= regionMax.getBlockY())
					) && ( // Z part, resolves to true if the selection and region overlap anywhere on the z-axis
				           (regionMin.getBlockZ() <= selectionMax.getBlockZ() && regionMin.getBlockZ() >= selectionMin.getBlockZ())
						|| (regionMax.getBlockZ() <= selectionMax.getBlockZ() && regionMax.getBlockZ() >= selectionMin.getBlockZ())
						|| (selectionMin.getBlockZ() >= regionMin.getBlockZ() && selectionMin.getBlockZ() <= regionMax.getBlockZ())
						|| (selectionMax.getBlockZ() >= regionMin.getBlockZ() && selectionMax.getBlockZ() <= regionMax.getBlockZ())
					)
				) {
				result.add(region);
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<ProtectedRegion> with ArrayList<> in method public getWERegionsInSelection(selection Selection) : List<ProtectedRegion> from class nl.evolutioncoding.areashop.Utils


	/**
	 * Get a list of regions around a location
	 *  - Returns highest priority, child instead of parent regions
	 * @param location The location to check for regions
	 * @return empty list if no regions found, 1 member if 1 region is a priority, more if regions with the same priority
	 */
	public static List<ProtectedRegion> getApplicableRegions(Location location) {
		List<ProtectedRegion> result = new ArrayList<>();
		Set<ProtectedRegion> regions = AreaShop.getInstance().getWorldGuardHandler().getApplicableRegionsSet(location);
		if(regions != null) {
			boolean first = true;
			for(ProtectedRegion pr : regions) {
				if(first) {
					result.add(pr);
					first = false;
				} else {
					if(pr.getPriority() > result.get(0).getPriority()) {
						result.clear();
						result.add(pr);
					} else if(pr.getParent() != null && pr.getParent().equals(result.get(0))) {
						result.clear();
						result.add(pr);
					} else {
						result.add(pr);
					}
				}
			}
		}
		return result;
	}

	/**
	 * Get a list of regions around a location
	 *  - Returns highest priority, child instead of parent regions
	 * @param location The location to check for regions
	 * @return empty list if no regions found, 1 member if 1 region is a priority, more if regions with the same priority
	 */
	public static List<ProtectedRegion> getApplicableRegions(Location location) {
		List<ProtectedRegion> result = new ArrayList<ProtectedRegion>();
		Set<ProtectedRegion> regions = AreaShop.getInstance().getWorldGuardHandler().getApplicableRegionsSet(location);
		if(regions != null) {
			boolean first = true;
			for(ProtectedRegion pr : regions) {
				if(first) {
					result.add(pr);
					first = false;
				} else {
					if(pr.getPriority() > result.get(0).getPriority()) {
						result.clear();
						result.add(pr);
					} else if(pr.getParent() != null && pr.getParent().equals(result.get(0))) {
						result.clear();
						result.add(pr);
					} else {
						result.add(pr);
					}
				}
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<ProtectedRegion> with ArrayList<> in method public getApplicableRegions(location Location) : List<ProtectedRegion> from class nl.evolutioncoding.areashop.Utils


	public static List<RentRegion> getApplicableRentRegions(Location location) {
		List<RentRegion> result = new ArrayList<>();
		for(GeneralRegion region : getApplicableASRegions(location, RegionType.RENT)) {
			result.add((RentRegion)region);
		}
		return result;
	}

	public static List<RentRegion> getApplicableRentRegions(Location location) {
		List<RentRegion> result = new ArrayList<RentRegion>();
		for(GeneralRegion region : getApplicableASRegions(location, RegionType.RENT)) {
			result.add((RentRegion)region);
		}
		return result;
	}

Replace Generic With Diamond ArrayList<RentRegion> with ArrayList<> in method public getApplicableRentRegions(location Location) : List<RentRegion> from class nl.evolutioncoding.areashop.Utils


	public static List<BuyRegion> getApplicableBuyRegions(Location location) {
		List<BuyRegion> result = new ArrayList<>();
		for(GeneralRegion region : getApplicableASRegions(location, RegionType.BUY)) {
			result.add((BuyRegion)region);
		}
		return result;
	}

	public static List<BuyRegion> getApplicableBuyRegions(Location location) {
		List<BuyRegion> result = new ArrayList<BuyRegion>();
		for(GeneralRegion region : getApplicableASRegions(location, RegionType.BUY)) {
			result.add((BuyRegion)region);
		}
		return result;
	}

Replace Generic With Diamond ArrayList<BuyRegion> with ArrayList<> in method public getApplicableBuyRegions(location Location) : List<BuyRegion> from class nl.evolutioncoding.areashop.Utils


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 2) {
			if(sender.hasPermission("areashop.createrent")) {
				result.add("rent");
			}
			if(sender.hasPermission("areashop.createbuy")) {
				result.add("buy");
			}
		} else if(toComplete == 3) {
			if(sender instanceof Player) {
				Player player = (Player)sender;
				if(sender.hasPermission("areashop.createrent") || sender.hasPermission("areashop.createbuy")) {
					for(ProtectedRegion region : plugin.getWorldGuard().getRegionManager(player.getWorld()).getRegions().values()) {
						result.add(region.getId());
					}
				}
			}
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			if(sender.hasPermission("areashop.createrent")) {
				result.add("rent");
			}
			if(sender.hasPermission("areashop.createbuy")) {
				result.add("buy");
			}
		} else if(toComplete == 3) {
			if(sender instanceof Player) {
				Player player = (Player)sender;
				if(sender.hasPermission("areashop.createrent") || sender.hasPermission("areashop.createbuy")) {
					for(ProtectedRegion region : plugin.getWorldGuard().getRegionManager(player.getWorld()).getRegions().values()) {
						result.add(region.getId());
					}
				}
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.AddCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			for(Player player : Bukkit.getOnlinePlayers()) {
				result.add(player.getName());
			}
		} else if(toComplete == 3) {
			result.addAll(plugin.getFileManager().getRegionNames());
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			for(Player player : Bukkit.getOnlinePlayers()) {
				result.add(player.getName());
			}
		} else if(toComplete == 3) {
			result.addAll(plugin.getFileManager().getRegionNames());
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.AddfriendCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result.addAll(plugin.getFileManager().getRegionNames());
		} else if(toComplete == 3) {
			result.addAll(plugin.getConfig().getStringList("signProfiles"));
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result.addAll(plugin.getFileManager().getRegionNames());
		} else if(toComplete == 3) {
			result.addAll(plugin.getConfig().getStringList("signProfiles"));
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.AddsignCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			for(BuyRegion region : plugin.getFileManager().getBuys()) {
				if(!region.isSold()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			for(BuyRegion region : plugin.getFileManager().getBuys()) {
				if(!region.isSold()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.BuyCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getRegionNames();
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getRegionNames();
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.DelCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		return new ArrayList<>();
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		return new ArrayList<String>();
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.DelsignCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result.add("buy");
			result.add("rent");
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result.add("buy");
			result.add("rent");
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.FindCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getGroupNames();
		} else if(toComplete == 3) {
			result = plugin.getFileManager().getRegionNames();
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getGroupNames();
		} else if(toComplete == 3) {
			result = plugin.getFileManager().getRegionNames();
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.GroupaddCommand


Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.GroupdelCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getGroupNames();
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getGroupNames();
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.GroupinfoCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result.addAll(Arrays.asList("all", "rented", "forrent", "sold", "forsale", "player", "region", "nogroup"));
		} else if(toComplete == 3) {
			if(start[2].equalsIgnoreCase("player")) {
				for(Player player : Bukkit.getOnlinePlayers()) {
					result.add(player.getName());
				}
			} else if(start[2].equalsIgnoreCase("region")) {
				result.addAll(plugin.getFileManager().getBuyNames());
				result.addAll(plugin.getFileManager().getRentNames());
			}
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result.addAll(Arrays.asList("all", "rented", "forrent", "sold", "forsale", "player", "region", "nogroup"));
		} else if(toComplete == 3) {
			if(start[2].equalsIgnoreCase("player")) {
				for(Player player : Bukkit.getOnlinePlayers()) {
					result.add(player.getName());
				}
			} else if(start[2].equalsIgnoreCase("region")) {
				result.addAll(plugin.getFileManager().getBuyNames());
				result.addAll(plugin.getFileManager().getRentNames());
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.InfoCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			for(RentRegion region : plugin.getFileManager().getRents()) {
				if(!region.isRented()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			for(RentRegion region : plugin.getFileManager().getRents()) {
				if(!region.isRented()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.RentCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 3) {
			for(BuyRegion region : plugin.getFileManager().getBuys()) {
				if(region.isSold() && !region.isInResellingMode()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 3) {
			for(BuyRegion region : plugin.getFileManager().getBuys()) {
				if(region.isSold() && !region.isInResellingMode()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.ResellCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result.addAll(plugin.getFileManager().getRegionNames());
		} else if(toComplete == 3) {
			GeneralRegion region = plugin.getFileManager().getRegion(start[2]);
			if(region != null) {
				if(region.isRentRegion()) {
					result.addAll(Arrays.asList("created", "deleted", "rented", "unrented"));
				} else if(region.isBuyRegion()) {
					result.addAll(Arrays.asList("created", "deleted", "bought", "sold"));
				}
			}
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result.addAll(plugin.getFileManager().getRegionNames());
		} else if(toComplete == 3) {
			GeneralRegion region = plugin.getFileManager().getRegion(start[2]);
			if(region != null) {
				if(region.isRentRegion()) {
					result.addAll(Arrays.asList("created", "deleted", "rented", "unrented"));
				} else if(region.isBuyRegion()) {
					result.addAll(Arrays.asList("created", "deleted", "bought", "sold"));
				}
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.SchematiceventCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			for(BuyRegion region : plugin.getFileManager().getBuys()) {
				if(region.isSold()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			for(BuyRegion region : plugin.getFileManager().getBuys()) {
				if(region.isSold()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.SellCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getRentNames();
		} else if(toComplete == 4) {
			result.addAll(plugin.getConfig().getStringList("minutes"));
			result.addAll(plugin.getConfig().getStringList("hours"));
			result.addAll(plugin.getConfig().getStringList("days"));
			result.addAll(plugin.getConfig().getStringList("months"));
			result.addAll(plugin.getConfig().getStringList("years"));
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getRentNames();
		} else if(toComplete == 4) {
			result.addAll(plugin.getConfig().getStringList("minutes"));
			result.addAll(plugin.getConfig().getStringList("hours"));
			result.addAll(plugin.getConfig().getStringList("days"));
			result.addAll(plugin.getConfig().getStringList("months"));
			result.addAll(plugin.getConfig().getStringList("years"));
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.SetdurationCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 3) {
			result = plugin.getFileManager().getRegionNames();
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 3) {
			result = plugin.getFileManager().getRegionNames();
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.SetpriceCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getRegionNames();
		} else if(toComplete == 3) {
			result.add("true");
			result.add("false");
			result.add("general");
		} else if(toComplete == 4) {
			result.addAll(plugin.getConfig().getConfigurationSection("schematicProfiles").getKeys(false));
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result = plugin.getFileManager().getRegionNames();
		} else if(toComplete == 3) {
			result.add("true");
			result.add("false");
			result.add("general");
		} else if(toComplete == 4) {
			result.addAll(plugin.getConfig().getConfigurationSection("schematicProfiles").getKeys(false));
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.SetrestoreCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result.addAll(plugin.getFileManager().getRegionNames());
		} else if(toComplete == 3) {
			result.add("reset");
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result.addAll(plugin.getFileManager().getRegionNames());
		} else if(toComplete == 3) {
			result.add("reset");
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.SetteleportCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<>();
		if(toComplete == 5) {
			result.add("rent");
			result.add("buy");
		} else if(toComplete == 6) {
			result.addAll(plugin.getFileManager().getGroupNames());
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		List<String> result = new ArrayList<String>();
		if(toComplete == 5) {
			result.add("rent");
			result.add("buy");
		} else if(toComplete == 6) {
			result.addAll(plugin.getFileManager().getGroupNames());
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.StackCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			for(BuyRegion region : plugin.getFileManager().getBuys()) {
				if(region.isSold() && region.isInResellingMode()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			for(BuyRegion region : plugin.getFileManager().getBuys()) {
				if(region.isSold() && region.isInResellingMode()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.StopresellCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			result.addAll(plugin.getFileManager().getRegionNames());
		} else if(toComplete == 3) {
			result.add("sign");
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			result.addAll(plugin.getFileManager().getRegionNames());
		} else if(toComplete == 3) {
			result.add("sign");
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.TeleportCommand


	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<>();
		if(toComplete == 2) {
			for(RentRegion region : plugin.getFileManager().getRents()) {
				if(region.isRented()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

	@Override
	public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) {
		ArrayList<String> result = new ArrayList<String>();
		if(toComplete == 2) {
			for(RentRegion region : plugin.getFileManager().getRents()) {
				if(region.isRented()) {
					result.add(region.getName());
				}
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getTabCompleteList(toComplete int, start String[], sender CommandSender) : List<String> from class nl.evolutioncoding.areashop.commands.UnrentCommand


	/**
	 * Called when a sign is changed
	 * @param event The event
	 */
	@EventHandler(priority = EventPriority.MONITOR)
	public void onPlayerLogin(PlayerLoginEvent event) {
		if(event.getResult() != Result.ALLOWED) {
			return;
		}
		final Player player = event.getPlayer();
		// Notify admins for plugin updates
		if(plugin.updateAvailable() && player.hasPermission("areashop.notifyupdate")) {
			AreaShop.getInstance().message(player, "update-playerNotify", AreaShop.getInstance().getDescription().getVersion(), AreaShop.getInstance().getUpdater().getLatestName());
		}
		// Schedule task to check for notifications, prevents a lag spike at login
        new BukkitRunnable() {
			@Override
			public void run() {
				// Delay until all regions are loaded
				if(!plugin.isReady()) {
					return;
				}
				if(!player.isOnline()) {
					this.cancel();
					return;
				}
				// Notify for rents that almost run out
				for(RentRegion region : plugin.getFileManager().getRents()) {
					if(region.isRenter(player)) {
						String warningSetting = region.getStringSetting("rent.warningOnLoginTime");
						if(warningSetting == null || warningSetting.isEmpty()) {
							continue;
						}
						long warningTime = plugin.durationStringToLong(warningSetting);
						if(region.getTimeLeft() < warningTime) {
							// Send the warning message later to let it appear after general MOTD messages
							AreaShop.getInstance().message(player, "rent-expireWarning", region);
						}
					}
				}
				this.cancel();
			}
        }.runTaskTimer(plugin, 25, 25);
		// Check if the player has regions that use an old name of him and update them
		final List<GeneralRegion> regions = new ArrayList<>(plugin.getFileManager().getRegions());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				// Delay until all regions are loaded
				if(!plugin.isReady()) {
					return;
				}
				// Check all regions
				for(int i=0; i<plugin.getConfig().getInt("nameupdate.regionsPerTick"); i++) {
					if(current < regions.size()) {
						GeneralRegion region = regions.get(current);
						if(region.isOwner(player)) {
							if(region.isBuyRegion()) {
								if(!player.getName().equals(region.getStringSetting("buy.buyerName"))) {
									region.setSetting("buy.buyerName", player.getName());
									region.updateRegionFlags();
									region.updateSigns();
								}
							} else if(region.isRentRegion()) {
								if(!player.getName().equals(region.getStringSetting("rent.renterName"))) {
									region.setSetting("rent.renterName", player.getName());
									region.updateRegionFlags();
									region.updateSigns();
								}
							}
						}
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 22, 1); // Wait a bit before starting to prevent a lot of stress on the server when a player joins (a lot of plugins already do stuff then)
	}

	/**
	 * Called when a sign is changed
	 * @param event The event
	 */
	@EventHandler(priority = EventPriority.MONITOR)
	public void onPlayerLogin(PlayerLoginEvent event) {
		if(event.getResult() != Result.ALLOWED) {
			return;
		}
		final Player player = event.getPlayer();
		// Notify admins for plugin updates
		if(plugin.updateAvailable() && player.hasPermission("areashop.notifyupdate")) {
			AreaShop.getInstance().message(player, "update-playerNotify", AreaShop.getInstance().getDescription().getVersion(), AreaShop.getInstance().getUpdater().getLatestName());
		}
		// Schedule task to check for notifications, prevents a lag spike at login
        new BukkitRunnable() {
			@Override
			public void run() {
				// Delay until all regions are loaded
				if(!plugin.isReady()) {
					return;
				}
				if(!player.isOnline()) {
					this.cancel();
					return;
				}
				// Notify for rents that almost run out
				for(RentRegion region : plugin.getFileManager().getRents()) {
					if(region.isRenter(player)) {
						String warningSetting = region.getStringSetting("rent.warningOnLoginTime");
						if(warningSetting == null || warningSetting.isEmpty()) {
							continue;
						}
						long warningTime = plugin.durationStringToLong(warningSetting);
						if(region.getTimeLeft() < warningTime) {
							// Send the warning message later to let it appear after general MOTD messages
							AreaShop.getInstance().message(player, "rent-expireWarning", region);
						}
					}
				}
				this.cancel();
			}
        }.runTaskTimer(plugin, 25, 25);
		// Check if the player has regions that use an old name of him and update them
		final List<GeneralRegion> regions = new ArrayList<GeneralRegion>(plugin.getFileManager().getRegions());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				// Delay until all regions are loaded
				if(!plugin.isReady()) {
					return;
				}
				// Check all regions
				for(int i=0; i<plugin.getConfig().getInt("nameupdate.regionsPerTick"); i++) {
					if(current < regions.size()) {
						GeneralRegion region = regions.get(current);
						if(region.isOwner(player)) {
							if(region.isBuyRegion()) {
								if(!player.getName().equals(region.getStringSetting("buy.buyerName"))) {
									region.setSetting("buy.buyerName", player.getName());
									region.updateRegionFlags();
									region.updateSigns();
								}
							} else if(region.isRentRegion()) {
								if(!player.getName().equals(region.getStringSetting("rent.renterName"))) {
									region.setSetting("rent.renterName", player.getName());
									region.updateRegionFlags();
									region.updateSigns();
								}
							}
						}
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 22, 1); // Wait a bit before starting to prevent a lot of stress on the server when a player joins (a lot of plugins already do stuff then)
	}

Replace Generic With Diamond ArrayList<GeneralRegion> with ArrayList<> in method public onPlayerLogin(event PlayerLoginEvent) : void from class nl.evolutioncoding.areashop.listeners.PlayerLoginLogoutListener


	/**
	 * Constructor
	 * @param plugin The AreaShop plugin
	 */
	public CommandManager(AreaShop plugin) {
		this.plugin = plugin;
		commands = new ArrayList<>();
		commands.add(new HelpCommand(plugin));
		commands.add(new RentCommand(plugin));
		commands.add(new UnrentCommand(plugin));
		commands.add(new BuyCommand(plugin));
		commands.add(new SellCommand(plugin));
		commands.add(new MeCommand(plugin));
		commands.add(new InfoCommand(plugin));
		commands.add(new TeleportCommand(plugin));
		commands.add(new SetteleportCommand(plugin));
		commands.add(new AddfriendCommand(plugin));
		commands.add(new DelfriendCommand(plugin));
		commands.add(new FindCommand(plugin));
		commands.add(new ResellCommand(plugin));
		commands.add(new StopresellCommand(plugin));
		commands.add(new SetrestoreCommand(plugin));
		commands.add(new SetpriceCommand(plugin));
		commands.add(new SetownerCommand(plugin));
		commands.add(new SetdurationCommand(plugin));
		commands.add(new ReloadCommand(plugin));
		commands.add(new GroupaddCommand(plugin));
		commands.add(new GroupdelCommand(plugin));
		commands.add(new GrouplistCommand(plugin));
		commands.add(new GroupinfoCommand(plugin));
		commands.add(new SchematiceventCommand(plugin));
		commands.add(new AddCommand(plugin));
		commands.add(new DelCommand(plugin));
		commands.add(new AddsignCommand(plugin));
		commands.add(new DelsignCommand(plugin));
		commands.add(new LinksignsCommand(plugin));
		commands.add(new StackCommand(plugin));
		commands.add(new SetlandlordCommand(plugin));

		/* Register commands in bukkit */
		plugin.getCommand("AreaShop").setExecutor(this);
		plugin.getCommand("AreaShop").setTabCompleter(this);
	}

	/**
	 * Constructor
	 * @param plugin The AreaShop plugin
	 */
	public CommandManager(AreaShop plugin) {
		this.plugin = plugin;
		commands = new ArrayList<CommandAreaShop>();
		commands.add(new HelpCommand(plugin));
		commands.add(new RentCommand(plugin));
		commands.add(new UnrentCommand(plugin));
		commands.add(new BuyCommand(plugin));
		commands.add(new SellCommand(plugin));
		commands.add(new MeCommand(plugin));
		commands.add(new InfoCommand(plugin));
		commands.add(new TeleportCommand(plugin));
		commands.add(new SetteleportCommand(plugin));
		commands.add(new AddfriendCommand(plugin));
		commands.add(new DelfriendCommand(plugin));
		commands.add(new FindCommand(plugin));
		commands.add(new ResellCommand(plugin));
		commands.add(new StopresellCommand(plugin));
		commands.add(new SetrestoreCommand(plugin));
		commands.add(new SetpriceCommand(plugin));
		commands.add(new SetownerCommand(plugin));
		commands.add(new SetdurationCommand(plugin));
		commands.add(new ReloadCommand(plugin));
		commands.add(new GroupaddCommand(plugin));
		commands.add(new GroupdelCommand(plugin));
		commands.add(new GrouplistCommand(plugin));
		commands.add(new GroupinfoCommand(plugin));
		commands.add(new SchematiceventCommand(plugin));
		commands.add(new AddCommand(plugin));
		commands.add(new DelCommand(plugin));
		commands.add(new AddsignCommand(plugin));
		commands.add(new DelsignCommand(plugin));
		commands.add(new LinksignsCommand(plugin));
		commands.add(new StackCommand(plugin));
		commands.add(new SetlandlordCommand(plugin));

		/* Register commands in bukkit */
		plugin.getCommand("AreaShop").setExecutor(this);
		plugin.getCommand("AreaShop").setTabCompleter(this);
	}

Replace Generic With Diamond ArrayList<CommandAreaShop> with ArrayList<> in method public CommandManager(plugin AreaShop) from class nl.evolutioncoding.areashop.managers.CommandManager


	/**
	 * Shows the help page for the CommandSender
	 * @param target The CommandSender to show the help to
	 */
	public void showHelp(CommandSender target) {
		/* Add all messages to a list */
		ArrayList<String> messages = new ArrayList<>();
		messages.add(plugin.getConfig().getString("chatPrefix") + plugin.getLanguageManager().getLang("help-header"));
		messages.add(plugin.getConfig().getString("chatPrefix") + plugin.getLanguageManager().getLang("help-alias"));
		for(CommandAreaShop command : commands) {
			String help = command.getHelp(target);
			if(help != null && help.length() != 0) {
				messages.add(help);
			}
		}

		/* Send the messages to the target */
		for(String message : messages) {
			if(!plugin.getConfig().getBoolean("useColorsInConsole") && !(target instanceof Player)) {
				target.sendMessage(ChatColor.stripColor(plugin.fixColors(message)));
			} else {
				target.sendMessage(plugin.fixColors(message));
			}
		}
	}

	/**
	 * Shows the help page for the CommandSender
	 * @param target The CommandSender to show the help to
	 */
	public void showHelp(CommandSender target) {
		/* Add all messages to a list */
		ArrayList<String> messages = new ArrayList<String>();
		messages.add(plugin.getConfig().getString("chatPrefix") + plugin.getLanguageManager().getLang("help-header"));
		messages.add(plugin.getConfig().getString("chatPrefix") + plugin.getLanguageManager().getLang("help-alias"));
		for(CommandAreaShop command : commands) {
			String help = command.getHelp(target);
			if(help != null && help.length() != 0) {
				messages.add(help);
			}
		}

		/* Send the messages to the target */
		for(String message : messages) {
			if(!plugin.getConfig().getBoolean("useColorsInConsole") && !(target instanceof Player)) {
				target.sendMessage(ChatColor.stripColor(plugin.fixColors(message)));
			} else {
				target.sendMessage(plugin.fixColors(message));
			}
		}
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public showHelp(target CommandSender) : void from class nl.evolutioncoding.areashop.managers.CommandManager


	public List<RentRegion> getRents() {
		List<RentRegion> result = new ArrayList<>();
		for(GeneralRegion region : regions.values()) {
			if(region.isRentRegion()) {
				result.add((RentRegion)region);
			}
		}
		return result;
	}

	public List<RentRegion> getRents() {
		List<RentRegion> result = new ArrayList<RentRegion>();
		for(GeneralRegion region : regions.values()) {
			if(region.isRentRegion()) {
				result.add((RentRegion)region);
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<RentRegion> with ArrayList<> in method public getRents() : List<RentRegion> from class nl.evolutioncoding.areashop.managers.FileManager


	public List<BuyRegion> getBuys() {
		List<BuyRegion> result = new ArrayList<>();
		for(GeneralRegion region : regions.values()) {
			if(region.isBuyRegion()) {
				result.add((BuyRegion)region);
			}
		}
		return result;
	}

	public List<BuyRegion> getBuys() {
		List<BuyRegion> result = new ArrayList<BuyRegion>();
		for(GeneralRegion region : regions.values()) {
			if(region.isBuyRegion()) {
				result.add((BuyRegion)region);
			}
		}
		return result;
	}

Replace Generic With Diamond ArrayList<BuyRegion> with ArrayList<> in method public getBuys() : List<BuyRegion> from class nl.evolutioncoding.areashop.managers.FileManager


	public List<GeneralRegion> getRegions() {
		return new ArrayList<>(regions.values());
	}

	public List<GeneralRegion> getRegions() {
		return new ArrayList<GeneralRegion>(regions.values());
	}

Replace Generic With Diamond ArrayList<GeneralRegion> with ArrayList<> in method public getRegions() : List<GeneralRegion> from class nl.evolutioncoding.areashop.managers.FileManager


	/**
	 * Get a list of names of a certain group of things
	 * @return A String list with all the names
	 */
	public List<String> getBuyNames() {
		ArrayList<String> result = new ArrayList<>();
		for(BuyRegion region : getBuys()) {
			result.add(region.getName());
		}
		return result;
	}

	/**
	 * Get a list of names of a certain group of things
	 * @return A String list with all the names
	 */
	public List<String> getBuyNames() {
		ArrayList<String> result = new ArrayList<String>();
		for(BuyRegion region : getBuys()) {
			result.add(region.getName());
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getBuyNames() : List<String> from class nl.evolutioncoding.areashop.managers.FileManager


	public List<String> getRentNames() {
		ArrayList<String> result = new ArrayList<>();
		for(RentRegion region : getRents()) {
			result.add(region.getName());
		}
		return result;
	}

	public List<String> getRentNames() {
		ArrayList<String> result = new ArrayList<String>();
		for(RentRegion region : getRents()) {
			result.add(region.getName());
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getRentNames() : List<String> from class nl.evolutioncoding.areashop.managers.FileManager


	public List<String> getRegionNames() {
		ArrayList<String> result = new ArrayList<>();
		for(GeneralRegion region : getRegions()) {
			result.add(region.getName());
		}
		return result;
	}

	public List<String> getRegionNames() {
		ArrayList<String> result = new ArrayList<String>();
		for(GeneralRegion region : getRegions()) {
			result.add(region.getName());
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getRegionNames() : List<String> from class nl.evolutioncoding.areashop.managers.FileManager


	public List<String> getGroupNames() {
		ArrayList<String> result = new ArrayList<>();
		for(RegionGroup group : getGroups()) {
			result.add(group.getName());
		}
		return result;
	}

	public List<String> getGroupNames() {
		ArrayList<String> result = new ArrayList<String>();
		for(RegionGroup group : getGroups()) {
			result.add(group.getName());
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getGroupNames() : List<String> from class nl.evolutioncoding.areashop.managers.FileManager


	/**
	 * Update all signs that need periodic updating
	 */
	public void performPeriodicSignUpdate() {
		final List<RentRegion> regions = new ArrayList<>(getRents());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("signs.regionsPerTick"); i++) {
					if(current < regions.size()) {
						if(regions.get(current).needsPeriodicUpdating()) {
							regions.get(current).updateSigns();
						}
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

	/**
	 * Update all signs that need periodic updating
	 */
	public void performPeriodicSignUpdate() {
		final List<RentRegion> regions = new ArrayList<RentRegion>(getRents());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("signs.regionsPerTick"); i++) {
					if(current < regions.size()) {
						if(regions.get(current).needsPeriodicUpdating()) {
							regions.get(current).updateSigns();
						}
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

Replace Generic With Diamond ArrayList<RentRegion> with ArrayList<> in method public performPeriodicSignUpdate() : void from class nl.evolutioncoding.areashop.managers.FileManager


	/**
	 * Send out rent expire warnings
	 */
	public void sendRentExpireWarnings() {
		final List<RentRegion> regions = new ArrayList<>(getRents());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("expireWarning.regionsPerTick"); i++) {
					if(current < regions.size()) {
						regions.get(current).sendExpirationWarnings();
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

	/**
	 * Send out rent expire warnings
	 */
	public void sendRentExpireWarnings() {
		final List<RentRegion> regions = new ArrayList<RentRegion>(getRents());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("expireWarning.regionsPerTick"); i++) {
					if(current < regions.size()) {
						regions.get(current).sendExpirationWarnings();
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

Replace Generic With Diamond ArrayList<RentRegion> with ArrayList<> in method public sendRentExpireWarnings() : void from class nl.evolutioncoding.areashop.managers.FileManager


	/**
	 * Save all region related files spread over time (low load)
	 */
	public void saveRequiredFiles() {
		if(isSaveGroupsRequired()) {
			saveGroupsNow();
		}
		this.saveWorldGuardRegions();

		final List<GeneralRegion> regions = new ArrayList<>(getRegions());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("saving.regionsPerTick"); i++) {
					if(current < regions.size()) {
						if(regions.get(current).isSaveRequired()) {
							regions.get(current).saveNow();
						}
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

	/**
	 * Save all region related files spread over time (low load)
	 */
	public void saveRequiredFiles() {
		if(isSaveGroupsRequired()) {
			saveGroupsNow();
		}
		this.saveWorldGuardRegions();

		final List<GeneralRegion> regions = new ArrayList<GeneralRegion>(getRegions());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("saving.regionsPerTick"); i++) {
					if(current < regions.size()) {
						if(regions.get(current).isSaveRequired()) {
							regions.get(current).saveNow();
						}
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

Replace Generic With Diamond ArrayList<GeneralRegion> with ArrayList<> in method public saveRequiredFiles() : void from class nl.evolutioncoding.areashop.managers.FileManager


	/**
	 * Unrent regions that have no time left, regions to check per tick is in the config
	 */
	public void checkRents() {
		final List<RentRegion> regions = new ArrayList<>(getRents());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("expiration.regionsPerTick"); i++) {
					if(current < regions.size()) {
						regions.get(current).checkExpiration();
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

	/**
	 * Unrent regions that have no time left, regions to check per tick is in the config
	 */
	public void checkRents() {
		final List<RentRegion> regions = new ArrayList<RentRegion>(getRents());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("expiration.regionsPerTick"); i++) {
					if(current < regions.size()) {
						regions.get(current).checkExpiration();
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

Replace Generic With Diamond ArrayList<RentRegion> with ArrayList<> in method public checkRents() : void from class nl.evolutioncoding.areashop.managers.FileManager


	/**
	 * Check all regions and unrent/sell them if the player is inactive for too long
	 */
	public void checkForInactiveRegions() {
		final List<GeneralRegion> regions = new ArrayList<>(getRegions());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("inactive.regionsPerTick"); i++) {
					if(current < regions.size()) {
						regions.get(current).checkInactive();
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

	/**
	 * Check all regions and unrent/sell them if the player is inactive for too long
	 */
	public void checkForInactiveRegions() {
		final List<GeneralRegion> regions = new ArrayList<GeneralRegion>(getRegions());
		new BukkitRunnable() {
			private int current = 0;

			@Override
			public void run() {
				for(int i=0; i<plugin.getConfig().getInt("inactive.regionsPerTick"); i++) {
					if(current < regions.size()) {
						regions.get(current).checkInactive();
						current++;
					}
				}
				if(current >= regions.size()) {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 1, 1);
	}

Replace Generic With Diamond ArrayList<GeneralRegion> with ArrayList<> in method public checkForInactiveRegions() : void from class nl.evolutioncoding.areashop.managers.FileManager


	/**
	 * Saves the default language files if not already present
	 */
	public void saveDefaults() {
		/* Create the language folder if it not exists */
		File langFolder;
		langFolder = new File(plugin.getDataFolder() + File.separator + AreaShop.languageFolder);
		if(!langFolder.exists()) {
			if(!langFolder.mkdirs()) {
				plugin.getLogger().warning("Could not create language directory: " + langFolder.getAbsolutePath());
				return;
			}
		}

		/* Create the language files, overwrites if a file already exists */
		/* Overriding is necessary because otherwise with an update the new lang */
		/* files would not be used, when translating your own use another */
		/* file name as the default */
		File langFile;
		for(String language : languages) {
			langFile = new File(plugin.getDataFolder() + File.separator + AreaShop.languageFolder + File.separator + language + ".yml");
			try(
					InputStream input = plugin.getResource(AreaShop.languageFolder + "/" + language + ".yml");
					OutputStream output = new FileOutputStream(langFile)
			) {
				if(input == null) {
					plugin.getLogger().warning("Could not save default language to the '" + AreaShop.languageFolder + "' folder: " + language + ".yml");
					continue;
				}
				int read;
				byte[] bytes = new byte[1024];
				while ((read = input.read(bytes)) != -1) {
					output.write(bytes, 0, read);
				}
				input.close();
				output.close();
			} catch(IOException e) {
				plugin.getLogger().warning("Something went wrong saving a default language file: " + langFile.getPath());
			}
		}

	}

	/**
	 * Saves the default language files if not already present
	 */
	public void saveDefaults() {
		/* Create the language folder if it not exists */
		File langFolder;
		langFolder = new File(plugin.getDataFolder() + File.separator + AreaShop.languageFolder);
		if(!langFolder.exists()) {
			langFolder.mkdirs();
		}

		/* Create the language files, overwrites if a file already exists */
		/* Overriding is necessary because otherwise with an update the new lang */
		/* files would not be used, when translating your own use another */
		/* file name as the default */
		File langFile;
		for(int i=0; i<languages.length; i++) {
			langFile = new File(plugin.getDataFolder() + File.separator + AreaShop.languageFolder + File.separator + languages[i] + ".yml");
			InputStream input = null;
			OutputStream output = null;
			try {
				input = plugin.getResource(AreaShop.languageFolder + "/" + languages[i] + ".yml");
				if(input == null) {
					plugin.getLogger().warning("Could not save default language to the '" + AreaShop.languageFolder + "' folder: " + languages[i] + ".yml");
					continue;
				}
				output = new FileOutputStream(langFile);

				int read = 0;
				byte[] bytes = new byte[1024];
				while ((read = input.read(bytes)) != -1) {
					output.write(bytes, 0, read);
				}
				input.close();
				output.close();
			} catch(IOException e) {
				try {
					input.close();
					output.close();
				} catch (IOException e1) {} catch (NullPointerException e2) {}

				plugin.getLogger().warning("Something went wrong saving a default language file: " + langFile.getPath());
			}
		}

	}

Try With Resources try(InputStream input=plugin.getResource(AreaShop.languageFolder + "/" + language + ".yml"); OutputStream output=new FileOutputStream(langFile)) in method public saveDefaults() : void from class nl.evolutioncoding.areashop.managers.LanguageManager


	public SignLinkerManager(AreaShop plugin) {
		this.plugin = plugin;
		signLinkers = new HashMap<>();
		eventsRegistered = false;
	}

	public SignLinkerManager(AreaShop plugin) {
		this.plugin = plugin;
		signLinkers = new HashMap<UUID, SignLinker>();
		eventsRegistered = false;
	}

Replace Generic With Diamond HashMap<UUID,SignLinker> with HashMap<> in method public SignLinkerManager(plugin AreaShop) from class nl.evolutioncoding.areashop.managers.SignLinkerManager


	@Override
	public HashMap<String, Object> getSpecificReplacements() {
		// Fill the replacements map with things specific to a BuyRegion
		HashMap<String, Object> result = new HashMap<>();
		result.put(AreaShop.tagPrice, getFormattedPrice());
		result.put(AreaShop.tagRawPrice, getPrice());
		result.put(AreaShop.tagPlayerName, getPlayerName());
		result.put(AreaShop.tagPlayerUUID, getBuyer());
		result.put(AreaShop.tagResellPrice, getFormattedResellPrice());
		result.put(AreaShop.tagRawResellPrice, getResellPrice());
		result.put(AreaShop.tagMoneyBackAmount, getFormattedMoneyBackAmount());
		result.put(AreaShop.tagRawMoneyBackAmount, getMoneyBackAmount());
		double moneyBackPercent = getMoneyBackPercentage();
		if((moneyBackPercent%1.0) == 0.0) {
			result.put(AreaShop.tagMoneyBackPercentage, (int)moneyBackPercent);
		} else {
			result.put(AreaShop.tagMoneyBackPercentage, moneyBackPercent);
		}
		result.put(AreaShop.tagMaxInactiveTime, this.getFormattedInactiveTimeUntilSell());
		return result;
	}

	@Override
	public HashMap<String, Object> getSpecificReplacements() {
		// Fill the replacements map with things specific to a BuyRegion
		HashMap<String, Object> result = new HashMap<String, Object>();
		result.put(AreaShop.tagPrice, getFormattedPrice());
		result.put(AreaShop.tagRawPrice, getPrice());
		result.put(AreaShop.tagPlayerName, getPlayerName());
		result.put(AreaShop.tagPlayerUUID, getBuyer());
		result.put(AreaShop.tagResellPrice, getFormattedResellPrice());
		result.put(AreaShop.tagRawResellPrice, getResellPrice());
		result.put(AreaShop.tagMoneyBackAmount, getFormattedMoneyBackAmount());
		result.put(AreaShop.tagRawMoneyBackAmount, getMoneyBackAmount());
		double moneyBackPercent = getMoneyBackPercentage();
		if((moneyBackPercent%1.0) == 0.0) {
			result.put(AreaShop.tagMoneyBackPercentage, (int)moneyBackPercent);
		} else {
			result.put(AreaShop.tagMoneyBackPercentage, moneyBackPercent);
		}
		result.put(AreaShop.tagMaxInactiveTime, this.getFormattedInactiveTimeUntilSell());
		return result;
	}

Replace Generic With Diamond HashMap<String,Object> with HashMap<> in method public getSpecificReplacements() : HashMap<String,Object> from class nl.evolutioncoding.areashop.regions.BuyRegion


	/**
	 * Get a list with all sign locations
	 * @return A List with all sign locations
	 */
	public List<Location> getSignLocations() {
		List<Location> result = new ArrayList<>();
		if(config.getConfigurationSection("general.signs") == null) {
			return result;
		}
		for(String signName : config.getConfigurationSection("general.signs").getKeys(false)) {
			result.add(Utils.configToLocation(config.getConfigurationSection("general.signs." + signName + ".location")));
		}
		return result;
	}

	/**
	 * Get a list with all sign locations
	 * @return A List with all sign locations
	 */
	public List<Location> getSignLocations() {
		List<Location> result = new ArrayList<Location>();
		if(config.getConfigurationSection("general.signs") == null) {
			return result;
		}
		for(String signName : config.getConfigurationSection("general.signs").getKeys(false)) {
			result.add(Utils.configToLocation(config.getConfigurationSection("general.signs." + signName + ".location")));
		}
		return result;
	}

Replace Generic With Diamond ArrayList<Location> with ArrayList<> in method public getSignLocations() : List<Location> from class nl.evolutioncoding.areashop.regions.GeneralRegion


	/**
	 * Get the groups that this region is added to
	 * @return A Set with all groups of this region
	 */
	public Set<RegionGroup> getGroups() {
		Set<RegionGroup> result = new HashSet<>();
		for(RegionGroup group : plugin.getFileManager().getGroups()) {
			if(group.isMember(this)) {
				result.add(group);
			}
		}
		return result;
	}

	/**
	 * Get the groups that this region is added to
	 * @return A Set with all groups of this region
	 */
	public Set<RegionGroup> getGroups() {
		Set<RegionGroup> result = new HashSet<RegionGroup>();
		for(RegionGroup group : plugin.getFileManager().getGroups()) {
			if(group.isMember(this)) {
				result.add(group);
			}
		}
		return result;
	}

Replace Generic With Diamond HashSet<RegionGroup> with HashSet<> in method public getGroups() : Set<RegionGroup> from class nl.evolutioncoding.areashop.regions.GeneralRegion


	/**
	 * Get a list of names from groups this region is in
	 * @return A list of groups this region is part of
	 */
	public List<String> getGroupNames() {
		List<String> result = new ArrayList<>();
		for(RegionGroup group : getGroups()) {
			result.add(group.getName());
		}
		return result;
	}

	/**
	 * Get a list of names from groups this region is in
	 * @return A list of groups this region is part of
	 */
	public List<String> getGroupNames() {
		List<String> result = new ArrayList<String>();
		for(RegionGroup group : getGroups()) {
			result.add(group.getName());
		}
		return result;
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getGroupNames() : List<String> from class nl.evolutioncoding.areashop.regions.GeneralRegion


	/**
	 * Get the list of friends added to this region
	 * @return Friends added to this region
	 */
	public Set<String> getFriendNames() {
		HashSet<String> result = new HashSet<>();
		for(UUID friend : getFriends()) {
			OfflinePlayer player = Bukkit.getOfflinePlayer(friend);
			if(player != null) {
				result.add(player.getName());
			}
		}
		return result;
	}

	/**
	 * Get the list of friends added to this region
	 * @return Friends added to this region
	 */
	public Set<String> getFriendNames() {
		HashSet<String> result = new HashSet<String>();
		for(UUID friend : getFriends()) {
			OfflinePlayer player = Bukkit.getOfflinePlayer(friend);
			if(player != null) {
				result.add(player.getName());
			}
		}
		return result;
	}

Replace Generic With Diamond HashSet<String> with HashSet<> in method public getFriendNames() : Set<String> from class nl.evolutioncoding.areashop.regions.GeneralRegion


	/**
	 * Checks if a certain location is safe to teleport to
	 * @param location The location to check
	 * @return true if it is safe, otherwise false
	 */
	protected boolean isSafe(Location location) {
		Block feet = location.getBlock();
		Block head = feet.getRelative(BlockFace.UP);
		Block below = feet.getRelative(BlockFace.DOWN);
		Block above = head.getRelative(BlockFace.UP);
		// Check the block at the feet of the player
		if((feet.getType().isSolid() && !canSpawnIn.contains(feet.getType())) || feet.isLiquid()) {
			return false;
		} else if((head.getType().isSolid() && !canSpawnIn.contains(head.getType())) || head.isLiquid()) {
			return false;
		} else if(!below.getType().isSolid() || cannotSpawnOn.contains(below.getType()) || below.isLiquid()) {
			return false;
		} else if(above.isLiquid() || cannotSpawnBeside.contains(above.getType())) {
			return false;
		}
		// Check all blocks around
		ArrayList<Material> around = new ArrayList<>(Arrays.asList(
				feet.getRelative(BlockFace.NORTH).getType(),
				feet.getRelative(BlockFace.NORTH_EAST).getType(),
				feet.getRelative(BlockFace.EAST).getType(),
				feet.getRelative(BlockFace.SOUTH_EAST).getType(),
				feet.getRelative(BlockFace.SOUTH).getType(),
				feet.getRelative(BlockFace.SOUTH_WEST).getType(),
				feet.getRelative(BlockFace.WEST).getType(),
				feet.getRelative(BlockFace.NORTH_WEST).getType(),
				below.getRelative(BlockFace.NORTH).getType(),
				below.getRelative(BlockFace.NORTH_EAST).getType(),
				below.getRelative(BlockFace.EAST).getType(),
				below.getRelative(BlockFace.SOUTH_EAST).getType(),
				below.getRelative(BlockFace.SOUTH).getType(),
				below.getRelative(BlockFace.SOUTH_WEST).getType(),
				below.getRelative(BlockFace.WEST).getType(),
				below.getRelative(BlockFace.NORTH_WEST).getType(),
				head.getRelative(BlockFace.NORTH).getType(),
				head.getRelative(BlockFace.NORTH_EAST).getType(),
				head.getRelative(BlockFace.EAST).getType(),
				head.getRelative(BlockFace.SOUTH_EAST).getType(),
				head.getRelative(BlockFace.SOUTH).getType(),
				head.getRelative(BlockFace.SOUTH_WEST).getType(),
				head.getRelative(BlockFace.WEST).getType(),
				head.getRelative(BlockFace.NORTH_WEST).getType(),
				above.getRelative(BlockFace.NORTH).getType(),
				above.getRelative(BlockFace.NORTH_EAST).getType(),
				above.getRelative(BlockFace.EAST).getType(),
				above.getRelative(BlockFace.SOUTH_EAST).getType(),
				above.getRelative(BlockFace.SOUTH).getType(),
				above.getRelative(BlockFace.SOUTH_WEST).getType(),
				above.getRelative(BlockFace.WEST).getType(),
				above.getRelative(BlockFace.NORTH_WEST).getType()
				));
		for(Material material : around) {
			if(cannotSpawnBeside.contains(material)) {
				return false;
			}
		}
		return true;
	}

	/**
	 * Checks if a certain location is safe to teleport to
	 * @param location The location to check
	 * @return true if it is safe, otherwise false
	 */
	protected boolean isSafe(Location location) {
		Block feet = location.getBlock();
		Block head = feet.getRelative(BlockFace.UP);
		Block below = feet.getRelative(BlockFace.DOWN);
		Block above = head.getRelative(BlockFace.UP);
		// Check the block at the feet of the player
		if((feet.getType().isSolid() && !canSpawnIn.contains(feet.getType())) || feet.isLiquid()) {
			return false;
		} else if((head.getType().isSolid() && !canSpawnIn.contains(head.getType())) || head.isLiquid()) {
			return false;
		} else if(!below.getType().isSolid() || cannotSpawnOn.contains(below.getType()) || below.isLiquid()) {
			return false;
		} else if(above.isLiquid() || cannotSpawnBeside.contains(above.getType())) {
			return false;
		}
		// Check all blocks around
		ArrayList<Material> around = new ArrayList<Material>(Arrays.asList(
				feet.getRelative(BlockFace.NORTH).getType(),
				feet.getRelative(BlockFace.NORTH_EAST).getType(),
				feet.getRelative(BlockFace.EAST).getType(),
				feet.getRelative(BlockFace.SOUTH_EAST).getType(),
				feet.getRelative(BlockFace.SOUTH).getType(),
				feet.getRelative(BlockFace.SOUTH_WEST).getType(),
				feet.getRelative(BlockFace.WEST).getType(),
				feet.getRelative(BlockFace.NORTH_WEST).getType(),
				below.getRelative(BlockFace.NORTH).getType(),
				below.getRelative(BlockFace.NORTH_EAST).getType(),
				below.getRelative(BlockFace.EAST).getType(),
				below.getRelative(BlockFace.SOUTH_EAST).getType(),
				below.getRelative(BlockFace.SOUTH).getType(),
				below.getRelative(BlockFace.SOUTH_WEST).getType(),
				below.getRelative(BlockFace.WEST).getType(),
				below.getRelative(BlockFace.NORTH_WEST).getType(),
				head.getRelative(BlockFace.NORTH).getType(),
				head.getRelative(BlockFace.NORTH_EAST).getType(),
				head.getRelative(BlockFace.EAST).getType(),
				head.getRelative(BlockFace.SOUTH_EAST).getType(),
				head.getRelative(BlockFace.SOUTH).getType(),
				head.getRelative(BlockFace.SOUTH_WEST).getType(),
				head.getRelative(BlockFace.WEST).getType(),
				head.getRelative(BlockFace.NORTH_WEST).getType(),
				above.getRelative(BlockFace.NORTH).getType(),
				above.getRelative(BlockFace.NORTH_EAST).getType(),
				above.getRelative(BlockFace.EAST).getType(),
				above.getRelative(BlockFace.SOUTH_EAST).getType(),
				above.getRelative(BlockFace.SOUTH).getType(),
				above.getRelative(BlockFace.SOUTH_WEST).getType(),
				above.getRelative(BlockFace.WEST).getType(),
				above.getRelative(BlockFace.NORTH_WEST).getType()
				));
		for(Material material : around) {
			if(cannotSpawnBeside.contains(material)) {
				return false;
			}
		}
		return true;
	}

Replace Generic With Diamond ArrayList<Material> with ArrayList<> in method protected isSafe(location Location) : boolean from class nl.evolutioncoding.areashop.regions.GeneralRegion


	/**
	 * Constructor, used when creating new groups or restoring them from groups.yml at server boot
	 * @param plugin The AreaShop plugin
	 * @param name Name of the group, has to be unique
	 */
	public RegionGroup(AreaShop plugin, String name) {
		this.plugin = plugin;
		this.name = name;
		setSetting("name", name);
		// Delete duplicates
		List<String> members = getMembers();
		int previousCount = members.size();
		List<String> newMembers = new ArrayList<>();
		while(!members.isEmpty()) {
			String member = members.remove(0);
			// If the region has been deleted also clean it from the group
			if(plugin.getFileManager().getRegion(member) != null) {
				newMembers.add(member);
			}
			while(members.contains(member)) {
				members.remove(member);
			}
		}
		if(newMembers.size() != previousCount) {
			setSetting("regions", newMembers);
			AreaShop.debug("group save required because of changed member size");
			saveRequired();
		}
		if(getMembers().size() == 0) {
			plugin.getFileManager().removeGroup(this);
		}
	}

	/**
	 * Constructor, used when creating new groups or restoring them from groups.yml at server boot
	 * @param plugin The AreaShop plugin
	 * @param name Name of the group, has to be unique
	 */
	public RegionGroup(AreaShop plugin, String name) {
		this.plugin = plugin;
		this.name = name;
		setSetting("name", name);
		// Delete duplicates
		List<String> members = getMembers();
		int previousCount = members.size();
		List<String> newMembers = new ArrayList<String>();
		while(!members.isEmpty()) {
			String member = members.remove(0);
			// If the region has been deleted also clean it from the group
			if(plugin.getFileManager().getRegion(member) != null) {
				newMembers.add(member);
			}
			while(members.contains(member)) {
				members.remove(member);
			}
		}
		if(newMembers.size() != previousCount) {
			setSetting("regions", newMembers);
			AreaShop.debug("group save required because of changed member size");
			saveRequired();
		}
		if(getMembers().size() == 0) {
			plugin.getFileManager().removeGroup(this);
		}
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public RegionGroup(plugin AreaShop, name String) from class nl.evolutioncoding.areashop.regions.RegionGroup


	/**
	 * Get all members of the group
	 * @return A list with the names of all members of the group
	 */
	public List<String> getMembers() {
		if(getSettings() == null || getSettings().getStringList("regions") == null) {
			return new ArrayList<>();
		}
		return getSettings().getStringList("regions");
	}

	/**
	 * Get all members of the group
	 * @return A list with the names of all members of the group
	 */
	public List<String> getMembers() {
		if(getSettings() == null || getSettings().getStringList("regions") == null) {
			return new ArrayList<String>();
		}
		return getSettings().getStringList("regions");
	}

Replace Generic With Diamond ArrayList<String> with ArrayList<> in method public getMembers() : List<String> from class nl.evolutioncoding.areashop.regions.RegionGroup


	/**
	 * Get all members of the group as GeneralRegions
	 * @return A Set with all group members
	 */
	public Set<GeneralRegion> getMemberRegions() {
		Set<GeneralRegion> result = new HashSet<>();
		for(String name : getMembers()) {
			result.add(plugin.getFileManager().getRegion(name));
		}
		return result;
	}

	/**
	 * Get all members of the group as GeneralRegions
	 * @return A Set with all group members
	 */
	public Set<GeneralRegion> getMemberRegions() {
		Set<GeneralRegion> result = new HashSet<GeneralRegion>();
		for(String name : getMembers()) {
			result.add(plugin.getFileManager().getRegion(name));
		}
		return result;
	}

Replace Generic With Diamond HashSet<GeneralRegion> with HashSet<> in method public getMemberRegions() : Set<GeneralRegion> from class nl.evolutioncoding.areashop.regions.RegionGroup


	@Override
	public HashMap<String, Object> getSpecificReplacements() {
		// Fill the replacements map with things specific to a RentRegion
		HashMap<String, Object> result = new HashMap<>();
		result.put(AreaShop.tagPrice, getFormattedPrice());
		result.put(AreaShop.tagRawPrice, getPrice());
		result.put(AreaShop.tagDuration, getDurationString());
		result.put(AreaShop.tagPlayerName, getPlayerName());
		result.put(AreaShop.tagPlayerUUID, getRenter());
			SimpleDateFormat date = new SimpleDateFormat(plugin.getConfig().getString("timeFormatChat"));
			String dateString = date.format(new Date(getRentedUntil()));
		result.put(AreaShop.tagRentedUntil, dateString);
			date = new SimpleDateFormat(plugin.getConfig().getString("timeFormatSign"));
			dateString = date.format(new Date(getRentedUntil()));
		result.put(AreaShop.tagRentedUntilShort, dateString);
		result.put(AreaShop.tagTimeLeft, getTimeLeftString());
		result.put(AreaShop.tagMoneyBackAmount, getFormattedMoneyBackAmount());
		result.put(AreaShop.tagRawMoneyBackAmount, getMoneyBackAmount());
		double moneyBackPercent = getMoneyBackPercentage();
		if((moneyBackPercent%1.0) == 0.0) {
			result.put(AreaShop.tagMoneyBackPercentage, (int)moneyBackPercent);
		} else {
			result.put(AreaShop.tagMoneyBackPercentage, moneyBackPercent);
		}
		result.put(AreaShop.tagMaxExtends, this.getMaxExtends());
		result.put(AreaShop.tagExtendsLeft, getMaxExtends() - getTimesExtended());
		result.put(AreaShop.tagMaxRentTime, this.millisToHumanFormat(getMaxRentTime()));
		result.put(AreaShop.tagMaxInactiveTime, this.getFormattedInactiveTimeUntilUnrent());
		return result;
	}

	@Override
	public HashMap<String, Object> getSpecificReplacements() {
		// Fill the replacements map with things specific to a RentRegion
		HashMap<String, Object> result = new HashMap<String, Object>();
		result.put(AreaShop.tagPrice, getFormattedPrice());
		result.put(AreaShop.tagRawPrice, getPrice());
		result.put(AreaShop.tagDuration, getDurationString());
		result.put(AreaShop.tagPlayerName, getPlayerName());
		result.put(AreaShop.tagPlayerUUID, getRenter());
			SimpleDateFormat date = new SimpleDateFormat(plugin.getConfig().getString("timeFormatChat"));
			String dateString = date.format(new Date(getRentedUntil()));
		result.put(AreaShop.tagRentedUntil, dateString);
			date = new SimpleDateFormat(plugin.getConfig().getString("timeFormatSign"));
			dateString = date.format(new Date(getRentedUntil()));
		result.put(AreaShop.tagRentedUntilShort, dateString);
		result.put(AreaShop.tagTimeLeft, getTimeLeftString());
		result.put(AreaShop.tagMoneyBackAmount, getFormattedMoneyBackAmount());
		result.put(AreaShop.tagRawMoneyBackAmount, getMoneyBackAmount());
		double moneyBackPercent = getMoneyBackPercentage();
		if((moneyBackPercent%1.0) == 0.0) {
			result.put(AreaShop.tagMoneyBackPercentage, (int)moneyBackPercent);
		} else {
			result.put(AreaShop.tagMoneyBackPercentage, moneyBackPercent);
		}
		result.put(AreaShop.tagMaxExtends, this.getMaxExtends());
		result.put(AreaShop.tagExtendsLeft, getMaxExtends() - getTimesExtended());
		result.put(AreaShop.tagMaxRentTime, this.millisToHumanFormat(getMaxRentTime()));
		result.put(AreaShop.tagMaxInactiveTime, this.getFormattedInactiveTimeUntilUnrent());
		return result;
	}

Replace Generic With Diamond HashMap<String,Object> with HashMap<> in method public getSpecificReplacements() : HashMap<String,Object> from class nl.evolutioncoding.areashop.regions.RentRegion


    public BSGSTerrOrder(GroupElement alpha) {
        this.alpha = alpha;
        this.babySteps = new ArrayList<>();
        babySteps.add(BigInteger.valueOf(200));
        babySteps.add(BigInteger.valueOf(201));
        babySteps.add(BigInteger.valueOf(203));
    }

    public BSGSTerrOrder(GroupElement alpha) {
        this.alpha = alpha;
        this.babySteps = new ArrayList<BigInteger>();
        babySteps.add(BigInteger.valueOf(200));
        babySteps.add(BigInteger.valueOf(201));
        babySteps.add(BigInteger.valueOf(203));
    }

Replace Generic With Diamond ArrayList<BigInteger> with ArrayList<> in method public BSGSTerrOrder(alpha GroupElement) from class cat.udl.cig.utils.discretelogarithm.BSGSTerrOrder


/**
     * Computes the operation \(\sqrt{p} (\mod modulus)\), where {@code p} is
     * {@code this} Polynomial.
     *
     * @param modulus the reducing polynomial (modulus) of this method.
     * @return a Polynomial \(r\), where \(r = \sqrt{p}\) and
     * {@code r.getGroup() = this.getGroup()}, or an empty
     * Polynomial if {@code this} is not a quadratic residue.
     */
    public Polynomial squareRoot(final Polynomial modulus) {
        // TODO: in need to be checkd. The computations are too slow!
        final BigInteger TWO = BigInteger.valueOf(2);
        if (isSquare(modulus)) {
            BigInteger p =
                    modulus.coefficients.get(0).getGroup().getSize();
            int n = modulus.degree;
            BigInteger q = p.pow(n);
            ExtensionField F = new ExtensionField(p, n, modulus);
            Polynomial rho = F.getRandomElement().getPolynomial();
            while ((rho.degree == 0 && rho.coefficients.get(0).getValue()
                    .compareTo(BigInteger.ZERO) == 0)
                    || rho.isSquare(modulus)) {
                rho = F.getRandomElement().getPolynomial();
            }

            int t = 0;
            BigInteger s = q.subtract(BigInteger.ONE);
            while (s.mod(TWO).compareTo(BigInteger.ZERO) == 0) {
                t++;
                s = s.divide(TWO);
            }

            Polynomial a = rho.pow(s, modulus);
            Polynomial b = pow(s, modulus);
            ArrayList<PrimeFieldElement> hcoefficients =
                    new ArrayList<>();
            hcoefficients.add(new PrimeFieldElement(coefficients.get(0)
                    .getGroup(), BigInteger.ONE));
            Polynomial h = new Polynomial(hcoefficients);

            Polynomial d;
            BigInteger tmpE;
            int k;
            for (int i = 1; i < t; i++) {
                tmpE = TWO;
                tmpE = tmpE.pow(t - 1 - i);
                d = b.pow(tmpE, modulus);
                if (d.degree == 0
                        && d.coefficients.get(0).getValue()
                        .compareTo(BigInteger.ONE) == 0) {
                    k = 0;
                } else {
                    k = 1;
                }
                tmpE = TWO;
                tmpE = tmpE.multiply(new BigInteger(String.valueOf(k)));
                b = b.multiply(a.pow(tmpE, modulus), modulus);
                tmpE = new BigInteger(String.valueOf(k));
                h = h.multiply(a.pow(tmpE, modulus), modulus);
                tmpE = TWO;
                a = a.pow(tmpE, modulus);
            }
            tmpE = s.add(BigInteger.ONE).divide(TWO);
            Polynomial root = pow(tmpE, modulus).multiply(h, modulus);
            root.checkDegree();
            return root;
        }
        throw new ArithmeticException("Is not quadratic");
    }

/**
     * Computes the operation \(\sqrt{p} (\mod modulus)\), where {@code p} is
     * {@code this} Polynomial.
     *
     * @param modulus the reducing polynomial (modulus) of this method.
     * @return a Polynomial \(r\), where \(r = \sqrt{p}\) and
     * {@code r.getGroup() = this.getGroup()}, or an empty
     * Polynomial if {@code this} is not a quadratic residue.
     */
    public Polynomial squareRoot(final Polynomial modulus) {
        // TODO: in need to be checkd. The computations are too slow!
        final BigInteger TWO = BigInteger.valueOf(2);
        if (isSquare(modulus)) {
            BigInteger p =
                    modulus.coefficients.get(0).getGroup().getSize();
            int n = modulus.degree;
            BigInteger q = p.pow(n);
            ExtensionField F = new ExtensionField(p, n, modulus);
            Polynomial rho = F.getRandomElement().getPolynomial();
            while ((rho.degree == 0 && rho.coefficients.get(0).getValue()
                    .compareTo(BigInteger.ZERO) == 0)
                    || rho.isSquare(modulus)) {
                rho = F.getRandomElement().getPolynomial();
            }

            int t = 0;
            BigInteger s = q.subtract(BigInteger.ONE);
            while (s.mod(TWO).compareTo(BigInteger.ZERO) == 0) {
                t++;
                s = s.divide(TWO);
            }

            Polynomial a = rho.pow(s, modulus);
            Polynomial b = pow(s, modulus);
            ArrayList<PrimeFieldElement> hcoefficients =
                    new ArrayList<PrimeFieldElement>();
            hcoefficients.add(new PrimeFieldElement(coefficients.get(0)
                    .getGroup(), BigInteger.ONE));
            Polynomial h = new Polynomial(hcoefficients);

            Polynomial d;
            BigInteger tmpE;
            int k;
            for (int i = 1; i < t; i++) {
                tmpE = TWO;
                tmpE = tmpE.pow(t - 1 - i);
                d = b.pow(tmpE, modulus);
                if (d.degree == 0
                        && d.coefficients.get(0).getValue()
                        .compareTo(BigInteger.ONE) == 0) {
                    k = 0;
                } else {
                    k = 1;
                }
                tmpE = TWO;
                tmpE = tmpE.multiply(new BigInteger(String.valueOf(k)));
                b = b.multiply(a.pow(tmpE, modulus), modulus);
                tmpE = new BigInteger(String.valueOf(k));
                h = h.multiply(a.pow(tmpE, modulus), modulus);
                tmpE = TWO;
                a = a.pow(tmpE, modulus);
            }
            tmpE = s.add(BigInteger.ONE).divide(TWO);
            Polynomial root = pow(tmpE, modulus).multiply(h, modulus);
            root.checkDegree();
            return root;
        }
        throw new ArithmeticException("Is not quadratic");
    }

Replace Generic With Diamond ArrayList<PrimeFieldElement> with ArrayList<> in method public squareRoot(modulus Polynomial) : Polynomial from class cat.udl.cig.utils.Polynomial


/**
     * Creates a new Polynomial with the specified {@code coefficients}.
     * If {@code coefficients.isEmpty() == true}, then, the new
     * Polynomial is keeped empty (
     * {@code this.coefficients.isEmpty() = true} and {@code this.degree = -1}).
     *
     * @param coefficients an ArrayList that contains the coefficients for {@code this}
     *                     new Polynomial.
     * @see PrimeFieldElement
     */
    public Polynomial(final ArrayList<PrimeFieldElement> coefficients) {
        if (coefficients.isEmpty()) {
            this.coefficients = new ArrayList<PrimeFieldElement>();
            degree = -1;
        } else {
            this.coefficients =
                    new ArrayList<>(coefficients);
            degree = this.coefficients.size() - 1;
            checkDegree();
        }
    }

/**
     * Creates a new Polynomial with the specified {@code coefficients}.
     * If {@code coefficients.isEmpty() == true}, then, the new
     * Polynomial is keeped empty (
     * {@code this.coefficients.isEmpty() = true} and {@code this.degree = -1}).
     *
     * @param coefficients an ArrayList that contains the coefficients for {@code this}
     *                     new Polynomial.
     * @see PrimeFieldElement
     */
    public Polynomial(final ArrayList<PrimeFieldElement> coefficients) {
        if (coefficients.isEmpty()) {
            this.coefficients = new ArrayList<PrimeFieldElement>();
            degree = -1;
        } else {
            this.coefficients =
                    new ArrayList<PrimeFieldElement>(coefficients);
            degree = this.coefficients.size() - 1;
            checkDegree();
        }
    }

Replace Generic With Diamond ArrayList<PrimeFieldElement> with ArrayList<> in method public Polynomial(coefficients ArrayList<PrimeFieldElement>) from class cat.udl.cig.utils.Polynomial


    private Router<Void, RouterTestingTest> router(final RouterTestingTest result) {
        return parameters -> {
            assertSame(PARAMETERS, parameters, "parameters");
            return Optional.ofNullable(result);
        };
    }

    private Router<Void, RouterTestingTest> router(final RouterTestingTest result) {
        return new Router<>() {
            @Override
            public Optional<RouterTestingTest> route(final Map<Void, Object> parameters) throws RouteException {
                assertSame(PARAMETERS, parameters, "parameters");
                return Optional.ofNullable(result);
            }
        };
    }

Replace Anonymous With Lambda walkingkooka.route.RouterTestingTest.router.new Router<> with parameters -> {assertSame(PARAMETERS,parameters,"parameters"); in method private router(result RouterTestingTest) : Router<Void,RouterTestingTest> from class walkingkooka.route.RouterTestingTest


    private Router<Void, RouterTestingTest> router(final RouterTestingTest result) {
        return new Router<>() {
            @Override
            public Optional<RouterTestingTest> route(final Map<Void, Object> parameters) throws RouteException {
                assertSame(PARAMETERS, parameters, "parameters");
                return Optional.ofNullable(result);
            }
        };
    }

    private Router<Void, RouterTestingTest> router(final RouterTestingTest result) {
        return new Router<Void, RouterTestingTest>() {
            @Override
            public Optional<RouterTestingTest> route(final Map<Void, Object> parameters) throws RouteException {
                assertSame(PARAMETERS, parameters, "parameters");
                return Optional.ofNullable(result);
            }
        };
    }

Replace Generic With Diamond Router<Void,RouterTestingTest> with Router<> in method private router(result RouterTestingTest) : Router<Void,RouterTestingTest> from class walkingkooka.route.RouterTestingTest


    public GeneralConfigurationBuilder(Class<T> configurationClass, String helpString) {
        this.configurationClass = configurationClass;
        this.helpString = helpString;
        try {
            T configuration = configurationClass.newInstance();

            wrapper = new ReflectionWrapper<>(configuration, configurationClass);
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(
                    "Failed to instantiate new instance of class: " + configurationClass.getSimpleName()
                            + " make sure it has zero-args constructor");
        }
    }

    public GeneralConfigurationBuilder(Class<T> configurationClass, String helpString) {
        this.configurationClass = configurationClass;
        this.helpString = helpString;
        try {
            T configuration = configurationClass.newInstance();

            wrapper = new ReflectionWrapper<T>(configuration, configurationClass);
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(
                    "Failed to instantiate new instance of class: " + configurationClass.getSimpleName()
                            + " make sure it has zero-args constructor");
        }
    }

Replace Generic With Diamond ReflectionWrapper<T> with ReflectionWrapper<> in method public GeneralConfigurationBuilder(configurationClass Class<T>, helpString String) from class dk.eSoftware.commandLineParser.generalized.GeneralConfigurationBuilder


    public static String httpUrlConnectionPost(String address) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 给访问路径加上传递的参数 url
        String do_url = SERVICE_URL + address + "&output=json&ak=CsItNKwRaLZ8GXXaeyQI6kRozCMrtKcF&callback=showLocation";
        // api设定的是做post方法,可以更改为get
        HttpGet httpGet = new HttpGet(do_url);
        // 获取执行后的response
        try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            // 判断访问连接状态是不是200
            if (statusCode == SUCCESS) {
                HttpEntity entity = response.getEntity();
                return EntityUtils.toString(entity, "utf-8");
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String httpUrlConnectionPost(String address) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        try {
            // 给访问路径加上传递的参数 url
            String do_url = SERVICE_URL + address + "&output=json&ak=CsItNKwRaLZ8GXXaeyQI6kRozCMrtKcF&callback=showLocation";
            // api设定的是做post方法,可以更改为get
            HttpGet httpGet = new HttpGet(do_url);
            // 获取执行后的response
            CloseableHttpResponse response = httpClient.execute(httpGet);
            try {
                StatusLine statusLine = response.getStatusLine();
                int statusCode = statusLine.getStatusCode();
                // 判断访问连接状态是不是200
                if (statusCode == SUCCESS) {
                    HttpEntity entity = response.getEntity();
                    String mes = EntityUtils.toString(entity, "utf-8");
                    return mes;
                } else {
                    return null;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                response.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

Try With Resources try(CloseableHttpResponse response=httpClient.execute(httpGet)) in method public httpUrlConnectionPost(address String) : String from class com.nit.city.util.CityUtil


    public static String httpUrlConnectionPost(String url) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 给访问路径加上传递的参数 url
        String do_url = SERVICE_URL + url;
        // api设定的是做post方法,可以更改为get
        HttpGet httpGet = new HttpGet(do_url);
        // 获取执行后的response
        try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            // 判断访问连接状态是不是201
            if (statusCode == SUCCESS) {
                HttpEntity entity = response.getEntity();
                return EntityUtils.toString(entity, "utf-8");
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String httpUrlConnectionPost(String url) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        try {
            // 给访问路径加上传递的参数 url
            String do_url = SERVICE_URL + url;
            // api设定的是做post方法,可以更改为get
            HttpGet httpGet = new HttpGet(do_url);
            // 获取执行后的response
            CloseableHttpResponse response = httpClient.execute(httpGet);
            try {
                StatusLine statusLine = response.getStatusLine();
                int statusCode = statusLine.getStatusCode();
                // 判断访问连接状态是不是201
                if (statusCode == SUCCESS) {
                    HttpEntity entity = response.getEntity();
                    return EntityUtils.toString(entity, "utf-8");
                } else {
                    return null;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                response.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

Try With Resources try(CloseableHttpResponse response=httpClient.execute(httpGet)) in method public httpUrlConnectionPost(url String) : String from class com.nit.city.util.PythonUtil


    public Answer() {
        values = new ArrayList<>();
    }

    public Answer() {
        values = new ArrayList<Value>();
    }

Replace Generic With Diamond ArrayList<Value> with ArrayList<> in method public Answer() from class com.codecool.expertsystem.rules.Answer


    public void run(int port) {
        httpServer.createContext("/", httpExchange -> {
            try (
                    OutputStream responseBody = httpExchange.getResponseBody();
                    OutputStreamWriter writer = new OutputStreamWriter(
                            responseBody)
            ) {
                Service service;
                String data = "Hei";
                writer.append(data);
                httpExchange.sendResponseHeaders(HTTP_OK, data.length());
            } catch (IOException e) {
                throw e;
            }
        });
        try {
            httpServer.bind(new InetSocketAddress(port), 0);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        httpServer.start();
    }

    public void run(int port) {
        httpServer.createContext("/", new HttpHandler() {
            @Override
            public void handle(HttpExchange exchange) throws IOException {
                try (
                        OutputStream responseBody = exchange.getResponseBody();
                        OutputStreamWriter writer = new OutputStreamWriter(
                                responseBody)
                ) {
                    String data = "Hei";
                    writer.append(data);
                    exchange.sendResponseHeaders(HTTP_OK, data.length());
                } catch (IOException e) {
                    throw e;
                }
            }
        });
        try {
            httpServer.bind(new InetSocketAddress(port), 0);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        httpServer.start();
    }

Replace Anonymous With Lambda com.github.tingstad.weather.app.Weather.run.createContext.new HttpHandler with httpExchange -> {try(OutputStream responseBody=httpExchange.getResponseBody(); OutputStreamWriter writer=new OutputStreamWriter(responseBody))Service service; in method public run(port int) : void from class com.github.tingstad.weather.app.Weather


    static Map<String, Object> getConfig(Iterator<String> configProps, String configPrefix) {
        ConfigurationUtil confUtil = ConfigurationUtil.getInstance();

        Map<String, Object> prop = new HashMap<>();
        while (configProps.hasNext()) {
            try {
                String configProp = configProps.next();
                String configName = configPrefix + "." + configProp.replace('.', '-');
                if (confUtil.get(configName).isPresent()) {
                    prop.put(configProp, confUtil.get(configName).get());
                }
            } catch (Exception e) {
                log.severe("Unable to read configuration " + configPrefix + ": " + e.toString());
            }
        }
        return prop;
    }

    static Map<String, Object> getConfig(Iterator<String> configProps, String configPrefix) {
        ConfigurationUtil confUtil = ConfigurationUtil.getInstance();

        Map<String, Object> prop = new HashMap<String, Object>();
        while (configProps.hasNext()) {
            try {
                String configProp = configProps.next();
                String configName = configPrefix + "." + configProp.replace('.', '-');
                if (confUtil.get(configName).isPresent()) {
                    prop.put(configProp, confUtil.get(configName).get());
                }
            } catch (Exception e) {
                log.severe("Unable to read configuration " + configPrefix + ": " + e.toString());
            }
        }
        return prop;
    }

Replace Generic With Diamond HashMap<String,Object> with HashMap<> in method public getConfig(configProps Iterator<String>, configPrefix String) : Map<String,Object> from class com.kumuluz.ee.streaming.common.config.ConfigLoader


    private List<Band> parseBands(final String hit) {
        LOGGER.debug("new hit: " + hit);
        List<Band> bandList = new ArrayList<>();
        Document doc = Jsoup.parse(hit);
        Elements links = doc.getElementsByAttribute("href");
        for (Element link : links) {
            String hrefAttr = link.attr("href");
            String bandId = hrefAttr.substring(hrefAttr.lastIndexOf("/") + 1, hrefAttr.length());
//			because there are Members which do not have any band O.o
//			see FENRIZ - http://www.metal-archives.com/artists/FENRIZ/407865
            if (!bandId.isEmpty()) {
                Band band = new Band(Long.parseLong(bandId));
                band.setName(MetallumUtil.trimNoBreakSpaces(link.text()));
                LOGGER.debug("adding new Band to Member: " + band);
                bandList.add(band);
            }
        }
        return bandList;
    }

    private List<Band> parseBands(final String hit) {
        LOGGER.debug("new hit: " + hit);
        List<Band> bandList = new ArrayList<Band>();
        Document doc = Jsoup.parse(hit);
        Elements links = doc.getElementsByAttribute("href");
        for (Element link : links) {
            String hrefAttr = link.attr("href");
            String bandId = hrefAttr.substring(hrefAttr.lastIndexOf("/") + 1, hrefAttr.length());
//			because there are Members which do not have any band O.o
//			see FENRIZ - http://www.metal-archives.com/artists/FENRIZ/407865
            if (!bandId.isEmpty()) {
                Band band = new Band(Long.parseLong(bandId));
                band.setName(MetallumUtil.trimNoBreakSpaces(link.text()));
                LOGGER.debug("adding new Band to Member: " + band);
                bandList.add(band);
            }
        }
        return bandList;
    }

Replace Generic With Diamond ArrayList<Band> with ArrayList<> in method private parseBands(hit String) : List<Band> from class com.github.loki.afro.metallum.core.parser.search.MemberSearchParser