Skip to content

Commit f8208f9

Browse files
committed
feat(cpp): add CppFileContextBuilder for ObjectiveC
This commit adds a new file `CppFileContextBuilder.kt` in the `cpp/src/main/kotlin/cc/unitmesh/cpp/context` directory. The `CppFileContextBuilder` class implements the `FileContextBuilder` interface and provides the implementation for creating a `FileContext` object for ObjectiveC files. It extracts information such as file name, path, includes, struct likes, and functions from the `OCFile` PSI element. Additionally, the commit modifies the `cc.unitmesh.cpp.xml` file to include the `CppFileContextBuilder` as an extension for ObjectiveC language.
1 parent b1b17aa commit f8208f9

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package cc.unitmesh.cpp.context
2+
3+
import cc.unitmesh.devti.context.FileContext
4+
import cc.unitmesh.devti.context.builder.FileContextBuilder
5+
import com.intellij.psi.PsiFile
6+
import com.intellij.psi.util.PsiTreeUtil
7+
import com.jetbrains.cidr.lang.psi.OCFile
8+
import com.jetbrains.cidr.lang.psi.OCFunctionDeclaration
9+
import com.jetbrains.cidr.lang.psi.OCIncludeDirective
10+
import com.jetbrains.cidr.lang.psi.OCStructLike
11+
12+
13+
class CppFileContextBuilder : FileContextBuilder {
14+
override fun getFileContext(psiFile: PsiFile): FileContext? {
15+
if (psiFile !is OCFile) return null
16+
17+
val name = psiFile.name
18+
val path = psiFile.virtualFile.path
19+
20+
val includes = PsiTreeUtil.getChildrenOfTypeAsList(psiFile, OCIncludeDirective::class.java)
21+
val structLikes = PsiTreeUtil.getChildrenOfTypeAsList(psiFile, OCStructLike::class.java)
22+
val functions = PsiTreeUtil.getChildrenOfTypeAsList(psiFile, OCFunctionDeclaration::class.java)
23+
24+
return FileContext(psiFile, name, path, null, includes, structLikes, functions)
25+
}
26+
}

cpp/src/main/resources/cc.unitmesh.cpp.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
</dependencies>
88

99
<extensions defaultExtensionNs="cc.unitmesh">
10+
<fileContextBuilder language="ObjectiveC"
11+
implementationClass="cc.unitmesh.cpp.context.CppFileContextBuilder"/>
1012
<classContextBuilder language="ObjectiveC"
1113
implementationClass="cc.unitmesh.cpp.context.CppStructContextBuilder"/>
1214
<methodContextBuilder language="ObjectiveC"

0 commit comments

Comments
 (0)