Skip to content

KtCallElement

Represents an element with call syntax: a callee together with type arguments and value arguments.

This is the common base type for call-shaped nodes such as KtCallExpression (a function call), KtAnnotationEntry (an annotation application), KtSuperTypeCallEntry (a superclass constructor call), and KtConstructorDelegationCall (a this(...)/super(...) delegation).

See also

Inheritors

Companion properties

ARRAY_FACTORY

val ARRAY_FACTORY: ArrayFactory<PsiElement>

EMPTY_ARRAY

val EMPTY_ARRAY: Array<PsiElement>

EMPTY_NAVIGATABLE_ARRAY

val EMPTY_NAVIGATABLE_ARRAY: Array<Navigatable>

EMPTY_NAVIGATABLE_ELEMENT_ARRAY

val EMPTY_NAVIGATABLE_ELEMENT_ARRAY: Array<NavigatablePsiElement>

EMPTY_NAVIGATION_ITEM_ARRAY

val EMPTY_NAVIGATION_ITEM_ARRAY: Array<NavigationItem>

ICON_FLAG_FAST_ONLY

val ICON_FLAG_FAST_ONLY: Int = -2147483648

ICON_FLAG_READ_STATUS

ICON_FLAG_VISIBILITY

Properties

allChildren

val PsiElement.allChildren: PsiChildRange

The range of all direct children of this element, or an empty range if it has none.

endOffset

val PsiElement.endOffset: Int

The offset just past the end of this element's text range in the file.

nextLeafs

val PsiElement.nextLeafs: Sequence<PsiElement>

The following leaf elements as a lazy sequence, nearest first.

parents

val PsiElement.parents: Sequence<PsiElement>

The ancestors of this element, from its immediate parent up to and including the containing file.

parentsWithSelf

val PsiElement.parentsWithSelf: Sequence<PsiElement>

This element and its ancestors, from the element itself up to and including the containing file.

prevLeafs

val PsiElement.prevLeafs: Sequence<PsiElement>

The preceding leaf elements as a lazy sequence, nearest first.

pureEndOffset

The end offset of this element's source.

pureStartOffset

The start offset of this element's source, excluding any leading comments.

startOffset

val PsiElement.startOffset: Int

The offset of the start of this element's text range in the file.

startOffsetSkippingComments

The start offset of this element, skipping leading comments and the whitespace that follows them.

textRangeWithoutComments

val PsiElement.textRangeWithoutComments: TextRange

The text range of this element excluding any leading comments.

Functions

accept

abstract fun accept(p: @NotNull PsiElementVisitor)
abstract fun <R, D> accept(visitor: KtVisitor<R, D>, data: D): R

Dispatches this element to the corresponding visit* method of the given visitor and returns its result.

acceptChildren

abstract fun acceptChildren(p: @NotNull PsiElementVisitor)
abstract fun <D> acceptChildren(visitor: KtVisitor<Void, D>, data: D)

Passes each direct child of this element to the given visitor.

add

abstract fun add(p: @NotNull PsiElement): PsiElement

addAfter

abstract fun addAfter(p: @NotNull PsiElement, p1: @Nullable PsiElement): PsiElement

addBefore

abstract fun addBefore(p: @NotNull PsiElement, p1: @Nullable PsiElement): PsiElement

addRange

abstract fun addRange(p: PsiElement, p1: PsiElement): PsiElement

addRangeAfter

abstract fun addRangeAfter(
    p: PsiElement, 
    p1: PsiElement, 
    p2: PsiElement
): PsiElement

addRangeBefore

abstract fun addRangeBefore(
    p: @NotNull PsiElement, 
    p1: @NotNull PsiElement, 
    p2: PsiElement
): PsiElement

anyDescendantOfType

inline fun <reified T : PsiElement> PsiElement.anyDescendantOfType(noinline predicate: (T) -> Boolean = { true }): Boolean

Returns true if this element or any descendant of type T satisfies predicate.

