[Java. Logging] Fix false-positive logger detection on the project-level in the Gradle based projects

IDEA-331693

GitOrigin-RevId: 9659ab2d4abf5a44a5a6fa048f0289459f0d45a9
This commit is contained in:
Georgii Ustinov
2024-02-08 14:24:26 +02:00
committed by intellij-monorepo-bot
parent d19e6c5925
commit e92d03c465
3 changed files with 36 additions and 2 deletions

View File

@@ -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)

View File

@@ -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<GlobalSearchScope, Project>(
"PROJECT_CONTAINING_LIBRARIES_SCOPE_KEY"
) { project: Project -> ProjectContainingLibrariesScope(project) }
@JvmStatic
fun getScope(project: Project): GlobalSearchScope = PROJECT_CONTAINING_LIBRARIES_SCOPE_KEY.getValue(project)
}
}

View File

@@ -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 {