User: rednesto Date: 28 Apr 23 15:44 Revision: 44eca6da07dc05d86ef7b91a05ba1885c8415a4c Summary: Swallow Kotlin IDEA plugin errors I doubt we can do anything about them anyway TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=8459&personal=false Index: src/main/kotlin/insight/ColorUtil.kt =================================================================== --- src/main/kotlin/insight/ColorUtil.kt (revision 52adcdb2dc3acdd55968ad0d4ac6d265a9224b1c) +++ src/main/kotlin/insight/ColorUtil.kt (revision 44eca6da07dc05d86ef7b91a05ba1885c8415a4c) @@ -14,6 +14,7 @@ import com.demonwav.mcdev.platform.AbstractModule import com.demonwav.mcdev.platform.AbstractModuleType import com.demonwav.mcdev.util.findModule +import com.demonwav.mcdev.util.runCatchingKtIdeaExceptions import com.demonwav.mcdev.util.runWriteAction import com.intellij.openapi.module.ModuleUtilCore import com.intellij.psi.JVMElementFactories @@ -51,7 +52,7 @@ return null } - val referencedElement = expression.resolveToUElement() + val referencedElement = runCatchingKtIdeaExceptions { expression.resolveToUElement() } if (referencedElement is UField) { val referencedFieldInitializer = referencedElement.uastInitializer if (referencedFieldInitializer is UReferenceExpression) { @@ -103,7 +104,7 @@ return findColorFromCallExpression(methodExpression, vectorClasses) } - var referencedElement = (uastParent as? UResolvable)?.resolveToUElement() + var referencedElement = runCatchingKtIdeaExceptions { (uastParent as? UResolvable)?.resolveToUElement() } while (referencedElement is UField) { val referencedFieldInitializer: UExpression? = referencedElement.uastInitializer if (referencedFieldInitializer is UCallExpression) { @@ -120,7 +121,7 @@ return referenceNameElement.findColor(moduleType, className, vectorClasses, maxDepth, depth + 1) } else if (referenceNameElement is UResolvable) { // The expression is complex, so we resolve it. If it is a field we're on for another round - referencedElement = referenceNameElement.resolveToUElement() + referencedElement = runCatchingKtIdeaExceptions { referenceNameElement.resolveToUElement() } continue } } Index: src/main/kotlin/util/utils.kt =================================================================== --- src/main/kotlin/util/utils.kt (revision 52adcdb2dc3acdd55968ad0d4ac6d265a9224b1c) +++ src/main/kotlin/util/utils.kt (revision 44eca6da07dc05d86ef7b91a05ba1885c8415a4c) @@ -350,3 +350,13 @@ // put the whole class name in as a string (easier to refactor, etc.) @Suppress("NOTHING_TO_INLINE") // In order for this to work this function must be `inline` inline fun loggerForTopLevel() = Logger.getInstance(MethodHandles.lookup().lookupClass()) + +inline fun runCatchingKtIdeaExceptions(action: () -> T): T? = try { + action() +} catch (e: Exception) { + if (e.javaClass.name == "org.jetbrains.kotlin.idea.caches.resolve.KotlinIdeaResolutionException") { + null + } else { + throw e + } +}