docs: public static JCStatement generateNullCheck(JavacTreeMaker maker, JavacNode variable, JCVariableDecl varDecl, JavacNode source) {
  		NullCheckExceptionType exceptionType = source.getAst().readConfiguration(ConfigurationKeys.NON_NULL_EXCEPTION_TYPE);
  		if (exceptionType == null) exceptionType = NullCheckExceptionType.NULL_POINTER_EXCEPTION;
  		
  		if (isPrimitive(varDecl.vartype)) return null;
  		Name fieldName = varDecl.name;
  		
  		JCLiteral message = maker.Literal(exceptionType.toExceptionMessage(fieldName.toString()));
  		if (exceptionType == NullCheckExceptionType.ASSERTION) {
  			return maker.Assert(maker.Binary(CTC_NOT_EQUAL, maker.Ident(fieldName), maker.Literal(CTC_BOT, null)), message);
  		}
  		
  		JCExpression exType = genTypeRef(variable, exceptionType.getExceptionType());
  		JCExpression exception = maker.NewClass(null, List.<JCExpression>nil(), exType, List.<JCExpression>of(message), null);
  		JCStatement throwStatement = maker.Throw(exception);
  		JCBlock throwBlock = maker.Block(0, List.of(throwStatement));
  		return maker.If(maker.Binary(CTC_EQUAL, maker.Ident(fieldName), maker.Literal(CTC_BOT, null)), throwBlock, null);
  	}