0

元の文法では、次のように定義されたパーサー ルールがあります。

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。かなりばかげていますが、機能します。

4

0 に答える 0