[ 
https://issues.apache.org/jira/browse/TINKERPOP-2952?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17732022#comment-17732022
 ] 

Stephen Mallette commented on TINKERPOP-2952:
---------------------------------------------

If you've gone so far to extend TinkerGraph then I think you should just treat 
your extension as a {{Graph}} implementation. Graph implementations like 
JanusGraph, TinkerGraph, Neptune, etc will not override {{GraphTraversal}} but 
will instead use {{TraversalStrategy}} implementations to wholly replace step 
implementations at traversal compilation time. So, you'd write a strategy that 
replaces the {{PropertiesStep}} with a custom {{ObjectValuePropertiesStep}} 
that makes appropriate checks and treats "parameters" differently. 

Of course, when I see:

{code}
g.V().properties("parameters).properties("name")
{code}

and your structure, I can't help wondering if you couldn't just use 
metaproperties for this case. it's not an exact fit for the structure you have 
but it technically works without any changes on your end.

{code}
gremlin> g.addV('ObjectValue').property(single, 'parameters','ignore', 
'id',123, 'name','foo')
==>v[0]
gremlin> g.V().properties('parameters').properties('name')
==>p[name->foo]
gremlin> g.V().properties('parameters').valueMap()
==>[name:foo,id:123]
{code}

> Error when overriding DSL methods
> ---------------------------------
>
>                 Key: TINKERPOP-2952
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2952
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process
>    Affects Versions: 3.6.2
>            Reporter: Drew Nuttall-Smith
>            Priority: Major
>         Attachments: dsl.patch
>
>
> I'm implementing a custom gremlin DSL in java, and due to some interesting 
> requirements, I'm trying to override the `properties` method from the 
> GraphTraversal class.
>  
> Doing so results in a compilation error (see below) due to the method already 
> being defined. It looks like the DSL code generation is loading in the custom 
> methods, and then loading in the built in methods and the `@Override` 
> annotation is ignored.
>  
>  
> Error:
> {{[ERROR] 
> /Users/drewnuttall-smith/Documents/work/projects/compliance/dm-mettle-nextgen-compliance/target/generated-sources/annotations/com/datamigrators/mettle/compliance/gremlin/dsl/DatastageTraversal.java:[223,62]
>  method <E2>properties(java.lang.String...) is already defined in interface 
> com.datamigrators.mettle.compliance.gremlin.dsl.DatastageTraversal}}
> {{[ERROR] 
> /Users/drewnuttall-smith/Documents/work/projects/compliance/dm-mettle-nextgen-compliance/target/generated-sources/annotations/com/datamigrators/mettle/compliance/gremlin/dsl/__.java:[192,85]
>  name clash: <A,B>properties(java.lang.String...) and 
> <E2,S>properties(java.lang.String...) have the same erasure}}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to