Skip to content

Commit 6f7b156

Browse files
committed
feat(java): add detectLanguageLevel function
Add a new function `detectLanguageLevel` to the `JavaBuildSystemProvider.kt` file. This function is responsible for detecting the language level of the Java SDK being used in the project. It checks the project SDK and module SDK to determine the language level. If the language level is detected, it returns the corresponding `LanguageLevel` object. This function will be used in the `JavaVersionProvider.kt` file to provide information about the Java SDK version being used in the project.
1 parent 8cd2584 commit 6f7b156

File tree

2 files changed

+27
-28
lines changed

2 files changed

+27
-28
lines changed

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

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ 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
77
import com.intellij.openapi.module.LanguageLevelUtil
8-
import com.intellij.openapi.module.Module
98
import com.intellij.openapi.module.ModuleManager
109
import com.intellij.openapi.module.ModuleUtilCore
1110
import com.intellij.openapi.project.Project
@@ -16,7 +15,6 @@ import com.intellij.openapi.roots.ProjectRootManager
1615
import com.intellij.pom.java.LanguageLevel
1716
import com.intellij.psi.PsiFile
1817
import com.intellij.psi.util.PsiUtil
19-
import com.intellij.util.lang.JavaVersion
2018
import org.jetbrains.plugins.gradle.service.project.GradleTasksIndices
2119
import org.jetbrains.plugins.gradle.util.GradleConstants
2220

@@ -55,23 +53,6 @@ open class JavaBuildSystemProvider : BuildSystemProvider() {
5553
}
5654

5755
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-
}
7556

7657
val GRADLE_COMPLETION_COMPARATOR = Comparator<String> { o1, o2 ->
7758
when {
@@ -90,3 +71,21 @@ open class JavaBuildSystemProvider : BuildSystemProvider() {
9071
}
9172
}
9273
}
74+
75+
fun detectLanguageLevel(project: Project, sourceFile: PsiFile?): LanguageLevel? {
76+
val projectSdk = ProjectRootManager.getInstance(project).projectSdk
77+
if (projectSdk != null) {
78+
if (projectSdk.sdkType !is JavaSdkType) return null
79+
return PsiUtil.getLanguageLevel(project)
80+
}
81+
82+
var moduleOfFile = ModuleUtilCore.findModuleForFile(sourceFile)
83+
if (moduleOfFile == null) {
84+
moduleOfFile = ModuleManager.getInstance(project).modules.firstOrNull() ?: return null
85+
}
86+
87+
val sdk = ModuleRootManager.getInstance(moduleOfFile).sdk ?: return null
88+
if (sdk.sdkType !is JavaSdkType) return null
89+
90+
return LanguageLevelUtil.getEffectiveLanguageLevel(moduleOfFile)
91+
}

java/src/main/kotlin/cc/unitmesh/idea/provider/JavaVersionProvider.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import com.intellij.openapi.project.Project
1010
import com.intellij.openapi.projectRoots.JavaSdkType
1111
import com.intellij.openapi.roots.ModuleRootManager
1212
import com.intellij.openapi.roots.ProjectRootManager
13-
import com.intellij.util.lang.JavaVersion
1413

1514
class JavaVersionProvider : ChatContextProvider {
1615
override suspend fun collect(
@@ -24,15 +23,16 @@ class JavaVersionProvider : ChatContextProvider {
2423
return emptyList()
2524
}
2625

27-
val javaVersion = JavaVersion.current()
28-
val javaVersionStr = "${javaVersion.feature}"
29-
30-
val chatContextItem = ChatContextItem(
31-
JavaVersionProvider::class,
32-
"You are working on a project that uses Java SDK version $javaVersionStr."
33-
)
26+
detectLanguageLevel(project, psiFile)?.let { javaVersion ->
27+
return listOf(
28+
ChatContextItem(
29+
JavaVersionProvider::class,
30+
"You are working on a project that uses Java SDK version $javaVersion."
31+
)
32+
)
33+
}
3434

35-
return listOf(chatContextItem)
35+
return emptyList()
3636
}
3737

3838
override fun isApplicable(project: Project, creationContext: ChatCreationContext): Boolean {

0 commit comments

Comments
 (0)