neo4j/community — pull request #731 by lassewesth (2012-07-24 09:47:54+00:00)
Title: Changes to traversal framework for backwards compatibility

Small amount of fixes for backwards compatibility, following Matthias' analysis. The interesting bit is what has _not_ been fixed; here is the relevant clirr output after these changes:

* [INFO] --- clirr-maven-plugin:1.0:check (default) @ neo4j-kernel ---
* [INFO] Comparing to version: 1.7
* [ERROR] org.neo4j.graphdb.Path: Method 'public java.lang.Iterable reverseNodes()' has been added to an interface
* [ERROR] org.neo4j.graphdb.Path: Method 'public java.lang.Iterable reverseRelationships()' has been added to an interface

Quoting Matthias: "Path is meant to be used, not implemented so adding methods is OK."

* [ERROR] org.neo4j.graphdb.traversal.BranchOrderingPolicy: In method 'public org.neo4j.graphdb.traversal.BranchSelector create(org.neo4j.graphdb.traversal.TraversalBranch)' the number of arguments has changed
* [ERROR] org.neo4j.graphdb.traversal.BranchSelector: In method 'public org.neo4j.graphdb.traversal.TraversalBranch next()' the number of arguments has changed

I have decided not to fix these. Matthias says these might have been implemented by enthusiasts, but also that customers are very unlikely to have implemented them. Also, the impact of supporting old and new semantics would be painful. This can go out in milestone release for feedback.

* [ERROR] org.neo4j.graphdb.traversal.PruneEvaluator: Class org.neo4j.graphdb.traversal.PruneEvaluator removed

This is part of cleaning up some deprecated methods, so perfectly fine.

* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: Method 'public boolean continues()' has been added to an interface
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: Method 'public int depth()' has been removed
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: In method 'public org.neo4j.graphdb.traversal.Evaluation evaluation()' the number of arguments has changed
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: Return type of method 'public org.neo4j.graphdb.traversal.Evaluation evaluation()' has been changed to void
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: Method 'public boolean includes()' has been added to an interface
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: In method 'public void initialize()' the number of arguments has changed
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: In method 'public org.neo4j.graphdb.traversal.TraversalBranch next()' the number of arguments has changed
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: Method 'public org.neo4j.graphdb.Node node()' has been removed
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: Method 'public org.neo4j.graphdb.Path position()' has been removed
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: Method 'public void prune()' has been added to an interface
* [ERROR] org.neo4j.graphdb.traversal.TraversalBranch: Method 'public org.neo4j.graphdb.Relationship relationship()' has been removed

Quoting Matthias: "TraversalBranch is an internal thingie which happens to be a public interface. It isn't meant to implement, and not even used (apart from in PathCollisionEvaluator, which is new in 1.8). Ignore these.". Duly ignored.

* [ERROR] org.neo4j.graphdb.traversal.TraversalDescription: Method 'public org.neo4j.graphdb.traversal.TraversalDescription expand(org.neo4j.graphdb.PathExpander)' has been added to an interface
* [ERROR] org.neo4j.graphdb.traversal.TraversalDescription: Method 'public org.neo4j.graphdb.traversal.TraversalDescription expand(org.neo4j.graphdb.PathExpander, org.neo4j.graphdb.traversal.InitialStateFactory)' has been added to an interface
* [ERROR] org.neo4j.graphdb.traversal.TraversalDescription: Method 'public org.neo4j.graphdb.traversal.TraversalDescription filter(org.neo4j.helpers.Predicate)' has been removed
* [ERROR] org.neo4j.graphdb.traversal.TraversalDescription: Method 'public org.neo4j.graphdb.traversal.TraversalDescription prune(org.neo4j.graphdb.traversal.PruneEvaluator)' has been removed
* [ERROR] org.neo4j.graphdb.traversal.TraversalDescription: Method 'public org.neo4j.graphdb.traversal.TraversalDescription reverse()' has been added to an interface
* [ERROR] org.neo4j.graphdb.traversal.TraversalDescription: Method 'public org.neo4j.graphdb.traversal.TraversalDescription sort(java.util.Comparator)' has been added to an interface
* [ERROR] org.neo4j.graphdb.traversal.TraversalDescription: Method 'public org.neo4j.graphdb.traversal.Traverser traverse(org.neo4j.graphdb.Node[])' has been added to an interface

* [ERROR] org.neo4j.graphdb.traversal.Traverser: Method 'public org.neo4j.graphdb.traversal.TraversalMetadata metadata()' has been added to an interface

Quoting Matthias: "TraversalDescription and Traverser are public interfaces, but no one should implement them, it makes no sense. It's only used so adding methods is OK. Ignore these. The two methods removed (prune/filter have been deprecated for 3 releases or something).". Duly left alone.