@NotNull
	public static Expression parse(@NotNull String expression) {
		ImmutableList.Builder<Label> includes = ImmutableList.builder();
		ImmutableList.Builder<Label> excludes = ImmutableList.builder();

		String[] split = expression.split("\\s+");
		if(split != null && split.length > 0) {
			for (String labelString : split) {
				if(labelString == null || labelString.isEmpty()) {
					//Split can have some weird behavior. So make sure we never get bit by that.
					//noinspection UnnecessaryContinue
					continue;
				} else if(labelString.startsWith("!")) {
					Label label = new Label(labelString.substring(1));
					excludes.add(label);
				} else {
					Label label = new Label(labelString);
					includes.add(label);
				}
			}
		}
		return new Expression(includes.build(), excludes.build());
	}