inline fun <reified T : PsiElement> PsiElement.anyDescendantOfType(crossinline canGoInside: (PsiElement) -> Boolean, noinline predicate: (T) -> Boolean = { true }): Boolean

Returns true if this element or any descendant of type T satisfies predicate. canGoInside controls traversal into children but does not prevent the current element from being tested.

before

fun PsiElement.before(element: PsiElement): Boolean

Returns true if this element ends at or before element starts (that is, it precedes element in the file).

blockExpressionsOrSingle

Returns the statements of this element if it is a block, otherwise a single-element sequence of this element.

canNavigate

open fun canNavigate(): Boolean

canNavigateToSource

checkAdd

abstract fun checkAdd(p: @NotNull PsiElement)

checkDecompiledText

fun PsiElement.checkDecompiledText()

Throws if this element belongs to a compiled file that is backed by a stub. Loading decompiled text is slow and should be avoided; stubs should be used instead. Called by the descendant-traversal helpers as a guard.

checkDelete

abstract fun checkDelete()

collectDescendantsOfType

inline fun <reified T : PsiElement> PsiElement.collectDescendantsOfType(noinline predicate: (T) -> Boolean = { true }): List<T>

Collects this element and all descendants of type T satisfying predicate into a list in post-order.

inline fun <reified T : PsiElement> PsiElement.collectDescendantsOfType(crossinline canGoInside: (PsiElement) -> Boolean, noinline predicate: (T) -> Boolean = { true }): List<T>

Collects this element and all descendants of type T satisfying predicate into a list in post-order. canGoInside controls traversal into children but does not prevent the current element from being collected.

collectDescendantsOfTypeTo

inline fun <reified T : PsiElement, C : MutableCollection<T>> PsiElement.collectDescendantsOfTypeTo(
    to: C, 
    crossinline canGoInside: (PsiElement) -> Boolean, 
    noinline predicate: (T) -> Boolean = { true }
): C

Adds this element and all descendants of type T satisfying predicate to to in post-order. canGoInside controls traversal into children but does not prevent the current element from being added.

containingClass

Returns the nearest enclosing KtClass, or null if there is none.

copy

abstract fun copy(): PsiElement

delete

abstract fun delete()

deleteChildRange

abstract fun deleteChildRange(p: PsiElement, p1: PsiElement)

findDescendantOfType

inline fun <reified T : PsiElement> PsiElement.findDescendantOfType(noinline predicate: (T) -> Boolean = { true }): T?

Returns the first element of type T in a pre-order traversal of this element and its descendants that satisfies predicate, or null if there is none.

inline fun <reified T : PsiElement> PsiElement.findDescendantOfType(crossinline canGoInside: (PsiElement) -> Boolean, noinline predicate: (T) -> Boolean = { true }): T?

Returns the first element of type T in a pre-order traversal of this element and its descendants that satisfies predicate, or null. canGoInside controls traversal into children but does not prevent the current element from being tested.

findElementAt

abstract fun findElementAt(p: Int): @Nullable PsiElement

findReferenceAt

abstract fun findReferenceAt(p: Int): @Nullable PsiReference

forEachDescendantOfType

inline fun <reified T : PsiElement> PsiElement.forEachDescendantOfType(noinline action: (T) -> Unit)

Applies action to this element and every descendant of type T, in post-order (children before parents).

inline fun <reified T : PsiElement> PsiElement.forEachDescendantOfType(crossinline canGoInside: (PsiElement) -> Boolean, noinline action: (T) -> Unit)

Applies action to this element and every descendant of type T, in post-order. canGoInside controls whether each visited element's children are traversed; the element itself is still passed to action when it is a T, even if canGoInside returns false for it.

forEachDescendantOfTypeInPreorder

inline fun <reified T : PsiElement> PsiElement.forEachDescendantOfTypeInPreorder(noinline action: (T) -> Unit)

