From 4567aba541b59157096a7da96bc4d4d33a8b99bb Mon Sep 17 00:00:00 2001 From: me Date: Thu, 23 May 2024 19:27:50 +0800 Subject: [PATCH] initial commit --- .../psi/impl/SlintPsiNamedElementMixinImpl.kt | 1 - .../me/zhouxi/slint/stubs/SlintPsiStub.kt | 9 ++++ .../me/zhouxi/slint/stubs/SlintStubTypes.kt | 10 ++++ .../me/zhouxi/slint/stubs/StubKeys.java | 14 +++++ .../stubs/impl/SlintComponentStubImpl.kt | 21 ++++++++ .../zhouxi/slint/stubs/impl/SlintFileStub.kt | 9 ++++ .../slint/stubs/stub/SlintComponentStub.kt | 13 +++++ .../stubs/types/SlintComponentStubType.kt | 53 +++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 2 + 9 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/me/zhouxi/slint/stubs/SlintPsiStub.kt create mode 100644 src/main/kotlin/me/zhouxi/slint/stubs/SlintStubTypes.kt create mode 100644 src/main/kotlin/me/zhouxi/slint/stubs/StubKeys.java create mode 100644 src/main/kotlin/me/zhouxi/slint/stubs/impl/SlintComponentStubImpl.kt create mode 100644 src/main/kotlin/me/zhouxi/slint/stubs/impl/SlintFileStub.kt create mode 100644 src/main/kotlin/me/zhouxi/slint/stubs/stub/SlintComponentStub.kt create mode 100644 src/main/kotlin/me/zhouxi/slint/stubs/types/SlintComponentStubType.kt diff --git a/src/main/kotlin/me/zhouxi/slint/lang/psi/impl/SlintPsiNamedElementMixinImpl.kt b/src/main/kotlin/me/zhouxi/slint/lang/psi/impl/SlintPsiNamedElementMixinImpl.kt index 6e0be9a..5d5a6bb 100644 --- a/src/main/kotlin/me/zhouxi/slint/lang/psi/impl/SlintPsiNamedElementMixinImpl.kt +++ b/src/main/kotlin/me/zhouxi/slint/lang/psi/impl/SlintPsiNamedElementMixinImpl.kt @@ -6,7 +6,6 @@ import com.intellij.psi.PsiElement import com.intellij.util.IncorrectOperationException import me.zhouxi.slint.lang.createIdentifier import me.zhouxi.slint.lang.psi.SlintNamed -import me.zhouxi.slint.lang.psi.SlintPsiElementImpl import me.zhouxi.slint.lang.psi.SlintPsiNamedElement /** diff --git a/src/main/kotlin/me/zhouxi/slint/stubs/SlintPsiStub.kt b/src/main/kotlin/me/zhouxi/slint/stubs/SlintPsiStub.kt new file mode 100644 index 0000000..636b886 --- /dev/null +++ b/src/main/kotlin/me/zhouxi/slint/stubs/SlintPsiStub.kt @@ -0,0 +1,9 @@ +package me.zhouxi.slint.stubs + +import com.intellij.psi.stubs.StubElement +import me.zhouxi.slint.lang.psi.SlintPsiNamedElement + +/** + * @author zhouxi 2024/5/23 + */ +interface SlintPsiStub : StubElement diff --git a/src/main/kotlin/me/zhouxi/slint/stubs/SlintStubTypes.kt b/src/main/kotlin/me/zhouxi/slint/stubs/SlintStubTypes.kt new file mode 100644 index 0000000..a9438ca --- /dev/null +++ b/src/main/kotlin/me/zhouxi/slint/stubs/SlintStubTypes.kt @@ -0,0 +1,10 @@ +package me.zhouxi.slint.stubs + +import me.zhouxi.slint.stubs.types.SlintComponentStubType + +/** + * @author zhouxi 2024/5/23 + */ +object SlintStubTypes { + val ComponentType = SlintComponentStubType() +} diff --git a/src/main/kotlin/me/zhouxi/slint/stubs/StubKeys.java b/src/main/kotlin/me/zhouxi/slint/stubs/StubKeys.java new file mode 100644 index 0000000..b1052fa --- /dev/null +++ b/src/main/kotlin/me/zhouxi/slint/stubs/StubKeys.java @@ -0,0 +1,14 @@ +package me.zhouxi.slint.stubs; + +import com.intellij.psi.stubs.StubIndexKey; +import me.zhouxi.slint.lang.psi.SlintComponentName; + +/** + * @author zhouxi 2024/5/23 + */ +public class StubKeys { + + public static final StubIndexKey COMPONENT = StubIndexKey.createIndexKey("slint.component"); + + +} diff --git a/src/main/kotlin/me/zhouxi/slint/stubs/impl/SlintComponentStubImpl.kt b/src/main/kotlin/me/zhouxi/slint/stubs/impl/SlintComponentStubImpl.kt new file mode 100644 index 0000000..f02fe75 --- /dev/null +++ b/src/main/kotlin/me/zhouxi/slint/stubs/impl/SlintComponentStubImpl.kt @@ -0,0 +1,21 @@ +package me.zhouxi.slint.stubs.impl + +import com.intellij.psi.stubs.IStubElementType +import com.intellij.psi.stubs.StubBase +import com.intellij.psi.stubs.StubElement +import me.zhouxi.slint.lang.psi.SlintComponent +import me.zhouxi.slint.stubs.stub.SlintComponentStub + +/** + * @author zhouxi 2024/5/23 + */ + +class SlintComponentStubImpl( + parent: StubElement<*>?, + elementType: IStubElementType, *>, + override val exported: Boolean, + override val identifier: String, +) : + StubBase(parent, elementType), SlintComponentStub { + +} diff --git a/src/main/kotlin/me/zhouxi/slint/stubs/impl/SlintFileStub.kt b/src/main/kotlin/me/zhouxi/slint/stubs/impl/SlintFileStub.kt new file mode 100644 index 0000000..4aa3a69 --- /dev/null +++ b/src/main/kotlin/me/zhouxi/slint/stubs/impl/SlintFileStub.kt @@ -0,0 +1,9 @@ +package me.zhouxi.slint.stubs.impl + +import com.intellij.psi.stubs.PsiFileStubImpl +import me.zhouxi.slint.lang.psi.SlintFile + +/** + * @author zhouxi 2024/5/23 + */ +class SlintFileStub(file: SlintFile) : PsiFileStubImpl(file) diff --git a/src/main/kotlin/me/zhouxi/slint/stubs/stub/SlintComponentStub.kt b/src/main/kotlin/me/zhouxi/slint/stubs/stub/SlintComponentStub.kt new file mode 100644 index 0000000..4260dfd --- /dev/null +++ b/src/main/kotlin/me/zhouxi/slint/stubs/stub/SlintComponentStub.kt @@ -0,0 +1,13 @@ +package me.zhouxi.slint.stubs.stub + +import me.zhouxi.slint.lang.psi.SlintComponent +import me.zhouxi.slint.stubs.SlintPsiStub + +/** + * @author zhouxi 2024/5/23 + */ +interface SlintComponentStub : SlintPsiStub { + val exported: Boolean + + val identifier: String +} diff --git a/src/main/kotlin/me/zhouxi/slint/stubs/types/SlintComponentStubType.kt b/src/main/kotlin/me/zhouxi/slint/stubs/types/SlintComponentStubType.kt new file mode 100644 index 0000000..ab78e4b --- /dev/null +++ b/src/main/kotlin/me/zhouxi/slint/stubs/types/SlintComponentStubType.kt @@ -0,0 +1,53 @@ +package me.zhouxi.slint.stubs.types + +import com.intellij.psi.PsiElement +import com.intellij.psi.stubs.* +import com.intellij.psi.util.parentOfType +import me.zhouxi.slint.lang.SlintLanguage +import me.zhouxi.slint.lang.psi.SlintComponent +import me.zhouxi.slint.lang.psi.SlintExport +import me.zhouxi.slint.lang.psi.impl.SlintComponentImpl +import me.zhouxi.slint.stubs.StubKeys +import me.zhouxi.slint.stubs.impl.SlintComponentStubImpl +import me.zhouxi.slint.stubs.stub.SlintComponentStub +import java.io.IOException + +/** + * @author zhouxi 2024/5/23 + */ +class SlintComponentStubType : + IStubElementType("SlintComponentStub", SlintLanguage.INSTANCE) { + override fun createPsi(stub: SlintComponentStub): SlintComponent { + return SlintComponentImpl(stub, this) + } + + override fun createStub(psi: SlintComponent, parentStub: StubElement): SlintComponentStub { + return SlintComponentStubImpl( + parentStub, + this, + psi.parentOfType() != null, + psi.componentName!!.text + ) + } + + override fun getExternalId(): String { + return "slint.component" + } + + @Throws(IOException::class) + override fun serialize(stub: SlintComponentStub, dataStream: StubOutputStream) { + dataStream.writeBoolean(stub.exported) + dataStream.writeName(stub.identifier) + } + + @Throws(IOException::class) + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>): SlintComponentStub { + val exported = dataStream.readBoolean() + val identifier = dataStream.readNameString() + return SlintComponentStubImpl(parentStub, this, exported, identifier!!) + } + + override fun indexStub(stub: SlintComponentStub, sink: IndexSink) { + sink.occurrence(StubKeys.COMPONENT, stub.identifier) + } +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 2a0f180..af0577f 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -47,6 +47,8 @@ + +