元の文法では、次のように定義されたパーサー ルールがあります。
Property: k=Cident '=' (simple=PropertyValue | map=MapLiteral);
私は2つの異なるプロパティAとを持っていますB。それらはマップで異なるプロパティを持っています。例えば:
typeA = {'class': 'typeA', 'upper_bound': 50};
typeB = {'class': 'typeB', 'possible_value': 'int'};
typeBupper_bound財産になりません。
をオーバーライドcompleteProperty_Mapすると、 にキャストmodelしてisか かPropertyを確認し、違いのオートコンプリートを提案できます。しかし、最初の提案の後、ktypeAtypeB
typeA = {'class': 'typeA',
その後、オートコンプリートが機能しません。マップ内にあることだけは認識していますが、このマップが の右側にあることは認識していませんProperty。かどうかkを確認できないようなものです。typeAtypeB
何か助けはありますか?
================================================== ============
更新: コード スニペットをさらに追加
PropertyValue
: c=Constant
| u=UnreservedKeyword
;
Constant:
STRING_LITERAL | INTEGER | FLOAT | BOOLEAN | UUID | HEXNUMBER
;
================================================== ============
更新: 引数から AstTree の親オブジェクトを取得し、modelすべてのマップ エントリを反復処理して、classプロパティが表示されているかどうかと の値を確認できることがわかりましたCident。かなりばかげていますが、機能します。