Applies action to this element and every descendant of type T, in pre-order (parents before children).

inline fun <reified T : PsiElement> PsiElement.forEachDescendantOfTypeInPreorder(crossinline canGoInside: (PsiElement) -> Boolean, noinline action: (T) -> Unit)

Applies action to this element and every descendant of type T, in pre-order. canGoInside controls whether each visited element's children are traversed; the element itself is still passed to action when it is a T, even if canGoInside returns false for it.

getAssignmentLhsIfUnwrappable

fun PsiElement.getAssignmentLhsIfUnwrappable(): PsiElement?

Returns the operand this operation applies to, but only when that operand is wrapped in parentheses, a label, or annotations; returns null otherwise.

getCalleeExpression

@Nullable
abstract fun getCalleeExpression(): KtExpression

Returns the callee, that is, the expression that denotes what is being called, or null if it is absent in incomplete code.

getCallNameExpression

Returns the simple-name reference of this call's callee (its function or constructor name), or null.

getChildOfType

inline fun <reified T : PsiElement> PsiElement.getChildOfType(): T?

Returns the first direct child of type T, or null if there is none.

getChildren

abstract fun getChildren(): @NotNull Array<@NotNull PsiElement>

getChildrenOfType

inline fun <reified T : PsiElement> PsiElement.getChildrenOfType(): Array<T>

Returns the direct children of type T, or an empty array if there are none.

getContainingFile

abstract fun getContainingFile(): PsiFile

getContainingKtFile

@NotNull
abstract fun getContainingKtFile(): KtFile

Returns the KtFile this element belongs to.

getContext

abstract fun getContext(): @Nullable PsiElement

getCopyableUserData

abstract fun <T> getCopyableUserData(p: @NotNull Key<T>): @Nullable T

getElementTextWithContext

fun PsiElement.getElementTextWithContext(): String

Returns this element's text with surrounding source context, for use in diagnostics and log messages.

getExplicitReceiverOfDotQualified

fun PsiElement.getExplicitReceiverOfDotQualified(): PsiElement?

Returns the source of the explicit receiver if this element is a dot-qualified expression, or null otherwise.

getFirstChild

abstract fun getFirstChild(): PsiElement

getIcon

abstract fun getIcon(p: Int): Icon

getLambdaArguments

@NotNull
abstract fun getLambdaArguments(): List<KtLambdaArgument>

Returns the trailing lambda arguments written outside the parentheses. Normally there is at most one; a longer list only occurs in erroneous code. Returns an empty list if there are none.

getLanguage

abstract fun getLanguage(): @NotNull Language

getLastChild

abstract fun getLastChild(): PsiElement

getLastParentOfTypeInRow

inline fun <reified T : PsiElement> PsiElement.getLastParentOfTypeInRow(): T?

Returns the outermost element in an uninterrupted chain of ancestors of type T, or null if the parent is not a T.

getLastParentOfTypeInRowWithSelf

inline fun <reified T : PsiElement> PsiElement.getLastParentOfTypeInRowWithSelf(): T?

Like getLastParentOfTypeInRow, but the chain may start at this element itself.

getManager

abstract fun getManager(): PsiManager

getModificationStamp

Returns the modification stamp of the nearest enclosing element that tracks one (a file, a stub-based declaration, or a supertype list). The stamp changes whenever that element's subtree is modified, so it can be used to invalidate caches keyed on this element.

getName

abstract fun getName(): @Nullable String

getNavigationElement

abstract fun getNavigationElement(): PsiElement

getNextSibling

abstract fun getNextSibling(): PsiElement

getNextSiblingIgnoringWhitespace

fun PsiElement.getNextSiblingIgnoringWhitespace(withItself: Boolean = false): PsiElement?

Returns the next sibling that is not whitespace, or null. Considers this element if withItself.

getNextSiblingIgnoringWhitespaceAndComments

fun PsiElement.getNextSiblingIgnoringWhitespaceAndComments(withItself: Boolean = false): PsiElement?

