[AA] KT-55566 StandaloneProjectFactory: Setup Java language level before Java files are parsed
- LL FIR tests with Java `record` classes and other new syntax features failed because `file.packageName` in `findJvmRootsForJavaFiles` caused the Java file to be parsed before the Java language level was configured. The Java language level is now set up in `registerJavaPsiFacade`, which is early enough.
This commit is contained in:
committed by
Space Team
parent
fed86a57e3
commit
e68111c218
+7
-2
@@ -67,6 +67,9 @@ object StandaloneProjectFactory {
|
||||
|
||||
registerService(ExternalAnnotationsManager::class.java, MockExternalAnnotationsManager())
|
||||
registerService(InferredAnnotationsManager::class.java, MockInferredAnnotationsManager())
|
||||
|
||||
// The Java language level must be configured before Java source files are parsed. See `findJvmRootsForJavaFiles`.
|
||||
setupHighestLanguageLevel()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,8 +88,6 @@ object StandaloneProjectFactory {
|
||||
|
||||
project.registerService(ProjectStructureProvider::class.java, projectStructureProvider)
|
||||
initialiseVirtualFileFinderServices(environment, modules, sourceFiles, languageVersionSettings, jdkHome)
|
||||
|
||||
project.setupHighestLanguageLevel()
|
||||
}
|
||||
|
||||
private fun initialiseVirtualFileFinderServices(
|
||||
@@ -153,6 +154,10 @@ object StandaloneProjectFactory {
|
||||
project.registerService(VirtualFileFinderFactory::class.java, finderFactory)
|
||||
}
|
||||
|
||||
/**
|
||||
* Note that [findJvmRootsForJavaFiles] parses the given [files] because it needs access to each file's package name. To avoid parsing
|
||||
* errors, [registerJavaPsiFacade] ensures that the Java language level is configured before [findJvmRootsForJavaFiles] is called.
|
||||
*/
|
||||
fun findJvmRootsForJavaFiles(files: List<PsiJavaFile>): List<PsiDirectory> {
|
||||
if (files.isEmpty()) return emptyList()
|
||||
val result = mutableSetOf<PsiDirectory>()
|
||||
|
||||
Reference in New Issue
Block a user