src/main/java/com/googlecode/objectify/impl/QueryImpl.java
void addFilter(final String condition, final Object value) {

		final String[] parts = condition.trim().split(" ");
		if (parts.length < 1 || parts.length > 2)
			throw new IllegalArgumentException("'" + condition + "' is not a legal filter condition");

		final String prop = parts[0].trim();
		final FilterOperator op = (parts.length == 2) ? this.translate(parts[1]) : FilterOperator.EQUAL;

		// If we have a class restriction, check to see if the property is the @Parent or @Id. We used to try to convert
		// filtering on the id field to a __key__ query, but that tended to confuse users about the real capabilities
		// of GAE and Objectify. So let's force users to use filterKey() instead.
		if (this.classRestriction != null) {
			final KeyMetadata<?> meta = loader.ofy.factory().keys().getMetadataSafe(this.classRestriction);

			if (prop.equals(meta.getParentFieldName())) {
				throw new IllegalArgumentException("@Parent fields cannot be filtered on. Perhaps you wish to use filterKey() or ancestor() instead?");
			}
			else if (prop.equals(meta.getIdFieldName())) {
				throw new IllegalArgumentException("@Id fields cannot be filtered on. Perhaps you wish to use filterKey() instead?");
			}
		}

		// Convert to something filterable, possibly extracting/converting keys
		final Value<?> translated = loader.getObjectifyImpl().makeFilterable(value);

		addFilter(op.of(prop, translated));
	}
void addFilter(final String condition, final Object value) {

		final String[] parts = condition.trim().split(" ");
		if (parts.length < 1 || parts.length > 2)
			throw new IllegalArgumentException("'" + condition + "' is not a legal filter condition");

		final String prop = parts[0].trim();
		final FilterOperator op = (parts.length == 2) ? this.translate(parts[1]) : FilterOperator.EQUAL;

		// If we have a class restriction, check to see if the property is the @Parent or @Id. We used to try to convert
		// filtering on the id field to a __key__ query, but that tended to confuse users about the real capabilities
		// of GAE and Objectify. So let's force users to use filterKey() instead.
		if (this.classRestriction != null) {
			final KeyMetadata<?> meta = loader.ofy.factory().keys().getMetadataSafe(this.classRestriction);

			if (prop.equals(meta.getParentFieldName())) {
				throw new IllegalArgumentException("@Parent fields cannot be filtered on. Perhaps you wish to use filterKey() or ancestor() instead?");
			}
			else if (prop.equals(meta.getIdFieldName())) {
				throw new IllegalArgumentException("@Id fields cannot be filtered on. Perhaps you wish to use filterKey() instead?");
			}
		}

		// Convert to something filterable, possibly extracting/converting keys
		final Value<?> translated = loader.getObjectifyImpl().makeFilterable(value);

		addFilter(op.of(prop, translated));
	}
void addFilter ( final String condition , final Object value ) { final String [ ] parts = condition . trim ( ) . split ( " " ) ; if ( parts . length < 1 || parts . length > 2 ) throw new IllegalArgumentException ( "'" + condition + "' is not a legal filter condition" ) ; final String prop = parts [ 0 ] . trim ( ) ; final FilterOperator op = ( parts . length == 2 ) ? this . translate ( parts [ 1 ] ) : FilterOperator . EQUAL ; // If we have a class restriction, check to see if the property is the @Parent or @Id. We used to try to convert
 // filtering on the id field to a __key__ query, but that tended to confuse users about the real capabilities
 // of GAE and Objectify. So let's force users to use filterKey() instead.
 if ( this . classRestriction != null ) { final KeyMetadata < ? > meta = loader . ofy . factory ( ) . keys ( ) . getMetadataSafe ( this . classRestriction ) ; if ( prop . equals ( meta . getParentFieldName ( ) ) ) { throw new IllegalArgumentException ( "@Parent fields cannot be filtered on. Perhaps you wish to use filterKey() or ancestor() instead?" ) ; } else if ( prop . equals ( meta . getIdFieldName ( ) ) ) { throw new IllegalArgumentException ( "@Id fields cannot be filtered on. Perhaps you wish to use filterKey() instead?" ) ; } } // Convert to something filterable, possibly extracting/converting keys
 final Value < ? > translated = loader . getObjectifyImpl ( ) . makeFilterable ( value ) ; addFilter ( op . of ( prop , translated ) ) ; }
Modifies the instance
Modifies the instance