Returns the next sibling that is neither whitespace nor a comment, or null. Considers this element if withItself.

getNode

abstract fun getNode(): ASTNode

getNonStrictParentOfType

inline fun <reified T : PsiElement> PsiElement.getNonStrictParentOfType(): T?

Returns the nearest ancestor of type T including this element, or null if there is none.

fun <T : PsiElement> PsiElement.getNonStrictParentOfType(parentClass: Class<T>): T?

Returns the nearest ancestor of type T (including this element), or null if there is none.

getOriginalElement

abstract fun getOriginalElement(): PsiElement

getOutermostParentContainedIn

tailrec fun PsiElement.getOutermostParentContainedIn(container: PsiElement): PsiElement?

Returns the outermost element on the path from this element that is still strictly contained in container, or null.

getOwnDeclarations

open fun getOwnDeclarations(): @NotNull Collection<out @NotNull PsiSymbolDeclaration>

getOwnReferences

open fun getOwnReferences(): @NotNull Collection<out @NotNull PsiSymbolReference>

getParent

abstract fun getParent(): PsiElement
abstract fun getParent(): PsiElement

Returns parent source element.

getParentOfType

inline fun <reified T : PsiElement> PsiElement.getParentOfType(strict: Boolean): T?

Returns the nearest ancestor of type T, or null. When strict is false, this element itself is also considered.

inline fun <reified T : PsiElement> PsiElement.getParentOfType(strict: Boolean, vararg stopAt: Class<out PsiElement>): T?

Returns the nearest ancestor of type T, stopping the search once an ancestor of any type in stopAt is reached, or null. When strict is false, this element itself is also considered.

getParentOfTypeAndBranch

inline fun <reified T : PsiElement> PsiElement.getParentOfTypeAndBranch(strict: Boolean = false, noinline branch: T.() -> PsiElement?): T?

Checks the nearest element of type T and returns it if this element lies within the subtree selected by branch. If that candidate's branch does not contain this element, returns null without checking higher ancestors. When strict is false, this element itself is also considered as the candidate.

getParentOfTypeAndBranches

inline fun <reified T : PsiElement> PsiElement.getParentOfTypeAndBranches(strict: Boolean = false, noinline branches: T.() -> Iterable<PsiElement?>): T?

Checks the nearest element of type T and returns it if this element lies within any subtree selected by branches. If none of that candidate's branches contain this element, returns null without checking higher ancestors. When strict is false, this element itself is also considered as the candidate.

getParentOfTypes

fun <T : PsiElement> PsiElement.getParentOfTypes(strict: Boolean = false, vararg parentClasses: Class<out T>): T?

Returns the nearest ancestor that is an instance of one of parentClasses, or null if there is none. When strict is false, this element itself is also considered.

getParentOfTypes2

inline fun <reified T : PsiElement, reified V : PsiElement> PsiElement.getParentOfTypes2(): PsiElement?

Returns the nearest strict ancestor that is a T or V, or null if there is none.

getParentOfTypes3

inline fun <reified T : PsiElement, reified V : PsiElement, reified U : PsiElement> PsiElement.getParentOfTypes3(): PsiElement?

Returns the nearest strict ancestor that is a T, V, or U, or null if there is none.

getParentOfTypesAndPredicate

fun <T : PsiElement> PsiElement.getParentOfTypesAndPredicate(
    strict: Boolean = false, 
    vararg parentClasses: Class<out T>, 
    predicate: (T) -> Boolean
): T?

Returns the nearest ancestor that is an instance of one of parentClasses and satisfies predicate, or null. When parentClasses is empty, any type matches. When strict is false, this element itself is also considered.

getPresentation

abstract fun getPresentation(): @Nullable ItemPresentation

getPrevSibling

abstract fun getPrevSibling(): PsiElement

getPrevSiblingIgnoringWhitespace

