[Analysis API] refactoring, add utilities to ExpressionMarkersSourceFilePreprocessor which return null in a case caret/selected expression are not found
This commit is contained in:
committed by
Space Team
parent
c963eadb44
commit
729bae4a2a
+13
-4
@@ -89,15 +89,19 @@ class ExpressionMarkerProvider : TestService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(PrivateForInline::class)
|
@OptIn(PrivateForInline::class)
|
||||||
fun getCaretPosition(file: KtFile, caretTag: String? = null): Int {
|
fun getCaretPositionOrNull(file: KtFile, caretTag: String? = null): Int? {
|
||||||
return carets.getCaretOffset(file.name, caretTag)
|
return carets.getCaretOffset(file.name, caretTag)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getCaretPosition(file: KtFile, caretTag: String? = null): Int {
|
||||||
|
return getCaretPositionOrNull(file, caretTag)
|
||||||
?: run {
|
?: run {
|
||||||
val caretName = "caret${caretTag?.let { "_$it" }.orEmpty()}"
|
val caretName = "caret${caretTag?.let { "_$it" }.orEmpty()}"
|
||||||
error("No <$caretName> found in file")
|
error("No <$caretName> found in file")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline fun <reified P : KtElement> getElementOfTypeAtCaret(file: KtFile, caretTag: String? = null): P {
|
inline fun <reified P : KtElement> getElementOfTypeAtCaret(file: KtFile, caretTag: String? = null): P {
|
||||||
val offset = getCaretPosition(file, caretTag)
|
val offset = getCaretPosition(file, caretTag)
|
||||||
return file.findElementAt(offset)
|
return file.findElementAt(offset)
|
||||||
@@ -143,8 +147,8 @@ class ExpressionMarkerProvider : TestService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSelectedElement(file: KtFile): PsiElement {
|
fun getSelectedElementOrNull(file: KtFile): PsiElement? {
|
||||||
val range = selected[file.name] ?: error("No selected expression found in file")
|
val range = selected[file.name] ?: return null
|
||||||
val elements = file.elementsInRange(range).trimWhitespaces()
|
val elements = file.elementsInRange(range).trimWhitespaces()
|
||||||
if (elements.size != 1) {
|
if (elements.size != 1) {
|
||||||
error("Expected one element at rage but found ${elements.size} [${elements.joinToString { it::class.simpleName + ": " + it.text }}]")
|
error("Expected one element at rage but found ${elements.size} [${elements.joinToString { it::class.simpleName + ": " + it.text }}]")
|
||||||
@@ -152,6 +156,11 @@ class ExpressionMarkerProvider : TestService {
|
|||||||
return elements.single()
|
return elements.single()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getSelectedElement(file: KtFile): PsiElement {
|
||||||
|
return getSelectedElementOrNull(file)
|
||||||
|
?: error("No selected expression found in file")
|
||||||
|
}
|
||||||
|
|
||||||
fun expectedTypeClass(registeredDirectives: RegisteredDirectives): Class<PsiElement>? {
|
fun expectedTypeClass(registeredDirectives: RegisteredDirectives): Class<PsiElement>? {
|
||||||
val expectedType = registeredDirectives.singleOrZeroValue(Directives.LOOK_UP_FOR_ELEMENT_OF_TYPE) ?: return null
|
val expectedType = registeredDirectives.singleOrZeroValue(Directives.LOOK_UP_FOR_ELEMENT_OF_TYPE) ?: return null
|
||||||
val ktPsiPackage = "org.jetbrains.kotlin.psi."
|
val ktPsiPackage = "org.jetbrains.kotlin.psi."
|
||||||
|
|||||||
Reference in New Issue
Block a user