diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b009097..8259c24 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,7 +42,7 @@ jobs: # Set up Java environment for the next steps - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: zulu java-version: 17 @@ -89,7 +89,7 @@ jobs: # Store already-built plugin as an artifact for downloading - name: Upload artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ steps.artifact.outputs.filename }} path: ./build/distributions/content/*/* @@ -107,7 +107,7 @@ jobs: # Set up Java environment for the next steps - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: zulu java-version: 17 @@ -125,14 +125,14 @@ jobs: # Collect Tests Result of failed tests - name: Collect Tests Result if: ${{ failure() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: tests-result path: ${{ github.workspace }}/build/reports/tests # Upload the Kover report to CodeCov - name: Upload Code Coverage Report - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v5 with: files: ${{ github.workspace }}/build/reports/kover/report.xml @@ -160,7 +160,7 @@ jobs: # Set up Java environment for the next steps - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: zulu java-version: 17 @@ -191,7 +191,7 @@ jobs: # Set up Java environment for the next steps - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: zulu java-version: 17 @@ -216,7 +216,7 @@ jobs: # Collect Plugin Verifier Result - name: Collect Plugin Verifier Result if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pluginVerifier-result path: ${{ github.workspace }}/build/reports/pluginVerifier @@ -238,7 +238,7 @@ jobs: # Set up Java environment for the next steps - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: zulu java-version: 17 diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d7592d..b3c6e53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,15 +4,11 @@ ### Added -- LibSL project generation and detection -- LibSL Tools dynamic actions -- File templates -- Folding +- LibSL grammar upd +- support new versions of IJ ### Changed ### Fixed -- Intents for params - [Unreleased]: https://github.com/kechinvv/LibSLPluginIJ/commits diff --git a/build.gradle.kts b/build.gradle.kts index c69414d..337f419 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,8 +31,8 @@ dependencies { antlr("org.antlr:antlr4:4.13.1") implementation("org.antlr:antlr4-intellij-adaptor:0.1") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") - testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1") + testImplementation("org.junit.jupiter:junit-jupiter-api:5.11.4") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.11.4") } diff --git a/gradle.properties b/gradle.properties index 33be1b6..9a7c77a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,19 +4,19 @@ pluginGroup = com.github.kechinvv.libslpluginij pluginName = LibSL Support pluginRepositoryUrl = https://github.com/kechinvv/LibSLPluginIJ # SemVer format -> https://semver.org -pluginVersion = 0.1.0 +pluginVersion = 0.1.1 # Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html pluginSinceBuild = 223 -pluginUntilBuild = 241.* +pluginUntilBuild = 251.* # IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension platformType = IC -platformVersion = 2023.3 +platformVersion = 2024.3.3 # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html # Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22 -platformPlugins = com.intellij.java +platformPlugins = com.intellij.java, PsiViewer:243.7768 # Gradle Releases -> https://github.com/gradle/gradle/releases gradleVersion = 8.5 diff --git a/src/main/antlr/LibSLLexer.g4 b/src/main/antlr/LibSLLexer.g4 index 7c6e03c..d825698 100644 --- a/src/main/antlr/LibSLLexer.g4 +++ b/src/main/antlr/LibSLLexer.g4 @@ -1,6 +1,5 @@ lexer grammar LibSLLexer; - SEMICOLON : ';' ; ASSIGN_OP : '=' ; @@ -253,6 +252,55 @@ NULL : 'null' ; +IN + : 'in' + ; + +OUT + : 'out' + ; + +WHERE + : 'where' + ; + +IntegerLiteral: + DecimalIntegerLiteral + | HexIntegerLiteral + | OctalIntegerLiteral + | BinaryIntegerLiteral +; + +fragment DecimalIntegerLiteral: DecimalNumeral IntegerTypeSuffix?; + +fragment HexIntegerLiteral: HexNumeral IntegerTypeSuffix?; + +fragment OctalIntegerLiteral: OctalNumeral IntegerTypeSuffix?; + +fragment BinaryIntegerLiteral: BinaryNumeral IntegerTypeSuffix?; + +fragment DecimalNumeral: '0' | NonZeroDigit (Digits?); + +fragment IntegerTypeSuffix: [lLxsu] | 'ux' | 'us' | 'uL'; + +FloatingPointLiteral: DecimalFloatingPointLiteral; + +fragment DecimalFloatingPointLiteral: + Digits '.' Digits? ExponentPart? FloatTypeSuffix? + | Digits ExponentPart FloatTypeSuffix? + | Digits FloatTypeSuffix +; + +fragment ExponentPart: ExponentIndicator SignedInteger; + +fragment ExponentIndicator: [eE]; + +fragment SignedInteger: Sign? Digits; + +fragment Sign: [+-]; + +fragment FloatTypeSuffix: [fFdD]; + Identifier : [a-zA-Z_$][a-zA-Z0-9_$]* | '`' .*? '`' @@ -271,19 +319,43 @@ CHARACTER | '\'' EscapeSequence '\'' ; -fragment -SingleCharacter +fragment SingleCharacter : ~['\\\r\n] ; -fragment -EscapeSequence - : '\\u' Hex Hex Hex Hex Hex Hex Hex Hex +fragment EscapeSequence + : '\\' [btnfr"'\\] + | UnicodeEscape + | OctalEscape ; +fragment UnicodeEscape: '\\' 'u'+ Hex Hex Hex Hex; + +fragment OctalEscape: + '\\' OctalDigit + | '\\' OctalDigit OctalDigit + | '\\' ZeroToThree OctalDigit OctalDigit +; + +fragment ZeroToThree: [0-3]; + +fragment Digits: Digit+; + Digit: ('0'..'9'); -Hex: Digit | ('A'..'F'); +fragment NonZeroDigit: [1-9]; + +fragment Hex: Digit | [a-fA-F]; + +fragment HexNumeral: '0' [xX] Hex+; + +fragment OctalNumeral: '0' OctalDigit+; + +fragment OctalDigit: [0-7]; + +fragment BinaryNumeral: '0' [bB] BinaryDigit+; + +fragment BinaryDigit: [01]; fragment NEWLINE @@ -309,6 +381,10 @@ LINE_COMMENT : ('//' ~[\r\n]*) -> channel(HIDDEN) ; +UNBOUNDED + : '?' + ; + BAD_CHARACTER - : . - ; \ No newline at end of file + : . + ; \ No newline at end of file diff --git a/src/main/antlr/LibSLParser.g4 b/src/main/antlr/LibSLParser.g4 index ff4f76b..099e678 100644 --- a/src/main/antlr/LibSLParser.g4 +++ b/src/main/antlr/LibSLParser.g4 @@ -56,10 +56,9 @@ typealiasStatement * syntax: type full.name { field1: Type; field2: Type; ... } */ typeDefBlock - : annotationUsage* TYPE name=periodSeparatedFullName generic? targetType? typeDefBlockBody? + : annotationUsage* TYPE type=typeIdentifier targetType? whereConstraints? typeDefBlockBody? ; - targetType : (IS typeIdentifier)? for=identifier typeList ; @@ -140,7 +139,7 @@ annotationDeclParamsPart actionDecl : annotationUsage* - DEFINE ACTION actionName=identifier L_BRACKET actionDeclParamList? R_BRACKET (COLON actionType=typeIdentifier)? SEMICOLON + DEFINE ACTION generic? actionName=identifier L_BRACKET actionDeclParamList? R_BRACKET (COLON actionType=typeIdentifier)? whereConstraints? SEMICOLON ; actionDeclParamList @@ -158,7 +157,7 @@ actionParameter */ automatonDecl : annotationUsage* AUTOMATON CONCEPT? name=periodSeparatedFullName (L_BRACKET constructorVariables* R_BRACKET)? - COLON type=typeIdentifier implementedConcepts* automatonBody + COLON type=typeExpression implementedConcepts* automatonBody ; automatonBody @@ -231,20 +230,36 @@ variableDecl ; nameWithType - : name=identifier COLON type=typeIdentifier + : name=identifier COLON type=typeExpression ; /* * syntax: one.two.three */ + +typeExpression + : typeIdentifier + | typeExpression AMPERSAND typeExpression + | typeExpression BIT_OR typeExpression + ; + typeIdentifier - : (asterisk=ASTERISK)? name=periodSeparatedFullName generic? + : (asterisk=ASTERISK)? name=typeIdentifierName generic? ; generic - : (L_ARROW typeIdentifier (COMMA typeIdentifier)* R_ARROW) + : (L_ARROW typeArgument (COMMA typeArgument)* R_ARROW) ; +typeArgument + : typeIdentifier + | typeIdentifierBounded + ; + +typeIdentifierBounded + : genericBound typeIdentifier + ; + variableAssignment : qualifiedAccess op=ASSIGN_OP assignmentRight SEMICOLON | qualifiedAccess op=(PLUS_EQ | MINUS_EQ | ASTERISK_EQ | SLASH_EQ | PERCENT_EQ) assignmentRight SEMICOLON @@ -254,11 +269,10 @@ variableAssignment assignmentRight : expression - | callAutomatonConstructorWithNamedArgs ; callAutomatonConstructorWithNamedArgs - : NEW name=periodSeparatedFullName L_BRACKET (namedArgs)? R_BRACKET + : NEW name=periodSeparatedFullName generic? L_BRACKET (namedArgs)? R_BRACKET ; namedArgs @@ -297,8 +311,8 @@ procDecl ; procHeader - : annotationUsage* PROC headerWithAsterisk? functionName=identifier L_BRACKET functionDeclArgList? R_BRACKET - (COLON functionType=typeIdentifier)? + : annotationUsage* PROC headerWithAsterisk? functionName=identifier generic? L_BRACKET functionDeclArgList? R_BRACKET + (COLON functionType=typeExpression)? whereConstraints? ; /* * syntax: @Annotation @@ -310,8 +324,8 @@ functionDecl ; functionHeader - : annotationUsage* modifier=identifier? FUN (automatonName=periodSeparatedFullName DOT)? headerWithAsterisk? functionName=identifier - L_BRACKET functionDeclArgList? R_BRACKET (COLON functionType=typeIdentifier)? + : annotationUsage* modifier=identifier? FUN (automatonName=periodSeparatedFullName DOT)? headerWithAsterisk? functionName=identifier generic? + L_BRACKET functionDeclArgList? R_BRACKET (COLON functionType=typeExpression)? whereConstraints? ; functionDeclArgList @@ -319,7 +333,7 @@ functionDeclArgList ; parameter - : annotationUsage* name=identifier COLON type=typeIdentifier + : annotationUsage* name=identifier COLON type=typeExpression ; /* annotation @@ -364,11 +378,11 @@ elseStatement * syntax: action ActionName(args) */ actionUsage - : ACTION identifier L_BRACKET expressionsList? R_BRACKET + : ACTION identifier generic? L_BRACKET expressionsList? R_BRACKET ; procUsage - : qualifiedAccess L_BRACKET expressionsList? R_BRACKET + : qualifiedAccess generic? L_BRACKET expressionsList? R_BRACKET ; expressionsList @@ -503,7 +517,7 @@ qualifiedAccess ; simpleCall - : identifier L_BRACKET qualifiedAccess R_BRACKET + : identifier generic? L_BRACKET qualifiedAccess R_BRACKET ; identifierList @@ -518,17 +532,38 @@ periodSeparatedFullName : identifier | identifier (DOT identifier)* | BACK_QOUTE identifier (DOT identifier)* BACK_QOUTE + | UNBOUNDED ; integerNumber - : MINUS? Digit+ Identifier? - | Digit Identifier? + : (MINUS | PLUS)? IntegerLiteral ; floatNumber - : MINUS? Digit+ DOT Digit+ Identifier? + : (MINUS | PLUS)? FloatingPointLiteral + ; + +suffix + : identifier + ; + +typeConstraint + : paramName=identifier COLON paramConstraint=typeArgument + ; + +whereConstraints + : WHERE typeConstraint (COMMA typeConstraint)* + ; + +genericBound + : bound=(IN | OUT) + ; + +typeIdentifierName + : periodSeparatedFullName + | primitiveLiteral ; identifier : Identifier - ; + ; \ No newline at end of file diff --git a/src/main/java/com/github/kechinvv/libslpluginij/actions/ConfigurationAction.java b/src/main/java/com/github/kechinvv/libslpluginij/actions/ConfigurationAction.java index d90ea7f..ffea4eb 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/actions/ConfigurationAction.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/actions/ConfigurationAction.java @@ -7,8 +7,6 @@ import com.intellij.openapi.ui.DialogWrapper; import org.jetbrains.annotations.NotNull; -import static com.github.kechinvv.libslpluginij.actions.utils.ActionUtils.visibleForDir; -import static com.github.kechinvv.libslpluginij.actions.utils.ActionUtils.visibleForFile; public class ConfigurationAction extends AnAction { diff --git a/src/main/java/com/github/kechinvv/libslpluginij/dialogs/DynamicToolsPanel.java b/src/main/java/com/github/kechinvv/libslpluginij/dialogs/DynamicToolsPanel.java index 0fd5aab..1090683 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/dialogs/DynamicToolsPanel.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/dialogs/DynamicToolsPanel.java @@ -8,9 +8,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.ui.JBColor; import com.intellij.ui.components.JBScrollPane; -import com.intellij.util.ui.InlineIconButton; import com.intellij.util.ui.JBUI; -import kotlinx.html.B; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -147,9 +145,18 @@ private void addActionToPanel(LslToolAction action) { labelName.setBorder(JBUI.Borders.empty(4)); firstLine.add(labelName, BorderLayout.LINE_START); - var deleteActionButton = new InlineIconButton(LibSLIcon.DELETE, LibSLIcon.DELETE_HOVERED); + var deleteActionButton = new JButton(LibSLIcon.DELETE); + deleteActionButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseEntered(java.awt.event.MouseEvent evt) { + deleteActionButton.setIcon(LibSLIcon.DELETE_HOVERED); + } + + public void mouseExited(java.awt.event.MouseEvent evt) { + deleteActionButton.setIcon(LibSLIcon.DELETE); + } + }); deleteActionButton.setBorder(JBUI.Borders.empty(4)); - deleteActionButton.setActionListener(e -> { + deleteActionButton.addActionListener(e -> { var deleteApprove = new DeleteApprovePanel(project, labelName.getText()); deleteApprove.show(); if (deleteApprove.getExitCode() == OK_EXIT_CODE) { @@ -166,10 +173,10 @@ private void addActionToPanel(LslToolAction action) { labelCmd.setBorder(JBUI.Borders.empty(4)); secondLine.add(labelCmd); - var copyButton = new InlineIconButton(LibSLIcon.COPY); + var copyButton = new JButton(LibSLIcon.COPY); copyButton.setBorder(JBUI.Borders.empty(4)); copyButton.setToolTipText("Copy cmd value"); - copyButton.setActionListener(e -> { + copyButton.addActionListener(e -> { var stringSelection = new StringSelection(labelCmd.getText()); var clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); clpbrd.setContents(stringSelection, null); diff --git a/src/main/java/com/github/kechinvv/libslpluginij/dialogs/LibSLToolsComponent.java b/src/main/java/com/github/kechinvv/libslpluginij/dialogs/LibSLToolsComponent.java index 59e9510..2d1c379 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/dialogs/LibSLToolsComponent.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/dialogs/LibSLToolsComponent.java @@ -6,9 +6,9 @@ import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; -@Service +@Service(Service.Level.PROJECT) @State(name = "LibSLGenSettings") -public class LibSLToolsComponent implements PersistentStateComponent { +public final class LibSLToolsComponent implements PersistentStateComponent { private LibSLToolsStore mySettings = new LibSLToolsStore(); diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/LibSLFileType.java b/src/main/java/com/github/kechinvv/libslpluginij/language/LibSLFileType.java index c96cf60..403dcc9 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/language/LibSLFileType.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/LibSLFileType.java @@ -4,7 +4,9 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; + import static com.github.kechinvv.libslpluginij.LslNames.message; + public final class LibSLFileType extends LanguageFileType { public static final LibSLFileType INSTANCE = new LibSLFileType(); diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/highlight/LibSLColorSettingsPage.java b/src/main/java/com/github/kechinvv/libslpluginij/language/highlight/LibSLColorSettingsPage.java index f3f9af3..f8f250f 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/language/highlight/LibSLColorSettingsPage.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/highlight/LibSLColorSettingsPage.java @@ -11,11 +11,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.io.File; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.NoSuchFileException; -import java.nio.file.Paths; import java.util.Map; import static com.github.kechinvv.libslpluginij.LslNames.message; diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/interaction/LibSLBlock.java b/src/main/java/com/github/kechinvv/libslpluginij/language/interaction/LibSLBlock.java index c40f3c7..7e3f48a 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/language/interaction/LibSLBlock.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/interaction/LibSLBlock.java @@ -5,6 +5,7 @@ import com.github.kechinvv.libslpluginij.language.psi.rules.LslElseStatement; import com.github.kechinvv.libslpluginij.language.psi.rules.LslTargetType; import com.github.kechinvv.libslpluginij.language.psi.rules.LslTopLevelDecl; +import com.github.kechinvv.libslpluginij.language.psi.rules.LslWhereConstraint; import com.github.kechinvv.libslpluginij.language.psi.rules.interfaces.LslParametersOwner; import com.github.kechinvv.libslpluginij.language.psi.rules.interfaces.LslStatement; import com.github.kechinvv.libslpluginij.language.psi.rules.interfaces.LslStatementsOwner; @@ -87,7 +88,7 @@ public Indent getIndent() { //Tabulation for libsl version declaration, links e.t.c. if (LibSLTokenSets.INSTANCE.TAB_HEADER.contains(elementType) || - element instanceof LslTargetType) + element instanceof LslTargetType || element instanceof LslWhereConstraint) return Indent.getNormalIndent(); return Indent.getNoneIndent(); diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/interaction/LibSLCodeStyleSettingsProvider.java b/src/main/java/com/github/kechinvv/libslpluginij/language/interaction/LibSLCodeStyleSettingsProvider.java index 27ea22c..8cd74db 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/language/interaction/LibSLCodeStyleSettingsProvider.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/interaction/LibSLCodeStyleSettingsProvider.java @@ -9,7 +9,9 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsProvider; import com.intellij.psi.codeStyle.CustomCodeStyleSettings; import org.jetbrains.annotations.NotNull; + import static com.github.kechinvv.libslpluginij.LslNames.message; + final class LibSLCodeStyleSettingsProvider extends CodeStyleSettingsProvider { @Override diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/LibSLTokenSets.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/LibSLTokenSets.java index 55b7800..de2c6fd 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/LibSLTokenSets.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/LibSLTokenSets.java @@ -67,7 +67,10 @@ public class LibSLTokenSets { tokens.get(LibSLLexer.BY), tokens.get(LibSLLexer.IS), tokens.get(LibSLLexer.AS), - tokens.get(LibSLLexer.NULL) + tokens.get(LibSLLexer.NULL), + tokens.get(LibSLLexer.IN), + tokens.get(LibSLLexer.OUT), + tokens.get(LibSLLexer.WHERE) ); public TokenSet OPERATIONS = TokenSet.create( diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/PsiElementFactory.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/PsiElementFactory.java index c5b14e4..d19032e 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/PsiElementFactory.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/PsiElementFactory.java @@ -63,14 +63,21 @@ public PsiElement createElement(ASTNode node) { case LibSLParser.RULE_concept -> new LslConcept(node); case LibSLParser.RULE_automatonStateDecl -> new LslAutomatonStateDecl(node); case LibSLParser.RULE_automatonShiftDecl -> new LslAutomatonShiftDecl(node); - case LibSLParser.RULE_functionsList -> new LslFunctionsList(node); case LibSLParser.RULE_shiftByList -> new LslShiftByList(node); case LibSLParser.RULE_shiftFromList -> new LslShiftFromList(node); + case LibSLParser.RULE_functionsList -> new LslFunctionsList(node); case LibSLParser.RULE_functionsListPart -> new LslFunctionsListPart(node); case LibSLParser.RULE_variableDecl -> new LslVariableDecl(node); case LibSLParser.RULE_nameWithType -> new LslNameWithType(node); + + case LibSLParser.RULE_typeExpression -> new LslTypeExpression(node); + case LibSLParser.RULE_typeIdentifier -> new LslTypeIdentifier(node); case LibSLParser.RULE_generic -> new LslGeneric(node); + + case LibSLParser.RULE_typeArgument -> new LslTypeArgument(node); + case LibSLParser.RULE_typeIdentifierBounded -> new LslTypeIdentifierBounded(node); + case LibSLParser.RULE_variableAssignment -> new VariableAssignment(node); case LibSLParser.RULE_assignmentRight -> new LslAssignmentRight(node); case LibSLParser.RULE_callAutomatonConstructorWithNamedArgs -> @@ -119,6 +126,13 @@ public PsiElement createElement(ASTNode node) { case LibSLParser.RULE_periodSeparatedFullName -> new LslPeriodSeparatedFullName(node); case LibSLParser.RULE_integerNumber -> new LslIntegerNumber(node); case LibSLParser.RULE_floatNumber -> new LslFloatNumber(node); + + case LibSLParser.RULE_suffix -> new LslSuffix(node); + case LibSLParser.RULE_typeConstraint -> new LslTypeConstraint(node); + case LibSLParser.RULE_whereConstraints -> new LslWhereConstraint(node); + case LibSLParser.RULE_genericBound -> new LslGenericBound(node); + case LibSLParser.RULE_typeIdentifierName -> new LslTypeIdentifierName(node); + case LibSLParser.RULE_identifier -> new LslIdentifier(node); default -> new ASTWrapperPsiElement(node); }; diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslGenericBound.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslGenericBound.java new file mode 100644 index 0000000..2aee76a --- /dev/null +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslGenericBound.java @@ -0,0 +1,12 @@ +package com.github.kechinvv.libslpluginij.language.psi.rules; + +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + + +public class LslGenericBound extends ASTWrapperPsiElement { + public LslGenericBound(@NotNull ASTNode node) { + super(node); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeArgument.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeArgument.java new file mode 100644 index 0000000..66e37ec --- /dev/null +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeArgument.java @@ -0,0 +1,11 @@ +package com.github.kechinvv.libslpluginij.language.psi.rules; + +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + +public class LslTypeArgument extends ASTWrapperPsiElement { + public LslTypeArgument(@NotNull ASTNode node) { + super(node); + } +} diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeConstraint.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeConstraint.java new file mode 100644 index 0000000..328777d --- /dev/null +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeConstraint.java @@ -0,0 +1,12 @@ +package com.github.kechinvv.libslpluginij.language.psi.rules; + +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + + +public class LslTypeConstraint extends ASTWrapperPsiElement { + public LslTypeConstraint(@NotNull ASTNode node) { + super(node); + } +} diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeExpression.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeExpression.java new file mode 100644 index 0000000..24133e8 --- /dev/null +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeExpression.java @@ -0,0 +1,12 @@ +package com.github.kechinvv.libslpluginij.language.psi.rules; + +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + + +public class LslTypeExpression extends ASTWrapperPsiElement { + public LslTypeExpression(@NotNull ASTNode node) { + super(node); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeIdentifierBounded.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeIdentifierBounded.java new file mode 100644 index 0000000..8038d65 --- /dev/null +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeIdentifierBounded.java @@ -0,0 +1,12 @@ +package com.github.kechinvv.libslpluginij.language.psi.rules; + +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + + +public class LslTypeIdentifierBounded extends ASTWrapperPsiElement { + public LslTypeIdentifierBounded(@NotNull ASTNode node) { + super(node); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeIdentifierName.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeIdentifierName.java new file mode 100644 index 0000000..ad3da91 --- /dev/null +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslTypeIdentifierName.java @@ -0,0 +1,12 @@ +package com.github.kechinvv.libslpluginij.language.psi.rules; + +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + + +public class LslTypeIdentifierName extends ASTWrapperPsiElement { + public LslTypeIdentifierName(@NotNull ASTNode node) { + super(node); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslWhereConstraint.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslWhereConstraint.java new file mode 100644 index 0000000..7d907fa --- /dev/null +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/LslWhereConstraint.java @@ -0,0 +1,12 @@ +package com.github.kechinvv.libslpluginij.language.psi.rules; + +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + + +public class LslWhereConstraint extends ASTWrapperPsiElement { + public LslWhereConstraint(@NotNull ASTNode node) { + super(node); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/interfaces/LslCallable.java b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/interfaces/LslCallable.java index c025502..a45bf99 100644 --- a/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/interfaces/LslCallable.java +++ b/src/main/java/com/github/kechinvv/libslpluginij/language/psi/rules/interfaces/LslCallable.java @@ -1,7 +1,6 @@ package com.github.kechinvv.libslpluginij.language.psi.rules.interfaces; import com.github.kechinvv.libslpluginij.language.psi.rules.LslFunctionBody; -import com.github.kechinvv.libslpluginij.language.psi.rules.LslFunctionHeader; public interface LslCallable { diff --git a/src/main/kotlin/com/github/kechinvv/libslpluginij/project/LslPanel.kt b/src/main/kotlin/com/github/kechinvv/libslpluginij/project/LslPanel.kt index 03d97ec..cf8d8e1 100644 --- a/src/main/kotlin/com/github/kechinvv/libslpluginij/project/LslPanel.kt +++ b/src/main/kotlin/com/github/kechinvv/libslpluginij/project/LslPanel.kt @@ -11,6 +11,7 @@ import com.intellij.ide.util.projectWizard.ModuleWizardStep import com.intellij.ide.util.projectWizard.WizardContext import com.intellij.ide.wizard.withVisualPadding import com.intellij.openapi.Disposable +import com.intellij.openapi.fileChooser.FileChooserDescriptor import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory import com.intellij.openapi.observable.properties.GraphProperty import com.intellij.openapi.observable.properties.PropertyGraph @@ -164,13 +165,15 @@ class LslPanel(val context: LslContext) : ModuleWizardStep() { locationProperty: GraphProperty, wizardContext: WizardContext ): Cell { - val fileChooserDescriptor = - FileChooserDescriptorFactory.createSingleLocalFileDescriptor().withFileFilter { it.isDirectory } + //TODO: what happened with file choose descriptor? +// val fileChooserDescriptor = +// FileChooserDescriptorFactory.createSingleLocalFileDescriptor().withFileFilter { it.isDirectory } val fileChosen = { file: VirtualFile -> getPresentablePath(file.path) } val title = IdeBundle.message("title.select.project.file.directory", wizardContext.presentationName) val property = locationProperty.transform(::getPresentablePath, ::getCanonicalPath) - return this.textFieldWithBrowseButton(title, wizardContext.project, fileChooserDescriptor, fileChosen) + return this.textFieldWithBrowseButton(title, wizardContext.project, fileChosen) .bindText(property) + } private fun getLocationComment(): @Nls String { diff --git a/src/main/kotlin/com/github/kechinvv/libslpluginij/storage/ActionHolderConverter.kt b/src/main/kotlin/com/github/kechinvv/libslpluginij/storage/ActionHolderConverter.kt index f120f7e..9d6e928 100644 --- a/src/main/kotlin/com/github/kechinvv/libslpluginij/storage/ActionHolderConverter.kt +++ b/src/main/kotlin/com/github/kechinvv/libslpluginij/storage/ActionHolderConverter.kt @@ -1,9 +1,8 @@ package com.github.kechinvv.libslpluginij.storage import com.intellij.util.xmlb.Converter -import kotlinx.serialization.json.Json import kotlinx.serialization.encodeToString -import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json class ActionHolderConverter : Converter>() { override fun toString(actions: Map): String { diff --git a/src/main/kotlin/com/github/kechinvv/libslpluginij/toolWindow/LibSLToolOutputWindowFactory.kt b/src/main/kotlin/com/github/kechinvv/libslpluginij/toolWindow/LibSLToolOutputWindowFactory.kt index 9cbb59e..9a155f2 100644 --- a/src/main/kotlin/com/github/kechinvv/libslpluginij/toolWindow/LibSLToolOutputWindowFactory.kt +++ b/src/main/kotlin/com/github/kechinvv/libslpluginij/toolWindow/LibSLToolOutputWindowFactory.kt @@ -1,10 +1,8 @@ package com.github.kechinvv.libslpluginij.toolWindow -import com.github.kechinvv.libslpluginij.actions.utils.ActionUtils.isLibSLModule import com.intellij.execution.filters.TextConsoleBuilderFactory import com.intellij.execution.ui.ConsoleView import com.intellij.execution.ui.ConsoleViewContentType -import com.intellij.openapi.application.runReadAction import com.intellij.openapi.project.Project import com.intellij.openapi.wm.ToolWindow import com.intellij.openapi.wm.ToolWindowFactory diff --git a/src/main/kotlin/com/github/kechinvv/libslpluginij/toolWindow/ToolStartUp.kt b/src/main/kotlin/com/github/kechinvv/libslpluginij/toolWindow/ToolStartUp.kt index e7f921a..a5a4688 100644 --- a/src/main/kotlin/com/github/kechinvv/libslpluginij/toolWindow/ToolStartUp.kt +++ b/src/main/kotlin/com/github/kechinvv/libslpluginij/toolWindow/ToolStartUp.kt @@ -4,10 +4,8 @@ import com.github.kechinvv.libslpluginij.LslNames.message import com.github.kechinvv.libslpluginij.actions.utils.ActionUtils.createAction import com.github.kechinvv.libslpluginij.dialogs.LibSLToolsStore import com.intellij.openapi.project.Project -import com.intellij.openapi.startup.ProjectActivity import com.intellij.openapi.startup.StartupActivity import com.intellij.openapi.wm.ToolWindowManager -import javax.swing.SwingUtilities class ToolStartUp : StartupActivity { diff --git a/src/test/kotlin/com/github/kechinvv/libslpluginij/LibSLPSIFileRootTests.kt b/src/test/kotlin/com/github/kechinvv/libslpluginij/LibSLPSIFileRootTests.kt index fac7ac4..5d63aec 100644 --- a/src/test/kotlin/com/github/kechinvv/libslpluginij/LibSLPSIFileRootTests.kt +++ b/src/test/kotlin/com/github/kechinvv/libslpluginij/LibSLPSIFileRootTests.kt @@ -1,31 +1,30 @@ -package com.github.kechinvv.libslpluginij - -import com.github.kechinvv.libslpluginij.language.LibSL -import com.github.kechinvv.libslpluginij.language.psi.PsiElementFactory -import com.intellij.psi.impl.source.tree.LeafPsiElement -import com.intellij.psi.tree.IElementType -import com.intellij.testFramework.fixtures.BasePlatformTestCase -import org.junit.jupiter.api.Test - -class LibSLPSIFileRootTests : BasePlatformTestCase() { - - init { - setUp() - } - - @Test - fun testRootT() { - myFixture.configureByFiles("CRC32.automaton.lsl") - println(myFixture.file.language) - } - - @Test - fun testCreate() { - PsiElementFactory.INSTANCE.createElement(LeafPsiElement(IElementType("s", LibSL.INSTANCE),"sdfdsf")) - } - - override fun getTestDataPath(): String { - return "src/test/testData" - } - -} \ No newline at end of file +//package com.github.kechinvv.libslpluginij +// +//import com.github.kechinvv.libslpluginij.language.LibSL +//import com.github.kechinvv.libslpluginij.language.psi.PsiElementFactory +//import com.intellij.psi.impl.source.tree.LeafPsiElement +//import com.intellij.psi.tree.IElementType +//import com.intellij.testFramework.fixtures.BasePlatformTestCase +// +//class LibSLPSIFileRootTests : BasePlatformTestCase() { +// +// init { +// setUp() +// } +// +// @Test +// fun testRootT() { +// myFixture.configureByFiles("CRC32.automaton.lsl") +// println(myFixture.file.language) +// } +// +// @Test +// fun testCreate() { +// PsiElementFactory.INSTANCE.createElement(LeafPsiElement(IElementType("s", LibSL.INSTANCE), "sdfdsf")) +// } +// +// override fun getTestDataPath(): String { +// return "src/test/testData" +// } +// +//} \ No newline at end of file