@Nonnull
	private Handling getHandlingForExceptions(@Nonnull TryCatchBlockNode block, String... possiblyThrownExceptions) {
		// Having no type indicates the block will handle anything. It would be equivalent
		// to the type being 'Throwable'
		if (block.type == null || block.type.equals("java/lang/Throwable"))
			return Handling.CAUGHT;

		for (String exception : possiblyThrownExceptions) {
			if (block.type.equals(exception))
				return Handling.CAUGHT;
			String key = exception + ':' + block.type;
			Handling handling = doesHandleCache.computeIfAbsent(key, k -> {
				InheritanceVertex vPossiblyThrown = inheritanceGraph.getVertex(exception);
				if (vPossiblyThrown == null)
					return Handling.UNKNOWN;

				InheritanceVertex vHandled = inheritanceGraph.getVertex(block.type);
				if (vHandled == null)
					return Handling.UNKNOWN;

				return vHandled.isParentOf(vPossiblyThrown) ? Handling.CAUGHT : Handling.NOT_CAUGHT;
			});
			if (handling == Handling.CAUGHT)
				return Handling.CAUGHT;
		}
		return Handling.NOT_CAUGHT;
	}
A transformer that removes redundant try-catch blocks.

@author Matt Coley
recaf-core/src/main/java/software/coley/recaf/services/deobfuscation/transform/generic/RedundantTryCatchRemovingTransformer.java