[
https://issues.apache.org/jira/browse/TINKERPOP-1853?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17431251#comment-17431251
]
Florian Hockmann commented on TINKERPOP-1853:
---------------------------------------------
I've spent some time working on this but now I'm not sure any more whether it's
actually feasible to get a working implementation that still allows the
{{DotNetTranslator}} to produce valid C# traversals. One example where I
noticed this in our test suite is this overload:
{code:c#}
public GraphTraversal<S, E> To (ITraversal toVertex) {code}
which I would now like to change into:
{code:c#}
public GraphTraversal<S, E> To (ITraversal<Vertex> toVertex) {code}
I think that is a nice improvement for most use cases as it still allows
something like {{To(__.V())}} or {{To(__.AddV())}} but we cannot produce
working code with the translator for something like {{to(__.select('v'))}} as
the translator would need to translate this into
{{To(__.Select<Vertex>('v'))}}. However, I don't know how we could change the
translator to use the correct generic type parameter for {{Select}} here
without making it a lot more complex. (Right now, it always uses {{object}} as
the type parameter which works without these changes.) It would at least need
to inspect what kind of type the outer step needs (here {{To()}} needs an
{{ITraversal<Vertex>}}). The translator however only operates on {{Bytecode}}
which doesn't have such type information.
This is now only for the {{To()}} step but I think that the same could apply
for most if not all steps that take a traversal as an argument.
While this seems to be a nice improvement in my opinion as it would reduce the
need to provide generic type parameters in some places and make it harder to
produce invalid {{Bytecode}} from Gremlin.NET, I'm not sure any more if it's
really worth the effort given the problems with the {{DotNetTranslator}}. I'm
however open for any suggestions here. So, I pushed my current changes which at
least result in a clean build as a WIP here:
[https://github.com/apache/tinkerpop/tree/TINKERPOP-1853]
If nobody has a good idea how the problem with the code translation could be
solved, then I'll probably close this as _won't do_.
> Use generic version of ITraversal for arguments in Traversal API
> ----------------------------------------------------------------
>
> Key: TINKERPOP-1853
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1853
> Project: TinkerPop
> Issue Type: Improvement
> Components: dotnet
> Affects Versions: 3.3.0, 3.2.6
> Reporter: Florian Hockmann
> Assignee: Florian Hockmann
> Priority: Minor
>
> Currently, we use {{ITraversal}} as the type for arguments in the traversal
> API of Gremlin.Net when a traversal is expected:
> {code}
> public GraphTraversal< S , E2 > Choose<E2> (ITraversal traversalPredicate,
> ITraversal trueChoice)
> {code}
> The Java equivalent is more useful as it only allows {{Traversal<?, E2>}} for
> the second argument:
> {code}
> public default <E2> GraphTraversal<S, E2> choose(final Traversal<?, ?>
> traversalPredicate, final Traversal<?, E2> trueChoice)
> {code}
> We should also use the generic type {{ITraversal<object, E2>}} in Gremlin.Net
> in those cases. Then it wouldn't be necessary to specify the type for the
> arguments and the step as it can be interfered from the type of the arguments.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)