Skip to content

Commit

Permalink
feat(provider): add language level detection
Browse files Browse the repository at this point in the history
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
  • Loading branch information
phodal committed Jan 19, 2024
1 parent 7432143 commit 8cd2584
Showing 1 changed file with 30 additions and 3 deletions.
Expand Up @@ -4,8 +4,18 @@ import cc.unitmesh.devti.provider.BuildSystemProvider
import cc.unitmesh.devti.template.context.DockerfileContext
import com.intellij.openapi.externalSystem.service.project.ProjectDataManager
import com.intellij.openapi.externalSystem.service.ui.completion.TextCompletionInfo
import com.intellij.openapi.module.LanguageLevelUtil
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.guessProjectDir
import com.intellij.openapi.projectRoots.JavaSdkType
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.pom.java.LanguageLevel
import com.intellij.psi.PsiFile
import com.intellij.psi.util.PsiUtil
import com.intellij.util.lang.JavaVersion
import org.jetbrains.plugins.gradle.service.project.GradleTasksIndices
import org.jetbrains.plugins.gradle.util.GradleConstants
Expand Down Expand Up @@ -33,19 +43,36 @@ open class JavaBuildSystemProvider : BuildSystemProvider() {
buildToolName = "Maven"
}

val javaVersion = JavaVersion.current()
val javaVersionStr = "${javaVersion.feature}"
val javaVersion = detectLanguageLevel(project, null)

return DockerfileContext(
buildToolName = buildToolName,
buildToolVersion = "",
languageName = "Java",
languageVersion = javaVersionStr,
languageVersion = "$javaVersion",
taskString = taskString
)
}

companion object {
fun detectLanguageLevel(project: Project, sourceFile: PsiFile?): LanguageLevel? {
val projectSdk = ProjectRootManager.getInstance(project).projectSdk
if (projectSdk != null) {
if (projectSdk.sdkType !is JavaSdkType) return null
return PsiUtil.getLanguageLevel(project)
}

var moduleOfFile = ModuleUtilCore.findModuleForFile(sourceFile)
if (moduleOfFile == null) {
moduleOfFile = ModuleManager.getInstance(project).modules.firstOrNull() ?: return null
}

val sdk = ModuleRootManager.getInstance(moduleOfFile).sdk ?: return null
if (sdk.sdkType !is JavaSdkType) return null

return LanguageLevelUtil.getEffectiveLanguageLevel(moduleOfFile)
}

val GRADLE_COMPLETION_COMPARATOR = Comparator<String> { o1, o2 ->
when {
o1.startsWith("--") && o2.startsWith("--") -> o1.compareTo(o2)
Expand Down

0 comments on commit 8cd2584

Please sign in to comment.