fun PsiElement.getPrevSiblingIgnoringWhitespace(withItself: Boolean = false): PsiElement?

Returns the previous sibling that is not whitespace, or null. Considers this element if withItself.

getPrevSiblingIgnoringWhitespaceAndComments

fun PsiElement.getPrevSiblingIgnoringWhitespaceAndComments(withItself: Boolean = false): PsiElement?

Returns the previous sibling that is neither whitespace nor a comment, or null. Considers this element if withItself.

getProject

abstract fun getProject(): @NotNull Project

getPsiOrParent

@NotNull
abstract fun getPsiOrParent(): KtElement

Returns this or parent source element (for synthetic element declarations). Use it only for the purposes of source attribution.

getQualifiedElementSelector

Returns the rightmost selector of this qualified element, or null if there is no such selector.

getQualifiedExpressionForSelector

Returns the qualified expression in which this element is the selector, or null if it is not a selector.

getReference

abstract fun getReference(): @Nullable PsiReference
abstract fun getReference(): PsiReference

getReferences

abstract fun getReferences(): @NotNull Array<PsiReference>

getResolveScope

abstract fun getResolveScope(): @NotNull GlobalSearchScope

getStartOffsetIn

fun PsiElement.getStartOffsetIn(ancestor: PsiElement): Int

Returns the offset of this element relative to the start of ancestor (which must be an ancestor of this element).

getStartOffsetInParent

abstract fun getStartOffsetInParent(): Int

getStrictParentOfType

inline fun <reified T : PsiElement> PsiElement.getStrictParentOfType(): T?

Returns the nearest strict ancestor of type T, or null if there is none.

getText

abstract fun getText(): String

getTextLength

abstract fun getTextLength(): Int

getTextOffset

abstract fun getTextOffset(): Int

getTextRange

abstract fun getTextRange(): TextRange

getTextRangeInParent

open fun getTextRangeInParent(): @NotNull TextRange

getTextWithLocation

fun PsiElement.getTextWithLocation(): String

Returns this element's text together with its source location, for use in diagnostics and log messages.

getTopmostParentOfType

inline fun <reified T : PsiElement> PsiElement.getTopmostParentOfType(): T?

Returns the outermost ancestor of type T including this element, or null if there is none.

getTypeArgumentList

@Nullable
abstract fun getTypeArgumentList(): KtTypeArgumentList

Returns the angle-bracketed type argument list, or null if no type arguments are specified.

getTypeArguments

@NotNull
abstract fun getTypeArguments(): List<KtTypeProjection>

Returns the explicitly written type arguments, or an empty list if none are specified (in which case they are inferred).

getUserData

abstract fun <T> getUserData(p: @NotNull Key<T>): @Nullable T

getUseScope

abstract fun getUseScope(): @NotNull SearchScope

getValueArgumentList

@Nullable
abstract fun getValueArgumentList(): KtValueArgumentList

Returns the parenthesized argument list, or null if the call has no parentheses (for example, a call with only a trailing lambda).

getValueArguments

@NotNull
abstract fun getValueArguments(): List<out ValueArgument>

Returns all value arguments of the call, including both parenthesized arguments and trailing lambda arguments. Returns an empty list if there are none.

isAncestor

fun PsiElement?.isAncestor(element: PsiElement, strict: Boolean = false): Boolean

Returns true if this element is an ancestor of element. When strict is false, an element is its own ancestor.

isContextualDeclaration

Returns true if this callable, class, or object declares at least one legacy context receiver. Named context parameters are ignored.

isEquivalentTo

abstract fun isEquivalentTo(p: PsiElement): Boolean

isExtensionDeclaration

fun PsiElement.isExtensionDeclaration(): Boolean

Returns true if this element is an extension function or property (that is, it declares a receiver).

isFirstStatement

Returns true if this element is the first statement of its enclosing block.

isFunctionalExpression

fun PsiElement.isFunctionalExpression(): Boolean

