Grammar-Kit icon indicating copy to clipboard operation
Grammar-Kit copied to clipboard

Add a generate option to use faster stub getters `getStubOrPsiChild`

Open vlad20012 opened this issue 2 years ago • 1 comments
trafficstars

StubBasedPsiElementBase.getStubOrPsiChild(IStubElementType) works faster than usual PsiTreeUtil.getStubChildOfType. It can be used if the child rule does not have rules extending it and if there are exact types for stub element types.

generate = [
  exact-types = "elements"
  fast-stub-child-accessors = "yes"
]

With such configuration, Grammar-Kit will generate such implementations for PSI accessors for stubbed elements:

public Element4 getElement4() {
  return notNullChild(getStubOrPsiChild(ELEMENT_4));
}

vlad20012 avatar Jan 16 '23 10:01 vlad20012

FTR

Why have a separate flag? Let us always go the fast route

It is not always clear whether there is a possibility. If generate.exact-types = "elements" or "all", that is. But if generate.elements = "no", then it is not clear, without the option it is impossible to understand ("does not work" means that the generated code will not compile). You can make it so that when it is clear, then it works without the option. Apparently, when I wrote, I did not immediately understand that it always works with generate.exact-types

gregsh avatar Jul 14 '23 20:07 gregsh