diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt index 4150e4498da..38f0f0e032a 100644 --- a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt +++ b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt @@ -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): List { if (files.isEmpty()) return emptyList() val result = mutableSetOf() diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/javaRecordWithGeneric.kt b/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/javaRecordWithGeneric.kt index 55e00598d75..148b33530c1 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/javaRecordWithGeneric.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/javaRecordWithGeneric.kt @@ -1,5 +1,4 @@ // FIR_IDENTICAL -// FIR_IDE_IGNORE // FILE: MyInterface.java public interface MyInterface { diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.fir.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.fir.kt index 304f755e1d7..cce64dd75a8 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.fir.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.fir.kt @@ -1,4 +1,3 @@ -// FIR_IDE_IGNORE // !DIAGNOSTICS: -UNUSED_VARIABLE // ISSUE: KT-41215, KT-43551 diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt index fb5ce8ae65f..0ae9771eb1f 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt @@ -1,4 +1,3 @@ -// FIR_IDE_IGNORE // !DIAGNOSTICS: -UNUSED_VARIABLE // ISSUE: KT-41215, KT-43551 diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.fir.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.fir.kt index 9be489d07b9..3e478edc7ec 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.fir.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.fir.kt @@ -1,4 +1,3 @@ -// FIR_IDE_IGNORE // !DIAGNOSTICS: -UNUSED_VARIABLE // ISSUE: KT-41215, KT-43551 diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt index 2507439998f..3419f18de62 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt @@ -1,4 +1,3 @@ -// FIR_IDE_IGNORE // !DIAGNOSTICS: -UNUSED_VARIABLE // ISSUE: KT-41215, KT-43551 diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt index 3f41af6b282..3445a30bc29 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt @@ -1,4 +1,3 @@ -// FIR_IDE_IGNORE // FIR_IDENTICAL // ISSUE: KT-41215 diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt index 46d1a3068fd..d138fedc8da 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt @@ -1,4 +1,3 @@ -// FIR_IDE_IGNORE // FIR_IDENTICAL // ISSUE: KT-41215