Skip to content

Commit

Permalink
new project, and new files support, fix executable flag
Browse files Browse the repository at this point in the history
  • Loading branch information
daimor committed Apr 23, 2021
1 parent 201bb4e commit 8e2b95f
Show file tree
Hide file tree
Showing 18 changed files with 249 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.caretdev.plugins.idea

import com.intellij.lang.Language

object InterSystemsLanguage : Language("objectscript") {
override fun isCaseSensitive() = false

override fun getDisplayName() = "ObjectScript"
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
package com.caretdev.plugins.idea

import com.intellij.ide.util.projectWizard.ModuleBuilder
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleType
import com.intellij.openapi.roots.ModifiableRootModel
import com.intellij.openapi.vfs.LocalFileSystem
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths

class InterSystemsModuleBuilder : ModuleBuilder() {
override fun getModuleType(): ModuleType<*> {
return InterSystemsModuleType.getInstance()
}

override fun setupModule(module: Module?) {
super.setupModule(module)
override fun setupRootModel(modifiableRootModel: ModifiableRootModel) {
val entry = doAddContentEntry(modifiableRootModel) ?: return
val path: Path = Paths.get(contentEntryPath!!)
val src = path.resolve("src")
Files.createDirectory(src)
val srcPath = LocalFileSystem.getInstance().refreshAndFindFileByNioFile(src) ?: return
entry.addSourceFolder(srcPath, false)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,13 @@ class InterSystemsModuleType : ModuleType<InterSystemsModuleBuilder>(Constants.M
}
}

override fun createModuleBuilder(): InterSystemsModuleBuilder {
return InterSystemsModuleBuilder()
}
override fun createModuleBuilder(): InterSystemsModuleBuilder = InterSystemsModuleBuilder()

override fun getName(): @Nls(capitalization = Nls.Capitalization.Title) String {
return "InterSystems"
}
override fun getName(): @Nls(capitalization = Nls.Capitalization.Title) String = "InterSystems"

override fun getDescription(): @Nls(capitalization = Nls.Capitalization.Sentence) String {
return "InterSystems module"
}
override fun getDescription(): @Nls(capitalization = Nls.Capitalization.Sentence) String =
"InterSystems module"

override fun getNodeIcon(isOpened: Boolean): Icon {
return InterSystemsIcons.ICON
}
override fun getNodeIcon(isOpened: Boolean): Icon =
InterSystemsIcons.ICON
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,14 @@ import com.intellij.platform.DirectoryProjectGenerator
import javax.swing.Icon

class InterSystemsProjectGenerator : DirectoryProjectGenerator<Any?> {
override fun getName(): String {
return "InterSystems"
}
override fun getName(): String = "InterSystems"

override fun getLogo(): Icon {
return ICON
}
override fun getLogo(): Icon = ICON

override fun generateProject(project: Project, baseDir: VirtualFile, settings: Any, module: Module) {
// lets finish it later
}

override fun validate(baseDirPath: String): ValidationResult {
return ValidationResult.OK
}
override fun validate(baseDirPath: String): ValidationResult =
ValidationResult.OK
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.caretdev.plugins.idea.files

import com.caretdev.plugins.idea.InterSystemsIcons
import com.intellij.ide.actions.CreateFileFromTemplateAction
import com.intellij.ide.actions.CreateFileFromTemplateDialog
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiDirectory

class CLSCreateFileAction : CreateFileFromTemplateAction(CAPTION, "", InterSystemsIcons.ICON) {
private companion object {
private const val CAPTION = "ObjectScript Class"
}

override fun buildDialog(project: Project, directory: PsiDirectory, builder: CreateFileFromTemplateDialog.Builder) {
builder.setTitle(CAPTION)
.addKind("Empty file", InterSystemsIcons.ICON, "ObjectScript Class")
}

override fun getActionName(directory: PsiDirectory?, newName: String, templateName: String?): String = CAPTION
}
17 changes: 17 additions & 0 deletions src/main/kotlin/com/caretdev/plugins/idea/files/CLSFileType.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.caretdev.plugins.idea.files

import com.caretdev.plugins.idea.InterSystemsIcons
import com.intellij.openapi.fileTypes.LanguageFileType
import org.jetbrains.plugins.textmate.TextMateLanguage
import javax.swing.Icon

object CLSFileType : LanguageFileType(TextMateLanguage.LANGUAGE) {

override fun getName(): String = "ObjectScript Class"

override fun getDescription(): String = "ObjectScript class"

override fun getDefaultExtension(): String = "cls"

override fun getIcon(): Icon = InterSystemsIcons.ICON
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.caretdev.plugins.idea.files

import com.caretdev.plugins.idea.InterSystemsIcons
import com.intellij.ide.actions.CreateFileFromTemplateAction
import com.intellij.ide.actions.CreateFileFromTemplateDialog
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiDirectory

class MACCreateFileAction : CreateFileFromTemplateAction(CAPTION, "", InterSystemsIcons.ICON) {
private companion object {
private const val CAPTION = "ObjectScript MAC Routine"
}

override fun buildDialog(project: Project, directory: PsiDirectory, builder: CreateFileFromTemplateDialog.Builder) {
builder.setTitle(CAPTION)
.addKind("Empty file", InterSystemsIcons.ICON, "ObjectScript MAC")
}

override fun getActionName(directory: PsiDirectory?, newName: String, templateName: String?): String = CAPTION
}
17 changes: 17 additions & 0 deletions src/main/kotlin/com/caretdev/plugins/idea/files/MACFileType.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.caretdev.plugins.idea.files

import com.caretdev.plugins.idea.InterSystemsIcons
import com.intellij.openapi.fileTypes.LanguageFileType
import org.jetbrains.plugins.textmate.TextMateLanguage
import javax.swing.Icon

object MACFileType : LanguageFileType(TextMateLanguage.LANGUAGE) {

override fun getName(): String = "ObjectScript Routine"

override fun getDescription(): String = "ObjectScript routine"

override fun getDefaultExtension(): String = "mac"

override fun getIcon(): Icon = InterSystemsIcons.ICON
}
18 changes: 18 additions & 0 deletions src/main/kotlin/com/caretdev/plugins/idea/preloading/LSPUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ import com.intellij.openapi.project.ProjectManager
import org.eclipse.lsp4j.DidChangeConfigurationParams
import org.wso2.lsp4intellij.IntellijLanguageClient
import org.wso2.lsp4intellij.client.languageserver.serverdefinition.RawCommandServerDefinition
import java.io.IOException
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.attribute.PosixFilePermission

class LSPUtils(private val pluginPath: Path) {
companion object {
Expand Down Expand Up @@ -36,6 +39,7 @@ class LSPUtils(private val pluginPath: Path) {
val arch = System.getProperty("os.arch")
val exe = if (OSUtils.operatingSystem == OSUtils.WINDOWS) ".exe" else ""
val lsPath = pluginPath.resolve("lib/language-server/$os-$arch/intersystems-ls$exe")
checkExecutable(lsPath)

var command = arrayOf(lsPath.toAbsolutePath().toString())
if (isDebug) {
Expand All @@ -49,4 +53,18 @@ class LSPUtils(private val pluginPath: Path) {
project
)
}

private fun checkExecutable(exePath: Path) {
if (OSUtils.operatingSystem == OSUtils.WINDOWS) {
return
}
try {
val perms: MutableSet<PosixFilePermission> = HashSet()
perms.add(PosixFilePermission.OWNER_EXECUTE)

Files.setPosixFilePermissions(exePath, perms)
} catch (_: IOException) {
// Don't care
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.caretdev.plugins.idea.project

import com.intellij.openapi.roots.ProjectExtension
import org.jdom.Element

class InterSystemsProjectExtension : ProjectExtension() {
override fun readExternal(element: Element) {
// not needed at the moment
}

override fun writeExternal(element: Element) {
// not needed at the moment
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.caretdev.plugins.idea.project

import com.caretdev.plugins.idea.InterSystemsIcons
import com.intellij.openapi.actionSystem.CustomShortcutSet
import com.intellij.openapi.roots.ui.configuration.ModuleSourceRootEditHandler
import java.awt.Color
import javax.swing.Icon

class InterSystemsSourceRootEditHandler :
ModuleSourceRootEditHandler<InterSystemsSourceRootProperties>(InterSystemsSourceRootType.SOURCE) {

override fun getRootTypeName(): String = "Sources"

override fun getRootIcon(): Icon = InterSystemsIcons.ICON

override fun getFolderUnderRootIcon(): Icon = InterSystemsIcons.ICON

override fun getMarkRootShortcutSet(): CustomShortcutSet? = null

override fun getRootsGroupTitle(): String = "Sources"

override fun getRootsGroupColor(): Color = Color.LIGHT_GRAY

override fun getUnmarkRootButtonText(): String = "Unmark"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.caretdev.plugins.idea.project

import org.jetbrains.jps.model.JpsSimpleElement
import org.jetbrains.jps.model.ex.JpsElementBase

class InterSystemsSourceRootProperties :
JpsElementBase<InterSystemsSourceRootProperties>(),
JpsSimpleElement<InterSystemsSourceRootProperties> {
override fun createCopy(): InterSystemsSourceRootProperties =
com.caretdev.plugins.idea.project.InterSystemsSourceRootProperties()

override fun applyChanges(modified: InterSystemsSourceRootProperties) {
// noting to apply, yet
}

override fun getData(): InterSystemsSourceRootProperties = this

override fun setData(data: InterSystemsSourceRootProperties) {
this.applyChanges(data)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.caretdev.plugins.idea.project

import org.jetbrains.jps.model.ex.JpsElementTypeBase
import org.jetbrains.jps.model.module.JpsModuleSourceRootType

class InterSystemsSourceRootType :
JpsElementTypeBase<InterSystemsSourceRootProperties>(),
JpsModuleSourceRootType<InterSystemsSourceRootProperties> {

companion object {
val SOURCE: InterSystemsSourceRootType = InterSystemsSourceRootType()
val TEST_SOURCE: InterSystemsSourceRootType = InterSystemsSourceRootType()
}

override fun createDefaultProperties(): InterSystemsSourceRootProperties =
InterSystemsSourceRootProperties()
}
30 changes: 30 additions & 0 deletions src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
<description><![CDATA[
The InterSystems IntelliJ plugin provides the <a href="https://intersystems.com">InterSystems</a> ObjectScript development capabilities in IntelliJ IDEA.
]]></description>

<depends>com.intellij.modules.lang</depends>
<depends>com.intellij.modules.platform</depends>
<depends>org.jetbrains.plugins.textmate</depends>

Expand Down Expand Up @@ -37,9 +39,37 @@
<projectService
serviceImplementation="com.caretdev.plugins.idea.configuration.InterSystemsProjectSettingsComponent"/>

<!-- <projectExtension implementation="com.caretdev.plugins.idea.project.InterSystemsProjectExtension"/>-->
<!-- <projectStructure.sourceRootEditHandler-->
<!-- implementation="com.caretdev.plugins.idea.project.InterSystemsSourceRootEditHandler"/>-->

<directoryProjectGenerator
implementation="com.caretdev.plugins.idea.InterSystemsProjectGenerator"/>

<moduleType id="ISC_MODULE" implementationClass="com.caretdev.plugins.idea.InterSystemsModuleType"/>

<!-- <fileType name="ObjectScript Class"-->
<!-- language="textmate"-->
<!-- implementationClass="com.caretdev.plugins.idea.files.CLSFileType"-->
<!-- extensions="cls"-->
<!-- fieldName="INSTANCE"/>-->
<internalFileTemplate name="ObjectScript Class"/>

<!-- <fileType name="ObjectScript Routine"-->
<!-- language="textmate"-->
<!-- implementationClass="com.caretdev.plugins.idea.files.MACFileType"-->
<!-- extensions="mac"-->
<!-- fieldName="INSTANCE"/>-->
<internalFileTemplate name="ObjectScript MAC"/>
</extensions>
<actions>
<action id="ObjectScript.NewCLSFile"
class="com.caretdev.plugins.idea.files.CLSCreateFileAction">
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
</action>
<action id="ObjectScript.NewMACFile"
class="com.caretdev.plugins.idea.files.MACCreateFileAction">
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
</action>
</actions>
</idea-plugin>
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Class ${PACKAGE_NAME}.${NAME}
{

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<html>
<body>
Empty Class file.
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")
ROUTINE ${PACKAGE_NAME}.${NAME}
#else
ROUTINE ${NAME}
#end
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<html>
<body>
Empty MAC Routine.
</body>
</html>

0 comments on commit 8e2b95f

Please sign in to comment.