diff --git a/java/java-impl/src/com/intellij/lang/logging/JvmLoggerFieldDelegate.kt b/java/java-impl/src/com/intellij/lang/logging/JvmLoggerFieldDelegate.kt index d6824b5741ae..f995f2f7af2e 100644 --- a/java/java-impl/src/com/intellij/lang/logging/JvmLoggerFieldDelegate.kt +++ b/java/java-impl/src/com/intellij/lang/logging/JvmLoggerFieldDelegate.kt @@ -29,7 +29,10 @@ class JvmLoggerFieldDelegate( return clazz.add(logger) } - override fun isAvailable(project: Project?): Boolean = JavaLibraryUtil.hasLibraryClass(project, loggerTypeName) + override fun isAvailable(project: Project?): Boolean { + return project != null + && JavaPsiFacade.getInstance(project).findClass(loggerTypeName, ProjectContainingLibrariesScope.getScope(project)) != null + } override fun isAvailable(module: Module?): Boolean = JavaLibraryUtil.hasLibraryClass(module, loggerTypeName) diff --git a/java/java-impl/src/com/intellij/lang/logging/ProjectContainingLibrariesScope.kt b/java/java-impl/src/com/intellij/lang/logging/ProjectContainingLibrariesScope.kt new file mode 100644 index 000000000000..3abfc0470f7e --- /dev/null +++ b/java/java-impl/src/com/intellij/lang/logging/ProjectContainingLibrariesScope.kt @@ -0,0 +1,28 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.lang.logging + +import com.intellij.openapi.project.Project +import com.intellij.openapi.roots.ProjectFileIndex +import com.intellij.openapi.util.NotNullLazyKey +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.search.ProjectAndLibrariesScope + +/** + * Scope which contains project files and libraries which are only available in the project, e.g. it excludes libraries for + * the configuration scripts like Gradle build script. + * */ +class ProjectContainingLibrariesScope(project: Project) : ProjectAndLibrariesScope(project) { + private val projectFileIndex: ProjectFileIndex = ProjectFileIndex.getInstance(project); + + override fun contains(file: VirtualFile): Boolean = !projectFileIndex.findContainingLibraries(file).isEmpty() + + companion object { + private val PROJECT_CONTAINING_LIBRARIES_SCOPE_KEY = NotNullLazyKey.createLazyKey( + "PROJECT_CONTAINING_LIBRARIES_SCOPE_KEY" + ) { project: Project -> ProjectContainingLibrariesScope(project) } + + @JvmStatic + fun getScope(project: Project): GlobalSearchScope = PROJECT_CONTAINING_LIBRARIES_SCOPE_KEY.getValue(project) + } +} \ No newline at end of file diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/logging/JvmLoggerAnnotationDelegate.kt b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/logging/JvmLoggerAnnotationDelegate.kt index e1a3fcc2c6fe..c8543e25d029 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/logging/JvmLoggerAnnotationDelegate.kt +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/logging/JvmLoggerAnnotationDelegate.kt @@ -2,6 +2,7 @@ package de.plushnikov.intellij.plugin.logging import com.intellij.java.library.JavaLibraryUtil import com.intellij.lang.logging.JvmLogger +import com.intellij.lang.logging.ProjectContainingLibrariesScope import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project import com.intellij.psi.JavaPsiFacade @@ -30,7 +31,9 @@ class JvmLoggerAnnotationDelegate( } override fun isAvailable(project: Project?): Boolean { - return project != null && JavaLibraryUtil.hasLibraryClass(project, fieldLoggerName) && LombokLibraryUtil.hasLombokLibrary(project) + return project != null && + JavaPsiFacade.getInstance(project).findClass(fieldLoggerName, ProjectContainingLibrariesScope.getScope(project)) != null + && LombokLibraryUtil.hasLombokLibrary(project) } override fun isAvailable(module: Module?): Boolean {