mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-05 16:36:56 +07:00
[java] IDEA-353004 Spring: configuration file type usage statistics
GitOrigin-RevId: 5741e29765d90a8898a3e12f85c371053318a3f4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8b5fd5a184
commit
1c8007802f
@@ -37,7 +37,7 @@
|
||||
<xi:include href="/META-INF/TypeMigration.xml" xpointer="xpointer(/idea-plugin/*)">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include href="/META-INF/libraryJarUsage.xml" xpointer="xpointer(/idea-plugin/*)">
|
||||
<xi:include href="/META-INF/UsageData.xml" xpointer="xpointer(/idea-plugin/*)">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
|
||||
@@ -10,8 +10,14 @@
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<statistics.projectUsagesCollector implementation="com.intellij.internal.statistic.libraryJar.LibraryJarUsagesCollector"/>
|
||||
<statistics.projectUsagesCollector implementation="com.intellij.internal.statistic.libraryUsage.LibraryUsageCollector"/>
|
||||
<internal.statistic.libraryUsageImportProcessor language="JAVA" implementationClass="com.intellij.internal.statistic.libraryUsage.JavaLibraryUsageImportProcessor"/>
|
||||
<internal.statistic.libraryUsageImportProcessor
|
||||
language="JAVA" implementationClass="com.intellij.internal.statistic.libraryUsage.JavaLibraryUsageImportProcessor"/>
|
||||
<statistics.validation.customValidationRule implementation="com.intellij.internal.statistic.LibraryNameValidationRule"/>
|
||||
|
||||
<fileTypeUsageSchemaDescriptor schema="spring" implementationClass="com.intellij.internal.statistic.SpringFileTypeUsageDescriptor"/>
|
||||
<fileTypeUsageSchemaDescriptor schema="micronaut" implementationClass="com.intellij.internal.statistic.MicronautFileTypeUsageDescriptor"/>
|
||||
<fileTypeUsageSchemaDescriptor schema="quarkus" implementationClass="com.intellij.internal.statistic.QuarkusFileTypeUsageDescriptor"/>
|
||||
<fileTypeUsageSchemaDescriptor schema="ktor" implementationClass="com.intellij.internal.statistic.KtorFileTypeUsageDescriptor"/>
|
||||
</extensions>
|
||||
|
||||
<projectListeners>
|
||||
@@ -0,0 +1,69 @@
|
||||
// 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.internal.statistic
|
||||
|
||||
import com.intellij.internal.statistic.collectors.fus.fileTypes.FileTypeUsageSchemaDescriptor
|
||||
import com.intellij.java.library.JavaLibraryUtil.hasLibraryJar
|
||||
import com.intellij.openapi.application.ReadAction
|
||||
import com.intellij.openapi.module.ModuleUtilCore
|
||||
import com.intellij.openapi.project.IndexNotReadyException
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.openapi.util.NlsSafe
|
||||
import com.intellij.openapi.util.io.FileUtilRt
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
|
||||
private const val APPLICATION_PROPERTIES: String = "application.properties"
|
||||
private const val APPLICATION_YAML: String = "application.yaml"
|
||||
private const val APPLICATION_YML: String = "application.yml"
|
||||
|
||||
private val EXTENSIONS = listOf("yml", "yaml", "properties")
|
||||
private const val APPLICATION_PREFIX = "application-"
|
||||
|
||||
private const val SPRING_BOOT_MAVEN: String = "org.springframework.boot:spring-boot"
|
||||
private const val MICRONAUT_MAVEN: String = "io.micronaut:micronaut-core"
|
||||
private const val QUARKUS_MAVEN: String = "io.quarkus:quarkus-core"
|
||||
private const val KTOR_MAVEN: String = "io.ktor:ktor-http"
|
||||
|
||||
private val ALL_MAVEN: Collection<String> = listOf(
|
||||
SPRING_BOOT_MAVEN,
|
||||
MICRONAUT_MAVEN,
|
||||
QUARKUS_MAVEN,
|
||||
KTOR_MAVEN,
|
||||
)
|
||||
|
||||
private val SCHEMA_KEY: Key<String> = Key.create("JVM_FRAMEWORK_CONFIG")
|
||||
|
||||
internal class SpringFileTypeUsageDescriptor : ConfigFileTypeUsageDescriptor(SPRING_BOOT_MAVEN)
|
||||
internal class MicronautFileTypeUsageDescriptor : ConfigFileTypeUsageDescriptor(MICRONAUT_MAVEN)
|
||||
internal class QuarkusFileTypeUsageDescriptor : ConfigFileTypeUsageDescriptor(QUARKUS_MAVEN)
|
||||
internal class KtorFileTypeUsageDescriptor : ConfigFileTypeUsageDescriptor(KTOR_MAVEN)
|
||||
|
||||
internal open class ConfigFileTypeUsageDescriptor(private val libraryMaven: String) : FileTypeUsageSchemaDescriptor {
|
||||
override fun describes(project: Project, file: VirtualFile): Boolean {
|
||||
if (!isApplicationConfig(file.name)) return false
|
||||
|
||||
file.getUserData(SCHEMA_KEY)?.let { return it == libraryMaven }
|
||||
|
||||
val mavenCoords = ReadAction.compute<String, Throwable> {
|
||||
val module = try {
|
||||
ModuleUtilCore.findModuleForFile(file, project)
|
||||
}
|
||||
catch (ignored: IndexNotReadyException) {
|
||||
null
|
||||
}
|
||||
|
||||
ALL_MAVEN.find { hasLibraryJar(module, it) } ?: ""
|
||||
}
|
||||
|
||||
file.putUserData(SCHEMA_KEY, mavenCoords)
|
||||
|
||||
return mavenCoords == libraryMaven
|
||||
}
|
||||
|
||||
private fun isApplicationConfig(fileName: @NlsSafe String): Boolean {
|
||||
return fileName == APPLICATION_PROPERTIES
|
||||
|| fileName == APPLICATION_YAML
|
||||
|| fileName == APPLICATION_YML
|
||||
|| fileName.startsWith(APPLICATION_PREFIX) && FileUtilRt.getExtension(fileName) in EXTENSIONS
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user