From bd549b44cdfa9dace1714bdc24ba9065b04c8986 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 10 Aug 2023 16:02:24 +0200 Subject: [PATCH] feat: mark @BuildStep-annotated methods as implicitly used Signed-off-by: Fred Bricon --- .../intellij/quarkus/QuarkusConstants.java | 1 + .../QuarkusBuildImplicitUsageProvider.java | 56 +++++++++++++++++++ .../resources/META-INF/lsp4ij-quarkus.xml | 2 +- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/redhat/devtools/intellij/quarkus/psi/internal/QuarkusBuildImplicitUsageProvider.java diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusConstants.java b/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusConstants.java index f28c41b28..53384576e 100644 --- a/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusConstants.java +++ b/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusConstants.java @@ -65,6 +65,7 @@ public class QuarkusConstants { public static final String QUARKUS_ARC_CONFIG_PROPERTIES_DEFAULT_NAMING_STRATEGY = "quarkus.arc.config-properties-default-naming-strategy"; + public static final String QUARKUS_DEPLOYMENT_BUILDSTEP_ANNOTATION = "io.quarkus.deployment.annotations.BuildStep"; public static final String QUARKUS_CORE_PREFIX = "io.quarkus:quarkus-core:"; public static final String QUARKUS_PREFIX = "quarkus"; diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/psi/internal/QuarkusBuildImplicitUsageProvider.java b/src/main/java/com/redhat/devtools/intellij/quarkus/psi/internal/QuarkusBuildImplicitUsageProvider.java new file mode 100644 index 000000000..0833fa33c --- /dev/null +++ b/src/main/java/com/redhat/devtools/intellij/quarkus/psi/internal/QuarkusBuildImplicitUsageProvider.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2023 Red Hat Inc. and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + * Contributors: + * Red Hat Inc. - initial API and implementation + *******************************************************************************/ +package com.redhat.devtools.intellij.quarkus.psi.internal; + +import com.intellij.codeInsight.daemon.ImplicitUsageProvider; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMethod; +import com.redhat.devtools.intellij.lsp4mp4ij.psi.core.jaxrs.JaxRsConstants; +import com.redhat.devtools.intellij.lsp4mp4ij.psi.core.utils.AnnotationUtils; +import com.redhat.devtools.intellij.lsp4mp4ij.psi.internal.restclient.MicroProfileRestClientConstants; +import org.jetbrains.annotations.NotNull; + +import static com.redhat.devtools.intellij.lsp4mp4ij.psi.core.utils.AnnotationUtils.hasAnyAnnotation; +import static com.redhat.devtools.intellij.quarkus.QuarkusConstants.QUARKUS_DEPLOYMENT_BUILDSTEP_ANNOTATION; + +/** + * Automatically declares as used, methods annotated with {@link io.quarkus.deployment.annotations.BuildStep} annotations, such as: + *

+ * {@code + * @BuildStep + * AdditionalBeanBuildItem producePrettyTime() { + * return new AdditionalBeanBuildItem(PrettyTimeProducer.class); + * } + * } + *

+ */ +public class QuarkusBuildImplicitUsageProvider implements ImplicitUsageProvider { + + @Override + public boolean isImplicitUsage(@NotNull PsiElement element) { + return isImplicitRead(element) || isImplicitWrite(element); + } + + @Override + public boolean isImplicitRead(@NotNull PsiElement element) { + return element instanceof PsiMethod && + !((PsiMethod)element).isConstructor() && + AnnotationUtils.hasAnyAnnotation(element, QUARKUS_DEPLOYMENT_BUILDSTEP_ANNOTATION); + } + + @Override + public boolean isImplicitWrite(@NotNull PsiElement element) { + return false; + } +} diff --git a/src/main/resources/META-INF/lsp4ij-quarkus.xml b/src/main/resources/META-INF/lsp4ij-quarkus.xml index 1919422b3..9e149efbc 100644 --- a/src/main/resources/META-INF/lsp4ij-quarkus.xml +++ b/src/main/resources/META-INF/lsp4ij-quarkus.xml @@ -45,7 +45,7 @@ serviceImplementation="com.redhat.devtools.intellij.lsp4mp4ij.settings.UserDefinedMicroProfileSettings"/> - +