Returns true if this element is an anonymous function, such as the fun expression in val predicate = fun(x: Int): Boolean = x > 0.

isInsideOf

fun PsiElement.isInsideOf(elements: Iterable<PsiElement>): Boolean

Returns true if this element lies within, or is equal to, any of the given elements.

isPhysical

abstract fun isPhysical(): Boolean

isTopLevelKtOrJavaMember

fun PsiElement.isTopLevelKtOrJavaMember(): Boolean

Returns true if this element is a top-level member of a Kotlin file or a top-level Java class.

isValid

abstract fun isValid(): Boolean

isWritable

abstract fun isWritable(): Boolean
open fun navigate(requestFocus: Boolean)
open fun navigationRequest(): NavigationRequest

nextLeaf

fun PsiElement.nextLeaf(skipEmptyElements: Boolean = false): PsiElement?

Returns the next leaf element in the tree, or null if there is none. Empty leaves are skipped if skipEmptyElements.

fun PsiElement.nextLeaf(filter: (PsiElement) -> Boolean): PsiElement?

Returns the nearest following leaf that satisfies filter, or null if there is none.

nonStaticOuterClasses

Returns the enclosing classes that this element can access an outer instance of, from innermost to outermost.

parameterIndex

fun PsiElement.parameterIndex(): Int

Returns the index of this parameter within its own parameter list (Kotlin or Java), or -1 if it is not a parameter.

prevLeaf

fun PsiElement.prevLeaf(skipEmptyElements: Boolean = false): PsiElement?

Returns the previous leaf element in the tree, or null if there is none. Empty leaves are skipped if skipEmptyElements.

fun PsiElement.prevLeaf(filter: (PsiElement) -> Boolean): PsiElement?

Returns the nearest preceding leaf that satisfies filter, or null if there is none.

processDeclarations

abstract fun processDeclarations(
    p: @NotNull PsiScopeProcessor, 
    p1: @NotNull ResolveState, 
    p2: @Nullable PsiElement, 
    p3: @NotNull PsiElement
): Boolean

putCopyableUserData

abstract fun <T> putCopyableUserData(p: @NotNull Key<T>, p1: @Nullable T)

putUserData

abstract fun <T> putUserData(p: @NotNull Key<T>, p1: @Nullable T)

rawDelete

abstract fun rawDelete()

Deletes this PSI element using the raw platform implementation, bypassing Kotlin PSI-specific delete overrides.

Regular clients should use delete instead. When KtPsiMutationService is not registered, it performs the same plain deletion, and when the service is registered, as in the IntelliJ Kotlin plugin, it may also adjust the surrounding code, e.g., delete a semicolon that follows the element.

replace

abstract fun replace(p: @NotNull PsiElement): PsiElement

siblings

fun PsiElement.siblings(forward: Boolean = true, withItself: Boolean = true): Sequence<PsiElement>

Returns the siblings of this element as a lazy sequence, going forward (or backward) and optionally including the element itself (withItself).

startsWithComment

fun PsiElement.startsWithComment(): Boolean

Returns true if this element's first child is a comment.

textContains

abstract fun textContains(p: Char): Boolean

textMatches

abstract fun textMatches(p: @NotNull @NonNls CharSequence): Boolean

textToCharArray

abstract fun textToCharArray(): @NotNull Array<Char>

toString

abstract fun toString(): @NonNls String

unwrapParenthesesLabelsAndAnnotations

fun PsiElement?.unwrapParenthesesLabelsAndAnnotations(): PsiElement?

Recursively unwraps this element while it is a parenthesized, labeled, or annotated expression, returning the innermost base element. A non-wrapper element is returned unchanged.

unwrapParenthesesLabelsAndAnnotationsDeeply

fun PsiElement.unwrapParenthesesLabelsAndAnnotationsDeeply(): PsiElement

Walks up through immediately enclosing parentheses, labels, and annotations, returning the first parent outside that wrapper chain.