mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-30 02:09:59 +07:00
IJPL-562 non-stub-element-type utility methods in StubBasedPsiElementBase
GitOrigin-RevId: 0bdae09a7e756af88b5364d9b926720d2e96c964
This commit is contained in:
committed by
intellij-monorepo-bot
parent
ee14516cf5
commit
917969bf26
@@ -2,7 +2,8 @@ c:com.intellij.extapi.psi.StubBasedPsiElementBase
|
||||
- com.intellij.extapi.psi.ASTDelegatePsiElement
|
||||
- *:<init>(com.intellij.psi.stubs.StubElement,com.intellij.psi.tree.IElementType):V
|
||||
- *pf:getElementTypeImpl():com.intellij.psi.tree.IElementType
|
||||
- *f:getNotNullStubOrPsiChild(com.intellij.psi.tree.IElementType,java.lang.Class):com.intellij.psi.PsiElement
|
||||
- *f:getRequiredStubOrPsiChild(com.intellij.psi.tree.IElementType):com.intellij.psi.PsiElement
|
||||
- *f:getRequiredStubOrPsiChild(com.intellij.psi.tree.IElementType,java.lang.Class):com.intellij.psi.PsiElement
|
||||
- *f:getStubOrPsiChild(com.intellij.psi.tree.IElementType):com.intellij.psi.PsiElement
|
||||
- *f:getStubOrPsiChild(com.intellij.psi.tree.IElementType,java.lang.Class):com.intellij.psi.PsiElement
|
||||
*:com.intellij.ide.plugins.PluginEnabler
|
||||
|
||||
@@ -280,12 +280,13 @@ c:com.intellij.extapi.psi.StubBasedPsiElementBase
|
||||
- getParent():com.intellij.psi.PsiElement
|
||||
- pf:getParentByStub():com.intellij.psi.PsiElement
|
||||
- getProject():com.intellij.openapi.project.Project
|
||||
- getRequiredStubOrPsiChild(com.intellij.psi.stubs.IStubElementType):com.intellij.psi.PsiElement
|
||||
- f:getRequiredStubOrPsiChild(com.intellij.psi.stubs.IStubElementType):com.intellij.psi.PsiElement
|
||||
- getStub():com.intellij.psi.stubs.StubElement
|
||||
- getStubOrPsiChild(com.intellij.psi.stubs.IStubElementType):com.intellij.psi.PsiElement
|
||||
- getStubOrPsiChildren(com.intellij.psi.stubs.IStubElementType,com.intellij.util.ArrayFactory):com.intellij.psi.PsiElement[]
|
||||
- getStubOrPsiChildren(com.intellij.psi.stubs.IStubElementType,com.intellij.psi.PsiElement[]):com.intellij.psi.PsiElement[]
|
||||
- getStubOrPsiChildren(com.intellij.psi.tree.IElementType,com.intellij.util.ArrayFactory):com.intellij.psi.PsiElement[]
|
||||
- f:getStubOrPsiChildren(com.intellij.psi.stubs.IStubElementType,com.intellij.util.ArrayFactory):com.intellij.psi.PsiElement[]
|
||||
- f:getStubOrPsiChildren(com.intellij.psi.stubs.IStubElementType,com.intellij.psi.PsiElement[]):com.intellij.psi.PsiElement[]
|
||||
- f:getStubOrPsiChildren(com.intellij.psi.tree.IElementType,com.intellij.util.ArrayFactory):com.intellij.psi.PsiElement[]
|
||||
- f:getStubOrPsiChildren(com.intellij.psi.tree.IElementType,com.intellij.psi.PsiElement[]):com.intellij.psi.PsiElement[]
|
||||
- getStubOrPsiChildren(com.intellij.psi.tree.TokenSet,com.intellij.util.ArrayFactory):com.intellij.psi.PsiElement[]
|
||||
- getStubOrPsiChildren(com.intellij.psi.tree.TokenSet,com.intellij.psi.PsiElement[]):com.intellij.psi.PsiElement[]
|
||||
- p:getStubOrPsiParentOfType(java.lang.Class):com.intellij.psi.PsiElement
|
||||
|
||||
@@ -374,7 +374,7 @@ public class StubBasedPsiElementBase<T extends StubElement> extends ASTDelegateP
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #getNotNullStubOrPsiChild(IElementType, Class)
|
||||
* @see #getRequiredStubOrPsiChild(IElementType, Class)
|
||||
* @see #getStubOrPsiChild(IElementType, Class)
|
||||
*
|
||||
* @return a child of the specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
@@ -397,6 +397,21 @@ public class StubBasedPsiElementBase<T extends StubElement> extends ASTDelegateP
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a not-null child of the specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
public final @NotNull PsiElement getRequiredStubOrPsiChild(@NotNull IElementType elementType) {
|
||||
PsiElement child = getStubOrPsiChild(elementType);
|
||||
if (child == null) {
|
||||
throw new IllegalStateException("Cannot find child of " + elementType + " in " + this);
|
||||
}
|
||||
return child;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a not-null child of the specified type and class, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
public final <Psi extends PsiElement> @Nullable Psi getStubOrPsiChild(@NotNull IElementType elementType, @NotNull Class<Psi> psiClass) {
|
||||
PsiElement child = getStubOrPsiChild(elementType);
|
||||
@@ -404,48 +419,24 @@ public class StubBasedPsiElementBase<T extends StubElement> extends ASTDelegateP
|
||||
}
|
||||
|
||||
@ApiStatus.Experimental
|
||||
public final <Psi extends PsiElement> @NotNull Psi getNotNullStubOrPsiChild(@NotNull IElementType elementType,
|
||||
@NotNull Class<Psi> psiClass) {
|
||||
PsiElement child = getStubOrPsiChild(elementType);
|
||||
if (child == null) {
|
||||
throw new IllegalStateException("Cannot find child of " + elementType + " in " + this);
|
||||
}
|
||||
public final <Psi extends PsiElement> @NotNull Psi getRequiredStubOrPsiChild(@NotNull IElementType elementType,
|
||||
@NotNull Class<Psi> psiClass) {
|
||||
PsiElement child = getRequiredStubOrPsiChild(elementType);
|
||||
return psiClass.cast(child);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a child of specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
* @deprecated use {@link #getStubOrPsiChild(IElementType)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public @Nullable <Psi extends PsiElement> Psi getStubOrPsiChild(@NotNull IStubElementType<? extends StubElement, Psi> elementType) {
|
||||
//noinspection unchecked
|
||||
return (Psi)getStubOrPsiChild((IElementType)elementType);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a not-null child of specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
*/
|
||||
public @NotNull <S extends StubElement<?>, Psi extends PsiElement> Psi getRequiredStubOrPsiChild(@NotNull IStubElementType<S, Psi> elementType) {
|
||||
Psi result = getStubOrPsiChild(elementType);
|
||||
if (result == null) {
|
||||
throw new AssertionError("Missing required child of type " + elementType + "; tree: " + DebugUtil.psiToString(this, true));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return children of specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
*/
|
||||
public <S extends StubElement<?>, Psi extends PsiElement> Psi @NotNull [] getStubOrPsiChildren(@NotNull IStubElementType<S, ? extends Psi> elementType, Psi @NotNull [] array) {
|
||||
public final <Psi extends PsiElement> Psi @NotNull [] getStubOrPsiChildren(@NotNull IElementType elementType, @NotNull ArrayFactory<? extends Psi> f) {
|
||||
T stub = getGreenStub();
|
||||
if (stub != null) {
|
||||
//noinspection unchecked
|
||||
return (Psi[])stub.getChildrenByType(elementType, array);
|
||||
return (Psi[])stub.getChildrenByType(elementType, f);
|
||||
}
|
||||
else {
|
||||
final ASTNode[] nodes = SharedImplUtil.getChildrenOfType(getNode(), elementType);
|
||||
Psi[] psiElements = ArrayUtil.newArray(ArrayUtil.getComponentType(array), nodes.length);
|
||||
Psi[] psiElements = f.create(nodes.length);
|
||||
for (int i = 0; i < nodes.length; i++) {
|
||||
//noinspection unchecked
|
||||
psiElements[i] = (Psi)nodes[i].getPsi();
|
||||
@@ -455,27 +446,17 @@ public class StubBasedPsiElementBase<T extends StubElement> extends ASTDelegateP
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getStubOrPsiChildren(IElementType, ArrayFactory)} instead
|
||||
*
|
||||
* @return children of specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
*/
|
||||
@Deprecated
|
||||
public <S extends StubElement<?>, Psi extends PsiElement> Psi @NotNull [] getStubOrPsiChildren(@NotNull IStubElementType<S, ? extends Psi> elementType, @NotNull ArrayFactory<? extends Psi> f) {
|
||||
return getStubOrPsiChildren((IElementType)elementType, f);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return children of specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
*/
|
||||
public <S extends StubElement<?>, Psi extends PsiElement> Psi @NotNull [] getStubOrPsiChildren(@NotNull IElementType elementType, @NotNull ArrayFactory<? extends Psi> f) {
|
||||
public final <Psi extends PsiElement> Psi @NotNull [] getStubOrPsiChildren(@NotNull IElementType elementType, Psi @NotNull [] array) {
|
||||
T stub = getGreenStub();
|
||||
if (stub != null) {
|
||||
//noinspection unchecked
|
||||
return (Psi[])stub.getChildrenByType(elementType, f);
|
||||
return (Psi[])stub.getChildrenByType(elementType, array);
|
||||
}
|
||||
else {
|
||||
final ASTNode[] nodes = SharedImplUtil.getChildrenOfType(getNode(), elementType);
|
||||
Psi[] psiElements = f.create(nodes.length);
|
||||
Psi[] psiElements = ArrayUtil.newArray(ArrayUtil.getComponentType(array), nodes.length);
|
||||
for (int i = 0; i < nodes.length; i++) {
|
||||
//noinspection unchecked
|
||||
psiElements[i] = (Psi)nodes[i].getPsi();
|
||||
@@ -542,4 +523,42 @@ public class StubBasedPsiElementBase<T extends StubElement> extends ASTDelegateP
|
||||
copy.setSubstrateRef(SubstrateRef.createAstStrongRef(getNode()));
|
||||
return copy;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a child of the specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
* @deprecated use {@link #getStubOrPsiChild(IElementType)} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public @Nullable <Psi extends PsiElement> Psi getStubOrPsiChild(@NotNull IStubElementType<? extends StubElement, Psi> elementType) {
|
||||
//noinspection unchecked
|
||||
return (Psi)getStubOrPsiChild((IElementType)elementType);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a not-null child of the specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
* @deprecated Use {@link #getRequiredStubOrPsiChild(IElementType)} or {@link #getRequiredStubOrPsiChild(IElementType, Class)}
|
||||
*/
|
||||
@Deprecated
|
||||
public final @NotNull <S extends StubElement<?>, Psi extends PsiElement> Psi getRequiredStubOrPsiChild(@NotNull IStubElementType<S, Psi> elementType) {
|
||||
return (Psi)getRequiredStubOrPsiChild((IElementType)elementType);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getStubOrPsiChildren(IElementType, ArrayFactory)} instead
|
||||
*
|
||||
* @return children of specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
*/
|
||||
@Deprecated
|
||||
public final <S extends StubElement<?>, Psi extends PsiElement> Psi @NotNull [] getStubOrPsiChildren(@NotNull IStubElementType<S, ? extends Psi> elementType, @NotNull ArrayFactory<? extends Psi> f) {
|
||||
return getStubOrPsiChildren((IElementType)elementType, f);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return children of specified type, taken from stubs (if this element is currently stub-based) or AST (otherwise).
|
||||
* @deprecated use {@link #getStubOrPsiChildren(IElementType, PsiElement[])}
|
||||
*/
|
||||
@Deprecated
|
||||
public final <S extends StubElement<?>, Psi extends PsiElement> Psi @NotNull [] getStubOrPsiChildren(@NotNull IStubElementType<S, ? extends Psi> elementType, Psi @NotNull [] array) {
|
||||
return getStubOrPsiChildren((IElementType)elementType, array);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user