Skip to content

Commit

Permalink
feat(co): add basic api parse
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Aug 7, 2023
1 parent d9b0d08 commit 75e095d
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 10 deletions.
5 changes: 2 additions & 3 deletions build.gradle.kts
Expand Up @@ -375,9 +375,8 @@ project(":companion") {
intellij {
pluginName.set(basePluginArchiveName)
val pluginList: MutableList<String> = mutableListOf("Git4Idea")
if (baseIDE == "idea") {
pluginList += javaPlugins
}
pluginList += javaPlugins

plugins.set(pluginList)
}

Expand Down
Expand Up @@ -2,7 +2,9 @@ package cc.unitmesh.comp.actions

import cc.unitmesh.devti.AutoDevBundle
import cc.unitmesh.devti.intentions.AbstractChatIntention
import chapi.ast.javaast.JavaAnalyser
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.openapi.application.ReadAction
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.ProgressManager
Expand All @@ -13,6 +15,8 @@ import com.intellij.psi.PsiFile
import com.intellij.psi.PsiManager
import com.intellij.psi.search.FileTypeIndex
import com.intellij.psi.search.GlobalSearchScope
import org.archguard.scanner.analyser.backend.JavaApiAnalyser
import org.archguard.scanner.core.sourcecode.ContainerService

class TalkWithApiAction : AbstractChatIntention() {
override fun getText(): String = AutoDevBundle.message("intentions.companion.api.name")
Expand All @@ -21,16 +25,37 @@ class TalkWithApiAction : AbstractChatIntention() {
override fun invoke(project: Project, editor: Editor?, file: PsiFile?) {
val task: Task.Backgroundable = object : Task.Backgroundable(project, "Collect context") {
override fun run(indicator: ProgressIndicator) {
// search all Controller file from project stub
val psiManager = PsiManager.getInstance(project)
val virtualFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, GlobalSearchScope.projectScope(project))
val psiFiles = virtualFiles.mapNotNull { psiManager.findFile(it) }
val controllerFiles = psiFiles.filter { it.name.endsWith("Controller.java") }
val psiManager = PsiManager.getInstance(project)
// val virtualFiles =
// FileTypeIndex.getFiles(JavaFileType.INSTANCE, GlobalSearchScope.projectScope(project))
// val psiFiles = virtualFiles.mapNotNull {
// ReadAction.compute<PsiFile, Throwable> { psiManager.findFile(it) }
// }

// todo: convert by chapi
val psiFiles = ReadAction.compute<List<PsiFile>, Throwable> {
val virtualFiles =
FileTypeIndex.getFiles(JavaFileType.INSTANCE, GlobalSearchScope.projectScope(project))
virtualFiles.mapNotNull {
psiManager.findFile(it)
}
}

val javaApiAnalyser = JavaApiAnalyser()

val controllerFiles: List<ContainerService> = psiFiles.asSequence()
.filter { it.name.endsWith("Controller.java") }.map {
JavaAnalyser().analysis(it.text, it.virtualFile.path).DataStructures
}.flatten().map {
javaApiAnalyser.analysisByNode(it, "")
javaApiAnalyser.toContainerServices()
}.flatten().toList()

println(controllerFiles)
}
}

ProgressManager.getInstance().runProcessWithProgressAsynchronously(task, BackgroundableProcessIndicator(task))
}
}


}
5 changes: 5 additions & 0 deletions companion/src/main/resources/META-INF/plugin.xml
Expand Up @@ -24,6 +24,11 @@
<module name="cc.unitmesh.idea"/>
</content>

<dependencies>
<plugin id="com.intellij.modules.java"/>
<plugin id="org.jetbrains.plugins.gradle"/>
</dependencies>

<extensions defaultExtensionNs="cc.unitmesh">
<autoDevIntention>
<className>cc.unitmesh.comp.actions.TalkWithApiAction</className>
Expand Down

0 comments on commit 75e095d

Please sign in to comment.