docs: @SuppressWarnings("checkstyle:npathcomplexity")
  	public static SarlLibraryErrorCode getSARLLibraryVersionOnClasspath(TypeReferences typeReferences, Notifier context,
  			OutParameter<String> version) {
  		if (checkSarlVersionClass) {
  			checkSarlVersionClass = false;
  			try {
  				final Object v = SARLVersion.class.getDeclaredField(SARL_VERSION_FIELD_NAME_STR);
  				if (v == null) {
  					return SarlLibraryErrorCode.INVALID_SARL_VERSION_BYTECODE;
  				}
  			} catch (Throwable e) {
  				return SarlLibraryErrorCode.INVALID_SARL_VERSION_BYTECODE;
  			}
  		}
  		final JvmType type;
  		try {
  			type = typeReferences.findDeclaredType(SARLVersion.class, context);
  		} catch (Throwable exception) {
  			return SarlLibraryErrorCode.NO_SARL_VERSION_CLASS;
  		}
  		if (type == null) {
  			return SarlLibraryErrorCode.NO_SARL_VERSION_CLASS;
  		}
  		if (!(type instanceof JvmDeclaredType)) {
  			return SarlLibraryErrorCode.NO_SARL_VERSION_DECLARED_TYPE;
  		}
  		final JvmDeclaredType sarlVersionType = (JvmDeclaredType) type;
  		JvmField versionField = null;
  		final Iterator<JvmField> iterator = sarlVersionType.getDeclaredFields().iterator();
  		while (versionField == null && iterator.hasNext()) {
  			final JvmField field = iterator.next();
  			if (SARL_VERSION_FIELD_NAME_STR.equals(field.getSimpleName())) {
  				versionField = field;
  			}
  		}
  		if (versionField == null) {
  			return SarlLibraryErrorCode.NO_SARL_VERSION_FIELD;
  		}
  		final String value = versionField.getConstantValueAsString();
  		if (Strings.isNullOrEmpty(value)) {
  			return SarlLibraryErrorCode.NO_SARL_VERSION_VALUE;
  		}
  		if (version != null) {
  			version.set(value);
  		}
  		return SarlLibraryErrorCode.SARL_FOUND;
  	}