SourceFileCheckerTest.ktАннотации: author, Test, Throws
Классы: SourceFileCheckerTest, should
Функции (1): checkLoggerDeclarations
Свойства (2): loggerRegex, supportedExtensions
Импорты: 6 пакетов
Пакет: org.projectforge.development
package org.projectforge.development
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.slf4j.LoggerFactory
import java.io.File
import java.io.IOException
import java.nio.charset.StandardCharsets
/**
* Различные проверки исходных файлов.
* @author Kai Reinhard
*/
class SourceFileCheckerTest {
/**
* Проверяет все исходники Kotlin и Java на корректное объявление LoggerFactory.getLogger(SourceFileCheckerTest::class.java). Если какое-либо
* объявление Logger отличается от имени исходного файла, тест завершается неудачей.
* Пример: Foo.java: private final Logger log = LoggerFactory.getLogger(Bar.class); // Bar.class должно быть Foo.class.
*/
@Test
@Throws(IOException::class)
fun checkLoggerDeclarations() {
var baseDir = File(System.getProperty("user.dir"))
if (!baseDir.exists() || !baseDir.isDirectory) return
if (baseDir.name == "projectforge-common") {
// Проверяем родительскую директорию для проверки всех остальных модулей ProjectForge.
baseDir = baseDir.parentFile
}
log.info("Проверка директории '${baseDir.absolutePath}...")
var processedKotlinFiles = 0
var processedJavaFiles = 0
val errorFiles = mutableListOf<String>()
baseDir.walkTopDown().filter { supportedExtensions.contains(it.extension) }.forEach { file ->
if (file.extension == "kt") {
++processedKotlinFiles
} else {
++processedJavaFiles
}
val content = file.readText(StandardCharsets.UTF_8)
val matchResult = loggerRegex.find(content)
val loggerClass = matchResult?.groups?.get(1)?.value?.trim()
if (loggerClass != null && file.nameWithoutExtension != loggerClass) {
errorFiles.add(file.path)
log.warn("$file объявляет чужой класс логгера: '$loggerClass'")
}
}
log.info("Проверено $processedKotlinFiles файлов Kotlin и $processedJavaFiles файлов Java на объявление Logger.")
Assertions.assertTrue( errorFiles.isEmpty(), "Найдены исходные файлы с несоответствующими классами логгера: ${errorFiles.joinToString { it }}")
}
companion object {
private val loggerRegex = """LoggerFactory\s*.\s*getLogger\s*\(\s*(.*)\s*(\.class|:{2}class)""".toRegex()
private val supportedExtensions = arrayOf("kt", "java")
// Kotlin:
private val log = LoggerFactory.getLogger(SourceFileCheckerTest::class.java)
// Java: private static final Logger log = LoggerFactory.getLogger(SourceFileCheckerTest.class);
}
}
868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024-> 2025. b6092df09 Авторские права 2023 -> 2024 ab45d51fa Авторские права 2001-2022 -> 2001-2023. 5e563fb80 EnsureSourceHeadersAndI18nMain теперь вызывает SourceFileHeadersMain, SortAndCheckI18nPropertiesMain и I18nKeysUsage(create). Вызывайте этот main перед каждым релизом.