From 94f1f1e565ab2f2af3e8870806492b10fd3d82d8 Mon Sep 17 00:00:00 2001 From: Yuriy Artamonov Date: Mon, 29 Sep 2025 15:12:20 +0200 Subject: [PATCH] [compose] IJPL-208258 Suppress unused symbols inspection for @Preview methods GitOrigin-RevId: b51e58fd837143faa650d392dea1d33683af8053 --- .../resources/intellij.devkit.compose.xml | 1 + .../src/preview/ComposableFunctionFinder.kt | 4 +-- .../ComposePreviewImplicitUsageProvider.kt | 25 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 plugins/devkit/intellij.devkit.compose/src/preview/ComposePreviewImplicitUsageProvider.kt diff --git a/plugins/devkit/intellij.devkit.compose/resources/intellij.devkit.compose.xml b/plugins/devkit/intellij.devkit.compose/resources/intellij.devkit.compose.xml index a1d42ed6d53a..2e7752371c4e 100644 --- a/plugins/devkit/intellij.devkit.compose/resources/intellij.devkit.compose.xml +++ b/plugins/devkit/intellij.devkit.compose/resources/intellij.devkit.compose.xml @@ -38,6 +38,7 @@ factoryClass="com.intellij.devkit.compose.preview.ComposePreviewToolWindowFactory" icon="org.jetbrains.idea.devkit.DevKitIcons.ComposeToolWindow" librarySearchClass="com.intellij.devkit.compose.preview.ComposePreviewSearcher"/> + diff --git a/plugins/devkit/intellij.devkit.compose/src/preview/ComposableFunctionFinder.kt b/plugins/devkit/intellij.devkit.compose/src/preview/ComposableFunctionFinder.kt index 6cb22a823934..6b24e01c060d 100644 --- a/plugins/devkit/intellij.devkit.compose/src/preview/ComposableFunctionFinder.kt +++ b/plugins/devkit/intellij.devkit.compose/src/preview/ComposableFunctionFinder.kt @@ -8,8 +8,8 @@ import java.lang.reflect.Modifier private val logger = Logger.getInstance(ComposableFunctionFinder::class.java) -internal val PREVIEW_ANNOTATIONS = setOf( - "androidx.compose.desktop.ui.tooling.preview.Preview", +internal val PREVIEW_ANNOTATIONS: Set = setOf( + "org.jetbrains.compose.ui.tooling.preview.Preview", "androidx.compose.ui.tooling.preview.Preview", // Android fallback ) diff --git a/plugins/devkit/intellij.devkit.compose/src/preview/ComposePreviewImplicitUsageProvider.kt b/plugins/devkit/intellij.devkit.compose/src/preview/ComposePreviewImplicitUsageProvider.kt new file mode 100644 index 000000000000..4e6c938f62e1 --- /dev/null +++ b/plugins/devkit/intellij.devkit.compose/src/preview/ComposePreviewImplicitUsageProvider.kt @@ -0,0 +1,25 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.devkit.compose.preview + +import com.intellij.codeInsight.AnnotationUtil +import com.intellij.codeInsight.daemon.ImplicitUsageProvider +import com.intellij.openapi.module.ModuleUtilCore +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiMethod +import org.jetbrains.idea.devkit.util.PsiUtil + +/** + * @Preview methods are useful for UI previews in IDE even when unused in production, suppress unused symbol inspection for them. + */ +internal class ComposePreviewImplicitUsageProvider : ImplicitUsageProvider { + override fun isImplicitRead(element: PsiElement): Boolean = false + override fun isImplicitWrite(element: PsiElement): Boolean = false + + override fun isImplicitUsage(element: PsiElement): Boolean { + if (element !is PsiMethod) return false + val module = ModuleUtilCore.findModuleForPsiElement(element) ?: return false + + return PsiUtil.isPluginModule(module) + && AnnotationUtil.isAnnotated(element, PREVIEW_ANNOTATIONS, 0) + } +}