Skip to content

Commit 8cd2584

Browse files
committed
feat(provider): add language level detection
Add a new function `detectLanguageLevel` to the `JavaBuildSystemProvider` class. This function is used to determine the language level of the Java project. It first checks the project SDK and if not found, it checks the module SDK. The detected language level is then used to set the `languageVersion` property in the `DockerfileContext` object. This feature enhances the accuracy of language version
1 parent 7432143 commit 8cd2584

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

java/src/233/main/kotlin/cc/unitmesh/idea/provider/JavaBuildSystemProvider.kt

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,18 @@ import cc.unitmesh.devti.provider.BuildSystemProvider
44
import cc.unitmesh.devti.template.context.DockerfileContext
55
import com.intellij.openapi.externalSystem.service.project.ProjectDataManager
66
import com.intellij.openapi.externalSystem.service.ui.completion.TextCompletionInfo
7+
import com.intellij.openapi.module.LanguageLevelUtil
8+
import com.intellij.openapi.module.Module
9+
import com.intellij.openapi.module.ModuleManager
10+
import com.intellij.openapi.module.ModuleUtilCore
711
import com.intellij.openapi.project.Project
812
import com.intellij.openapi.project.guessProjectDir
13+
import com.intellij.openapi.projectRoots.JavaSdkType
14+
import com.intellij.openapi.roots.ModuleRootManager
15+
import com.intellij.openapi.roots.ProjectRootManager
16+
import com.intellij.pom.java.LanguageLevel
17+
import com.intellij.psi.PsiFile
18+
import com.intellij.psi.util.PsiUtil
919
import com.intellij.util.lang.JavaVersion
1020
import org.jetbrains.plugins.gradle.service.project.GradleTasksIndices
1121
import org.jetbrains.plugins.gradle.util.GradleConstants
@@ -33,19 +43,36 @@ open class JavaBuildSystemProvider : BuildSystemProvider() {
3343
buildToolName = "Maven"
3444
}
3545

36-
val javaVersion = JavaVersion.current()
37-
val javaVersionStr = "${javaVersion.feature}"
46+
val javaVersion = detectLanguageLevel(project, null)
3847

3948
return DockerfileContext(
4049
buildToolName = buildToolName,
4150
buildToolVersion = "",
4251
languageName = "Java",
43-
languageVersion = javaVersionStr,
52+
languageVersion = "$javaVersion",
4453
taskString = taskString
4554
)
4655
}
4756

4857
companion object {
58+
fun detectLanguageLevel(project: Project, sourceFile: PsiFile?): LanguageLevel? {
59+
val projectSdk = ProjectRootManager.getInstance(project).projectSdk
60+
if (projectSdk != null) {
61+
if (projectSdk.sdkType !is JavaSdkType) return null
62+
return PsiUtil.getLanguageLevel(project)
63+
}
64+
65+
var moduleOfFile = ModuleUtilCore.findModuleForFile(sourceFile)
66+
if (moduleOfFile == null) {
67+
moduleOfFile = ModuleManager.getInstance(project).modules.firstOrNull() ?: return null
68+
}
69+
70+
val sdk = ModuleRootManager.getInstance(moduleOfFile).sdk ?: return null
71+
if (sdk.sdkType !is JavaSdkType) return null
72+
73+
return LanguageLevelUtil.getEffectiveLanguageLevel(moduleOfFile)
74+
}
75+
4976
val GRADLE_COMPLETION_COMPARATOR = Comparator<String> { o1, o2 ->
5077
when {
5178
o1.startsWith("--") && o2.startsWith("--") -> o1.compareTo(o2)

0 commit comments

Comments
 (0)