User: joe Date: 31 May 25 13:32 Revision: 364c9b4fe6e0e5a598a64b5e1fbf66c6e077be7f Summary: Fix IllegalStateException when typing a colon in Java code TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=10041&personal=false Index: src/main/kotlin/util/reference/ReferenceResolver.kt =================================================================== --- src/main/kotlin/util/reference/ReferenceResolver.kt (revision 955599f8273bb00245b7c58e8a2cb4e85f205a23) +++ src/main/kotlin/util/reference/ReferenceResolver.kt (revision 364c9b4fe6e0e5a598a64b5e1fbf66c6e077be7f) @@ -56,7 +56,7 @@ override fun resolve(): PsiElement? { val context = element.findContextElement() - if (context.isValid) { + if (context != null && context.isValid) { return resolver.resolveReference(context) } return null @@ -64,8 +64,8 @@ override fun getVariants(): Array { val context = element.findContextElement() - if (context.isValid) { - return resolver.collectVariants(element.findContextElement()) + if (context != null && context.isValid) { + return resolver.collectVariants(context) } return ArrayUtil.EMPTY_OBJECT_ARRAY } @@ -89,7 +89,7 @@ override fun multiResolve(incompleteCode: Boolean): Array { val context = element.findContextElement() - if (context.isValid) { + if (context != null && context.isValid) { return resolver.resolveReference(context) } return ResolveResult.EMPTY_ARRAY @@ -97,15 +97,15 @@ override fun getVariants(): Array { val context = element.findContextElement() - if (context.isValid) { - return resolver.collectVariants(element.findContextElement()) + if (context != null && context.isValid) { + return resolver.collectVariants(context) } return ArrayUtil.EMPTY_OBJECT_ARRAY } } } -fun PsiElement.findContextElement(): PsiElement { +fun PsiElement.findContextElement(): PsiElement? { var current: PsiElement var parent = this @@ -117,7 +117,7 @@ } } while (parent is PsiExpression) - throw IllegalStateException("Cannot find context element of $this") + return null } /** @@ -155,7 +155,7 @@ // Run command to replace PsiElement CommandProcessor.getInstance().runUndoTransparentAction { runWriteAction { - val element = file.findElementAt(editor.caretModel.offset)!!.findContextElement() + val element = file.findElementAt(editor.caretModel.offset)?.findContextElement() ?: return@runWriteAction val newElement = element.replace( JavaPsiFacade.getElementFactory(element.project).createExpressionFromText( "\"$text\"",