code: protected void validateUnhandledException(
  			LightweightTypeReference thrownException,
  			XExpression object,
  			EStructuralFeature feature,
  			ITypeComputationState state,
  			Function<? super JvmType, ? extends String> message) {
  		if (!state.isIgnored(IssueCodes.UNHANDLED_EXCEPTION) && thrownException.isSubtypeOf(Throwable.class)
  				&& !thrownException.isSubtypeOf(RuntimeException.class) && !thrownException.isSubtypeOf(Error.class)) {
  			boolean declarationFound = false;
  			for (LightweightTypeReference declaredException : state.getExpectedExceptions())
  				if (declaredException.isAssignableFrom(thrownException)) {
  					declarationFound = true;
  					break;
  				}
  			if (!declarationFound) {
  				JvmType exceptionType = thrownException.getNamedType().getType();
  				state.addDiagnostic(new EObjectDiagnosticImpl(
  						state.getSeverity(IssueCodes.UNHANDLED_EXCEPTION),
  						IssueCodes.UNHANDLED_EXCEPTION,
  						message.apply(exceptionType),
  						object,
  						feature,
  						-1,
  						new String[] { 
  							EcoreUtil.getURI(exceptionType).toString(),
  							EcoreUtil.getURI(object).toString()
  						}));
  			}
  		}
  	}
docs: Checks if the given thrownexcpetion is handled (as in "taken care of by compiler").
  
  @param thrownException the exception to validate
  @param object the object in which context the exception should be validated
  @param feature which causes the exception
  @param state bearing the expected exceptions
  @param message function to specify the exception message
  
  @since 2.18