From 62490117fe537cb87c01bba4c65c87efab73f224 Mon Sep 17 00:00:00 2001 From: "Tobias Burdow [Kaleidox]" Date: Fri, 6 May 2022 12:41:34 +0200 Subject: [PATCH 1/4] remove intellij and vscode plugins --- kscr-intellij/.gitignore | 4 - kscr-intellij/build.gradle.kts | 37 -- .../gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - kscr-intellij/gradlew | 185 ---------- kscr-intellij/gradlew.bat | 89 ----- kscr-intellij/settings.gradle.kts | 1 - .../kscr/intellij/KScrBinaryFileType.java | 33 -- .../comroid/kscr/intellij/KScrFileType.java | 6 - .../org/comroid/kscr/intellij/KScrIcons.java | 13 - .../comroid/kscr/intellij/KScrLanguage.java | 12 - .../kscr/intellij/KScrSourceFileType.java | 33 -- .../comroid/kscr/intellij/KScrTemplates.java | 29 -- .../actions/CreateKScrClassAction.java | 90 ----- .../intellij/compiler/KScrCompileTask.java | 11 - .../completion/KScrKeywordContributor.java | 10 - .../intellij/facet/KScrFrameworkSupport.java | 25 -- .../InvalidSupertypeInspection.java | 69 ---- .../inspections/InvalidTypeRefInspection.java | 27 -- .../intellij/inspections/KScrInspection.java | 28 -- .../ThisInStaticMethodInspection.java | 26 -- .../WrongFileNameForTypeNameInspection.java | 37 -- .../inspections/fixes/AddImportFix.java | 45 --- .../fixes/ChangeSupertypeKindFix.java | 70 ---- .../fixes/RenameFileToTypeFix.java | 34 -- .../fixes/RenameTypeToFileFix.java | 34 -- .../intellij/parser/KScrParserDefinition.java | 175 --------- .../parser/KScrSyntaxHighlighter.java | 61 ---- .../kscr/intellij/parser/LexerAdapter.java | 24 -- .../kscr/intellij/parser/ParserAdapter.java | 28 -- .../kscr/intellij/psi/KScrAstElement.java | 41 --- .../kscr/intellij/psi/KScrElement.java | 15 - .../comroid/kscr/intellij/psi/KScrFile.java | 59 --- .../kscr/intellij/psi/KScrFileWrapper.java | 32 -- .../kscr/intellij/psi/KScrStubElement.java | 33 -- .../org/comroid/kscr/intellij/psi/Tokens.java | 197 ---------- .../kscr/intellij/psi/ast/KScrAnnotation.java | 19 - .../intellij/psi/ast/KScrArgumentsList.java | 12 - .../kscr/intellij/psi/ast/KScrBinaryOp.java | 12 - .../intellij/psi/ast/KScrConstructor.java | 46 --- .../intellij/psi/ast/KScrFileWrapper.java | 31 -- .../comroid/kscr/intellij/psi/ast/KScrId.java | 12 - .../kscr/intellij/psi/ast/KScrIdPart.java | 12 - .../kscr/intellij/psi/ast/KScrImportList.java | 12 - .../intellij/psi/ast/KScrImportStatement.java | 78 ---- .../kscr/intellij/psi/ast/KScrMethod.java | 145 -------- .../kscr/intellij/psi/ast/KScrModifier.java | 12 - .../intellij/psi/ast/KScrModifierList.java | 37 -- .../psi/ast/KScrPackageStatement.java | 28 -- .../intellij/psi/ast/KScrParametersList.java | 18 - .../kscr/intellij/psi/ast/KScrRawTypeRef.java | 51 --- .../kscr/intellij/psi/ast/KScrTypeRef.java | 34 -- .../psi/ast/KScrTypeRefOrInferred.java | 19 - .../psi/ast/KScrVariableAssignment.java | 12 - .../intellij/psi/ast/common/KScrBlock.java | 40 -- .../intellij/psi/ast/common/KScrCall.java | 196 ---------- .../psi/ast/common/KScrInitialisation.java | 13 - .../psi/ast/common/KScrParameter.java | 106 ------ .../psi/ast/common/KScrVariableDef.java | 127 ------- .../intellij/psi/ast/common/package-info.java | 6 - .../psi/ast/expressions/KScrAffixOpExpr.java | 35 -- .../ast/expressions/KScrArrayIndexExpr.java | 33 -- .../psi/ast/expressions/KScrAssignExpr.java | 24 -- .../psi/ast/expressions/KScrBinaryExpr.java | 88 ----- .../psi/ast/expressions/KScrCallExpr.java | 36 -- .../psi/ast/expressions/KScrCastExpr.java | 25 -- .../ast/expressions/KScrClassLiteralExpr.java | 26 -- .../psi/ast/expressions/KScrExpression.java | 57 --- .../psi/ast/expressions/KScrIdExpr.java | 232 ------------ .../expressions/KScrInitialisationExpr.java | 25 -- .../ast/expressions/KScrInstanceOfExpr.java | 18 - .../psi/ast/expressions/KScrLiteralExpr.java | 28 -- .../psi/ast/expressions/KScrNewArrayExpr.java | 26 -- .../ast/expressions/KScrNewListArrayExpr.java | 26 -- .../expressions/KScrParenthesisedExpr.java | 19 - .../expressions/KScrStringLiteralExpr.java | 19 - .../psi/ast/expressions/KScrThisExpr.java | 22 -- .../ast/statements/KScrAssertStatement.java | 20 - .../ast/statements/KScrBreakStatement.java | 12 - .../psi/ast/statements/KScrCatchBlock.java | 66 ---- .../KScrConstructorCallStatement.java | 12 - .../ast/statements/KScrContinueStatement.java | 12 - .../ast/statements/KScrDoWhileStatement.java | 24 -- .../psi/ast/statements/KScrElseClause.java | 21 -- .../psi/ast/statements/KScrFinallyBlock.java | 21 -- .../psi/ast/statements/KScrForStatement.java | 47 --- .../ast/statements/KScrForeachStatement.java | 88 ----- .../psi/ast/statements/KScrIfStatement.java | 28 -- .../ast/statements/KScrReturnStatement.java | 27 -- .../psi/ast/statements/KScrStatement.java | 8 - .../ast/statements/KScrStatementWrapper.java | 19 - .../ast/statements/KScrSwitchStatement.java | 12 - .../ast/statements/KScrThrowStatement.java | 20 - .../ast/statements/KScrTryCatchStatement.java | 45 --- .../statements/KScrVarAssignStatement.java | 12 - .../statements/KScrVarIncrementStatement.java | 12 - .../ast/statements/KScrWhileStatement.java | 24 -- .../ast/statements/KScrYieldStatement.java | 20 - .../intellij/psi/ast/types/KScrClassList.java | 57 --- .../psi/ast/types/KScrExtendsClause.java | 17 - .../psi/ast/types/KScrImplementsClause.java | 17 - .../psi/ast/types/KScrMemberWrapper.java | 18 - .../psi/ast/types/KScrPermitsClause.java | 17 - .../psi/ast/types/KScrRecordComponents.java | 26 -- .../kscr/intellij/psi/ast/types/KScrType.java | 235 ------------ .../psi/expressions/KScrAffixOpExpr.java | 35 -- .../psi/expressions/KScrArrayIndexExpr.java | 33 -- .../psi/expressions/KScrAssignExpr.java | 24 -- .../psi/expressions/KScrBinaryExpr.java | 31 -- .../psi/expressions/KScrCallExpr.java | 35 -- .../psi/expressions/KScrCastExpr.java | 24 -- .../psi/expressions/KScrClassLiteralExpr.java | 26 -- .../intellij/psi/expressions/KScrIdExpr.java | 178 --------- .../expressions/KScrInitialisationExpr.java | 24 -- .../psi/expressions/KScrInstanceOfExpr.java | 18 - .../psi/expressions/KScrLiteralExpr.java | 28 -- .../psi/expressions/KScrNewArrayExpr.java | 25 -- .../psi/expressions/KScrNewListArrayExpr.java | 25 -- .../expressions/KScrParenthesisedExpr.java | 19 - .../expressions/KScrStringLiteralExpr.java | 19 - .../psi/expressions/KScrThisExpr.java | 21 -- .../kscr/intellij/psi/stubs/KScrFileStub.java | 18 - .../psi/stubs/StubAsKScrVariable.java | 16 - .../intellij/psi/stubs/StubKScrClassList.java | 12 - .../intellij/psi/stubs/StubKScrField.java | 28 -- .../psi/stubs/StubKScrMemberWrapper.java | 9 - .../intellij/psi/stubs/StubKScrMethod.java | 31 -- .../psi/stubs/StubKScrModifierList.java | 13 - .../intellij/psi/stubs/StubKScrParameter.java | 36 -- .../psi/stubs/StubKScrRecordComponents.java | 19 - .../kscr/intellij/psi/stubs/StubKScrType.java | 37 -- .../kscr/intellij/psi/stubs/StubTypes.java | 341 ------------------ .../psi/stubs/StubWithKScrModifiers.java | 13 - .../psi/stubs/impl/StubImplKScrClassList.java | 26 -- .../psi/stubs/impl/StubImplKScrField.java | 29 -- .../stubs/impl/StubImplKScrMemberWrapper.java | 15 - .../psi/stubs/impl/StubImplKScrMethod.java | 35 -- .../stubs/impl/StubImplKScrModifierList.java | 26 -- .../psi/stubs/impl/StubImplKScrParameter.java | 39 -- .../impl/StubImplKScrRecordComponents.java | 15 - .../psi/stubs/impl/StubImplKScrType.java | 46 --- .../intellij/psi/types/ArrayTypeImpl.java | 34 -- .../intellij/psi/types/ClassTypeImpl.java | 68 ---- .../kscr/intellij/psi/types/JvmKScrClass.java | 84 ----- .../kscr/intellij/psi/types/JvmKScrField.java | 56 --- .../intellij/psi/types/JvmKScrMethod.java | 76 ---- .../intellij/psi/types/JvmKScrParameter.java | 52 --- .../kscr/intellij/psi/types/KScrKind.java | 22 -- .../kscr/intellij/psi/utils/KScrIdHolder.java | 30 -- .../psi/utils/KScrModifiersHolder.java | 16 - .../intellij/psi/utils/KScrTypeReference.java | 197 ---------- .../kscr/intellij/psi/utils/KScrVarScope.java | 16 - .../kscr/intellij/psi/utils/KScrVariable.java | 21 -- .../kscr/intellij/psi/utils/MethodUtils.java | 36 -- .../intellij/psi/utils/ProjectTypeFinder.java | 129 ------- .../kscr/intellij/psi/utils/PsiUtils.java | 139 ------- .../kscr/intellij/sdk/KScrSdkType.java | 51 --- .../sdk/config/KScrLanguageConfiguration.java | 29 -- .../sdk/module/KScrModuleBuilder.java | 170 --------- .../intellij/sdk/module/KScrModuleType.java | 37 -- .../sdk/module/wizard/KScrWizardStep.java | 18 - .../wizard/panel/KScrInstallSdkComboBox.java | 4 - .../wizard/panel/KScrInstallSdkPanel.java | 107 ------ .../kscr/intellij/util/RequestUtil.java | 14 - .../src/main/resources/META-INF/plugin.xml | 138 ------- .../fileTemplates/KScr Annotation.kscr.ft | 5 - .../fileTemplates/KScr Class.kscr.ft | 5 - .../resources/fileTemplates/KScr Enum.kscr.ft | 5 - .../fileTemplates/KScr Interface.kscr.ft | 5 - .../InvalidTypeName.html | 8 - .../WrongFileNameForTypeName.html | 8 - .../src/main/resources/pluginIcon.svg | 32 -- kscr-vscode/language-configuration.json | 39 -- 173 files changed, 7392 deletions(-) delete mode 100644 kscr-intellij/.gitignore delete mode 100644 kscr-intellij/build.gradle.kts delete mode 100644 kscr-intellij/gradle/wrapper/gradle-wrapper.jar delete mode 100644 kscr-intellij/gradle/wrapper/gradle-wrapper.properties delete mode 100644 kscr-intellij/gradlew delete mode 100644 kscr-intellij/gradlew.bat delete mode 100644 kscr-intellij/settings.gradle.kts delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrBinaryFileType.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrFileType.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrIcons.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrLanguage.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrSourceFileType.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrTemplates.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/actions/CreateKScrClassAction.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/compiler/KScrCompileTask.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/completion/KScrKeywordContributor.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/facet/KScrFrameworkSupport.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/InvalidSupertypeInspection.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/InvalidTypeRefInspection.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/KScrInspection.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/ThisInStaticMethodInspection.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/WrongFileNameForTypeNameInspection.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/AddImportFix.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/ChangeSupertypeKindFix.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/RenameFileToTypeFix.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/RenameTypeToFileFix.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/KScrParserDefinition.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/KScrSyntaxHighlighter.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/LexerAdapter.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/ParserAdapter.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrAstElement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrElement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrFile.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrFileWrapper.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrStubElement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/Tokens.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrAnnotation.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrArgumentsList.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrBinaryOp.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrConstructor.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrFileWrapper.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrId.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrIdPart.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrImportList.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrImportStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrMethod.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrModifier.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrModifierList.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrPackageStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrParametersList.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrRawTypeRef.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrTypeRef.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrTypeRefOrInferred.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrVariableAssignment.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrBlock.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrCall.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrInitialisation.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrParameter.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrVariableDef.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/package-info.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrAffixOpExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrArrayIndexExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrAssignExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrBinaryExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrCallExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrCastExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrClassLiteralExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrExpression.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrIdExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrInitialisationExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrInstanceOfExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrLiteralExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrNewArrayExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrNewListArrayExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrParenthesisedExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrStringLiteralExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrThisExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrAssertStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrBreakStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrCatchBlock.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrConstructorCallStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrContinueStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrDoWhileStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrElseClause.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrFinallyBlock.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrForStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrForeachStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrIfStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrReturnStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrStatementWrapper.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrSwitchStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrThrowStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrTryCatchStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrVarAssignStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrVarIncrementStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrWhileStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrYieldStatement.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrClassList.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrExtendsClause.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrImplementsClause.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrMemberWrapper.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrPermitsClause.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrRecordComponents.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrType.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrAffixOpExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrArrayIndexExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrAssignExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrBinaryExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrCallExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrCastExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrClassLiteralExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrIdExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrInitialisationExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrInstanceOfExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrLiteralExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrNewArrayExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrNewListArrayExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrParenthesisedExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrStringLiteralExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrThisExpr.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/KScrFileStub.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubAsKScrVariable.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrClassList.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrField.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrMemberWrapper.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrMethod.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrModifierList.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrParameter.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrRecordComponents.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrType.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubTypes.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubWithKScrModifiers.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrClassList.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrField.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrMemberWrapper.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrMethod.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrModifierList.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrParameter.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrRecordComponents.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrType.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/ArrayTypeImpl.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/ClassTypeImpl.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrClass.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrField.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrMethod.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrParameter.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/KScrKind.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrIdHolder.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrModifiersHolder.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrTypeReference.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrVarScope.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrVariable.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/MethodUtils.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/ProjectTypeFinder.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/PsiUtils.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/KScrSdkType.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/config/KScrLanguageConfiguration.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/KScrModuleBuilder.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/KScrModuleType.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/KScrWizardStep.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/panel/KScrInstallSdkComboBox.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/panel/KScrInstallSdkPanel.java delete mode 100644 kscr-intellij/src/main/java/org/comroid/kscr/intellij/util/RequestUtil.java delete mode 100644 kscr-intellij/src/main/resources/META-INF/plugin.xml delete mode 100644 kscr-intellij/src/main/resources/fileTemplates/KScr Annotation.kscr.ft delete mode 100644 kscr-intellij/src/main/resources/fileTemplates/KScr Class.kscr.ft delete mode 100644 kscr-intellij/src/main/resources/fileTemplates/KScr Enum.kscr.ft delete mode 100644 kscr-intellij/src/main/resources/fileTemplates/KScr Interface.kscr.ft delete mode 100644 kscr-intellij/src/main/resources/inspectionDescriptions/InvalidTypeName.html delete mode 100644 kscr-intellij/src/main/resources/inspectionDescriptions/WrongFileNameForTypeName.html delete mode 100644 kscr-intellij/src/main/resources/pluginIcon.svg delete mode 100644 kscr-vscode/language-configuration.json diff --git a/kscr-intellij/.gitignore b/kscr-intellij/.gitignore deleted file mode 100644 index e63bc20..0000000 --- a/kscr-intellij/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/.gradle/ -/.idea/ -/build/ -/src/main/java/org/comroid/kscr/intellij/antlr_generated/ diff --git a/kscr-intellij/build.gradle.kts b/kscr-intellij/build.gradle.kts deleted file mode 100644 index 2eba194..0000000 --- a/kscr-intellij/build.gradle.kts +++ /dev/null @@ -1,37 +0,0 @@ -plugins { - id("org.jetbrains.intellij") version "1.3.0" - id("antlr") // TODO: Use the plugin to build the parser automatically - requires splitting parser and lexer - java -} - -group = "org.comroid.kscr" -version = "0.0.1" - -repositories { - mavenCentral() -} - -dependencies { - implementation("org.antlr:antlr4-runtime:4.9.3") - implementation("org.antlr:antlr4-intellij-adaptor:0.1") - //implementation("org.antlr:antlr4-master:4.9.3") - - testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.0") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") -} - -// See https://github.com/JetBrains/gradle-intellij-plugin/ -intellij { - version.set("2021.3") - plugins.add("com.intellij.java") - plugins.add("yaml") -} -tasks { - patchPluginXml { - changeNotes.set(""" - First version. """.trimIndent()) - } -} -tasks.getByName("test") { - useJUnitPlatform() -} \ No newline at end of file diff --git a/kscr-intellij/gradle/wrapper/gradle-wrapper.jar b/kscr-intellij/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59536 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 QuEJmfE|#`Dqx|px0L@K;Y5)KL diff --git a/kscr-intellij/gradle/wrapper/gradle-wrapper.properties b/kscr-intellij/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 69a9715..0000000 --- a/kscr-intellij/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/kscr-intellij/gradlew b/kscr-intellij/gradlew deleted file mode 100644 index 744e882..0000000 --- a/kscr-intellij/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MSYS* | MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/kscr-intellij/gradlew.bat b/kscr-intellij/gradlew.bat deleted file mode 100644 index 107acd3..0000000 --- a/kscr-intellij/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/kscr-intellij/settings.gradle.kts b/kscr-intellij/settings.gradle.kts deleted file mode 100644 index 1c542d3..0000000 --- a/kscr-intellij/settings.gradle.kts +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = "KScrIntellijPlugin" \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrBinaryFileType.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrBinaryFileType.java deleted file mode 100644 index 8c81044..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrBinaryFileType.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.comroid.kscr.intellij; - -import com.intellij.openapi.fileTypes.LanguageFileType; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; - -public class KScrBinaryFileType extends LanguageFileType implements KScrFileType { - - public static final KScrBinaryFileType FILE_TYPE = new KScrBinaryFileType(); - - protected KScrBinaryFileType(){ - super(KScrLanguage.LANGUAGE); - } - - public @NonNls @NotNull String getName(){ - return "KScr File"; - } - - public @NotNull String getDescription(){ - return "KScr file"; - } - - public @NotNull String getDefaultExtension(){ - return "kscr"; - } - - public @Nullable Icon getIcon(){ - return KScrIcons.SINGLE; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrFileType.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrFileType.java deleted file mode 100644 index 31a38d5..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrFileType.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.comroid.kscr.intellij; - -import com.intellij.openapi.fileTypes.FileType; - -public interface KScrFileType extends FileType { -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrIcons.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrIcons.java deleted file mode 100644 index fd542ce..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrIcons.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.comroid.kscr.intellij; - -import com.intellij.openapi.util.IconLoader; - -import javax.swing.*; - -public class KScrIcons{ - - // TODO: get a proper icon/branding - - public static final Icon SINGLE = IconLoader.getIcon("pluginIcon.svg", KScrIcons.class); - public static final Icon KScr_ICON = SINGLE; -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrLanguage.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrLanguage.java deleted file mode 100644 index e1cab7f..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrLanguage.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij; - -import com.intellij.lang.Language; - -public class KScrLanguage extends Language{ - - public static final KScrLanguage LANGUAGE = new KScrLanguage(); - - protected KScrLanguage(){ - super("KScr"); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrSourceFileType.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrSourceFileType.java deleted file mode 100644 index 3c8a3c2..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrSourceFileType.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.comroid.kscr.intellij; - -import com.intellij.openapi.fileTypes.LanguageFileType; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; - -public class KScrSourceFileType extends LanguageFileType implements KScrFileType { - - public static final KScrSourceFileType FILE_TYPE = new KScrSourceFileType(); - - protected KScrSourceFileType(){ - super(KScrLanguage.LANGUAGE); - } - - public @NonNls @NotNull String getName(){ - return "KScr File"; - } - - public @NotNull String getDescription(){ - return "KScr file"; - } - - public @NotNull String getDefaultExtension(){ - return "kscr"; - } - - public @Nullable Icon getIcon(){ - return KScrIcons.SINGLE; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrTemplates.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrTemplates.java deleted file mode 100644 index 0be69b8..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/KScrTemplates.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.comroid.kscr.intellij; - -import com.intellij.ide.fileTemplates.DefaultCreateFromTemplateHandler; -import com.intellij.ide.fileTemplates.FileTemplate; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDirectory; -import com.intellij.psi.PsiElement; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; - -import java.util.Map; - -public class KScrTemplates extends DefaultCreateFromTemplateHandler{ - - @Override - public boolean handlesTemplate(@NotNull FileTemplate template){ - return template.isTemplateOfType(KScrSourceFileType.FILE_TYPE); - } - - public @NotNull PsiElement createFromTemplate(@NotNull Project project, @NotNull PsiDirectory directory, String fileName, @NotNull FileTemplate template, @NotNull String templateText, @NotNull Map props) throws IncorrectOperationException{ - fileName += ".kscr"; - return super.createFromTemplate(project, directory, fileName, template, templateText, props); - } - - public boolean canCreate(PsiDirectory @NotNull [] dirs){ - // don't show internal templates in the right click menu outside the KScr Class menu - return false; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/actions/CreateKScrClassAction.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/actions/CreateKScrClassAction.java deleted file mode 100644 index e1ea938..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/actions/CreateKScrClassAction.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.comroid.kscr.intellij.actions; - -import com.intellij.ide.actions.CreateFileFromTemplateDialog; -import com.intellij.ide.actions.CreateTemplateInPackageAction; -import com.intellij.ide.fileTemplates.FileTemplate; -import com.intellij.ide.fileTemplates.FileTemplateManager; -import com.intellij.ide.fileTemplates.FileTemplateUtil; -import com.intellij.java.JavaBundle; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.NlsContexts; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.*; -import com.intellij.ui.LayeredIcon; -import com.intellij.util.IncorrectOperationException; -import com.intellij.util.PlatformIcons; -import org.comroid.kscr.intellij.KScrIcons; -import org.comroid.kscr.intellij.psi.KScrFile; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; - -import java.util.Properties; - -public class CreateKScrClassAction extends CreateTemplateInPackageAction { - - protected CreateKScrClassAction(){ - super("", "Create new KScr class", new LayeredIcon(PlatformIcons.CLASS_ICON, KScrIcons.KScr_ICON), JavaModuleSourceRootTypes.SOURCES); - } - - protected @Nullable PsiElement getNavigationElement(@NotNull KScrType createdElement){ - return createdElement; - } - - protected @Nullable KScrType doCreate(PsiDirectory dir, String className, String templateName) throws IncorrectOperationException{ - Project project = dir.getProject(); - FileTemplate template = FileTemplateManager.getInstance(project).getInternalTemplate(templateName); - - Properties defaultProperties = FileTemplateManager.getInstance(project).getDefaultProperties(); - Properties properties = new Properties(defaultProperties); - properties.setProperty(FileTemplate.ATTRIBUTE_NAME, className); - /*for(Map.Entry entry : additionalProperties.entrySet()) - properties.setProperty(entry.getKey(), entry.getValue());*/ - - String fileName = className + ".kScr"; - - PsiElement element; - try{ - element = FileTemplateUtil.createFromTemplate(template, fileName, properties, dir); - }catch(Exception e){ - throw new IncorrectOperationException(e); - } - KScrFile file = (KScrFile)element.getContainingFile(); - return file.getTypeDef().orElseThrow(IncorrectOperationException::new); - } - - protected boolean checkPackageExists(PsiDirectory directory){ - PsiPackage pkg = JavaDirectoryService.getInstance().getPackage(directory); - if(pkg == null) - return false; - - String name = pkg.getQualifiedName(); - return StringUtil.isEmpty(name) || PsiNameHelper.getInstance(directory.getProject()).isQualifiedName(name); - } - - protected void buildDialog(@NotNull Project project, @NotNull PsiDirectory directory, CreateFileFromTemplateDialog.@NotNull Builder builder){ - builder - .setTitle("New KScr Class") - .addKind("Class", PlatformIcons.CLASS_ICON, "KScr Class") - .addKind("Interface", PlatformIcons.INTERFACE_ICON, "KScr Interface") - .addKind("Record", PlatformIcons.RECORD_ICON, "KScr Record") - .addKind("Enum", PlatformIcons.ENUM_ICON, "KScr Enum") - .addKind("Annotation", PlatformIcons.ANNOTATION_TYPE_ICON, "KScr Annotation"); - } - - @SuppressWarnings("UnstableApiUsage") - protected @NlsContexts.Command String getActionName(PsiDirectory directory, @NonNls @NotNull String newName, @NonNls String templateName){ - PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(directory); - return JavaBundle.message("progress.creating.class", StringUtil.getQualifiedName(psiPackage == null ? "" : psiPackage.getQualifiedName(), newName)); - } - - public boolean startInWriteAction(){ - return false; - } - - protected String removeExtension(String templateName, String className){ - return StringUtil.trimEnd(className, ".kscr"); - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/compiler/KScrCompileTask.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/compiler/KScrCompileTask.java deleted file mode 100644 index 7271505..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/compiler/KScrCompileTask.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.comroid.kscr.intellij.compiler; - -import com.intellij.openapi.compiler.CompileContext; -import com.intellij.openapi.compiler.CompileTask; - -public class KScrCompileTask implements CompileTask { - @Override - public boolean execute(CompileContext context) { - return false;//Todo - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/completion/KScrKeywordContributor.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/completion/KScrKeywordContributor.java deleted file mode 100644 index 7616bd8..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/completion/KScrKeywordContributor.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.comroid.kscr.intellij.completion; - -import com.intellij.codeInsight.completion.CompletionContributor; -import com.intellij.codeInsight.completion.CompletionType; -import com.intellij.patterns.PlatformPatterns; - -public class KScrKeywordContributor extends CompletionContributor { - public KScrKeywordContributor() { - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/facet/KScrFrameworkSupport.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/facet/KScrFrameworkSupport.java deleted file mode 100644 index b2539c7..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/facet/KScrFrameworkSupport.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.comroid.kscr.intellij.facet; - -import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable; -import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel; -import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider; -import com.intellij.openapi.module.ModuleType; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -public class KScrFrameworkSupport extends FrameworkSupportProvider { - protected KScrFrameworkSupport() { - super("kscr-framework", "KScr Framework Support"); - } - - @Override - public @NotNull FrameworkSupportConfigurable createConfigurable(@NotNull FrameworkSupportModel model) { - return null;//Todo - } - - @Override - public boolean isEnabledForModuleType(@NotNull ModuleType moduleType) { - return false; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/InvalidSupertypeInspection.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/InvalidSupertypeInspection.java deleted file mode 100644 index 53a8159..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/InvalidSupertypeInspection.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.comroid.kscr.intellij.inspections; - -import com.intellij.codeInspection.InspectionManager; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.codeInspection.ProblemHighlightType; -import com.intellij.lang.jvm.JvmClassKind; -import com.intellij.lang.jvm.JvmModifier; -import com.intellij.lang.jvm.types.JvmReferenceType; -import org.comroid.kscr.intellij.inspections.fixes.ChangeSupertypeKindFix; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.types.KScrKind; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -public class InvalidSupertypeInspection extends KScrInspection{ - - public ProblemDescriptor @NotNull [] checkTypeDef(@NotNull KScrType type, @NotNull InspectionManager manager, boolean isOnTheFly){ - var problems = new ArrayList(); - var extendsElems = PsiUtils - .childOfType(type, KScrExtendsClause.class) - .map(x -> PsiUtils.childrenOfType(x, KScrTypeRef.class)) - .orElse(List.of()); - for(KScrTypeRef elem : extendsElems){ - if(elem.getTextLength() == 0) - continue; - var extType = elem.asType(); - if(extType != null) - if(!(extType instanceof JvmReferenceType)) - problems.add(manager.createProblemDescriptor(elem, "Expecting a class, not primitive or array", isOnTheFly, new LocalQuickFix[0], ProblemHighlightType.GENERIC_ERROR)); - else{ - var extClass = elem.asClass(); - // TODO: check @AnnotationCanImplement - if(type.kind() == KScrKind.INTERFACE && !(extClass.getClassKind() == JvmClassKind.INTERFACE || extClass.getClassKind() == JvmClassKind.ANNOTATION)) - problems.add(manager.createProblemDescriptor(elem, "Expected an interface, not a class", isOnTheFly, new LocalQuickFix[0], ProblemHighlightType.GENERIC_ERROR)); - else if(type.kind() != KScrKind.INTERFACE && (extClass.getClassKind() == JvmClassKind.INTERFACE || extClass.getClassKind() == JvmClassKind.ANNOTATION)) - problems.add(manager.createProblemDescriptor(elem, "Expected a class, not an interface", isOnTheFly, new LocalQuickFix[]{ new ChangeSupertypeKindFix(elem, false) }, ProblemHighlightType.GENERIC_ERROR)); - // TODO: check sealed types - if(extClass.hasModifier(JvmModifier.FINAL)) - problems.add(manager.createProblemDescriptor(elem, "Cannot extend final type", isOnTheFly, new LocalQuickFix[0], ProblemHighlightType.GENERIC_ERROR)); - } - } - var implementsElems = PsiUtils - .childOfType(type, KScrImplementsClause.class) - .map(x -> PsiUtils.childrenOfType(x, KScrTypeRef.class)) - .orElse(List.of()); - for(KScrTypeRef elem : implementsElems){ - var extType = elem.asType(); - if(elem.getTextLength() == 0) - continue; - if(extType != null) - if(!(extType instanceof JvmReferenceType)) - problems.add(manager.createProblemDescriptor(elem, "Expecting a class, not primitive or array", isOnTheFly, new LocalQuickFix[0], ProblemHighlightType.GENERIC_ERROR)); - else{ - var implClass = elem.asClass(); - if(type.kind() == KScrKind.INTERFACE) - problems.add(manager.createProblemDescriptor(elem, "Interfaces cannot implement types", isOnTheFly, new LocalQuickFix[0], ProblemHighlightType.GENERIC_ERROR)); - else if(implClass.getClassKind() != JvmClassKind.INTERFACE) - problems.add(manager.createProblemDescriptor(elem, "Expected an interface", isOnTheFly, new LocalQuickFix[]{ new ChangeSupertypeKindFix(elem, true) }, ProblemHighlightType.GENERIC_ERROR)); - if(implClass.hasModifier(JvmModifier.FINAL)) // is this even valid Java or KScr? I guess sealed interfaces are basically this... - problems.add(manager.createProblemDescriptor(elem, "Cannot implement final type", isOnTheFly, new LocalQuickFix[0], ProblemHighlightType.GENERIC_ERROR)); - } - } - return problems.toArray(ProblemDescriptor[]::new); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/InvalidTypeRefInspection.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/InvalidTypeRefInspection.java deleted file mode 100644 index ac31cba..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/InvalidTypeRefInspection.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.comroid.kscr.intellij.inspections; - -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.ProblemsHolder; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementVisitor; -import org.comroid.kscr.intellij.psi.utils.KScrTypeReference; -import org.jetbrains.annotations.NotNull; - -public class InvalidTypeRefInspection extends LocalInspectionTool{ - - public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly){ - return new PsiElementVisitor(){ - public void visitElement(@NotNull PsiElement element){ - super.visitElement(element); - var ref = element.getReference(); - if(ref instanceof KScrTypeReference) - if(ref.resolve() == null){ - var text = element.getText(); - if(text.length() > 0 && !(text.equals("boolean") || text.equals("byte") || text.equals("short") || text.equals("char") - || text.equals("int") || text.equals("long") || text.equals("float") || text.equals("double"))) - holder.registerProblem(ref); - } - } - }; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/KScrInspection.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/KScrInspection.java deleted file mode 100644 index 499406a..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/KScrInspection.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.comroid.kscr.intellij.inspections; - -import com.intellij.codeInspection.InspectionManager; -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.psi.PsiFile; -import org.comroid.kscr.intellij.psi.KScrFile; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -public abstract class KScrInspection extends LocalInspectionTool{ - - public ProblemDescriptor @NotNull [] checkTypeDef(@NotNull KScrType type, @NotNull InspectionManager manager, boolean isOnTheFly){ - return new ProblemDescriptor[0]; - } - - public ProblemDescriptor @NotNull [] checkFile(@NotNull PsiFile file, @NotNull InspectionManager manager, boolean isOnTheFly){ - List problems = new ArrayList<>(); - if(file instanceof KScrFile){ - KScrFile kScrFile = (KScrFile)file; - problems.addAll(List.of(kScrFile.getTypeDef().map(l -> checkTypeDef(l, manager, isOnTheFly)).orElse(new ProblemDescriptor[0]))); - } - return problems.toArray(ProblemDescriptor[]::new); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/ThisInStaticMethodInspection.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/ThisInStaticMethodInspection.java deleted file mode 100644 index 41f4c15..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/ThisInStaticMethodInspection.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.comroid.kscr.intellij.inspections; - -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.ProblemHighlightType; -import com.intellij.codeInspection.ProblemsHolder; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementVisitor; -import com.intellij.psi.util.PsiTreeUtil; -import org.comroid.kscr.intellij.psi.expressions.KScrThisExpr; -import org.jetbrains.annotations.NotNull; - -public class ThisInStaticMethodInspection extends LocalInspectionTool{ - - public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly){ - return new PsiElementVisitor(){ - public void visitElement(@NotNull PsiElement element){ - super.visitElement(element); - if(element instanceof KScrThisExpr){ - var container = PsiTreeUtil.getParentOfType(element, KScrMethod.class); - if(container != null && container.isStatic() && element.getText().equals("this")) - holder.registerProblem(element, "'this' can only be used in non-static contexts", ProblemHighlightType.ERROR); - } - } - }; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/WrongFileNameForTypeNameInspection.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/WrongFileNameForTypeNameInspection.java deleted file mode 100644 index 292713f..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/WrongFileNameForTypeNameInspection.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.comroid.kscr.intellij.inspections; - -import com.intellij.codeHighlighting.HighlightDisplayLevel; -import com.intellij.codeInspection.InspectionManager; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.codeInspection.ProblemHighlightType; -import org.comroid.kscr.intellij.inspections.fixes.RenameFileToTypeFix; -import org.comroid.kscr.intellij.inspections.fixes.RenameTypeToFileFix; -import org.jetbrains.annotations.NotNull; - -public class WrongFileNameForTypeNameInspection extends KScrInspection{ - - public ProblemDescriptor @NotNull [] checkTypeDef(@NotNull KScrType type, @NotNull InspectionManager manager, boolean isOnTheFly){ - String typeName = type.getName(); - if(type.isTopLevelType() && type.getNameIdentifier() != null) - if(type.getNameIdentifier().getTextLength() > 0){ - if(!typeName.equals(type.getContainingFile().getName())) - return new ProblemDescriptor[]{manager.createProblemDescriptor(type.getNameIdentifier(), "KScr type '" + typeName + "' should be declared in file '" + typeName + ".kScr'", new LocalQuickFix[]{new RenameFileToTypeFix(type, typeName), new RenameTypeToFileFix(type, type.getContainingFile().getName())}, ProblemHighlightType.ERROR, isOnTheFly, false)}; - }else return new ProblemDescriptor[]{manager.createProblemDescriptor(type, "KScr type must have name '" + type.getContainingFile().getName() + "'", new LocalQuickFix[]{}, ProblemHighlightType.GENERIC_ERROR, isOnTheFly, false)}; - return super.checkTypeDef(type, manager, isOnTheFly); - } - - public boolean isEnabledByDefault(){ - return true; - } - - @NotNull - public HighlightDisplayLevel getDefaultLevel() { - return HighlightDisplayLevel.ERROR; - } - - @NotNull - public String getShortName(){ - return "WrongFileNameForTypeName"; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/AddImportFix.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/AddImportFix.java deleted file mode 100644 index 8b2b2e2..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/AddImportFix.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.comroid.kscr.intellij.inspections.fixes; - -import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement; -import com.intellij.codeInspection.util.IntentionFamilyName; -import com.intellij.codeInspection.util.IntentionName; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import org.comroid.kscr.intellij.psi.KScrFile; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class AddImportFix extends LocalQuickFixAndIntentionActionOnPsiElement{ - - private final String fqName; - - public AddImportFix(String name, PsiElement on){ - super(on); - fqName = name; - } - - public @IntentionName @NotNull String getText(){ - return "Add import for '" + fqName + "'"; - } - - public @IntentionFamilyName @NotNull String getFamilyName(){ - return "Add missing import"; - } - - public void invoke(@NotNull Project project, @NotNull PsiFile file, @Nullable Editor editor, @NotNull PsiElement startElement, @NotNull PsiElement endElement){ - addImport(file, fqName); - } - - public static void addImport(@NotNull PsiFile file, String fqName){ - if(file instanceof KScrFile){ - KScrFile kScrFile = (KScrFile)file; - kScrFile.wrapper().flatMap(w -> PsiUtils.childOfType(w, KScrImportList.class)).ifPresent(list -> { - list.add(PsiUtils.createWhitespace(list, "\n")); - list.add(PsiUtils.createImportFromText(list, "import " + fqName + ";")); - }); - } - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/ChangeSupertypeKindFix.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/ChangeSupertypeKindFix.java deleted file mode 100644 index b375c53..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/ChangeSupertypeKindFix.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.comroid.kscr.intellij.inspections.fixes; - -import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement; -import com.intellij.codeInspection.util.IntentionFamilyName; -import com.intellij.codeInspection.util.IntentionName; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiWhiteSpace; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import static org.comroid.kscr.intellij.psi.utils.PsiUtils.*; - -public class ChangeSupertypeKindFix extends LocalQuickFixAndIntentionActionOnPsiElement{ - - private final boolean toExtends; - - public ChangeSupertypeKindFix(@Nullable PsiElement element, boolean toExtends){ - super(element); - this.toExtends = toExtends; - } - - public void invoke(@NotNull Project project, @NotNull PsiFile file, @Nullable Editor editor, @NotNull PsiElement startElement, @NotNull PsiElement endElement){ - PsiElement from = startElement.getParent(); - String type = startElement.getText(); - var targetOpt = toExtends ? - childOfType(from.getParent(), KScrExtendsClause.class) : - childOfType(from.getParent(), KScrImplementsClause.class); - String newClause = targetOpt.map(x -> x.getText() + ", ").orElse(toExtends ? "extends " : "implements ") + type; - var newElem = toExtends ? - createExtendsClauseFromText(from.getParent(), newClause) : - createImplementsClauseFromText(from.getParent(), newClause); - - if(targetOpt.isPresent()) - targetOpt.get().replace(newElem); - else{ - if(toExtends){ - from.getParent().addBefore(newElem, from); from.addAfter(createWhitespace(newElem, " "), null); - }else{ - from.getParent().addAfter(newElem, from); from.addBefore(createWhitespace(newElem, " "), null); - } - } - - var others = childrenOfType(from, KScrTypeRef.class); - if(others.size() == 1) - from.delete(); - else{ - // clean up commas - // if we're first, remove first comma, else remove previous one - if(startElement == others.get(0)){ - while(startElement.getNextSibling() != null && (startElement.getNextSibling() instanceof PsiWhiteSpace || startElement.getNextSibling().getText().equals(","))) - startElement.getNextSibling().delete(); - }else{ - while(startElement.getPrevSibling() != null && (startElement.getPrevSibling() instanceof PsiWhiteSpace || startElement.getPrevSibling().getText().equals(","))) - startElement.getPrevSibling().delete(); - } - startElement.delete(); - } - } - - public @IntentionName @NotNull String getText(){ - return "Change to '" + (toExtends ? "extends" : "implements") + "'"; - } - - public @IntentionFamilyName @NotNull String getFamilyName(){ - return "Swap 'extends' and 'implements'"; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/RenameFileToTypeFix.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/RenameFileToTypeFix.java deleted file mode 100644 index b028488..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/RenameFileToTypeFix.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.comroid.kscr.intellij.inspections.fixes; - -import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement; -import com.intellij.codeInspection.util.IntentionFamilyName; -import com.intellij.codeInspection.util.IntentionName; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class RenameFileToTypeFix extends LocalQuickFixAndIntentionActionOnPsiElement{ - - private final String newName; - - public RenameFileToTypeFix(@Nullable PsiElement element, String newName){ - super(element); - this.newName = newName; - } - - public void invoke(@NotNull Project project, @NotNull PsiFile file, @Nullable Editor editor, @NotNull PsiElement startElement, @NotNull PsiElement endElement){ - if(startElement instanceof KScrType) - file.setName(newName + ".kScr"); - } - - public @IntentionName @NotNull String getText(){ - return "Rename file to '" + newName + ".kScr'"; - } - - public @IntentionFamilyName @NotNull String getFamilyName(){ - return "Rename file to match type"; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/RenameTypeToFileFix.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/RenameTypeToFileFix.java deleted file mode 100644 index f0a94b9..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/inspections/fixes/RenameTypeToFileFix.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.comroid.kscr.intellij.inspections.fixes; - -import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement; -import com.intellij.codeInspection.util.IntentionFamilyName; -import com.intellij.codeInspection.util.IntentionName; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class RenameTypeToFileFix extends LocalQuickFixAndIntentionActionOnPsiElement{ - - private final String newName; - - public RenameTypeToFileFix(@Nullable PsiElement element, String newName){ - super(element); - this.newName = newName; - } - - public void invoke(@NotNull Project project, @NotNull PsiFile file, @Nullable Editor editor, @NotNull PsiElement startElement, @NotNull PsiElement endElement){ - if(startElement instanceof KScrType) - ((KScrType)startElement).setName(newName); - } - - public @IntentionName @NotNull String getText(){ - return "Rename type to '" + newName + "'"; - } - - public @IntentionFamilyName @NotNull String getFamilyName(){ - return "Rename type to match file"; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/KScrParserDefinition.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/KScrParserDefinition.java deleted file mode 100644 index e956576..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/KScrParserDefinition.java +++ /dev/null @@ -1,175 +0,0 @@ -package org.comroid.kscr.intellij.parser; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.ParserDefinition; -import com.intellij.lang.PsiParser; -import com.intellij.lexer.Lexer; -import com.intellij.openapi.project.Project; -import com.intellij.psi.FileViewProvider; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.tree.IFileElementType; -import com.intellij.psi.tree.IStubFileElementType; -import com.intellij.psi.tree.TokenSet; -import org.comroid.kscr.intellij.KScrLanguage; -import org.comroid.kscr.intellij.antlr_generated.KScrLexer; -import org.comroid.kscr.intellij.antlr_generated.KScrParser; -import org.comroid.kscr.intellij.psi.Tokens; -import org.comroid.kscr.intellij.psi.ast.statements.*; -import org.comroid.kscr.intellij.psi.ast.common.*; -import org.comroid.kscr.intellij.psi.ast.types.*; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -public class KScrParserDefinition implements ParserDefinition { - public static final IStubFileElementType FILE = - new IStubFileElementType<>("cyclic.FILE", KScrLanguage.LANGUAGE){ - public @NonNls @NotNull String getExternalId(){ - return "cyclic.FILE"; - } - }; - - @Override - public @NotNull Lexer createLexer(Project project) { - return new LexerAdapter(new KScrLexer(null)); - } - - @Override - public @NotNull PsiParser createParser(Project project) { - return new ParserAdapter(); - } - - @Override - public @NotNull IFileElementType getFileNodeType() { - return FILE; - } - - @Override - public @NotNull TokenSet getCommentTokens() { - return Tokens.COMMENTS; - } - - @Override - public @NotNull TokenSet getWhitespaceTokens() { - return Tokens.WHITESPACES; - } - - @Override - public @NotNull TokenSet getStringLiteralElements() { - return Tokens.STRING_LITERALS; - } - - @Override - public @NotNull PsiElement createElement(ASTNode node) { - // TODO: replace with switch (by rule index) - var type = node.getElementType(); - if(type == Tokens.getRuleFor(KScrParser.RULE_file)) - return new KScrFileWrapper(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_classDecl)) - return new KScrType(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_id)) - return new KScrId(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_idPart)) - return new KScrIdPart(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_packageDecl)) - return new KScrPackageStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_importDecl)) - return new KScrImportStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_imports)) - return new KScrImportList(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_annotation)) - return new KScrAnnotation(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_rawType)) - return new KScrRawTypeRef(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_type)) - return new KScrTypeRef(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_typeOrInferred)) - return new KScrTypeRefOrInferred(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_member)) - return new KScrMemberWrapper(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_modifiers)) - return new KScrModifierList(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_modifier)) - return new KScrModifier(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_function)) - return new KScrMethod(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_constructor)) - return new KScrConstructor(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_statement)) - return new KScrStatementWrapper(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_value)) - return createExpr(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_call)) - return new KScrCall(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_initialisation)) - return new KScrInitialisation(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_varAssignment)) - return new KScrVariableAssignment(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_objectExtends)) - return new KScrExtendsClause(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_objectImplements)) - return new KScrImplementsClause(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_objectPermits)) - return new KScrPermitsClause(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_block)) - return new KScrBlock(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_varDecl)) - return new KScrVariableDef(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_parameter)) - return new KScrParameter(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_recordComponents)) - return new KScrRecordComponents(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_arguments)) - return new KScrArgumentsList(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_parameters)) - return new KScrParametersList(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_binaryop)) - return new KScrBinaryOp(node); - - if(type == Tokens.getRuleFor(KScrParser.RULE_assertStatement)) - return new KScrAssertStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_ctorCall)) - return new KScrConstructorCallStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_doWhileStatement)) - return new KScrDoWhileStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_foreachStatement)) - return new KScrForeachStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_forStatement)) - return new KScrForStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_ifStatement)) - return new KScrIfStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_elseStatement)) - return new KScrElseClause(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_returnStatement)) - return new KScrReturnStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_switchStatement)) - return new KScrSwitchStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_throwStatement)) - return new KScrThrowStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_mutation)) - return new KScrVarAssignStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_varIncrement)) - return new KScrVarIncrementStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_whileStatement)) - return new KScrWhileStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_yieldStatement)) - return new KScrYieldStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_tryStatement)) - return new KScrTryCatchStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_catchBlock)) - return new KScrCatchBlock(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_finallyBlock)) - return new KScrFinallyBlock(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_breakStatement)) - return new KScrBreakStatement(node); - if(type == Tokens.getRuleFor(KScrParser.RULE_continueStatement)) - return new KScrContinueStatement(node); - - return new KScrAstElement(node); - } - - @Override - public @NotNull PsiFile createFile(@NotNull FileViewProvider viewProvider) { - return null; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/KScrSyntaxHighlighter.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/KScrSyntaxHighlighter.java deleted file mode 100644 index 5ba0923..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/KScrSyntaxHighlighter.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.comroid.kscr.intellij.parser; - -import com.intellij.lexer.Lexer; -import com.intellij.openapi.editor.DefaultLanguageHighlighterColors; -import com.intellij.openapi.editor.colors.TextAttributesKey; -import com.intellij.openapi.fileTypes.SyntaxHighlighter; -import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.tree.IElementType; -import org.comroid.kscr.intellij.antlr_generated.KScrLangLexer; -import org.comroid.kscr.intellij.psi.Tokens; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrSyntaxHighlighter extends SyntaxHighlighterFactory implements SyntaxHighlighter { - - public static final TextAttributesKey ID = TextAttributesKey.createTextAttributesKey("KScr-ID", DefaultLanguageHighlighterColors.IDENTIFIER); - public static final TextAttributesKey KEYWORD = TextAttributesKey.createTextAttributesKey("KScr-Keyword", DefaultLanguageHighlighterColors.KEYWORD); - public static final TextAttributesKey NUMLIT = TextAttributesKey.createTextAttributesKey("KScr-Number-Literal", DefaultLanguageHighlighterColors.NUMBER); - public static final TextAttributesKey STRLIT = TextAttributesKey.createTextAttributesKey("KScr-String-Literal", DefaultLanguageHighlighterColors.STRING); - public static final TextAttributesKey SYMBOLS = TextAttributesKey.createTextAttributesKey("KScr-Symbols", DefaultLanguageHighlighterColors.SEMICOLON); - public static final TextAttributesKey DOTCOMMA = TextAttributesKey.createTextAttributesKey("KScr-Dot-Comma", DefaultLanguageHighlighterColors.DOT); - public static final TextAttributesKey OPERATORS = TextAttributesKey.createTextAttributesKey("KScr-Operators", DefaultLanguageHighlighterColors.OPERATION_SIGN); - public static final TextAttributesKey COMMENT = TextAttributesKey.createTextAttributesKey("KScr-Comment", DefaultLanguageHighlighterColors.LINE_COMMENT); - - @NotNull - @Override public Lexer getHighlightingLexer(){ - KScrLangLexer lexer = new KScrLangLexer(null); - return new LexerAdapter(lexer); - } - - public TextAttributesKey @NotNull [] getTokenHighlights(IElementType element){ - if(Tokens.IDENTIFIERS.contains(element)) - return array(ID); - else if(Tokens.KEYWORDS.contains(element)) - return array(KEYWORD); - else if(Tokens.getFor(KScrLangLexer.STRLIT) == element) - return array(STRLIT); - else if(Tokens.LITERALS.contains(element)) - return array(NUMLIT); // Add boolean literal formatting - else if(Tokens.PUNCTUATION.contains(element)) - return array(DOTCOMMA); - else if(Tokens.SYMBOLS.contains(element)) - return array(SYMBOLS); - else if(Tokens.OPERATORS.contains(element)) - return array(OPERATORS); - else if(Tokens.COMMENTS.contains(element)) - return array(COMMENT); - - return new TextAttributesKey[0]; - } - - public @NotNull com.intellij.openapi.fileTypes.SyntaxHighlighter getSyntaxHighlighter(@Nullable Project project, @Nullable VirtualFile virtualFile){ - return new KScrSyntaxHighlighter(); - } - - public TextAttributesKey[] array(TextAttributesKey key){ - return new TextAttributesKey[]{key}; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/LexerAdapter.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/LexerAdapter.java deleted file mode 100644 index 9fbc9be..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/LexerAdapter.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.comroid.kscr.intellij.parser; - -import com.intellij.lang.Language; -import com.intellij.lexer.Lexer; -import com.intellij.lexer.LexerPosition; -import com.intellij.psi.tree.IElementType; -import org.antlr.intellij.adaptor.lexer.ANTLRLexerAdaptor; -import org.comroid.kscr.intellij.KScrLanguage; -import org.comroid.kscr.intellij.antlr_generated.KScrLexer; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class LexerAdapter extends ANTLRLexerAdaptor { - /** - * Constructs a new instance of {@link ANTLRLexerAdaptor} with - * the specified {@link Language} and underlying ANTLR {@link - * Lexer}. - * - * @param lexer The underlying ANTLR lexer. - */ - public LexerAdapter(org.antlr.v4.runtime.Lexer lexer) { - super(KScrLanguage.LANGUAGE, lexer); - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/ParserAdapter.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/ParserAdapter.java deleted file mode 100644 index 71d24e5..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/parser/ParserAdapter.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.comroid.kscr.intellij.parser; - -import com.intellij.lang.Language; -import com.intellij.lang.PsiParser; -import com.intellij.psi.tree.IElementType; -import org.antlr.intellij.adaptor.parser.ANTLRParserAdaptor; -import org.antlr.v4.runtime.Parser; -import org.antlr.v4.runtime.tree.ParseTree; -import org.comroid.kscr.intellij.KScrLanguage; -import org.comroid.kscr.intellij.antlr_generated.KScrParser; - -public class ParserAdapter extends ANTLRParserAdaptor { - /** - * Create a jetbrains adaptor for an ANTLR parser object. When - * the IDE requests a {@link #parse(IElementType, PsiBuilder)}, - * the token stream will be set on the parser. - * - * @param parser - */ - public ParserAdapter() { - super(KScrLanguage.LANGUAGE, new KScrParser(null)); - } - - @Override - protected ParseTree parse(Parser parser, IElementType root) { - return null; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrAstElement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrAstElement.java deleted file mode 100644 index 9e3809e..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrAstElement.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.comroid.kscr.intellij.psi; - -import com.intellij.extapi.psi.ASTWrapperPsiElement; -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import com.intellij.psi.ResolveState; -import com.intellij.psi.scope.PsiScopeProcessor; -import org.comroid.kscr.intellij.antlr_generated.KScrParser; -import org.antlr.intellij.adaptor.lexer.RuleIElementType; -import org.antlr.intellij.adaptor.psi.Trees; -import org.comroid.kscr.intellij.psi.KScrElement; -import org.jetbrains.annotations.NotNull; - -public class KScrAstElement extends ASTWrapperPsiElement implements KScrElement { - - public KScrAstElement(@NotNull ASTNode node){ - super(node); - } - - public PsiElement @NotNull [] getChildren(){ - // include leaves - return Trees.getChildren(this); - } - - public String toString(){ - if(getClass() != KScrAstElement.class) - return getClass().getSimpleName(); - boolean isRule = getNode().getElementType() instanceof RuleIElementType; - if(isRule && KScrParser.ruleNames.length < ((RuleIElementType)getNode().getElementType()).getRuleIndex()) - return getClass().getSimpleName() + "(" + KScrParser.ruleNames[((RuleIElementType)getNode().getElementType()).getRuleIndex()] + ")"; - return getClass().getSimpleName(); - } - - public boolean processDeclarations(@NotNull PsiScopeProcessor processor, @NotNull ResolveState state, PsiElement lastParent, @NotNull PsiElement place){ - boolean cont = true; - for(PsiElement child : getChildren()) - if(cont && lastParent != child) - cont = processor.execute(child, state); - return cont; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrElement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrElement.java deleted file mode 100644 index ad73947..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrElement.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.comroid.kscr.intellij.psi; - -import com.intellij.psi.PsiElement; - -import java.util.Optional; - -public interface KScrElement extends PsiElement{ - - default Optional getContainer(){ - var file = getContainingFile(); - if(file instanceof KScrFile) - return ((KScrFile)file).wrapper(); - return Optional.empty(); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrFile.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrFile.java deleted file mode 100644 index 8821173..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrFile.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.comroid.kscr.intellij.psi; - -import com.intellij.extapi.psi.PsiFileBase; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.psi.FileViewProvider; -import org.comroid.kscr.intellij.KScrFileType; -import org.comroid.kscr.intellij.KScrLanguage; -import org.comroid.kscr.intellij.KScrSourceFileType; -import org.comroid.kscr.intellij.psi.ast.KScrImportStatement; -import org.comroid.kscr.intellij.psi.ast.KScrPackageStatement; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -public class KScrFile extends PsiFileBase{ - - public KScrFile(@NotNull FileViewProvider viewProvider){ - super(viewProvider, KScrLanguage.LANGUAGE); - } - - public @NotNull FileType getFileType(){ - return KScrSourceFileType.FILE_TYPE; - } - - public Optional wrapper(){ - return PsiUtils.childOfType(this, KScrFileWrapper.class); - } - - public Optional getPackage(){ - return wrapper().flatMap(KScrFileWrapper::getPackage); - } - - public String getPackageName(){ - return getPackage().map(KScrPackageStatement::getPackageName).orElse(""); - } - - public List getImports(){ - return wrapper().map(KScrFileWrapper::getImports).orElse(new ArrayList<>(0)); - } - - public Optional getTypeDef(){ - return wrapper().flatMap(KScrFileWrapper::getTypeDef); - } - - public @NotNull String getFileName(){ - return getViewProvider().getVirtualFile().getName(); - } - - public @NotNull String getName(){ - var o = super.getName(); - if(getTypeDef().isPresent()) - return o.substring(0, o.length() - ".KScr".length()); - return o; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrFileWrapper.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrFileWrapper.java deleted file mode 100644 index da7737d..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrFileWrapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.comroid.kscr.intellij.psi; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.util.PsiTreeUtil; -import org.comroid.kscr.intellij.psi.ast.KScrImportStatement; -import org.comroid.kscr.intellij.psi.ast.KScrPackageStatement; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -public class KScrFileWrapper extends KScrElement { - - public KScrFileWrapper(@NotNull ASTNode node){ - super(node); - } - - public Optional getPackage(){ - return PsiUtils.childOfType(this, KScrPackageStatement.class); - } - - public List getImports(){ - return new ArrayList<>(PsiTreeUtil.findChildrenOfType(this, KScrImportStatement.class)); - } - - public Optional getTypeDef(){ - return PsiUtils.childOfType(this, KScrType.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrStubElement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrStubElement.java deleted file mode 100644 index 8d6c4eb..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/KScrStubElement.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.comroid.kscr.intellij.psi; - -import com.intellij.extapi.psi.StubBasedPsiElementBase; -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import com.intellij.psi.StubBasedPsiElement; -import com.intellij.psi.stubs.IStubElementType; -import com.intellij.psi.stubs.StubElement; -import org.jetbrains.annotations.NotNull; - -public class KScrStubElement> - extends StubBasedPsiElementBase - implements KScrElement, StubBasedPsiElement{ - - private PsiElement navigationElement = null; - - public KScrStubElement(@NotNull Stub stub, @NotNull IStubElementType nodeType){ - super(stub, nodeType); - } - - public KScrStubElement(@NotNull ASTNode node){ - super(node); - } - - public KScrStubElement setNavigationElement(PsiElement navigationElement){ - this.navigationElement = navigationElement; - return this; - } - - public PsiElement getNavigationElement(){ - return navigationElement != null ? navigationElement : this; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/Tokens.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/Tokens.java deleted file mode 100644 index 5676856..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/Tokens.java +++ /dev/null @@ -1,197 +0,0 @@ -package org.comroid.kscr.intellij.psi; - -import com.intellij.psi.TokenType; -import com.intellij.psi.tree.IElementType; -import com.intellij.psi.tree.TokenSet; -import org.antlr.intellij.adaptor.lexer.PSIElementTypeFactory; -import org.antlr.intellij.adaptor.lexer.RuleIElementType; -import org.antlr.intellij.adaptor.lexer.TokenIElementType; -import org.comroid.kscr.intellij.KScrLanguage; -import org.comroid.kscr.intellij.antlr_generated.KScrLangLexer; -import org.comroid.kscr.intellij.antlr_generated.KScrLangParser; -import org.jetbrains.annotations.Contract; - -import static org.antlr.intellij.adaptor.lexer.PSIElementTypeFactory.createTokenSet; - -import java.util.List; - -public class Tokens { - public static IElementType BAD_TOKEN_TYPE = TokenType.BAD_CHARACTER; - - public static final List TOKEN_ELEMENT_TYPES = PSIElementTypeFactory.getTokenIElementTypes(KScrLanguage.LANGUAGE); - public static final List RULE_ELEMENT_TYPES = PSIElementTypeFactory.getRuleIElementTypes(KScrLanguage.LANGUAGE); - - public static final TokenSet KEYWORDS = createTokenSet( - KScrLanguage.LANGUAGE, - - KScrLangLexer.BOOL, - KScrLangLexer.BYTE, - KScrLangLexer.SHORT, - KScrLangLexer.CHAR, - KScrLangLexer.INT, - KScrLangLexer.LONG, - KScrLangLexer.FLOAT, - KScrLangLexer.DOUBLE, - KScrLangLexer.VOID, - - KScrLangLexer.VAR, - - KScrLangLexer.PRIVATE, - KScrLangLexer.PROTECTED, - KScrLangLexer.PUBLIC, - - KScrLangLexer.FINAL, - KScrLangLexer.STATIC, - KScrLangLexer.ABSTRACT, - KScrLangLexer.SYNCHRONISED, - KScrLangLexer.NATIVE, - - KScrLangLexer.CLASS, - KScrLangLexer.INTERFACE, - KScrLangLexer.ENUM, - KScrLangLexer.AT, - KScrLangLexer.RECORD, - KScrLangLexer.SINGLE, - - KScrLangLexer.IMPORT, - KScrLangLexer.PACKAGE, - KScrLangLexer.EXTENDS, - KScrLangLexer.IMPLEMENTS, - KScrLangLexer.PERMITS, - - KScrLangLexer.RETURN, - KScrLangLexer.THROW, - KScrLangLexer.NEW, - KScrLangLexer.ASSERT, - - KScrLangLexer.THIS, - - KScrLangLexer.SWITCH, - KScrLangLexer.DEFAULT, - KScrLangLexer.CASE, - KScrLangLexer.WHILE, - KScrLangLexer.DO, - KScrLangLexer.IF, - KScrLangLexer.FOR, - KScrLangLexer.ELSE, - - KScrLangLexer.NULL, - KScrLangLexer.TRUE, - KScrLangLexer.FALSE - ); - - public static final TokenSet OPERATORS = createTokenSet( - KScrLanguage.LANGUAGE, - - KScrLangLexer.EQUAL, - KScrLangLexer.INEQUAL, - KScrLangLexer.GREATEREQ, - KScrLangLexer.LESSEREQ, - KScrLangLexer.GREATER, - KScrLangLexer.LESSER, - - KScrLangLexer.AND, - KScrLangLexer.OR, - KScrLangLexer.BITAND, - KScrLangLexer.BITOR, - - KScrLangLexer.UP, - - KScrLangLexer.PLUSPLUS, - KScrLangLexer.MINUSMINUS, - - KScrLangLexer.STAR, - KScrLangLexer.SLASH, - KScrLangLexer.PLUS, - KScrLangLexer.MINUS, - KScrLangLexer.PERCENT - ); - - // used for syntax highlighting - public static final TokenSet LITERALS = createTokenSet( - KScrLanguage.LANGUAGE, - - KScrLangLexer.NUMLIT, - KScrLangLexer.BOOLLIT, - KScrLangLexer.STRLIT, - KScrLangLexer.RANGELIT - ); - - public static final TokenSet SYMBOLS = createTokenSet( - KScrLanguage.LANGUAGE, - - KScrLangLexer.QUOTE, - KScrLangLexer.SEMICOLON, - - KScrLangLexer.RDASHARROW, - KScrLangLexer.LDASHARROW, - KScrLangLexer.DEQARROW, - KScrLangLexer.REQARROW - ); - - public static final TokenSet PUNCTUATION = createTokenSet( - KScrLanguage.LANGUAGE, - - KScrLangLexer.DOT, - KScrLangLexer.COMMA, - KScrLangLexer.COLON, - KScrLangLexer.ASSIGN, - - KScrLangLexer.EXCLAMATION, - KScrLangLexer.QUESTION - ); - - public static final TokenSet WHITESPACES = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.WS); - public static final TokenSet COMMENTS = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.SING_COMMENT); - public static final TokenSet STRING_LITERALS = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.STRLIT); - public static final TokenSet IDENTIFIERS = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.ID); - - // single-element sets - public static final TokenSet RULE_IMPORT = TokenSet.create(getRuleFor(KScrLangParser.RULE_importDecl)); - public static final TokenSet RULE_BIN_OP = TokenSet.create(getRuleFor(KScrLangParser.RULE_binaryop)); - public static final TokenSet RULE_CALL = TokenSet.create(getRuleFor(KScrLangParser.RULE_call)); - public static final TokenSet RULE_ID_PART = TokenSet.create(getRuleFor(KScrLangParser.RULE_idPart)); - public static final TokenSet RULE_INITIALISATION = TokenSet.create(getRuleFor(KScrLangParser.RULE_initialisation)); - public static final TokenSet RULE_CAST = TokenSet.create(getRuleFor(KScrLangParser.RULE_cast)); - public static final TokenSet RULE_NEW_ARRAY = TokenSet.create(getRuleFor(KScrLangParser.RULE_newArray)); - public static final TokenSet RULE_NEW_LIST_ARRAY = TokenSet.create(getRuleFor(KScrLangParser.RULE_newListedArray)); - - public static final TokenSet TOK_ASSIGN = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.ASSIGN); - public static final TokenSet TOK_INSTANCEOF = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.INSTANCEOF); - public static final TokenSet TOK_THIS = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.THIS); - public static final TokenSet TOK_STRING = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.STRLIT); - - public static final TokenSet TOK_CLASS = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.CLASS); - public static final TokenSet TOK_INTERFACE = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.INTERFACE); - public static final TokenSet TOK_ANNOTATION = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.ANNOTATION); - public static final TokenSet TOK_AT = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.AT); - public static final TokenSet TOK_ENUM = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.ENUM); - public static final TokenSet TOK_RECORD = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.RECORD); - public static final TokenSet TOK_SINGLE = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.SINGLE); - - public static final TokenSet TOK_NULL = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.NULL); - public static final TokenSet TOK_NUMLIT = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.NUMLIT); - public static final TokenSet TOK_RANGELIT = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.RANGELIT); - public static final TokenSet TOK_BOOLLIT = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.BOOLLIT); - - public static final TokenSet PARENTHESIS = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.LPAREN, KScrLangLexer.RPAREN); - public static final TokenSet SQ_BRACES = createTokenSet(KScrLanguage.LANGUAGE, KScrLangLexer.LSQUAR, KScrLangLexer.RSQUAR); - public static final TokenSet PRE_POST_OPS = TokenSet.create( - getRuleFor(KScrLangParser.RULE_prefixop), getRuleFor(KScrLangParser.RULE_postfixop)); - - // used for literal expression checking - public static final TokenSet SEM_LITERALS = createTokenSet(KScrLanguage.LANGUAGE, - KScrLangLexer.NULL, - KScrLangLexer.NUMLIT, - KScrLangLexer.RANGELIT, - KScrLangLexer.BOOLLIT - ); - - @Contract(pure = true) public static IElementType getFor(int type){ - return TOKEN_ELEMENT_TYPES.get(type); - } - - @Contract(pure = true) public static IElementType getRuleFor(int type){ - return RULE_ELEMENT_TYPES.get(type); - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrAnnotation.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrAnnotation.java deleted file mode 100644 index fae0592..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrAnnotation.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiReference; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.KScrIdHolder; -import org.comroid.kscr.intellij.psi.utils.KScrTypeReference; -import org.jetbrains.annotations.NotNull; - -public class KScrAnnotation extends KScrAstElement implements KScrIdHolder{ - - public KScrAnnotation(@NotNull ASTNode node){ - super(node); - } - - public PsiReference getReference(){ - return getIdElement().map(id -> new KScrTypeReference(id, this)).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrArgumentsList.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrArgumentsList.java deleted file mode 100644 index 3690c99..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrArgumentsList.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrArgumentsList extends KScrAstElement{ - - public KScrArgumentsList(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrBinaryOp.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrBinaryOp.java deleted file mode 100644 index 1015f20..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrBinaryOp.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrBinaryOp extends KScrAstElement{ - - public KScrBinaryOp(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrConstructor.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrConstructor.java deleted file mode 100644 index 918835e..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrConstructor.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmMethod; -import com.intellij.psi.util.PsiTreeUtil; -import org.comroid.kscr.intellij.psi.KScrCodeHolder; -import org.comroid.kscr.intellij.psi.KScrDefinitionAstElement; -import org.comroid.kscr.intellij.psi.KScrModifiersHolder; -import org.comroid.kscr.intellij.psi.ast.common.KScrParameter; -import org.comroid.kscr.intellij.psi.ast.statements.KScrStatement; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.types.JvmKScrlicConstructor; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.List; -import java.util.Optional; - -// TODO: stubs -public class KScrConstructor extends KScrDefinitionAstElement implements KScrModifiersHolder, KScrCodeHolder{ - - public KScrConstructor(@NotNull ASTNode node){ - super(node); - } - - public List parameters(){ - var paramList = PsiUtils.childOfType(this, KScrParametersList.class); - return paramList.map(list -> PsiUtils.childrenOfType(list, KScrParameter.class)).orElseGet(List::of); - } - - public Optional body(){ - // last child is either a block or (-> +) statement - var last = getLastChild(); - if(last instanceof KScrStatement) - return Optional.of((KScrStatement)last); - return Optional.empty(); - } - - public JvmMethod toJvm(){ - return JvmKScrlicConstructor.of(this); - } - - public KScrType containingType(){ - return PsiTreeUtil.getParentOfType(this, KScrType.class); - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrFileWrapper.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrFileWrapper.java deleted file mode 100644 index 25124ce..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrFileWrapper.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.util.PsiTreeUtil; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -public class KScrFileWrapper extends KScrAstElement { - - public KScrFileWrapper(@NotNull ASTNode node){ - super(node); - } - - public Optional getPackage(){ - return PsiUtils.childOfType(this, KScrPackageStatement.class); - } - - public List getImports(){ - return new ArrayList<>(PsiTreeUtil.findChildrenOfType(this, KScrImportStatement.class)); - } - - public Optional getTypeDef(){ - return PsiUtils.childOfType(this, KScrType.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrId.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrId.java deleted file mode 100644 index 08f670c..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrId.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrId extends KScrAstElement{ - - public KScrId(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrIdPart.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrIdPart.java deleted file mode 100644 index 9642f1e..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrIdPart.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrIdPart extends KScrAstElement{ - - public KScrIdPart(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrImportList.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrImportList.java deleted file mode 100644 index 8c01a87..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrImportList.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrImportList extends KScrAstElement{ - - public KScrImportList(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrImportStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrImportStatement.java deleted file mode 100644 index b43a62c..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrImportStatement.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.psi.PsiReference; -import org.comroid.kscr.intellij.antlr_generated.KScrlicLangParser; -import org.comroid.kscr.intellij.psi.*; -import org.comroid.kscr.intellij.psi.utils.KScrTypeReference; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Collection; - -public class KScrImportStatement extends KScrAstElement implements KScrIdHolder{ - - public KScrImportStatement(@NotNull ASTNode node){ - super(node); - } - - public boolean isStatic(){ - return !PsiUtils.matchingChildren(this, k -> k.getNode().getElementType() == Tokens.getFor(KScrlicLangParser.STATIC)).isEmpty(); - } - - public boolean isWildcard(){ - return !PsiUtils.matchingChildren(this, k -> k.getNode().getElementType() == Tokens.getFor(KScrlicLangParser.STAR)).isEmpty(); - } - - public String getImportName(){ - return getIdElement().map(KScrId::getText).orElse(""); - } - - public PsiReference getReference(){ - if(isWildcard()) - return null; - return getIdElement().map(id -> new KScrTypeReference(id, this)).orElse(null); - } - - public boolean importsType(JvmClass cpc){ - return importsType(cpc.getQualifiedName()); - } - - public boolean importsType(String fqTypeName){ - if(isStatic()) - return false; - return importsType(getImportName() + (isWildcard() ? ".*" : ""), fqTypeName); - } - - public static boolean importsType(String importName, String fqTypeName){ - if(importName.endsWith(".*")){ - String baseName = importName.substring(0, importName.length() - 1); - return fqTypeName.startsWith(baseName) && !fqTypeName.substring(baseName.length()).contains("."); - } - return fqTypeName.equals(importName); - } - - @Nullable - public static KScrImportStatement followToImport(JvmClass type, Collection list){ - if(type == null) - return null; - for(KScrImportStatement statement : list) - if(statement.importsType(type)) - return statement; - return null; - } - - public static boolean isQualificationRedundant(KScrClassReference reference, Collection list){ - return reference.isQualified() && followToImport(reference.resolveClass(), list) != null; - } - - // TODO: consider conflicting short names - public static boolean isQualificationRedundant(KScrClassReference reference){ - KScrFile file = reference.containingKScrlicFile(); - if(file == null) // so there's no imports - return false; - return isQualificationRedundant(reference, file.getImports()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrMethod.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrMethod.java deleted file mode 100644 index a1ba823..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrMethod.java +++ /dev/null @@ -1,145 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.icons.AllIcons; -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmMethod; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiPrimitiveType; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.SearchScope; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.antlr_generated.KScrlicLangLexer; -import org.comroid.kscr.intellij.psi.KScrCodeHolder; -import org.comroid.kscr.intellij.psi.KScrDefinitionStubElement; -import org.comroid.kscr.intellij.psi.Tokens; -import org.comroid.kscr.intellij.psi.ast.common.KScrBlock; -import org.comroid.kscr.intellij.psi.ast.common.KScrParameter; -import org.comroid.kscr.intellij.psi.ast.statements.KScrStatement; -import org.comroid.kscr.intellij.psi.ast.statements.KScrStatementWrapper; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.stubs.StubKScrMethod; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.comroid.kscr.intellij.psi.types.KScrKind; -import org.comroid.kscr.intellij.psi.types.JvmKScrlicClass; -import org.comroid.kscr.intellij.psi.types.JvmKScrlicMethod; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -public class KScrMethod extends KScrDefinitionStubElement implements KScrCodeHolder{ - - public KScrMethod(@NotNull ASTNode node){ - super(node); - } - - public KScrMethod(@NotNull StubKScrMethod method){ - super(method, StubTypes.KSCR_METHOD); - } - - public String fullyQualifiedName(){ - return containingType().fullyQualifiedName() + "::" + getName(); - } - - public KScrType containingType(){ - return getStubOrPsiParentOfType(KScrType.class); - } - - public Optional modifiers(){ - var stub = getStub(); - if(stub != null) - return Optional.ofNullable(stub.modifiers()).map(StubElement::getPsi); - return PsiUtils.childOfType(this, KScrModifierList.class); - } - - public boolean isStatic(){ - return modifiers().map(x -> x.hasModifier("static")).orElse(false); - } - - public Optional returns(){ - var stub = getStub(); - if(stub != null){ - var type = PsiUtils.createTypeReferenceFromText(this, stub.returnTypeText()); - return Optional.of((KScrTypeRef)type); - } - return PsiUtils.childOfType(this, KScrTypeRef.class); - } - - public List parameters(){ - var stub = getStub(); - if(stub != null){ - var params = stub.parameters(); - return params.stream().map(StubElement::getPsi).collect(Collectors.toList()); - } - var paramList = PsiUtils.childOfType(this, KScrParametersList.class); - return paramList.map(list -> PsiUtils.childrenOfType(list, KScrParameter.class)).orElseGet(List::of); - } - - public @Nullable JvmType returnType(){ - return returns().map(KScrTypeRef::asType).orElse(PsiPrimitiveType.NULL); - } - - public boolean overrides(JvmMethod other){ - return JvmClassUtils.overrides(JvmKScrlicMethod.of(this), other, getProject()); - } - - public @Nullable JvmMethod overriddenMethod(){ - return JvmClassUtils.findMethodInHierarchy(JvmKScrlicClass.of(containingType()), this::overrides, true); - } - - public boolean hasSemicolon(){ - var stub = getStub(); - if(stub != null) - return stub.hasSemicolon(); - - var node = getNode().getLastChildNode().getFirstChildNode(); - return node != null && node.getElementType() == Tokens.getFor(KScrlicLangLexer.SEMICOLON); - } - - public String getName(){ - var stub = getStub(); - if(stub != null) - return stub.name(); - - return super.getName(); - } - - public boolean hasModifier(String modifier){ - if(modifier.equals("abstract") && containingType().kind() == KScrKind.INTERFACE) - if(hasSemicolon()) // note that a semicolon does not mean abstract in classes - return true; - return KScrCodeHolder.super.hasModifier(modifier); - } - - public @Nullable Icon getIcon(int flags){ - // TODO: consider finality - return hasModifier("abstract") ? AllIcons.Nodes.AbstractMethod : AllIcons.Nodes.Method; - } - - public Optional body(){ - var body = getLastChild(); - if(body != null){ - if(body.getChildren().length > 1){ - // must be an arrow function - return PsiUtils.childOfType(body, KScrStatementWrapper.class) - .flatMap(KScrStatementWrapper::inner); - }else - return PsiUtils.childOfType(body, KScrBlock.class).map(KScrStatement.class::cast); - } - return Optional.empty(); - } - - public JvmMethod toJvm(){ - return JvmKScrlicMethod.of(this); - } - - public @NotNull SearchScope getUseScope(){ - if(hasModifier("private")) - return new LocalSearchScope(getContainingFile()); - return super.getUseScope(); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrModifier.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrModifier.java deleted file mode 100644 index 59f868e..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrModifier.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrModifier extends KScrAstElement{ - - public KScrModifier(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrModifierList.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrModifierList.java deleted file mode 100644 index 82e500a..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrModifierList.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import org.comroid.kscr.intellij.psi.KScrStubElement; -import org.comroid.kscr.intellij.psi.stubs.StubKScrModifierList; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.List; -import java.util.stream.Collectors; - -public class KScrModifierList extends KScrStubElement{ - - public KScrModifierList(@NotNull ASTNode node){ - super(node); - } - - public KScrModifierList(@NotNull StubKScrModifierList list){ - super(list, StubTypes.KSCR_MODIFIER_LIST); - } - - public boolean hasModifier(String modifier){ - if(getStub() != null) - return getStub().modifiers().contains(modifier); - - return PsiUtils.streamChildrenOfType(this, KScrModifier.class).anyMatch(x -> x.textMatches(modifier)); - } - - public List getModifiers(){ - if(getStub() != null) - return getStub().modifiers(); - - return PsiUtils.streamChildrenOfType(this, KScrModifier.class).map(PsiElement::getText).collect(Collectors.toList()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrPackageStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrPackageStatement.java deleted file mode 100644 index 4ce7b01..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrPackageStatement.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrPackageStatement extends KScrAstElement{ - - public KScrPackageStatement(@NotNull ASTNode node){ - super(node); - } - - @Nullable - public String getPackageName(){ - return getId().map(PsiElement::getText).orElse(null); - } - - public @NotNull Optional getId(){ - return PsiUtils.childOfType(this, KScrId.class); - } - - // TODO: resolve against packages -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrParametersList.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrParametersList.java deleted file mode 100644 index c8a3bfe..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrParametersList.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.stubs.EmptyStub; -import org.comroid.kscr.intellij.psi.KScrStubElement; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.NotNull; - -public class KScrParametersList extends KScrStubElement>{ - - public KScrParametersList(@NotNull ASTNode node){ - super(node); - } - - public KScrParametersList(@NotNull EmptyStub stub){ - super(stub, StubTypes.KSCR_PARAMETERS_LIST); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrRawTypeRef.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrRawTypeRef.java deleted file mode 100644 index a3d81e4..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrRawTypeRef.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiReference; -import com.intellij.psi.PsiType; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.KScrIdHolder; -import org.comroid.kscr.intellij.psi.types.ClassTypeImpl; -import org.comroid.kscr.intellij.psi.utils.KScrTypeReference; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrRawTypeRef extends KScrAstElement implements KScrIdHolder{ - - public KScrRawTypeRef(@NotNull ASTNode node){ - super(node); - } - - public PsiReference getReference(){ - return getIdElement().map(id -> new KScrTypeReference(id, this)).orElse(null); - } - - @Nullable - public JvmType type(){ - switch(getText()){ - case "boolean": - return PsiType.BOOLEAN; - case "byte": - return PsiType.BYTE; - case "short": - return PsiType.SHORT; - case "char": - return PsiType.CHAR; - case "int": - return PsiType.INT; - case "long": - return PsiType.LONG; - case "float": - return PsiType.FLOAT; - case "double": - return PsiType.DOUBLE; - case "void": - return PsiType.VOID; - } - var ref = getReference(); - if(ref instanceof KScrTypeReference) - return ClassTypeImpl.of(((KScrTypeReference)ref).resolveClass()); - return null; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrTypeRef.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrTypeRef.java deleted file mode 100644 index 9c960ec..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrTypeRef.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.Tokens; -import org.comroid.kscr.intellij.psi.types.ArrayTypeImpl; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrTypeRef extends KScrAstElement{ - - public KScrTypeRef(@NotNull ASTNode node){ - super(node); - } - - @Nullable - public JvmType asType(){ - if(getNode().findChildByType(Tokens.SQ_BRACES) != null) - return PsiUtils.childOfType(this, KScrTypeRef.class) - .map(KScrTypeRef::asType) - .map(ArrayTypeImpl::of) - .orElse(null); - return PsiUtils.childOfType(this, KScrRawTypeRef.class) - .map(KScrRawTypeRef::type).orElse(null); - } - - @Nullable - public JvmClass asClass(){ - return JvmClassUtils.asClass(asType()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrTypeRefOrInferred.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrTypeRefOrInferred.java deleted file mode 100644 index d6dc184..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrTypeRefOrInferred.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class KScrTypeRefOrInferred extends KScrAstElement{ - - public KScrTypeRefOrInferred(@NotNull ASTNode node){ - super(node); - } - - public Optional ref(){ - return PsiUtils.childOfType(this, KScrTypeRef.class); - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrVariableAssignment.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrVariableAssignment.java deleted file mode 100644 index c6c4211..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/KScrVariableAssignment.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrVariableAssignment extends KScrAstElement{ - - public KScrVariableAssignment(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrBlock.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrBlock.java deleted file mode 100644 index e4be868..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrBlock.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.common; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.KScrVarScope; -import org.comroid.kscr.intellij.psi.KScrVariable; -import org.comroid.kscr.intellij.psi.ast.statements.KScrStatement; -import org.comroid.kscr.intellij.psi.ast.statements.KScrStatementWrapper; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class KScrBlock extends KScrAstElement implements KScrVarScope, KScrStatement{ - - public KScrBlock(@NotNull ASTNode node){ - super(node); - } - - public List available(){ - // all wrapped KScrVariableDefs - // plus our super-scope's variable - var defined = PsiUtils.wrappedChildrenOfType(this, KScrVariable.class); - var available = new ArrayList<>(defined); - KScrVarScope.scopeOf(this).ifPresent(scope -> available.addAll(scope.available())); - return available; - } - - public Stream streamBody(){ - return PsiUtils.streamChildrenOfType(this, KScrStatementWrapper.class) - .flatMap(x -> Stream.ofNullable(x.inner().orElse(null))); - } - - public List getBody(){ - return streamBody().collect(Collectors.toList()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrCall.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrCall.java deleted file mode 100644 index a4f6efc..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrCall.java +++ /dev/null @@ -1,196 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.common; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.JvmMethod; -import com.intellij.lang.jvm.JvmModifier; -import com.intellij.lang.jvm.JvmParameter; -import com.intellij.lang.jvm.types.JvmArrayType; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.openapi.util.NlsSafe; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiNamedElement; -import com.intellij.psi.PsiReference; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.KScrIdPart; -import org.comroid.kscr.intellij.psi.ast.KScrMethod; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrIdExpr; -import org.comroid.kscr.intellij.psi.ast.statements.KScrStatement; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.utils.MethodUtils; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.stream.Collectors; - -public class KScrCall extends KScrAstElement implements PsiReference, KScrStatement{ - - public KScrCall(@NotNull ASTNode node){ - super(node); - } - - // FIXME: update to match compiler logic - - @Nullable - public JvmMethod resolveMethod(){ - class Target{ - final JvmMethod ref; - final int reach; - - Target(JvmMethod ref, int reach){ - this.ref = ref; - this.reach = reach; - } - } - // we don't necessarily have all arguments as children: - // our receiver is one level up - // pass expressions can be any number of levels up, so long as there's only passes or parenthesis - // TODO: super calls, constructors - KScrExpression on = getOn(); - List args = MethodUtils.getRealArgs(this); - String name = getCanonicalText(); - - List targets = new ArrayList<>(); - List candidates; - if(on != null){ - // TODO: consider types in brackets? - boolean isStatic = on instanceof KScrIdExpr && ((KScrIdExpr)on).resolveTarget() instanceof JvmClass; - candidates = JvmClassUtils.findAllMethodsInHierarchy(JvmClassUtils.asClass(on.type()), - m -> m.hasModifier(JvmModifier.STATIC) == isStatic, - false); - }else - candidates = getStandaloneCandidates(this); - - candidates: - for(JvmMethod x : candidates){ - // TODO: visibility - if(x.getName().equals(name)){ - List parameters = Arrays.stream(x.getParameters()).map(JvmParameter::getType).collect(Collectors.toList()); - int reach; - varargs: - if(x.isVarArgs()){ - if(args.size() < parameters.size() - 1) - break varargs; - reach = 2; - for(int i = 0; i < args.size(); i++){ - KScrExpression arg = args.get(i); - JvmType checking; - if(i + 1 < parameters.size()) - checking = parameters.get(i); - else{ - checking = parameters.get(parameters.size() - 1); - if(checking instanceof JvmArrayType){ - JvmArrayType arr = (JvmArrayType)checking; - checking = arr.getComponentType(); - }else - break varargs; // invalid varargs method - } - if(arg.isAssignableTo(checking)) - continue; - if(arg.isConvertibleTo(checking)){ - reach = 3; - continue; - } - break varargs; - } - targets.add(new Target(x, reach)); - } - if(x.getParameters().length != args.size()) - continue; - reach = 0; - for(int i = 0; i < parameters.size(); i++){ - JvmType pTarget = parameters.get(i); - // erase generics - // I'd put a to-do for generics, but this'll be rewritten anyways - pTarget = JvmClassUtils.eraseGenerics(pTarget, getProject()); - KScrExpression arg = args.get(i); - if(arg.type() != null && arg.isAssignableTo(pTarget)) - continue; - if(arg.isConvertibleTo(pTarget)){ - reach = 1; - continue; - } - continue candidates; - } - targets.add(new Target(x, reach)); - } - } - return targets - .stream() - .min(Comparator.comparingInt(x -> x.reach)) - .map(x -> x.ref) - .orElse(null); - } - - @NotNull - public static List getStandaloneCandidates(PsiElement at){ - List candidates; - var inMethod = PsiTreeUtil.getParentOfType(at, KScrMethod.class); - var inType = PsiTreeUtil.getParentOfType(at, KScrType.class); - if(inType != null) - candidates = (inMethod != null && inMethod.isStatic()) - ? inType.declaredMethods().stream().filter(x -> x.hasModifier(JvmModifier.STATIC)).collect(Collectors.toList()) - : new ArrayList<>(inType.declaredMethods()); - else - candidates = Collections.emptyList(); - return candidates; - } - - @Nullable - public KScrExpression getOn(){ - return PsiUtils.childOfType(getParent(), KScrExpression.class).orElse(null); - } - - public PsiReference getReference(){ - return getMethodName() != null ? this : null; - } - - public PsiElement getMethodName(){ - return PsiUtils.childOfType(this, KScrIdPart.class).orElse(null); - } - - public @NotNull PsiElement getElement(){ - return this; - } - - public @NotNull TextRange getRangeInElement(){ - return getMethodName().getTextRangeInParent(); - } - - public @Nullable PsiElement resolve(){ - var method = resolveMethod(); - PsiElement source = method != null ? method.getSourceElement() : null; - return source != null ? source.getNavigationElement() : null; - } - - public @NotNull @NlsSafe String getCanonicalText(){ - return getMethodName().getText(); - } - - public PsiElement handleElementRename(@NotNull String newElementName) throws IncorrectOperationException{ - getMethodName().replace(PsiUtils.createIdPartFromText(this, newElementName)); - return this; - } - - public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException{ - if(element instanceof PsiNamedElement) - getMethodName().replace(PsiUtils.createIdPartFromText(this, ((PsiNamedElement)element).getName())); - else - throw new IncorrectOperationException("Can't bind a method call to something that has no name!"); - return this; - } - - public boolean isReferenceTo(@NotNull PsiElement element){ - return element == resolve(); - } - - public boolean isSoft(){ - return false; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrInitialisation.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrInitialisation.java deleted file mode 100644 index 3e8eae6..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrInitialisation.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.common; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.statements.KScrStatement; -import org.jetbrains.annotations.NotNull; - -public class KScrInitialisation extends KScrAstElement implements KScrStatement{ - - public KScrInitialisation(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrParameter.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrParameter.java deleted file mode 100644 index dadd302..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrParameter.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.common; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiType; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.SearchScope; -import com.intellij.util.PlatformIcons; -import org.comroid.kscr.intellij.antlr_generated.KScrlicLangLexer; -import org.comroid.kscr.intellij.psi.KScrDefinitionStubElement; -import org.comroid.kscr.intellij.psi.KScrVariable; -import org.comroid.kscr.intellij.psi.Tokens; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.ast.types.KScrRecordComponents; -import org.comroid.kscr.intellij.psi.stubs.StubKScrParameter; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.comroid.kscr.intellij.psi.types.ArrayTypeImpl; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import java.util.Optional; - -public class KScrParameter extends KScrDefinitionStubElement implements KScrVariable{ - - public KScrParameter(@NotNull ASTNode node){ - super(node); - } - - public KScrParameter(@NotNull StubKScrParameter parameter){ - super(parameter, StubTypes.KSCR_PARAMETER); - } - - public String varName(){ - return getName(); - } - - public String getName(){ - var stub = getStub(); - if(stub != null) - return stub.name(); - return super.getName(); - } - - public JvmType varType(){ - var type = getTypeName() - .map(KScrTypeRef::asType) - .orElse(PsiType.NULL); - return isVarargs() ? ArrayTypeImpl.of(type) : type; - } - - public boolean hasModifier(String modifier){ - var stub = getStub(); - if(stub != null) - return stub.hasModifier(modifier); - - if(modifier.equals("final")) - return getNode().findChildByType(Tokens.getFor(KScrlicLangLexer.FINAL)) != null; - if(modifier.equals("private")) - return getParent() instanceof KScrRecordComponents; - return false; - } - - @NotNull - public Optional getTypeName(){ - var stub = getStub(); - if(stub != null){ - var type = PsiUtils.createTypeReferenceFromText(this, stub.typeText()); - return Optional.of((KScrTypeRef)type); - } - - return PsiUtils.childOfType(this, KScrTypeRef.class); - } - - public boolean isMethodParameter(){ - var stub = getStub(); - if(stub != null) - return !stub.isRecordComponent(); - - return !(getParent() instanceof KScrRecordComponents); - } - - public @NotNull SearchScope getUseScope(){ - return isMethodParameter() ? new LocalSearchScope(getContainingFile()) : super.getUseScope(); - } - - public @Nullable Icon getIcon(int flags){ - if(isMethodParameter()) - return PlatformIcons.PARAMETER_ICON; - else - return PlatformIcons.FIELD_ICON; - } - - public boolean isVarargs(){ - var stub = getStub(); - if(stub != null) - return stub.isVarargs(); - - return getNode().findChildByType(Tokens.getFor(KScrlicLangLexer.ELIPSES)) != null; - } - - public boolean isLocal(){ - return isMethodParameter(); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrVariableDef.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrVariableDef.java deleted file mode 100644 index e071f46..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/KScrVariableDef.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.common; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiPrimitiveType; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.SearchScope; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.PlatformIcons; -import org.comroid.kscr.intellij.psi.KScrDefinitionStubElement; -import org.comroid.kscr.intellij.psi.KScrModifiersHolder; -import org.comroid.kscr.intellij.psi.KScrVariable; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRefOrInferred; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.ast.statements.KScrStatement; -import org.comroid.kscr.intellij.psi.ast.statements.KScrStatementWrapper; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.stubs.StubKScrField; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.comroid.kscr.intellij.psi.types.ClassTypeImpl; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import java.util.Optional; - -public class KScrVariableDef extends KScrDefinitionStubElement - implements KScrVariable, KScrModifiersHolder, KScrStatement{ - - public KScrVariableDef(@NotNull ASTNode node){ - super(node); - } - - public KScrVariableDef(@NotNull StubKScrField field){ - super(field, StubTypes.KSCR_FIELD); - } - - public String varName(){ - return getName(); - } - - public JvmType varType(){ - var stub = getStub(); - if(stub != null){ - // val is allowed here for enum fields only - String text = stub.typeText(); - KScrType container = stub.getParentStubOfType(KScrType.class); - if(text.equals("val") && container != null) - return ClassTypeImpl.of(container); - var type = PsiUtils.createTypeReferenceFromText(this, text); - return Optional.of((KScrTypeRef)type) - .map(KScrTypeRef::asType) - .orElse(PsiPrimitiveType.NULL); - } - - return PsiUtils.childOfType(this, KScrTypeRefOrInferred.class) - .flatMap(KScrTypeRefOrInferred::ref) - .map(KScrTypeRef::asType) - // for var/val - .orElseGet(() -> { - if(!isLocal()){ - if(PsiUtils.childOfType(this, KScrTypeRefOrInferred.class).map(PsiElement::getText).orElse("").equals("val")) - return ClassTypeImpl.of(PsiTreeUtil.getParentOfType(this, KScrType.class)); - return PsiPrimitiveType.NULL; - } - return PsiUtils.childOfType(this, KScrExpression.class) - .map(KScrExpression::type) - .orElse(PsiPrimitiveType.NULL); - }); - } - - public boolean hasModifier(String modifier){ - if(modifier.equals("final") || modifier.equals("static") || modifier.equals("public")){ - var stub = getStub(); // only fields have stubs - if(stub != null){ - if(stub.typeText().equals("val")) - return true; - }else{ - var type = PsiUtils.childOfType(this, KScrTypeRefOrInferred.class); - if(!isLocal() && type.isPresent() && type.get().getText().equals("val")) - return true; - } - } - return KScrModifiersHolder.super.hasModifier(modifier); - } - - public boolean isLocal(){ - if(getStub() != null) - return false; - return PsiTreeUtil.getParentOfType(this, KScrStatementWrapper.class) != null; - } - - public Optional initializer(){ - if(getStub() != null) - return Optional.empty(); - return PsiUtils.childOfType(this, KScrExpression.class); - } - - public boolean hasInferredType(){ - if(getStub() != null) - return false; - return PsiUtils.childOfType(this, KScrTypeRef.class) - .map(x -> x.getText().equals("var") || x.getText().equals("val")) - .orElse(false); - } - - public @NotNull SearchScope getUseScope(){ - return (isLocal() || hasModifier("private")) ? new LocalSearchScope(getContainingFile()) : super.getUseScope(); - } - - public @Nullable Icon getIcon(int flags){ - if(isLocal()) - return PlatformIcons.VARIABLE_ICON; - else - return PlatformIcons.FIELD_ICON; - } - - public String getName(){ - var stub = getStub(); - if(stub != null) - return stub.name(); - return super.getName(); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/package-info.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/package-info.java deleted file mode 100644 index eee90e8..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/common/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * For Psi elements that play multiple roles, e.g. - *

- KScrCall can be a statement or an expression. - *

- KScrParameter can be a method parameter or record component. - */ -package org.comroid.kscr.intellij.psi.ast.common; \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrAffixOpExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrAffixOpExpr.java deleted file mode 100644 index a673db3..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrAffixOpExpr.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrAffixOpExpr extends KScrExpression{ - - public KScrAffixOpExpr(@NotNull ASTNode node){ - super(node); - } - - public String operation(){ - if(isPostfix()) - return getLastChild().getText(); - else - return getFirstChild().getText(); - } - - public boolean isPostfix(){ - return getFirstChild() instanceof KScrExpression; - } - - public Optional expression(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } - - public @Nullable JvmType type(){ - return expression().map(KScrExpression::type).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrArrayIndexExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrArrayIndexExpr.java deleted file mode 100644 index 1c6fe53..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrArrayIndexExpr.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmArrayType; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrArrayIndexExpr extends KScrExpression{ - - public KScrArrayIndexExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional arrayExpr(){ - return PsiUtils.childOfType(this, KScrExpression.class, 0); - } - - public Optional indexExpr(){ - return PsiUtils.childOfType(this, KScrExpression.class, 1); - } - - public @Nullable JvmType type(){ - return arrayExpr() - .map(KScrExpression::type) - .map(x -> x instanceof JvmArrayType ? x : null) - .map(x-> ((JvmArrayType)x).getComponentType()) - .orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrAssignExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrAssignExpr.java deleted file mode 100644 index f7feeff..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrAssignExpr.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrAssignExpr extends KScrExpression{ - - public KScrAssignExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional expression(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } - - public @Nullable JvmType type(){ - return expression().map(KScrExpression::type).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrBinaryExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrBinaryExpr.java deleted file mode 100644 index db246e5..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrBinaryExpr.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.types.JvmReferenceType; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiPrimitiveType; -import org.comroid.kscr.intellij.psi.ast.KScrBinaryOp; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Objects; -import java.util.Optional; - -import static org.comroid.kscr.intellij.psi.utils.JvmClassUtils.typeByName; - -public class KScrBinaryExpr extends KScrExpression{ - - public KScrBinaryExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional op(){ - return PsiUtils.childOfType(this, KScrBinaryOp.class); - } - - public String symbol(){ - return op().map(PsiElement::getText).orElse(""); - } - - public Optional left(){ - return PsiUtils.childOfType(this, KScrExpression.class, 0); - } - - public Optional right(){ - return PsiUtils.childOfType(this, KScrExpression.class, 1); - } - - public @Nullable JvmType type(){ - switch(symbol()){ - case "": - return null; - case "+": - // consider string addition - var lType = left().map(KScrExpression::type).orElse(null); - if(lType instanceof JvmReferenceType){ - var resolve = ((JvmReferenceType)lType).resolve(); - if(resolve instanceof JvmClass && Objects.equals(((JvmClass)resolve).getQualifiedName(), "java.lang.String")) - return typeByName("java.lang.String", getProject()); - } - var rType = right().map(KScrExpression::type).orElse(null); - if(rType instanceof JvmReferenceType){ - var resolve = ((JvmReferenceType)rType).resolve(); - if(resolve instanceof JvmClass && Objects.equals(((JvmClass)resolve).getQualifiedName(), "java.lang.String")) - return typeByName("java.lang.String", getProject()); - } - // otherwise fall-through - case "-": - case "*": - case "/": - case "%": - case "&": - case "|": - case "^": - case "<<": - case ">>": - case "<<<": - case ">>>": - return JvmClassUtils.highest( - left().map(KScrExpression::type).orElse(null), - right().map(KScrExpression::type).orElse(null)); - case "&&": - case "||": - case "==": - case "!=": - case ">=": - case "<=": - case ">": - case "<": - return PsiPrimitiveType.BOOLEAN; - case "|>": - return right().map(KScrExpression::type).orElse(null); - } - return null; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrCallExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrCallExpr.java deleted file mode 100644 index a3d2111..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrCallExpr.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmMethod; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.antlr_generated.KScrlicLangParser; -import org.comroid.kscr.intellij.psi.Tokens; -import org.comroid.kscr.intellij.psi.ast.common.KScrCall; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrCallExpr extends KScrExpression{ - - public KScrCallExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional call(){ - return PsiUtils.childOfType(this, KScrCall.class); - } - - public Optional on(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } - - public boolean isSuperCall(){ - return !PsiUtils.matchingChildren(this, k -> k.getNode().getElementType() == Tokens.getFor(KScrlicLangParser.SUPER)).isEmpty(); - } - - public @Nullable JvmType type(){ - return call().map(KScrCall::resolveMethod).map(JvmMethod::getReturnType).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrCastExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrCastExpr.java deleted file mode 100644 index 0d7d19a..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrCastExpr.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrCastExpr extends KScrExpression{ - - public KScrCastExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional castingTo(){ - return PsiUtils.childOfType(this, KScrElement.class).flatMap(x -> PsiUtils.childOfType(x, KScrTypeRef.class)); - } - - public @Nullable JvmType type(){ - return castingTo().map(KScrTypeRef::asType).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrClassLiteralExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrClassLiteralExpr.java deleted file mode 100644 index afad312..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrClassLiteralExpr.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiReference; -import org.comroid.kscr.intellij.psi.KScrIdHolder; -import org.comroid.kscr.intellij.psi.utils.KScrTypeReference; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import static org.comroid.kscr.intellij.psi.utils.JvmClassUtils.typeByName; - -public class KScrClassLiteralExpr extends KScrExpression implements KScrIdHolder{ - - public KScrClassLiteralExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - return typeByName("java.lang.Class", getProject()); - } - - public PsiReference getReference(){ - return getIdElement().map(id -> new KScrTypeReference(id, this)).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrExpression.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrExpression.java deleted file mode 100644 index 13c9712..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrExpression.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiPrimitiveType; -import com.intellij.psi.impl.source.tree.CompositeElement; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.lang.reflect.Field; - -public class KScrExpression extends KScrAstElement{ - - public KScrExpression(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - return PsiPrimitiveType.NULL; - } - - public boolean isAssignableTo(JvmType type){ - return JvmClassUtils.isAssignableTo(type(), type); - } - - public boolean isConvertibleTo(JvmType type){ - return JvmClassUtils.isConvertibleTo(type(), type); - } - - - - private static final Field COMPOSITE_ELEMENT_WRAPPER; - - static{ - try{ - COMPOSITE_ELEMENT_WRAPPER = CompositeElement.class.getDeclaredField("myWrapper"); - }catch(NoSuchFieldException e){ - throw new RuntimeException(e); - } - } - - public void subtreeChanged(){ - super.subtreeChanged(); - // TODO: - // Since all expressions share an element type (PSI type is based on sub-trees), the PSI type doesn't get invalidated properly. - // The proper fix would be to preserve ANTLR tag information and give each tagged alternative its own element type. - // setPsi actually checks for a null value, so we set it by reflection - try{ - COMPOSITE_ELEMENT_WRAPPER.setAccessible(true); - COMPOSITE_ELEMENT_WRAPPER.set(getNode(), null); - COMPOSITE_ELEMENT_WRAPPER.setAccessible(false); - }catch(IllegalAccessException e){ - throw new RuntimeException(e); - } - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrIdExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrIdExpr.java deleted file mode 100644 index 0c3e927..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrIdExpr.java +++ /dev/null @@ -1,232 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.JvmField; -import com.intellij.lang.jvm.types.JvmReferenceType; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.NlsSafe; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.comroid.kscr.intellij.antlr_generated.KScrlicLangLexer; -import org.comroid.kscr.intellij.psi.*; -import org.comroid.kscr.intellij.psi.ast.KScrIdPart; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.types.ClassTypeImpl; -import org.comroid.kscr.intellij.psi.types.JvmKScrlicField; -import org.comroid.kscr.intellij.psi.utils.ProjectTypeFinder; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Arrays; - -@SuppressWarnings("UnstableApiUsage") -public class KScrIdExpr extends KScrExpression implements PsiReference, KScrClassReference{ - - public KScrIdExpr(@NotNull ASTNode node){ - super(node); - } - - /* - Can resolve to: - - a local variable (int x = 0; int y = x;) - - a type (KScrExpression) - - a field (KScrExpression.COMPOSITE_ELEMENT_WRAPPER) - - a package (org.comroid.kscr.intellij.psi.elements.KScrExpression) - */ - - public String id(){ - return PsiUtils.childOfType(this, KScrIdPart.class).map(PsiElement::getText).orElse(""); - } - - @Nullable - public KScrExpression on(){ - return PsiUtils.childOfType(this, KScrExpression.class).orElse(null); - } - - @Nullable - public PsiElement dot(){ - return Arrays.stream(getChildren()) - .filter(x -> x.getNode().getElementType() == Tokens.getFor(KScrlicLangLexer.DOT)) - .findFirst() - .orElse(null); - } - - // [JvmClass | PsiPackage | KScrVariable | JvmField | String | null] - public Object resolveTarget(){ - var on = on(); - String id = id(); - if(on == null){ - var scope = KScrVarScope.scopeOf(this); - if(scope.isPresent()){ - var available = scope.get().available(); - var byName = available.stream().filter(x -> x.varName().equals(id)).findFirst(); - if(byName.isPresent()) - return byName.get(); - } - KScrType inside = PsiTreeUtil.getParentOfType(this, KScrType.class); - var inMethod = PsiTreeUtil.getParentOfType(this, KScrCodeHolder.class); - if(inside != null){ - var field = inside.fields().stream() - .filter(x -> x.varName().equals(id)) - .filter(x -> inMethod == null || !inMethod.isStatic() || x.hasModifier("static")) - .findFirst() - .orElse(null); - if(field != null) - return field; - } - return resolveById(id, getContainingFile(), getProject()); - }else{ - Object ret = null; - if(on instanceof KScrIdExpr){ - var res = ((KScrIdExpr)on).resolveTarget(); - if(res == null) - return null; - String narrowId = id; - if(res instanceof String) - narrowId = res + "." + narrowId; - if(res instanceof PsiPackage) - narrowId = ((PsiPackage)res).getQualifiedName() + "." + narrowId; - ret = resolveById(narrowId, getContainingFile(), getProject()); - } - JvmType type = on.type(); - if(!(type instanceof JvmReferenceType)) - return ret; - var res = ((JvmReferenceType)type).resolve(); - if(!(res instanceof JvmClass)) - return ret; - return Arrays.stream(((JvmClass)res).getFields()) - .filter(x -> x.getName().equals(id)) - .findFirst() - .map(Object.class::cast) - .orElse(ret); - } - } - - @NotNull - private static Object resolveById(String id, PsiFile file, Project project){ - if(file instanceof KScrFile){ - var type = ProjectTypeFinder.firstType(project, ProjectTypeFinder.getCandidates((KScrFile)file, id)); - if(type != null) - return type; - } - var psiPackage = JavaPsiFacade.getInstance(project).findPackage(id); - if(psiPackage != null) - return psiPackage; - return id; - } - - public @Nullable JvmType type(){ - var res = resolveTarget(); - if(res instanceof JvmClass) - return ClassTypeImpl.of((JvmClass)res); - if(res instanceof KScrVariable) - return ((KScrVariable)res).varType(); - if(res instanceof JvmField) - return ((JvmField)res).getType(); - return null; - } - - public PsiReference getReference(){ - return this; - } - - public @NotNull PsiElement getElement(){ - return this; - } - - public @NotNull TextRange getRangeInElement(){ - return PsiUtils.childOfType(this, KScrIdPart.class).map(PsiElement::getTextRangeInParent).orElse(getTextRangeInParent()); - } - - public @Nullable PsiElement resolve(){ - var res = resolveTarget(); - if(res instanceof JvmClass) - return ((JvmClass)res).getSourceElement(); - if(res instanceof PsiElement) - return (PsiElement)res; - if(res instanceof JvmKScrlicField) - return ((JvmKScrlicField)res).getSourceElement(); - return null; - } - - public @NotNull @NlsSafe String getCanonicalText(){ - var res = resolveTarget(); - if(res instanceof JvmClass){ - var qName = ((JvmClass)res).getQualifiedName(); - return qName != null ? qName : ""; - } - if(res instanceof PsiPackage) - return ((PsiPackage)res).getQualifiedName(); - if(res instanceof KScrVariable) - return ((KScrVariable)res).varName(); - return ""; - } - - public PsiElement handleElementRename(@NotNull String name) throws IncorrectOperationException{ - PsiUtils.childOfType(this, KScrIdPart.class).ifPresent(id -> id.replace(PsiUtils.createIdPartFromText(this, name))); - return this; - } - - public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException{ - if(element instanceof PsiNamedElement){ - PsiUtils.childOfType(this, KScrIdPart.class).ifPresent(id -> id.replace(PsiUtils.createIdPartFromText(this, ((PsiNamedElement)element).getName()))); - return this; - } - throw new IncorrectOperationException("Can't bind an ID expression to something that has no name!"); - } - - public boolean isReferenceTo(@NotNull PsiElement element){ - var res = resolveTarget(); - if(res instanceof JvmClass) - return ((JvmClass)res).getSourceElement() == element; - if(res instanceof PsiElement) - return res == element; - if(res instanceof JvmField) - return ((JvmField)res).getSourceElement() == element; - return false; - } - - public boolean isSoft(){ - return false; - } - - public @Nullable JvmClass resolveClass(){ - var ref = resolveTarget(); - if(ref instanceof JvmClass) - return (JvmClass)ref; - return null; - } - - public boolean isQualified(){ - return on() != null; - } - - public @Nullable KScrFile containingKScrlicFile(){ - var file = getContainingFile(); - return file instanceof KScrFile ? (KScrFile)file : null; - } - - public void shortenReference(){ - var on = on(); - if(on != null) - on.delete(); - var dot = dot(); - if(dot != null) - dot.delete(); - } - - public @Nullable TextRange getQualifierRange(){ - var on = on(); - if(on == null) - return null; - var dot = dot(); - if(dot == null) - return on.getTextRangeInParent(); - return on.getTextRangeInParent().union(dot.getTextRangeInParent()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrInitialisationExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrInitialisationExpr.java deleted file mode 100644 index d024723..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrInitialisationExpr.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrInitialisationExpr extends KScrExpression{ - - public KScrInitialisationExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional initialising(){ - return PsiUtils.childOfType(this, KScrElement.class).flatMap(x -> PsiUtils.childOfType(x, KScrTypeRef.class)); - } - - public @Nullable JvmType type(){ - return initialising().map(KScrTypeRef::asType).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrInstanceOfExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrInstanceOfExpr.java deleted file mode 100644 index 7c9c86c..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrInstanceOfExpr.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrInstanceOfExpr extends KScrExpression{ - - public KScrInstanceOfExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - return PsiType.BOOLEAN; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrLiteralExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrLiteralExpr.java deleted file mode 100644 index 5f34917..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrLiteralExpr.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiType; -import org.comroid.kscr.intellij.psi.Tokens; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrLiteralExpr extends KScrExpression{ - - public KScrLiteralExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - if(getNode().findChildByType(Tokens.TOK_NULL) != null) - return PsiType.NULL; - if(getNode().findChildByType(Tokens.TOK_BOOLLIT) != null) - return PsiType.BOOLEAN; - // TODO: implicit conversions - if(getNode().findChildByType(Tokens.TOK_INTLIT) != null) - return PsiType.INT; - if(getNode().findChildByType(Tokens.TOK_DECLIT) != null) - return PsiType.DOUBLE; - return null; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrNewArrayExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrNewArrayExpr.java deleted file mode 100644 index 064c5b0..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrNewArrayExpr.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.types.ArrayTypeImpl; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrNewArrayExpr extends KScrExpression{ - - public KScrNewArrayExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional elementType(){ - return PsiUtils.childOfType(this, KScrElement.class).flatMap(x -> PsiUtils.childOfType(x, KScrTypeRef.class)); - } - - public @Nullable JvmType type(){ - return elementType().map(KScrTypeRef::asType).map(ArrayTypeImpl::of).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrNewListArrayExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrNewListArrayExpr.java deleted file mode 100644 index 1727b48..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrNewListArrayExpr.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.types.ArrayTypeImpl; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrNewListArrayExpr extends KScrExpression{ - - public KScrNewListArrayExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional elementType(){ - return PsiUtils.childOfType(this, KScrElement.class).flatMap(x -> PsiUtils.childOfType(x, KScrTypeRef.class)); - } - - public @Nullable JvmType type(){ - return elementType().map(KScrTypeRef::asType).map(ArrayTypeImpl::of).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrParenthesisedExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrParenthesisedExpr.java deleted file mode 100644 index b9ba3dd..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrParenthesisedExpr.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrParenthesisedExpr extends KScrExpression{ - - public KScrParenthesisedExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - var parenthesised = PsiUtils.childOfType(this, KScrExpression.class); - return parenthesised.map(KScrExpression::type).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrStringLiteralExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrStringLiteralExpr.java deleted file mode 100644 index 100afdb..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrStringLiteralExpr.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import static org.comroid.kscr.intellij.psi.utils.JvmClassUtils.typeByName; - -public class KScrStringLiteralExpr extends KScrExpression{ - - public KScrStringLiteralExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - return typeByName("java.lang.String", getProject()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrThisExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrThisExpr.java deleted file mode 100644 index 0279626..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/expressions/KScrThisExpr.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.util.PsiTreeUtil; -import org.comroid.kscr.intellij.psi.KScrCodeHolder; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrThisExpr extends KScrExpression{ - - public KScrThisExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - var method = PsiTreeUtil.getParentOfType(this, KScrCodeHolder.class); - if(method == null || method.isStatic()) - return null; - return JvmClassUtils.asType(method.containingType()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrAssertStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrAssertStatement.java deleted file mode 100644 index 96647fe..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrAssertStatement.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class KScrAssertStatement extends KScrAstElement implements KScrStatement{ - - public KScrAssertStatement(@NotNull ASTNode node){ - super(node); - } - - public Optional condition(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrBreakStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrBreakStatement.java deleted file mode 100644 index 5331799..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrBreakStatement.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrBreakStatement extends KScrAstElement implements KScrStatement{ - - public KScrBreakStatement(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrCatchBlock.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrCatchBlock.java deleted file mode 100644 index 8b40802..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrCatchBlock.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiType; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.SearchScope; -import com.intellij.util.PlatformIcons; -import org.comroid.kscr.intellij.psi.KScrDefinitionAstElement; -import org.comroid.kscr.intellij.psi.KScrVarScope; -import org.comroid.kscr.intellij.psi.KScrVariable; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.ast.common.KScrBlock; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -// Introduces the catch variable into scope -// Not picked up by KScrBlock - not a KScrStatement, part of KScrTryCatchStatement -public class KScrCatchBlock extends KScrDefinitionAstElement implements KScrVariable, KScrVarScope{ - - public KScrCatchBlock(@NotNull ASTNode node){ - super(node); - } - - public Optional body(){ - return PsiUtils.childOfType(this, KScrBlock.class).map(x -> x); - } - - public String varName(){ - return getName(); - } - - public JvmType varType(){ - return PsiUtils.childOfType(this, KScrTypeRef.class) - .map(KScrTypeRef::asType) - .orElse(PsiType.NULL); - } - - public boolean hasModifier(String modifier){ - return false; - } - - public boolean isLocal(){ - return true; - } - - public List available(){ - List superScope = new ArrayList<>(KScrVarScope.scopeOf(this).map(KScrVarScope::available).orElse(List.of())); - superScope.add(this); - return superScope; - } - - public @Nullable Icon getIcon(int flags){ - return PlatformIcons.VARIABLE_ICON; - } - - public @NotNull SearchScope getUseScope(){ - return new LocalSearchScope(getContainingFile()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrConstructorCallStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrConstructorCallStatement.java deleted file mode 100644 index d03f699..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrConstructorCallStatement.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrConstructorCallStatement extends KScrAstElement implements KScrStatement{ - - public KScrConstructorCallStatement(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrContinueStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrContinueStatement.java deleted file mode 100644 index 8ff1b8e..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrContinueStatement.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrContinueStatement extends KScrAstElement implements KScrStatement{ - - public KScrContinueStatement(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrDoWhileStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrDoWhileStatement.java deleted file mode 100644 index 443cd2b..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrDoWhileStatement.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class KScrDoWhileStatement extends KScrAstElement implements KScrStatement{ - - public KScrDoWhileStatement(@NotNull ASTNode node){ - super(node); - } - - public Optional body(){ - return PsiUtils.childOfType(this, KScrStatement.class); - } - - public Optional condition(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrElseClause.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrElseClause.java deleted file mode 100644 index 248fa2d..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrElseClause.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -// not a KScrStatement, part of KScrIfStatement -public class KScrElseClause extends KScrAstElement{ - - public KScrElseClause(@NotNull ASTNode node){ - super(node); - } - - public Optional body(){ - return PsiUtils.childOfType(this, KScrStatementWrapper.class) - .flatMap(KScrStatementWrapper::inner); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrFinallyBlock.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrFinallyBlock.java deleted file mode 100644 index 4f79f34..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrFinallyBlock.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.common.KScrBlock; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -// not a KScrStatement, part of KScrTryCatchStatement -public class KScrFinallyBlock extends KScrAstElement{ - - public KScrFinallyBlock(@NotNull ASTNode node){ - super(node); - } - - public Optional body(){ - return PsiUtils.childOfType(this, KScrBlock.class).map(x -> x); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrForStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrForStatement.java deleted file mode 100644 index ed61581..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrForStatement.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.KScrVarScope; -import org.comroid.kscr.intellij.psi.KScrVariable; -import org.comroid.kscr.intellij.psi.ast.common.KScrVariableDef; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -public class KScrForStatement extends KScrAstElement implements KScrStatement, KScrVarScope{ - - public KScrForStatement(@NotNull ASTNode node){ - super(node); - } - - public Optional start(){ - return PsiUtils.childOfType(this, KScrStatementWrapper.class, 0); - } - - public Optional condition(){ - return PsiUtils.childOfType(this, KScrExpression.class, 0); - } - - public Optional updater(){ - return PsiUtils.childOfType(this, KScrStatementWrapper.class, 1); - } - - public Optional body(){ - return PsiUtils.childOfType(this, KScrStatementWrapper.class, 2); - } - - public List available(){ - List superScope = new ArrayList<>(KScrVarScope.scopeOf(this).map(KScrVarScope::available).orElse(List.of())); - // add the index variable (or whatever) - start().flatMap(KScrStatementWrapper::inner).ifPresent(s -> { - if(s instanceof KScrVariableDef) - superScope.add((KScrVariable)s); - }); - return superScope; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrForeachStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrForeachStatement.java deleted file mode 100644 index 2ec523c..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrForeachStatement.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.JvmClassKind; -import com.intellij.lang.jvm.types.JvmArrayType; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.SearchScope; -import com.intellij.util.PlatformIcons; -import org.comroid.kscr.intellij.antlr_generated.KScrlicLangLexer; -import org.comroid.kscr.intellij.psi.KScrDefinitionAstElement; -import org.comroid.kscr.intellij.psi.KScrVariable; -import org.comroid.kscr.intellij.psi.Tokens; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRefOrInferred; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrIdExpr; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import java.util.Optional; - -import static org.comroid.kscr.intellij.psi.utils.JvmClassUtils.typeByName; - -// Introduces the for-each variable into scope -// Picked up by KScrBlock -public class KScrForeachStatement extends KScrDefinitionAstElement implements KScrVariable, KScrStatement{ - - public KScrForeachStatement(@NotNull ASTNode node){ - super(node); - } - - public String varName(){ - return getName(); - } - - public JvmType varType(){ - // TODO: once the compiler supports Iterables that aren't Objects, update to match - return PsiUtils.childOfType(this, KScrTypeRefOrInferred.class) - .flatMap(KScrTypeRefOrInferred::ref) - .map(KScrTypeRef::asType) - // for var/val - .orElseGet(() -> { - Optional expression = PsiUtils.childOfType(this, KScrExpression.class); - if(expression.isPresent()){ - KScrExpression expr = expression.get(); - if(expr instanceof KScrIdExpr){ - var target = ((KScrIdExpr)expr).resolveTarget(); - if(target instanceof JvmClass && ((JvmClass)target).getClassKind() == JvmClassKind.ENUM) - return expr.type(); - } - var baseType = expr.type(); - if(baseType instanceof JvmArrayType) - return ((JvmArrayType)baseType).getComponentType(); - } - return typeByName("java.lang.Object", getProject()); - }); - } - - public boolean hasModifier(String modifier){ - if(!modifier.equals("final")) - return false; - return getNode().findChildByType(Tokens.getFor(KScrlicLangLexer.FINAL)) != null; - } - - public boolean isLocal(){ - return true; - } - - public @NotNull SearchScope getUseScope(){ - return new LocalSearchScope(getContainingFile()); - } - - public Optional iterator(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } - - public Optional body(){ - return PsiUtils.childOfType(this, KScrStatement.class); - } - - public @Nullable Icon getIcon(int flags){ - return PlatformIcons.VARIABLE_ICON; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrIfStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrIfStatement.java deleted file mode 100644 index 802234e..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrIfStatement.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class KScrIfStatement extends KScrAstElement implements KScrStatement{ - - public KScrIfStatement(@NotNull ASTNode node){ - super(node); - } - - public Optional body(){ - return PsiUtils.childOfType(this, KScrStatementWrapper.class) - .flatMap(KScrStatementWrapper::inner); - } - - public Optional elseClause(){ - return PsiUtils.childOfType(this, KScrElseClause.class); - } - - public Optional elseBody(){ - return elseClause().flatMap(KScrElseClause::body); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrReturnStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrReturnStatement.java deleted file mode 100644 index f62c3f9..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrReturnStatement.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrReturnStatement extends KScrAstElement implements KScrStatement{ - - public KScrReturnStatement(@NotNull ASTNode node){ - super(node); - } - - public Optional returns(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } - - @Nullable("Null means no expression") - public JvmType returnType(){ - return returns().map(KScrExpression::type).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrStatement.java deleted file mode 100644 index 0b56a56..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrStatement.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.psi.PsiElement; - -public interface KScrStatement extends PsiElement{ - - -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrStatementWrapper.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrStatementWrapper.java deleted file mode 100644 index e453584..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrStatementWrapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class KScrStatementWrapper extends KScrAstElement{ - - public KScrStatementWrapper(@NotNull ASTNode node){ - super(node); - } - - public Optional inner(){ - return PsiUtils.childOfType(this, KScrStatement.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrSwitchStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrSwitchStatement.java deleted file mode 100644 index 1cd6686..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrSwitchStatement.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrSwitchStatement extends KScrAstElement implements KScrStatement{ - - public KScrSwitchStatement(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrThrowStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrThrowStatement.java deleted file mode 100644 index 1a1b150..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrThrowStatement.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class KScrThrowStatement extends KScrAstElement implements KScrStatement{ - - public KScrThrowStatement(@NotNull ASTNode node){ - super(node); - } - - public Optional returns(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrTryCatchStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrTryCatchStatement.java deleted file mode 100644 index 75d6918..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrTryCatchStatement.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.common.KScrBlock; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class KScrTryCatchStatement extends KScrAstElement implements KScrStatement{ - - public KScrTryCatchStatement(@NotNull ASTNode node){ - super(node); - } - - public Optional body(){ - return PsiUtils.childOfType(this, KScrBlock.class).map(x -> x); // lol - } - - public Stream streamCatchBlocks(){ - return PsiUtils.streamChildrenOfType(this, KScrCatchBlock.class); - } - - public List getCatchBlocks(){ - return PsiUtils.childrenOfType(this, KScrCatchBlock.class); - } - - public Stream streamCatchBodies(){ - return streamCatchBlocks() - .map(KScrCatchBlock::body) - .flatMap(x -> Stream.ofNullable(x.orElse(null))); - } - - public List getCatchBodies(){ - return streamCatchBodies().collect(Collectors.toList()); - } - - public Optional finallyBlock(){ - return PsiUtils.childOfType(this, KScrFinallyBlock.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrVarAssignStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrVarAssignStatement.java deleted file mode 100644 index 53143a0..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrVarAssignStatement.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrVarAssignStatement extends KScrAstElement implements KScrStatement{ - - public KScrVarAssignStatement(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrVarIncrementStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrVarIncrementStatement.java deleted file mode 100644 index 162c3c1..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrVarIncrementStatement.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.jetbrains.annotations.NotNull; - -public class KScrVarIncrementStatement extends KScrAstElement implements KScrStatement{ - - public KScrVarIncrementStatement(@NotNull ASTNode node){ - super(node); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrWhileStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrWhileStatement.java deleted file mode 100644 index b35ed77..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrWhileStatement.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class KScrWhileStatement extends KScrAstElement implements KScrStatement{ - - public KScrWhileStatement(@NotNull ASTNode node){ - super(node); - } - - public Optional condition(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } - - public Optional body(){ - return PsiUtils.childOfType(this, KScrStatement.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrYieldStatement.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrYieldStatement.java deleted file mode 100644 index 73f163a..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/statements/KScrYieldStatement.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.statements; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrAstElement; -import org.comroid.kscr.intellij.psi.ast.expressions.KScrExpression; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class KScrYieldStatement extends KScrAstElement implements KScrStatement{ - - public KScrYieldStatement(@NotNull ASTNode node){ - super(node); - } - - public Optional yields(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrClassList.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrClassList.java deleted file mode 100644 index c00447d..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrClassList.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.types; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.stubs.IStubElementType; -import org.comroid.kscr.intellij.psi.KScrStubElement; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.stubs.StubKScrClassList; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - -public abstract class KScrClassList> extends KScrStubElement>{ - - public KScrClassList(@NotNull ASTNode node){ - super(node); - } - - public KScrClassList(@NotNull StubKScrClassList list, @NotNull IStubElementType nodeType){ - super(list, nodeType); - } - - @NotNull - public List elements(){ - return PsiUtils - .streamChildrenOfType(this, KScrTypeRef.class) - .map(KScrTypeRef::asClass) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - @NotNull - public List elementNames(){ - var stub = getStub(); - if(stub != null) - return stub.elementFqNames(); - - return PsiUtils - .streamChildrenOfType(this, KScrTypeRef.class) - .map(PsiElement::getText) - .collect(Collectors.toList()); - } - - @NotNull - public Optional first(){ - return PsiUtils - .streamChildrenOfType(this, KScrTypeRef.class) - .map(KScrTypeRef::asClass) - .filter(Objects::nonNull) - .findFirst(); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrExtendsClause.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrExtendsClause.java deleted file mode 100644 index db2a8de..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrExtendsClause.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.types; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.stubs.StubKScrClassList; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.NotNull; - -public class KScrExtendsClause extends KScrClassList{ - - public KScrExtendsClause(@NotNull ASTNode node){ - super(node); - } - - public KScrExtendsClause(@NotNull StubKScrClassList list){ - super(list, StubTypes.KSCR_EXTENDS_LIST); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrImplementsClause.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrImplementsClause.java deleted file mode 100644 index 4a543f1..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrImplementsClause.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.types; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.stubs.StubKScrClassList; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.NotNull; - -public class KScrImplementsClause extends KScrClassList{ - - public KScrImplementsClause(@NotNull ASTNode node){ - super(node); - } - - public KScrImplementsClause(@NotNull StubKScrClassList list){ - super(list, StubTypes.KSCR_IMPLEMENTS_LIST); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrMemberWrapper.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrMemberWrapper.java deleted file mode 100644 index f8b70e0..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrMemberWrapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.types; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrStubElement; -import org.comroid.kscr.intellij.psi.stubs.StubKScrMemberWrapper; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.NotNull; - -public class KScrMemberWrapper extends KScrStubElement{ - - public KScrMemberWrapper(@NotNull ASTNode node){ - super(node); - } - - public KScrMemberWrapper(@NotNull StubKScrMemberWrapper stub){ - super(stub, StubTypes.KSCR_MEMBER); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrPermitsClause.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrPermitsClause.java deleted file mode 100644 index 791ac10..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrPermitsClause.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.types; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.stubs.StubKScrClassList; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.NotNull; - -public class KScrPermitsClause extends KScrClassList{ - - public KScrPermitsClause(@NotNull ASTNode node){ - super(node); - } - - public KScrPermitsClause(@NotNull StubKScrClassList list){ - super(list, StubTypes.KSCR_PERMITS_LIST); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrRecordComponents.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrRecordComponents.java deleted file mode 100644 index 65a8bcb..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrRecordComponents.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.types; - -import com.intellij.lang.ASTNode; -import org.comroid.kscr.intellij.psi.KScrStubElement; -import org.comroid.kscr.intellij.psi.ast.common.KScrParameter; -import org.comroid.kscr.intellij.psi.stubs.StubKScrRecordComponents; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -public class KScrRecordComponents extends KScrStubElement{ - - public KScrRecordComponents(@NotNull ASTNode node){ - super(node); - } - - public KScrRecordComponents(@NotNull StubKScrRecordComponents components){ - super(components, StubTypes.KSCR_RECORD_COMPONENTS); - } - - public List components(){ - return PsiUtils.childrenOfType(this, KScrParameter.class); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrType.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrType.java deleted file mode 100644 index 8df7653..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/ast/types/KScrType.java +++ /dev/null @@ -1,235 +0,0 @@ -package org.comroid.kscr.intellij.psi.ast.types; - -import com.intellij.icons.AllIcons; -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.JvmMethod; -import com.intellij.openapi.project.DumbService; -import com.intellij.psi.CommonClassNames; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.impl.source.tree.SharedImplUtil; -import com.intellij.psi.stubs.IStubElementType; -import com.intellij.psi.stubs.StubElement; -import com.intellij.ui.LayeredIcon; -import com.intellij.util.IncorrectOperationException; -import com.intellij.util.PlatformIcons; -import com.intellij.util.ui.EDT; -import org.comroid.kscr.intellij.KScrlicIcons; -import org.comroid.kscr.intellij.antlr_generated.KScrlicLangParser; -import org.comroid.kscr.intellij.asJava.AsPsiUtil; -import org.comroid.kscr.intellij.psi.*; -import org.comroid.kscr.intellij.psi.ast.KScrFileWrapper; -import org.comroid.kscr.intellij.psi.ast.KScrMethod; -import org.comroid.kscr.intellij.psi.ast.KScrPackageStatement; -import org.comroid.kscr.intellij.psi.ast.common.KScrParameter; -import org.comroid.kscr.intellij.psi.ast.common.KScrVariableDef; -import org.comroid.kscr.intellij.psi.stubs.*; -import org.comroid.kscr.intellij.psi.types.KScrKind; -import org.comroid.kscr.intellij.psi.types.JvmKScrlicClass; -import org.comroid.kscr.intellij.psi.types.JvmKScrlicMethod; -import org.comroid.kscr.intellij.psi.utils.KScrModifiersHolder; -import org.comroid.kscr.intellij.psi.utils.ProjectTypeFinder; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class KScrType extends KScrDefinitionStubElement implements KScrModifiersHolder { - - public KScrType(@NotNull ASTNode node){ - super(node); - } - - public KScrType(@NotNull StubKScrType stub){ - super(stub, StubTypes.KSCR_TYPE); - } - - public boolean isTopLevelType(){ - return getParent() instanceof KScrFileWrapper; - } - - public String getPackageName(){ - if(getContainingFile() instanceof KScrFile){ - KScrFile file = (KScrFile)getContainingFile(); - return file.getPackage().map(KScrPackageStatement::getPackageName).orElse(""); - } - return ""; - } - - public @NotNull String fullyQualifiedName(){ - var stub = getStub(); - if(stub != null) - return stub.fullyQualifiedName(); - - // avoids PsiInvalidElementAccessException by skipping the stub-based implementation that doesn't work here anyways - PsiFile file = SharedImplUtil.getContainingFile(getNode()); - if(file instanceof KScrFile) - return ((KScrFile)file).getPackage().map(k -> k.getPackageName() + ".").orElse("") + super.fullyQualifiedName(); - return super.fullyQualifiedName(); - } - - public @NotNull KScrKind kind(){ - var stub = getStub(); - if(stub != null) - return stub.kind(); - - var objType = getNode().findChildByType(Tokens.getRuleFor(KScrlicLangParser.RULE_objectType)); - if(objType != null){ - if(objType.findChildByType(Tokens.TOK_CLASS) != null) - return KScrKind.CLASS; - if(objType.findChildByType(Tokens.TOK_INTERFACE) != null) - return KScrKind.INTERFACE; - if(objType.findChildByType(Tokens.TOK_ANNOTATION) != null || objType.findChildByType(Tokens.TOK_AT) != null) - return KScrKind.ANNOTATION; - if(objType.findChildByType(Tokens.TOK_ENUM) != null) - return KScrKind.ENUM; - if(objType.findChildByType(Tokens.TOK_RECORD) != null) - return KScrKind.RECORD; - if(objType.findChildByType(Tokens.TOK_SINGLE) != null) - return KScrKind.SINGLE; - } - return KScrKind.CLASS; - } - - public boolean isFinal(){ - return hasModifier("final"); - } - - @SuppressWarnings("unchecked") - public @NotNull List declaredMethods(){ - var stub = getStub(); - if(stub != null){ - ArrayList methods = stub.getChildrenStubs().stream() - .filter(StubKScrMemberWrapper.class::isInstance) - .flatMap(x -> (Stream>)x.getChildrenStubs().stream()) - .filter(StubKScrMethod.class::isInstance) - .map(StubKScrMethod.class::cast) - .map(StubElement::getPsi) - .map(JvmKScrlicMethod::of) - .collect(Collectors.toCollection(ArrayList::new)); - var recComponents = stub.findChildStubByType(StubTypes.KSCR_RECORD_COMPONENTS); - if(recComponents != null){ - var comps = recComponents.components(); - for(StubKScrParameter comp : comps) - if(methods.stream().noneMatch(m -> m.getParameters().length == 0 && Objects.equals(m.getName(), comp.name()))) - methods.add(AsPsiUtil.recordAccessorMethod(comp.getPsi())); - } - return methods; - } - - List methods - = PsiUtils.wrappedChildrenOfType(this, KScrMethod.class).stream().map(JvmKScrlicMethod::of).collect(Collectors.toList()); - List components = PsiUtils.childOfType(this, KScrRecordComponents.class) - .map(KScrRecordComponents::components) - .orElse(List.of()); - for(KScrParameter comp : components) - if(methods.stream().noneMatch(m -> m.getParameters().length == 0 && Objects.equals(m.getName(), comp.varName()))) - methods.add(AsPsiUtil.recordAccessorMethod(comp)); - return methods; - } - - public @NotNull List fields(){ - List defs = new ArrayList<>(PsiUtils.wrappedChildrenOfType(this, KScrVariableDef.class)); - PsiUtils.childOfType(this, KScrRecordComponents.class).ifPresent(rc -> defs.addAll(rc.components())); - return defs; - } - - public PsiElement setName(@NotNull String name) throws IncorrectOperationException{ - // also change the file name if top level - if(isTopLevelType()) - getContainingFile().setName(name + ".kscr"); - return super.setName(name); - } - - public List getMembers(){ - return PsiUtils.childrenOfType(this, KScrMemberWrapper.class); - } - - public @NotNull String name(){ - return getName(); - } - - public @Nullable Icon getIcon(int flags){ - var result = KScrlicIcons.KScr_FILE; - var objType = getNode().findChildByType(Tokens.getRuleFor(KScrlicLangParser.RULE_objectType)); - if(objType != null){ - if(objType.findChildByType(Tokens.TOK_CLASS) != null) - result = PlatformIcons.CLASS_ICON; - else if(objType.findChildByType(Tokens.TOK_INTERFACE) != null) - result = PlatformIcons.INTERFACE_ICON; - else if(objType.findChildByType(Tokens.TOK_ANNOTATION) != null || objType.findChildByType(Tokens.TOK_AT) != null) - result = PlatformIcons.ANNOTATION_TYPE_ICON; - else if(objType.findChildByType(Tokens.TOK_ENUM) != null) - result = PlatformIcons.ENUM_ICON; - else if(objType.findChildByType(Tokens.TOK_RECORD) != null) - result = PlatformIcons.RECORD_ICON; - else if(objType.findChildByType(Tokens.TOK_SINGLE) != null) - result = AllIcons.Nodes.Static; - } - if(!DumbService.isDumb(getProject()) - && !EDT.isCurrentThreadEdt() // TODO: can this can be refactored to not require slow operations? - && JvmClassUtils.hasMainMethod(JvmKScrlicClass.of(this))) - result = new LayeredIcon(result, AllIcons.Nodes.RunnableMark); - return new LayeredIcon(result, KScrlicIcons.KScr_DECORATION); - } - - @Nullable - public JvmClass getSuperType(){ - if(kind() == KScrKind.INTERFACE) - return null; - if(kind() == KScrKind.RECORD) - return JvmClassUtils.classByName(CommonClassNames.JAVA_LANG_RECORD, getProject()); - if(kind() == KScrKind.ENUM) - return JvmClassUtils.classByName(CommonClassNames.JAVA_LANG_ENUM, getProject()); - - var object = JvmClassUtils.classByName(CommonClassNames.JAVA_LANG_OBJECT, getProject()); - - var stub = getStub(); - if(stub != null){ - var extList = stub.extendsList(); - if(extList != null){ - var names = extList.elementFqNames(); - if(names.size() > 0) - return ProjectTypeFinder.getByName(getProject(), names.get(0), this); - else - return object; - } - } - - var exts = PsiUtils.childOfType(this, KScrExtendsClause.class); - return exts.flatMap(KScrClassList::first).orElse(object); - } - - @NotNull - public List getInterfaces(){ - var stub = getStub(); - if(stub != null){ - var cl = (kind() == KScrKind.INTERFACE) ? stub.extendsList() : stub.implementsList(); - if(cl != null){ - var names = cl.elementFqNames(); - return names.stream() - .map(x -> ProjectTypeFinder.getByName(getProject(), x, this)) - .collect(Collectors.toList()); - } - } - - Optional> list; - if(kind() == KScrKind.INTERFACE) - list = PsiUtils.childOfType(this, KScrExtendsClause.class); - else - list = PsiUtils.childOfType(this, KScrImplementsClause.class); - return list.map(KScrClassList::elements).orElse(List.of()); - } - - public IStubElementType getElementType(){ - return StubTypes.KSCR_TYPE; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrAffixOpExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrAffixOpExpr.java deleted file mode 100644 index a05882c..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrAffixOpExpr.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrAffixOpExpr extends KScrExpression{ - - public KScrAffixOpExpr(@NotNull ASTNode node){ - super(node); - } - - public String operation(){ - if(isPostfix()) - return getLastChild().getText(); - else - return getFirstChild().getText(); - } - - public boolean isPostfix(){ - return getFirstChild() instanceof KScrExpression; - } - - public Optional expression(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } - - public @Nullable JvmType type(){ - return expression().map(KScrExpression::type).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrArrayIndexExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrArrayIndexExpr.java deleted file mode 100644 index eaea960..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrArrayIndexExpr.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmArrayType; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrArrayIndexExpr extends KScrExpression{ - - public KScrArrayIndexExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional arrayExpr(){ - return PsiUtils.childOfType(this, KScrExpression.class, 0); - } - - public Optional indexExpr(){ - return PsiUtils.childOfType(this, KScrExpression.class, 1); - } - - public @Nullable JvmType type(){ - return arrayExpr() - .map(KScrExpression::type) - .map(x -> x instanceof JvmArrayType ? x : null) - .map(x-> ((JvmArrayType)x).getComponentType()) - .orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrAssignExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrAssignExpr.java deleted file mode 100644 index 37b7d21..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrAssignExpr.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrAssignExpr extends KScrExpression{ - - public KScrAssignExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional expression(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } - - public @Nullable JvmType type(){ - return expression().map(KScrExpression::type).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrBinaryExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrBinaryExpr.java deleted file mode 100644 index 9bc11db..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrBinaryExpr.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -public class KScrBinaryExpr extends KScrExpression{ - - public KScrBinaryExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional op(){ - return PsiUtils.childOfType(this, KScrBinaryOp.class); - } - - public String symbol(){ - return op().map(PsiElement::getText).orElse(""); - } - - public Optional left(){ - return PsiUtils.childOfType(this, KScrExpression.class, 0); - } - - public Optional right(){ - return PsiUtils.childOfType(this, KScrExpression.class, 1); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrCallExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrCallExpr.java deleted file mode 100644 index 146867d..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrCallExpr.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmMethod; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.antlr_generated.KScrLangParser; -import org.comroid.kscr.intellij.psi.Tokens; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrCallExpr extends KScrExpression{ - - public KScrCallExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional call(){ - return PsiUtils.childOfType(this, KScrCall.class); - } - - public Optional on(){ - return PsiUtils.childOfType(this, KScrExpression.class); - } - - public boolean isSuperCall(){ - return !PsiUtils.matchingChildren(this, k -> k.getNode().getElementType() == Tokens.getFor(KScrLangParser.SUPER)).isEmpty(); - } - - public @Nullable JvmType type(){ - return call().map(KScrCall::resolveMethod).map(JvmMethod::getReturnType).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrCastExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrCastExpr.java deleted file mode 100644 index 9a85476..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrCastExpr.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrCastExpr extends KScrExpression{ - - public KScrCastExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional castingTo(){ - return PsiUtils.childOfType(this, KScrElement.class).flatMap(x -> PsiUtils.childOfType(x, KScrTypeRef.class)); - } - - public @Nullable JvmType type(){ - return castingTo().map(KScrTypeRef::asType).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrClassLiteralExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrClassLiteralExpr.java deleted file mode 100644 index a432b7b..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrClassLiteralExpr.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiReference; -import org.comroid.kscr.intellij.psi.utils.KScrIdHolder; -import org.comroid.kscr.intellij.psi.utils.KScrTypeReference; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import static org.comroid.kscr.intellij.psi.utils.JvmClassUtils.getByName; - -public class KScrClassLiteralExpr extends KScrExpression implements KScrIdHolder{ - - public KScrClassLiteralExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - return getByName("java.lang.Class", getProject()); - } - - public PsiReference getReference(){ - return getIdElement().map(id -> new KScrTypeReference(id, this)).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrIdExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrIdExpr.java deleted file mode 100644 index 684aef1..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrIdExpr.java +++ /dev/null @@ -1,178 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.JvmField; -import com.intellij.lang.jvm.types.JvmReferenceType; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.NlsSafe; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.comroid.kscr.intellij.psi.KScrFile; -import org.comroid.kscr.intellij.psi.types.ClassTypeImpl; -import org.comroid.kscr.intellij.psi.utils.*; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Arrays; - -@SuppressWarnings("UnstableApiUsage") -public class KScrIdExpr extends KScrExpression implements PsiReference{ - - public KScrIdExpr(@NotNull ASTNode node){ - super(node); - } - - /* - Can resolve to: - - a local variable (int x = 0; int y = x;) - - a type (KScrExpression) - - a field (KScrExpression.COMPOSITE_ELEMENT_WRAPPER) - - a package (KScr.intellij.psi.KScrExpression) - */ - - public String id(){ - return PsiUtils.childOfType(this, KScrIdPart.class).map(PsiElement::getText).orElse(""); - } - - @Nullable - public KScrExpression on(){ - return PsiUtils.childOfType(this, KScrExpression.class).orElse(null); - } - - // [JvmClass | PsiPackage | KScrVariable | JvmField | String | null] - public Object resolveTarget(){ - var on = on(); - String id = id(); - if(on == null){ - var scope = KScrVarScope.scopeOf(this); - if(scope.isPresent()){ - var available = scope.get().available(); - var byName = available.stream().filter(x -> x.varName().equals(id)).findFirst(); - if(byName.isPresent()) - return byName.get(); - } - KScrType inside = PsiTreeUtil.getParentOfType(this, KScrType.class); - if(inside != null){ - var field = inside.fields().stream() - .filter(x -> x.varName().equals(id)) - .findFirst() - .orElse(null); - if(field != null) - return field; - } - return resolveById(id, getContainingFile(), getProject()); - }else{ - Object ret = null; - if(on instanceof KScrIdExpr){ - var res = ((KScrIdExpr)on).resolveTarget(); - if(res == null) - return null; - String narrowId = id; - if(res instanceof String) - narrowId = res + "." + narrowId; - if(res instanceof PsiPackage) - narrowId = ((PsiPackage)res).getQualifiedName() + "." + narrowId; - ret = resolveById(narrowId, getContainingFile(), getProject()); - } - JvmType type = on.type(); - if(!(type instanceof JvmReferenceType)) - return ret; - var res = ((JvmReferenceType)type).resolve(); - if(!(res instanceof JvmClass)) - return ret; - return Arrays.stream(((JvmClass)res).getFields()) - .filter(x -> x.getName().equals(id)) - .findFirst() - .map(Object.class::cast) - .orElse(ret); - } - } - - @NotNull - private static Object resolveById(String id, PsiFile file, Project project){ - if(file instanceof KScrFile){ - var type = ProjectTypeFinder.firstType(project, KScrTypeReference.getCandidates((KScrFile)file, id)); - if(type != null) - return type; - } - var psiPackage = JavaPsiFacade.getInstance(project).findPackage(id); - if(psiPackage != null) - return psiPackage; - return id; - } - - public @Nullable JvmType type(){ - var res = resolveTarget(); - if(res instanceof JvmClass) - return ClassTypeImpl.of((JvmClass)res); - if(res instanceof KScrVariable) - return ((KScrVariable)res).varType(); - if(res instanceof JvmField) - return ((JvmField)res).getType(); - return null; - } - - public PsiReference getReference(){ - return this; - } - - public @NotNull PsiElement getElement(){ - return this; - } - - public @NotNull TextRange getRangeInElement(){ - return PsiUtils.childOfType(this, KScrIdPart.class).map(PsiElement::getTextRangeInParent).orElse(getTextRangeInParent()); - } - - public @Nullable PsiElement resolve(){ - var res = resolveTarget(); - if(res instanceof JvmClass) - return ((JvmClass)res).getSourceElement(); - if(res instanceof PsiElement) - return (PsiElement)res; - return null; - } - - public @NotNull @NlsSafe String getCanonicalText(){ - var res = resolveTarget(); - if(res instanceof JvmClass){ - var qName = ((JvmClass)res).getQualifiedName(); - return qName != null ? qName : ""; - } - if(res instanceof PsiPackage) - return ((PsiPackage)res).getQualifiedName(); - if(res instanceof KScrVariable) - return ((KScrVariable)res).varName(); - return ""; - } - - public PsiElement handleElementRename(@NotNull String name) throws IncorrectOperationException{ - PsiUtils.childOfType(this, KScrIdPart.class).ifPresent(id -> id.replace(PsiUtils.createIdFromText(this, name))); - return this; - } - - public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException{ - if(element instanceof PsiNamedElement){ - PsiUtils.childOfType(this, KScrIdPart.class).ifPresent(id -> id.replace(PsiUtils.createIdFromText(this, ((PsiNamedElement)element).getName()))); - return this; - } - throw new IncorrectOperationException("Can't bind an ID expression to something that has no name!"); - } - - public boolean isReferenceTo(@NotNull PsiElement element){ - var res = resolveTarget(); - if(res instanceof JvmClass) - return ((JvmClass)res).getSourceElement() == element; - if(res instanceof PsiElement) - return res == element; - return false; - } - - public boolean isSoft(){ - return false; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrInitialisationExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrInitialisationExpr.java deleted file mode 100644 index aae3abe..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrInitialisationExpr.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrInitialisationExpr extends KScrExpression{ - - public KScrInitialisationExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional initialising(){ - return PsiUtils.childOfType(this, KScrElement.class).flatMap(x -> PsiUtils.childOfType(x, KScrTypeRef.class)); - } - - public @Nullable JvmType type(){ - return initialising().map(KScrTypeRef::asType).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrInstanceOfExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrInstanceOfExpr.java deleted file mode 100644 index ba501f2..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrInstanceOfExpr.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrInstanceOfExpr extends KScrExpression{ - - public KScrInstanceOfExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - return PsiType.BOOLEAN; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrLiteralExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrLiteralExpr.java deleted file mode 100644 index da7acec..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrLiteralExpr.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiType; -import org.comroid.kscr.intellij.psi.Tokens; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrLiteralExpr extends KScrExpression{ - - public KScrLiteralExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - if(getNode().findChildByType(Tokens.TOK_NULL) != null) - return PsiType.NULL; - if(getNode().findChildByType(Tokens.TOK_BOOLLIT) != null) - return PsiType.BOOLEAN; - // TODO: implicit conversions - if(getNode().findChildByType(Tokens.TOK_NUMLIT) != null) - return PsiType.INT; - if(getNode().findChildByType(Tokens.TOK_RANGELIT) != null) - return PsiType.DOUBLE; - return null; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrNewArrayExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrNewArrayExpr.java deleted file mode 100644 index d4fa107..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrNewArrayExpr.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.types.ArrayTypeImpl; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrNewArrayExpr extends KScrExpression{ - - public KScrNewArrayExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional elementType(){ - return PsiUtils.childOfType(this, KScrElement.class).flatMap(x -> PsiUtils.childOfType(x, KScrTypeRef.class)); - } - - public @Nullable JvmType type(){ - return elementType().map(KScrTypeRef::asType).map(ArrayTypeImpl::of).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrNewListArrayExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrNewListArrayExpr.java deleted file mode 100644 index 728d714..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrNewListArrayExpr.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.types.ArrayTypeImpl; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class KScrNewListArrayExpr extends KScrExpression{ - - public KScrNewListArrayExpr(@NotNull ASTNode node){ - super(node); - } - - public Optional elementType(){ - return PsiUtils.childOfType(this, KScrElement.class).flatMap(x -> PsiUtils.childOfType(x, KScrTypeRef.class)); - } - - public @Nullable JvmType type(){ - return elementType().map(KScrTypeRef::asType).map(ArrayTypeImpl::of).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrParenthesisedExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrParenthesisedExpr.java deleted file mode 100644 index 3d5a308..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrParenthesisedExpr.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrParenthesisedExpr extends KScrExpression{ - - public KScrParenthesisedExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - var parenthesised = PsiUtils.childOfType(this, KScrExpression.class); - return parenthesised.map(KScrExpression::type).orElse(null); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrStringLiteralExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrStringLiteralExpr.java deleted file mode 100644 index 03a7736..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrStringLiteralExpr.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import static org.comroid.kscr.intellij.psi.utils.JvmClassUtils.getByName; - -public class KScrStringLiteralExpr extends KScrExpression{ - - public KScrStringLiteralExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - return getByName("java.lang.String", getProject()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrThisExpr.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrThisExpr.java deleted file mode 100644 index 9fe4bd1..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/expressions/KScrThisExpr.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.comroid.kscr.intellij.psi.expressions; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.util.PsiTreeUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class KScrThisExpr extends KScrExpression{ - - public KScrThisExpr(@NotNull ASTNode node){ - super(node); - } - - public @Nullable JvmType type(){ - var method = PsiTreeUtil.getParentOfType(this, KScrMethod.class); - if(method == null || method.isStatic()) - return null; - return JvmClassUtils.asType(method.containingType()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/KScrFileStub.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/KScrFileStub.java deleted file mode 100644 index 0f611c9..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/KScrFileStub.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.psi.stubs.PsiFileStubImpl; -import com.intellij.psi.tree.IStubFileElementType; -import org.comroid.kscr.intellij.parser.KScrParserDefinition; -import org.comroid.kscr.intellij.psi.KScrFile; -import org.jetbrains.annotations.NotNull; - -public class KScrFileStub extends PsiFileStubImpl{ - - public KScrFileStub(KScrFile file){ - super(file); - } - - public @NotNull IStubFileElementType getType(){ - return KScrParserDefinition.FILE; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubAsKScrVariable.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubAsKScrVariable.java deleted file mode 100644 index 14c38de..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubAsKScrVariable.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.KScrVariable; -import org.jetbrains.annotations.NotNull; - -public interface StubAsKScrVariable extends StubElement{ - - @NotNull - String varName(); - - @NotNull - String varTypeText(); - - boolean hasModifier(String modifier); -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrClassList.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrClassList.java deleted file mode 100644 index 3565a14..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrClassList.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.types.KScrClassList; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -public interface StubKScrClassList> extends StubElement { - @NotNull - List elementFqNames(); -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrField.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrField.java deleted file mode 100644 index 1643a84..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrField.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import org.comroid.kscr.intellij.psi.ast.common.KScrVariableDef; -import org.jetbrains.annotations.NotNull; - -public interface StubKScrField extends StubWithKScrModifiers, StubAsKScrVariable{ - - @NotNull - String name(); - - @NotNull - String typeText(); - - @NotNull - default String varName(){ - return name(); - } - - @NotNull - default String varTypeText(){ - return typeText(); - } - - default boolean hasModifier(String modifier){ - var modList = modifiers(); - return modList != null && modList.modifiers().contains(modifier); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrMemberWrapper.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrMemberWrapper.java deleted file mode 100644 index d79804b..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrMemberWrapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.types.KScrMemberWrapper; - -public interface StubKScrMemberWrapper extends StubElement{ - - // hold position in stub tree -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrMethod.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrMethod.java deleted file mode 100644 index f25d6fc..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrMethod.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.psi.stubs.EmptyStub; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.KScrMethod; -import org.jetbrains.annotations.NotNull; - -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public interface StubKScrMethod extends StubWithKScrModifiers{ - - @NotNull - String name(); - - @NotNull - default List parameters(){ - return getChildrenStubs().stream() - .filter(EmptyStub.class::isInstance) - .flatMap(x -> (Stream>)x.getChildrenStubs().stream()) - .filter(StubKScrParameter.class::isInstance) - .map(StubKScrParameter.class::cast) - .collect(Collectors.toList()); - } - - @NotNull - String returnTypeText(); - - boolean hasSemicolon(); -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrModifierList.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrModifierList.java deleted file mode 100644 index fc96d2d..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrModifierList.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.KScrModifierList; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -public interface StubKScrModifierList extends StubElement{ - - @NotNull - List modifiers(); -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrParameter.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrParameter.java deleted file mode 100644 index 9a26f74..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrParameter.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import org.comroid.kscr.intellij.psi.ast.common.KScrParameter; -import org.jetbrains.annotations.NotNull; - -public interface StubKScrParameter extends StubAsKScrVariable{ - - @NotNull - String name(); - - @NotNull - String typeText(); - - boolean isVarargs(); - - @NotNull - default String varName(){ - return name(); - } - - @NotNull - default String varTypeText(){ - return typeText(); - } - - default boolean hasModifier(String modifier){ - if(!(modifier.equals("private") || modifier.equals("final"))) - return false; - // method parameter finality is not externally visible - return isRecordComponent(); - } - - default boolean isRecordComponent(){ - return getParentStub() instanceof StubKScrRecordComponents; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrRecordComponents.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrRecordComponents.java deleted file mode 100644 index 780665c..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrRecordComponents.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.types.KScrRecordComponents; -import org.jetbrains.annotations.NotNull; - -import java.util.List; -import java.util.stream.Collectors; - -public interface StubKScrRecordComponents extends StubElement{ - - @NotNull - default List components(){ - return getChildrenStubs().stream() - .filter(StubKScrParameter.class::isInstance) - .map(StubKScrParameter.class::cast) - .collect(Collectors.toList()); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrType.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrType.java deleted file mode 100644 index d22f042..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubKScrType.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.types.KScrExtendsClause; -import org.comroid.kscr.intellij.psi.ast.types.KScrImplementsClause; -import org.comroid.kscr.intellij.psi.ast.types.KScrPermitsClause; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.types.KScrKind; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public interface StubKScrType extends StubElement { - - @NotNull - String fullyQualifiedName(); - - @NotNull - String shortName(); - - @NotNull - KScrKind kind(); - - @Nullable - default StubKScrClassList extendsList(){ - return findChildStubByType(StubTypes.KScr_EXTENDS_LIST); - } - - @Nullable - default StubKScrClassList implementsList(){ - return findChildStubByType(StubTypes.KScr_IMPLEMENTS_LIST); - } - - @Nullable - default StubKScrClassList permitsList(){ - return findChildStubByType(StubTypes.KScr_PERMITS_LIST); - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubTypes.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubTypes.java deleted file mode 100644 index 695f53c..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubTypes.java +++ /dev/null @@ -1,341 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import com.intellij.psi.stubs.*; -import org.comroid.kscr.intellij.KScrLanguage; -import org.comroid.kscr.intellij.antlr_generated.KScrLangParser; -import org.comroid.kscr.intellij.psi.Tokens; -import org.comroid.kscr.intellij.psi.ast.KScrMethod; -import org.comroid.kscr.intellij.psi.ast.KScrModifierList; -import org.comroid.kscr.intellij.psi.ast.KScrParametersList; -import org.comroid.kscr.intellij.psi.ast.KScrTypeRef; -import org.comroid.kscr.intellij.psi.ast.common.KScrParameter; -import org.comroid.kscr.intellij.psi.ast.common.KScrVariableDef; -import org.comroid.kscr.intellij.psi.ast.types.*; -import org.comroid.kscr.intellij.psi.indexes.StubIndexes; -import org.comroid.kscr.intellij.psi.stubs.impl.*; -import org.comroid.kscr.intellij.psi.types.KScrKind; -import org.comroid.kscr.intellij.psi.utils.PsiUtils; -import org.jetbrains.annotations.NotNull; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.function.Function; - -public interface StubTypes{ - - IStubElementType KScr_TYPE = new KScrTypeStubElementType(); - IStubElementType KScr_MEMBER = new KScrMemberStubElementType(); - IStubElementType KScr_RECORD_COMPONENTS = new KScrRecordComponentsStubElementType(); - IStubElementType KScr_PARAMETER = new KScrParameterStubElementType(); - IStubElementType KScr_MODIFIER_LIST = new KScrModifierListStubElementType(); - IStubElementType KScr_METHOD = new KScrMethodStubElementType(); - IStubElementType KScr_FIELD = new KScrFieldStubElementType(); - - IStubElementType, KScrExtendsClause> KScr_EXTENDS_LIST - = new KScrClassListStubElementType<>("KScr_EXTENDS_LIST", KScrExtendsClause::new); - IStubElementType, KScrImplementsClause> KScr_IMPLEMENTS_LIST - = new KScrClassListStubElementType<>("KScr_IMPLEMENTS_LIST", KScrImplementsClause::new); - IStubElementType, KScrPermitsClause> KScr_PERMITS_LIST - = new KScrClassListStubElementType<>("KScr_PERMITS_LIST", KScrPermitsClause::new); - - IStubElementType, KScrParametersList> KScr_PARAMETERS_LIST - = new EmptyStubElementType<>("KScr_PARAMETERS_LIST", KScrLanguage.LANGUAGE){ - @SuppressWarnings("unchecked") - public KScrParametersList createPsi(@NotNull EmptyStub stub){ - return new KScrParametersList((EmptyStub)stub); - } - public @NotNull String getExternalId(){ - return "kScr." + this; - } - }; - - class KScrTypeStubElementType extends IStubElementType{ - - public KScrTypeStubElementType(){ - super("KScr_TYPE", KScrLanguage.LANGUAGE); - } - - public KScrType createPsi(@NotNull StubKScrType stub){ - return new KScrType(stub); - } - - public @NotNull StubKScrType createStub(@NotNull KScrType psi, StubElement parent){ - var stub = psi.getStub(); - return stub != null ? stub : new StubImplKScrType(parent, psi); - } - - public @NotNull String getExternalId(){ - return "kScr." + this; - } - - public void serialize(@NotNull StubKScrType stub, @NotNull StubOutputStream stream) throws IOException{ - stream.writeName(stub.shortName()); - stream.writeName(stub.fullyQualifiedName()); - stream.writeVarInt(stub.kind().ordinal()); - } - - public @NotNull StubKScrType deserialize(@NotNull StubInputStream stream, StubElement parent) throws IOException{ - return new StubImplKScrType(parent, - stream.readNameString(), - stream.readNameString(), - KScrKind.values()[stream.readVarInt()]); - } - - public void indexStub(@NotNull StubKScrType stub, @NotNull IndexSink sink){ - sink.occurrence(StubIndexes.TYPES_BY_FQ_NAME, stub.fullyQualifiedName()); - sink.occurrence(StubIndexes.TYPES_BY_SHORT_NAME, stub.shortName()); - } - } - - class KScrClassListStubElementType> extends IStubElementType, CL>{ - - private final Function, CL> builder; - - public KScrClassListStubElementType(String name, Function, CL> builder){ - super(name, KScrLanguage.LANGUAGE); - this.builder = builder; - } - - public CL createPsi(@NotNull StubKScrClassList stub){ - return builder.apply(stub); - } - - public @NotNull StubKScrClassList createStub(@NotNull CL psi, StubElement parent){ - var stub = psi.getStub(); - return stub != null ? stub : new StubImplKScrClassList<>(parent, this, psi.elementNames()); - } - - public @NotNull String getExternalId(){ - return "kScr." + this; - } - - public void serialize(@NotNull StubKScrClassList stub, @NotNull StubOutputStream stream) throws IOException{ - var names = stub.elementFqNames(); - stream.writeVarInt(names.size()); - for(String name : names) - stream.writeName(name); - } - - public @NotNull StubKScrClassList deserialize(@NotNull StubInputStream stream, StubElement parent) throws IOException{ - int size = stream.readVarInt(); - var list = new ArrayList(size); - for(int i = 0; i < size; i++) - list.add(stream.readNameString()); - return new StubImplKScrClassList<>(parent, this, list); - } - - @SuppressWarnings("EqualsBetweenInconvertibleTypes") - public void indexStub(@NotNull StubKScrClassList stub, @NotNull IndexSink sink){ - if(this.equals(KScr_EXTENDS_LIST) || this.equals(KScr_IMPLEMENTS_LIST)) - for(String name : stub.elementFqNames()) - sink.occurrence(StubIndexes.INHERITANCE_LISTS, name); - } - } - - class KScrMemberStubElementType extends IStubElementType{ - - public KScrMemberStubElementType(){ - super("KScr_MEMBER", KScrLanguage.LANGUAGE); - } - - public KScrMemberWrapper createPsi(@NotNull StubKScrMemberWrapper stub){ - return new KScrMemberWrapper(stub); - } - - public @NotNull StubKScrMemberWrapper createStub(@NotNull KScrMemberWrapper psi, StubElement parent){ - return new StubImplKScrMemberWrapper(parent); - } - - public @NotNull String getExternalId(){ - return "kScr." + this; - } - - public void serialize(@NotNull StubKScrMemberWrapper stub, @NotNull StubOutputStream dataStream){} - - public @NotNull StubKScrMemberWrapper deserialize(@NotNull StubInputStream dataStream, StubElement parent){ - return new StubImplKScrMemberWrapper(parent); - } - - public void indexStub(@NotNull StubKScrMemberWrapper stub, @NotNull IndexSink sink){} - } - - class KScrRecordComponentsStubElementType extends IStubElementType{ - - public KScrRecordComponentsStubElementType(){ - super("KScr_RECORD_COMPONENTS", KScrLanguage.LANGUAGE); - } - - public KScrRecordComponents createPsi(@NotNull StubKScrRecordComponents stub){ - return new KScrRecordComponents(stub); - } - - public @NotNull StubKScrRecordComponents createStub(@NotNull KScrRecordComponents psi, StubElement parent){ - return new StubImplKScrRecordComponents(parent); - } - - public @NotNull String getExternalId(){ - return "kScr." + this; - } - - public void serialize(@NotNull StubKScrRecordComponents stub, @NotNull StubOutputStream stream){} - - public @NotNull StubKScrRecordComponents deserialize(@NotNull StubInputStream stream, StubElement parentStub){ - return new StubImplKScrRecordComponents(parentStub); - } - - public void indexStub(@NotNull StubKScrRecordComponents stub, @NotNull IndexSink sink){} - } - - class KScrParameterStubElementType extends IStubElementType{ - - public KScrParameterStubElementType(){ - super("KScr_PARAMETER", KScrLanguage.LANGUAGE); - } - - public KScrParameter createPsi(@NotNull StubKScrParameter stub){ - return new KScrParameter(stub); - } - - public @NotNull StubKScrParameter createStub(@NotNull KScrParameter psi, StubElement parent){ - String name = psi.varName(), type = psi.getTypeName().map(PsiElement::getText).orElse(""); - boolean varargs = psi.isVarargs(); - return new StubImplKScrParameter(parent, name, type, varargs); - } - - public @NotNull String getExternalId(){ - return "kScr." + this; - } - - public void serialize(@NotNull StubKScrParameter stub, @NotNull StubOutputStream stream) throws IOException{ - stream.writeName(stub.name()); - stream.writeName(stub.typeText()); - stream.writeBoolean(stub.isVarargs()); - } - - public @NotNull StubKScrParameter deserialize(@NotNull StubInputStream stream, StubElement parent) throws IOException{ - var name = stream.readNameString(); - var type = stream.readNameString(); - return new StubImplKScrParameter(parent, name != null ? name : "", type != null ? type : "", stream.readBoolean()); - } - - public void indexStub(@NotNull StubKScrParameter stub, @NotNull IndexSink sink){ - if(stub.isRecordComponent()) - sink.occurrence(StubIndexes.FIELDS, stub.name()); - } - } - - class KScrModifierListStubElementType extends IStubElementType{ - - public KScrModifierListStubElementType(){ - super("KScr_MODIFIER_LIST", KScrLanguage.LANGUAGE); - } - - public KScrModifierList createPsi(@NotNull StubKScrModifierList stub){ - return new KScrModifierList(stub); - } - - public @NotNull StubKScrModifierList createStub(@NotNull KScrModifierList psi, StubElement parent){ - return new StubImplKScrModifierList(parent, Collections.unmodifiableList(psi.getModifiers())); - } - - public @NotNull String getExternalId(){ - return "kScr." + this; - } - - public void serialize(@NotNull StubKScrModifierList stub, @NotNull StubOutputStream stream) throws IOException{ - var list = stub.modifiers(); - stream.writeVarInt(list.size()); - for(String mod : list) - stream.writeName(mod); - } - - public @NotNull StubKScrModifierList deserialize(@NotNull StubInputStream stream, StubElement parent) throws IOException{ - int amount = stream.readVarInt(); - List modifiers = new ArrayList<>(amount); - for(int i = 0; i < amount; i++) - modifiers.add(stream.readNameString()); - return new StubImplKScrModifierList(parent, modifiers); - } - - public void indexStub(@NotNull StubKScrModifierList stub, @NotNull IndexSink sink){} - } - - class KScrMethodStubElementType extends IStubElementType{ - - public KScrMethodStubElementType(){ - super("KScr_METHOD", KScrLanguage.LANGUAGE); - } - - public KScrMethod createPsi(@NotNull StubKScrMethod stub){ - return new KScrMethod(stub); - } - - public @NotNull StubKScrMethod createStub(@NotNull KScrMethod psi, StubElement parent){ - return new StubImplKScrMethod(parent, psi.getName(), psi.returns().map(PsiElement::getText).orElse(""), psi.hasSemicolon()); - } - - public @NotNull String getExternalId(){ - return "kScr." + this; - } - - public void serialize(@NotNull StubKScrMethod stub, @NotNull StubOutputStream stream) throws IOException{ - stream.writeName(stub.name()); - stream.writeName(stub.returnTypeText()); - stream.writeBoolean(stub.hasSemicolon()); - } - - public @NotNull StubKScrMethod deserialize(@NotNull StubInputStream stream, StubElement parent) throws IOException{ - return new StubImplKScrMethod(parent, stream.readNameString(), stream.readNameString(), stream.readBoolean()); - } - - public void indexStub(@NotNull StubKScrMethod stub, @NotNull IndexSink sink){ - sink.occurrence(StubIndexes.METHODS, stub.name()); - } - } - - class KScrFieldStubElementType extends IStubElementType{ - - public KScrFieldStubElementType(){ - super("KScr_FIELD", KScrLanguage.LANGUAGE); - } - - public KScrVariableDef createPsi(@NotNull StubKScrField stub){ - return new KScrVariableDef(stub); - } - - public @NotNull StubKScrField createStub(@NotNull KScrVariableDef psi, StubElement parent){ - return new StubImplKScrField( - parent, - psi.varName(), - PsiUtils.childOfType(psi, KScrTypeRef.class).map(PsiElement::getText).orElse("")); - } - - public @NotNull String getExternalId(){ - return "kScr." + this; - } - - public void serialize(@NotNull StubKScrField stub, @NotNull StubOutputStream stream) throws IOException{ - stream.writeName(stub.name()); - stream.writeName(stub.typeText()); - } - - public @NotNull StubKScrField deserialize(@NotNull StubInputStream stream, StubElement parent) throws IOException{ - var name = stream.readNameString(); - var type = stream.readNameString(); - return new StubImplKScrField(parent, name != null ? name : "", type != null ? type : ""); - } - - public void indexStub(@NotNull StubKScrField stub, @NotNull IndexSink sink){ - sink.occurrence(StubIndexes.FIELDS, stub.name()); - } - - public boolean shouldCreateStub(ASTNode node){ - // only fields, not locals - return node.getTreeParent().getElementType() == Tokens.getRuleFor(KScrLangParser.RULE_member); - } - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubWithKScrModifiers.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubWithKScrModifiers.java deleted file mode 100644 index 992858b..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/StubWithKScrModifiers.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs; - -import com.intellij.psi.PsiElement; -import com.intellij.psi.stubs.StubElement; -import org.jetbrains.annotations.Nullable; - -public interface StubWithKScrModifiers extends StubElement{ - - @Nullable - default StubKScrModifierList modifiers(){ - return findChildStubByType(StubTypes.KScr_MODIFIER_LIST); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrClassList.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrClassList.java deleted file mode 100644 index 1a9be8b..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrClassList.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs.impl; - -import com.intellij.psi.stubs.IStubElementType; -import com.intellij.psi.stubs.StubBase; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.types.KScrClassList; -import org.comroid.kscr.intellij.psi.stubs.StubKScrClassList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -public class StubImplKScrClassList> extends StubBase implements StubKScrClassList{ - - @NotNull - private final List elementFqNames; - - public StubImplKScrClassList(@Nullable StubElement parent, IStubElementType elementType, @NotNull List fqNames){ - super(parent, elementType); - elementFqNames = fqNames; - } - - public @NotNull List elementFqNames(){ - return elementFqNames; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrField.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrField.java deleted file mode 100644 index 2b08d86..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrField.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs.impl; - -import com.intellij.psi.stubs.StubBase; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.common.KScrVariableDef; -import org.comroid.kscr.intellij.psi.stubs.StubKScrField; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class StubImplKScrField extends StubBase implements StubKScrField{ - - @NotNull - private final String name, typeText; - - public StubImplKScrField(@Nullable StubElement parent, @NotNull String name, @NotNull String typeText){ - super(parent, StubTypes.KScr_FIELD); - this.name = name; - this.typeText = typeText; - } - - public @NotNull String name(){ - return name; - } - - public @NotNull String typeText(){ - return typeText; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrMemberWrapper.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrMemberWrapper.java deleted file mode 100644 index 383cf18..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrMemberWrapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs.impl; - -import com.intellij.psi.stubs.StubBase; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.types.KScrMemberWrapper; -import org.comroid.kscr.intellij.psi.stubs.StubKScrMemberWrapper; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.Nullable; - -public class StubImplKScrMemberWrapper extends StubBase implements StubKScrMemberWrapper{ - - public StubImplKScrMemberWrapper(@Nullable StubElement parent){ - super(parent, StubTypes.KScr_MEMBER); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrMethod.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrMethod.java deleted file mode 100644 index 6a299dc..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrMethod.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs.impl; - -import com.intellij.psi.stubs.StubBase; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.KScrMethod; -import org.comroid.kscr.intellij.psi.stubs.StubKScrMethod; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class StubImplKScrMethod extends StubBase implements StubKScrMethod{ - - @NotNull - private final String name, returnType; - private final boolean hasSemicolon; - - public StubImplKScrMethod(@Nullable StubElement parent, String name, String returnType, boolean semicolon){ - super(parent, StubTypes.KScr_METHOD); - this.name = name; - this.returnType = returnType; - hasSemicolon = semicolon; - } - - public @NotNull String name(){ - return name; - } - - public @NotNull String returnTypeText(){ - return returnType; - } - - public boolean hasSemicolon(){ - return hasSemicolon; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrModifierList.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrModifierList.java deleted file mode 100644 index 330c3b4..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrModifierList.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs.impl; - -import com.intellij.psi.stubs.StubBase; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.KScrModifierList; -import org.comroid.kscr.intellij.psi.stubs.StubKScrModifierList; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -public class StubImplKScrModifierList extends StubBase implements StubKScrModifierList{ - - @NotNull - private final List modifiers; - - public StubImplKScrModifierList(@Nullable StubElement parent, @NotNull List modifiers){ - super(parent, StubTypes.KScr_MODIFIER_LIST); - this.modifiers = modifiers; - } - - public @NotNull List modifiers(){ - return modifiers; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrParameter.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrParameter.java deleted file mode 100644 index 0fbead1..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrParameter.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs.impl; - -import com.intellij.psi.stubs.StubBase; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.common.KScrParameter; -import org.comroid.kscr.intellij.psi.stubs.StubKScrParameter; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class StubImplKScrParameter extends StubBase implements StubKScrParameter{ - - @NotNull - private final String name, typeText; - private final boolean varargs; - - public StubImplKScrParameter(@Nullable StubElement parent, - @NotNull String name, - @NotNull String typeText, - boolean varargs){ - super(parent, StubTypes.KScr_PARAMETER); - this.name = name; - this.typeText = typeText; - this.varargs = varargs; - } - - @NotNull - public String name(){ - return name; - } - - public @NotNull String typeText(){ - return typeText; - } - - public boolean isVarargs(){ - return varargs; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrRecordComponents.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrRecordComponents.java deleted file mode 100644 index bb6a729..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrRecordComponents.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs.impl; - -import com.intellij.psi.stubs.StubBase; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.types.KScrRecordComponents; -import org.comroid.kscr.intellij.psi.stubs.StubKScrRecordComponents; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.jetbrains.annotations.Nullable; - -public class StubImplKScrRecordComponents extends StubBase implements StubKScrRecordComponents{ - - public StubImplKScrRecordComponents(@Nullable StubElement parent){ - super(parent, StubTypes.KScr_RECORD_COMPONENTS); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrType.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrType.java deleted file mode 100644 index 5cd6e27..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/stubs/impl/StubImplKScrType.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.comroid.kscr.intellij.psi.stubs.impl; - -import com.intellij.psi.stubs.StubBase; -import com.intellij.psi.stubs.StubElement; -import org.comroid.kscr.intellij.psi.ast.types.KScrType; -import org.comroid.kscr.intellij.psi.stubs.StubKScrType; -import org.comroid.kscr.intellij.psi.stubs.StubTypes; -import org.comroid.kscr.intellij.psi.types.KScrKind; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class StubImplKScrType extends StubBase implements StubKScrType{ - - @NotNull - private final String fqName; - @NotNull - private final String shortName; - @NotNull - private final KScrKind kind; - - public StubImplKScrType(@Nullable StubElement parent, KScrType type){ - this(parent, type.getName(), type.getName(), type.kind()); - } - - public StubImplKScrType(@Nullable StubElement parent, String shortName, String fqName, KScrKind kind){ - super(parent, StubTypes.KScr_TYPE); - this.shortName = shortName; - this.fqName = fqName; - this.kind = kind; - } - - @NotNull - public String fullyQualifiedName(){ - return fqName; - } - - @NotNull - public String shortName(){ - return shortName; - } - - @NotNull - public KScrKind kind(){ - return kind; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/ArrayTypeImpl.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/ArrayTypeImpl.java deleted file mode 100644 index 78b317f..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/ArrayTypeImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.comroid.kscr.intellij.psi.types; - -import com.intellij.lang.jvm.JvmAnnotation; -import com.intellij.lang.jvm.types.JvmArrayType; -import com.intellij.lang.jvm.types.JvmType; -import org.jetbrains.annotations.NotNull; - -import java.util.Map; -import java.util.WeakHashMap; - -public class ArrayTypeImpl implements JvmArrayType{ - - private static final Map CACHE = new WeakHashMap<>(); - - private final JvmType component; - - private ArrayTypeImpl(JvmType component){ - this.component = component; - } - - public static ArrayTypeImpl of(JvmType type){ - if(type == null) - return null; - return CACHE.computeIfAbsent(type, ArrayTypeImpl::new); - } - - public @NotNull JvmType getComponentType(){ - return component; - } - - public JvmAnnotation @NotNull [] getAnnotations(){ - return new JvmAnnotation[0]; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/ClassTypeImpl.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/ClassTypeImpl.java deleted file mode 100644 index c499e51..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/ClassTypeImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.comroid.kscr.intellij.psi.types; - -import com.intellij.lang.jvm.JvmAnnotation; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.JvmTypeDeclaration; -import com.intellij.lang.jvm.JvmTypeParameter; -import com.intellij.lang.jvm.types.JvmReferenceType; -import com.intellij.lang.jvm.types.JvmSubstitutor; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.lang.jvm.types.JvmTypeResolveResult; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; - -public class ClassTypeImpl implements JvmReferenceType{ - - private static final Map CACHE = new WeakHashMap<>(); - - private final JvmClass underlying; - - private ClassTypeImpl(JvmClass underlying){ - this.underlying = underlying; - } - - @Nullable - public static ClassTypeImpl of(JvmClass jClass){ - if(jClass == null) - return null; - return CACHE.computeIfAbsent(jClass, ClassTypeImpl::new); - } - - public @NotNull String getName(){ - var name = underlying.getName(); - return name != null ? name : ""; - } - - public @Nullable JvmTypeResolveResult resolveType(){ - return new JvmTypeResolveResult(){ - public @NotNull JvmTypeDeclaration getDeclaration(){ - return underlying; - } - - public @NotNull JvmSubstitutor getSubstitutor(){ - return new JvmSubstitutor(){ - public @NotNull Collection getTypeParameters(){ - return List.of(); - } - - public @Nullable JvmType substitute(@NotNull JvmTypeParameter typeParameter){ - return null; - } - }; - } - }; - } - - public @NotNull Iterable typeArguments(){ - return List.of(); - } - - public JvmAnnotation @NotNull [] getAnnotations(){ - return new JvmAnnotation[0]; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrClass.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrClass.java deleted file mode 100644 index 8fa5ba9..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrClass.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.comroid.kscr.intellij.psi.types; - -import com.intellij.lang.jvm.*; -import com.intellij.lang.jvm.types.JvmReferenceType; -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Locale; -import java.util.Map; -import java.util.WeakHashMap; - -@SuppressWarnings("UnstableApiUsage") -public class JvmKScrClass implements JvmClass{ - - private static final Map CACHE = new WeakHashMap<>(); - - private final KScrType underlying; - - private JvmKScrClass(KScrType underlying){ - this.underlying = underlying; - } - - public static JvmKScrClass of(KScrType type){ - if(type == null) - return null; - return CACHE.computeIfAbsent(type, JvmKScrClass::new); - } - - public @Nullable JvmClass getContainingClass(){ - return null; - } - - public @Nullable @NonNls String getName(){ - return underlying.getName(); - } - - public @Nullable @NonNls String getQualifiedName(){ - return underlying.fullyQualifiedName(); - } - - public @NotNull JvmClassKind getClassKind(){ - return underlying.kind().toJvmKind(); - } - - public @Nullable JvmReferenceType getSuperClassType(){ - return ClassTypeImpl.of(underlying.getSuperType()); - } - - public JvmReferenceType @NotNull [] getInterfaceTypes(){ - return underlying.getInterfaces().stream().map(ClassTypeImpl::of).toArray(JvmReferenceType[]::new); - } - - public JvmMethod @NotNull [] getMethods(){ - return underlying.methods().stream().map(JvmKScrMethod::of).toArray(JvmMethod[]::new); - } - - public JvmField @NotNull [] getFields(){ - return underlying.fields().stream().map(JvmKScrField::of).toArray(JvmField[]::new); - } - - public JvmClass @NotNull [] getInnerClasses(){ - return new JvmClass[0]; - } - - public JvmTypeParameter @NotNull [] getTypeParameters(){ - return new JvmTypeParameter[0]; - } - - public boolean hasModifier(@NotNull JvmModifier modifier){ - if(modifier == JvmModifier.PACKAGE_LOCAL) - return !(underlying.hasModifier("public") || underlying.hasModifier("protected") || underlying.hasModifier("private")); - return underlying.hasModifier(modifier.name().toLowerCase(Locale.ROOT)); - } - - public JvmAnnotation @NotNull [] getAnnotations(){ - return new JvmAnnotation[0]; - } - - public @Nullable PsiElement getSourceElement(){ - return underlying; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrField.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrField.java deleted file mode 100644 index 2afb3fc..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrField.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.comroid.kscr.intellij.psi.types; - -import com.intellij.lang.jvm.JvmAnnotation; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.JvmField; -import com.intellij.lang.jvm.JvmModifier; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiElement; -import org.comroid.kscr.intellij.psi.utils.KScrVariable; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; -import java.util.WeakHashMap; - -@SuppressWarnings("UnstableApiUsage") -public class JvmKScrField implements JvmField{ - - private static final Map CACHE = new WeakHashMap<>(); - - private final KScrVariable underlying; - - private JvmKScrField(KScrVariable underlying){ - this.underlying = underlying; - } - - public static JvmKScrField of(KScrVariable var){ - if(var == null) - return null; - return CACHE.computeIfAbsent(var, JvmKScrField::new); - } - - public @Nullable JvmClass getContainingClass(){ - return null; - } - - public @NotNull String getName(){ - return underlying.varName(); - } - - public @NotNull JvmType getType(){ - return underlying.varType(); - } - - public boolean hasModifier(@NotNull JvmModifier modifier){ - return false; - } - - public JvmAnnotation @NotNull [] getAnnotations(){ - return new JvmAnnotation[0]; - } - - public @Nullable PsiElement getSourceElement(){ - return underlying.declaration(); - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrMethod.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrMethod.java deleted file mode 100644 index e235cad..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrMethod.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.comroid.kscr.intellij.psi.types; - -import com.intellij.lang.jvm.*; -import com.intellij.lang.jvm.types.JvmReferenceType; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Locale; -import java.util.Map; -import java.util.WeakHashMap; - -@SuppressWarnings("UnstableApiUsage") -public class JvmKScrMethod implements JvmMethod{ - - private static final Map CACHE = new WeakHashMap<>(); - - private final KScrMethod underlying; - - private JvmKScrMethod(KScrMethod underlying){ - this.underlying = underlying; - } - - public static JvmKScrMethod of(KScrMethod method){ - if(method == null) - return null; - return CACHE.computeIfAbsent(method, JvmKScrMethod::new); - } - - public boolean isConstructor(){ - return false; - } - - public @Nullable JvmClass getContainingClass(){ - return JvmKScrClass.of(underlying.containingType()); - } - - public @NotNull String getName(){ - return underlying.getName(); - } - - public @Nullable JvmType getReturnType(){ - return underlying.returnType(); - } - - public JvmParameter @NotNull [] getParameters(){ - return underlying.parameters().stream().map(JvmKScrParameter::of).toArray(JvmKScrParameter[]::new); - } - - public boolean isVarArgs(){ - return false; - } - - public JvmReferenceType @NotNull [] getThrowsTypes(){ - return new JvmReferenceType[0]; - } - - public JvmTypeParameter @NotNull [] getTypeParameters(){ - return new JvmTypeParameter[0]; - } - - public boolean hasModifier(@NotNull JvmModifier modifier){ - if(modifier == JvmModifier.PACKAGE_LOCAL) - return !(underlying.hasModifier("public") || underlying.hasModifier("protected") || underlying.hasModifier("private")); - return underlying.hasModifier(modifier.name().toLowerCase(Locale.ROOT)); - } - - public JvmAnnotation @NotNull [] getAnnotations(){ - return new JvmAnnotation[0]; - } - - public @Nullable PsiElement getSourceElement(){ - return underlying; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrParameter.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrParameter.java deleted file mode 100644 index 2fc27f9..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/JvmKScrParameter.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.comroid.kscr.intellij.psi.types; - -import com.intellij.lang.jvm.JvmAnnotation; -import com.intellij.lang.jvm.JvmModifier; -import com.intellij.lang.jvm.JvmParameter; -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; -import java.util.WeakHashMap; - -public class JvmKScrParameter implements JvmParameter{ - - private static final Map CACHE = new WeakHashMap<>(); - - private final KScrParameter underlying; - - private JvmKScrParameter(KScrParameter underlying){ - this.underlying = underlying; - } - - public static JvmKScrParameter of(KScrParameter type){ - if(type == null) - return null; - return CACHE.computeIfAbsent(type, JvmKScrParameter::new); - } - - - public @NotNull JvmType getType(){ - return underlying.varType(); - } - - public boolean hasModifier(@NotNull JvmModifier modifier){ - // TODO: final parameters - return false; - } - - public JvmAnnotation @NotNull [] getAnnotations(){ - return new JvmAnnotation[0]; - } - - public @NonNls @Nullable String getName(){ - return underlying.getName(); - } - - public @Nullable PsiElement getSourceElement(){ - return underlying; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/KScrKind.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/KScrKind.java deleted file mode 100644 index 7868d88..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/types/KScrKind.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.comroid.kscr.intellij.psi.types; - -import com.intellij.lang.jvm.JvmClassKind; - -public enum KScrKind{ - CLASS, INTERFACE, ENUM, RECORD, ANNOTATION, SINGLE, CONSTRUCTED; - - @SuppressWarnings("UnstableApiUsage") - public JvmClassKind toJvmKind(){ - switch(this){ - default: - case CLASS: - return JvmClassKind.CLASS; - case INTERFACE: - return JvmClassKind.INTERFACE; - case ENUM: - return JvmClassKind.ENUM; - case ANNOTATION: - return JvmClassKind.ANNOTATION; - } - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrIdHolder.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrIdHolder.java deleted file mode 100644 index 3c27284..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrIdHolder.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.comroid.kscr.intellij.psi.utils; - -import com.intellij.extapi.psi.ASTDelegatePsiElement; -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -/** - * Contains common logic for finding and changing the name of elements that have an immediate KScrId child. - */ -public interface KScrIdHolder extends PsiElement{ - - default Optional getIdElement(){ - return PsiUtils.childOfType(this, KScrId.class); - } - - @Nullable - default String getId(){ - return getIdElement().map(ASTDelegatePsiElement::getText).orElse(null); - } - - default String getId(String orElse){ - return getIdElement().map(ASTDelegatePsiElement::getText).orElse(orElse); - } - - default void setName(String name){ - getIdElement().ifPresent(id -> id.replace(PsiUtils.createIdFromText(this, name))); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrModifiersHolder.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrModifiersHolder.java deleted file mode 100644 index f78b6a5..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrModifiersHolder.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.comroid.kscr.intellij.psi.utils; - -import com.intellij.psi.PsiElement; - -import java.util.Optional; - -public interface KScrModifiersHolder extends PsiElement{ - - default Optional getModifiersElement(){ - return PsiUtils.childOfType(this, KScrModifierList.class); - } - - default boolean hasModifier(String modifier){ - return getModifiersElement().map(k -> k.hasModifier(modifier)).orElse(false); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrTypeReference.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrTypeReference.java deleted file mode 100644 index 92e25b2..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrTypeReference.java +++ /dev/null @@ -1,197 +0,0 @@ -package org.comroid.kscr.intellij.psi.utils; - -import com.intellij.codeInsight.lookup.LookupElementBuilder; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.LocalQuickFixProvider; -import com.intellij.lang.jvm.JvmClass; -import com.intellij.lang.jvm.JvmClassKind; -import com.intellij.lang.jvm.JvmModifier; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiNamedElement; -import com.intellij.psi.PsiReference; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.PsiShortNamesCache; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.ui.JBColor; -import com.intellij.util.IncorrectOperationException; -import org.comroid.kscr.intellij.inspections.fixes.AddImportFix; -import org.comroid.kscr.intellij.psi.*; -import org.comroid.kscr.intellij.psi.types.KScrKind; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -public class KScrTypeReference implements PsiReference, LocalQuickFixProvider{ - - KScrId id; - KScrIdHolder from; - - public KScrTypeReference(KScrId id, KScrIdHolder from){ - this.id = id; - this.from = from; - } - - public @NotNull PsiElement getElement(){ - return from; - } - - public @NotNull TextRange getRangeInElement(){ - return id.getTextRangeInParent(); - } - - public @Nullable JvmClass resolveClass(){ - if(id == null) - return null; - var p = id.getProject(); - // possible names come from imports - var file = from.getContainingFile(); - if(file instanceof KScrFile) - return ProjectTypeFinder.firstType(p, getCandidates((KScrFile)file, id.getText())); - return ProjectTypeFinder.findByName(p, id.getText()).orElse(null); - } - - @NotNull - public static List getCandidates(KScrFile file, String id){ - Optional pkg = file.getPackage().map(KScrPackageStatement::getPackageName); - List candidates = file.getImports().stream() - .filter(x -> !x.isStatic()) - .map(x -> x.isWildcard() ? (x.getImportName() + "." + id) : (x.getImportName().endsWith(id) ? x.getImportName() : null)) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - candidates.add(0, id); - // TODO: all implicit imports - candidates.add(1, "java.lang." + id); - pkg.ifPresent(s -> candidates.add(2, s + "." + id)); - return candidates; - } - - public @Nullable PsiElement resolve(){ - var cClass = resolveClass(); - return cClass != null ? cClass.getSourceElement() : null; - } - - public @NotNull String getCanonicalText(){ - var cClass = resolveClass(); - return cClass != null ? cClass.getQualifiedName() : id.getText(); - } - - public PsiElement handleElementRename(@NotNull String name) throws IncorrectOperationException{ - from.setName(name); - return from; - } - - public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException{ - if(element instanceof KScrType){ - from.setName(((KScrType)element).fullyQualifiedName()); - return from; - } - throw new IncorrectOperationException("Can't bind a KScrBaseTypeRef to an element that is not a KScrTypeDef"); - } - - public boolean isReferenceTo(@NotNull PsiElement element){ - if(element instanceof KScrType) - return matchesType((KScrType)element); - return resolve() == element; - } - - public boolean isSoft(){ - return false; - } - - public boolean matchesType(KScrType typeDef){ - String ourId = id.getText(); - if(ourId == null || ourId.isBlank()) - return false; - if(from.getContainingFile() instanceof KScrFile){ - KScrFile file = (KScrFile)from.getContainingFile(); - Optional pkg = file.getPackage().map(KScrPackageStatement::getPackageName); - if(!pkg.map(String::isBlank).orElse(true) && typeDef.getPackageName().isBlank()){ - // we're not in the default package -> we can't reference it - return false; - } - String fqName = typeDef.fullyQualifiedName(); - // check if - // its FQ-name == our text (plus package name) - if(fqName.equals(ourId) || (pkg.isPresent() && (pkg.get() + "." + ourId).equals(fqName))) - return true; - // it's FQ-name == some import that ends in our text, - // it's FQ-name == a wildcard import + our text - // TODO: static imports for inner types - // TODO: also consider target's visibility - for(KScrImportStatement i : file.getImports()) - if(!i.isStatic()){ - String name = i.getImportName(); - if(i.isWildcard() && fqName.equals(name + "." + ourId)) - return true; - else if(name.endsWith(ourId) && fqName.equals(name)) - return true; - } - return false; - }else - return typeDef.fullyQualifiedName().equals(ourId); - } - - public LocalQuickFix @Nullable [] getQuickFixes(){ - // we resolve to nothing, see if there exists a type with the right short name - var shortName = id.getText(); - if(shortName.contains(".")) - return new LocalQuickFix[0]; - - var project = id.getProject(); - List candidates = ProjectTypeFinder.findAll(project, x -> x.getName().equals(shortName)); - candidates.addAll(Arrays.asList(PsiShortNamesCache.getInstance(project).getClassesByName(shortName, GlobalSearchScope.everythingScope(project)))); - - return candidates.stream() - .map(x -> new AddImportFix(x.getQualifiedName(), id)) - .toArray(LocalQuickFix[]::new); - } - - public Object @NotNull [] getVariants(){ - Predicate isWrongClause = (aClass) -> { - KScrType in; - if(PsiTreeUtil.getParentOfType(id, KScrImplementsClause.class) != null) - if(aClass.getClassKind() != JvmClassKind.INTERFACE) - return true; - if(PsiTreeUtil.getParentOfType(id, KScrExtendsClause.class) != null && (in = PsiTreeUtil.getParentOfType(id, KScrType.class)) != null) - return aClass.hasModifier(JvmModifier.FINAL) - || (in.kind() != KScrKind.INTERFACE && aClass.getClassKind() == JvmClassKind.INTERFACE) - || (in.kind() == KScrKind.INTERFACE && aClass.getClassKind() != JvmClassKind.INTERFACE) - || aClass.getClassKind() == JvmClassKind.ANNOTATION; - return false; - }; - - return fillCompletion(id, isWrongClause); - } - - public static Object @NotNull [] fillCompletion(KScrElement at, Predicate isWrongClause){ - List list = new ArrayList<>(); - for(JvmClass aClass : ProjectTypeFinder.allVisibleAt(at.getProject(), at)){ - boolean wrongClause = isWrongClause.test(aClass); - PsiElement decl = aClass.getSourceElement(); - if(decl != null){ - var fqName = aClass.getQualifiedName(); - LookupElementBuilder builder = LookupElementBuilder - .createWithIcon((PsiNamedElement)decl) - .withTailText(" " + JvmClassUtils.getPackageName(aClass)) - .withPsiElement(aClass.getSourceElement()) - .withInsertHandler((ctx, elem) -> { - if(ctx.getFile() instanceof KScrFile){ - KScrFile cFile = (KScrFile)ctx.getFile(); - if(cFile.getImports().stream().noneMatch(imp -> imp.importsType(aClass)) - && !KScrImportStatement.importsType("java.lang.*", fqName) - && !KScrImportStatement.importsType(cFile.getPackageName() + ".*", fqName)) - AddImportFix.addImport(cFile, fqName); - } - }); - if(wrongClause) - builder = builder.withItemTextForeground(JBColor.RED); - list.add(builder); - } - } - return list.toArray(); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrVarScope.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrVarScope.java deleted file mode 100644 index c5fb544..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrVarScope.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.comroid.kscr.intellij.psi.utils; - -import com.intellij.psi.PsiElement; -import com.intellij.psi.util.PsiTreeUtil; - -import java.util.List; -import java.util.Optional; - -public interface KScrVarScope extends PsiElement{ - - List available(); - - static Optional scopeOf(PsiElement e){ - return Optional.ofNullable(PsiTreeUtil.getParentOfType(e, KScrVarScope.class)); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrVariable.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrVariable.java deleted file mode 100644 index 92f1ad5..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/KScrVariable.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.comroid.kscr.intellij.psi.utils; - -import com.intellij.lang.jvm.types.JvmType; -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.Nullable; - -public interface KScrVariable{ - - String varName(); - - JvmType varType(); - - boolean hasModifier(String modifier); - - @Nullable - default PsiElement declaration(){ - if(this instanceof PsiElement) - return (PsiElement)this; - return null; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/MethodUtils.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/MethodUtils.java deleted file mode 100644 index 54c226f..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/MethodUtils.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.comroid.kscr.intellij.psi.utils; - -import com.intellij.psi.PsiElement; -import org.comroid.kscr.intellij.psi.*; -import org.comroid.kscr.intellij.psi.expressions.KScrBinaryExpr; -import org.comroid.kscr.intellij.psi.expressions.KScrParenthesisedExpr; - -import java.util.ArrayList; -import java.util.List; - -public class MethodUtils{ - - public static List getRealArgs(KScrCall call){ - var declaredArgs = PsiUtils.childOfType(call, KScrArgumentsList.class) - .map(x -> PsiUtils.childrenOfType(x, KScrExpression.class)) - .orElse(List.of()); - if(call.getParent() instanceof KScrStatement) - return declaredArgs; - - var args = new ArrayList<>(declaredArgs); - PsiElement current = call.getParent(); - while(current instanceof KScrExpression){ - current = current.getParent(); - if(!(current instanceof KScrParenthesisedExpr || current instanceof KScrBinaryExpr)) - break; - if(current instanceof KScrBinaryExpr){ - var bin = (KScrBinaryExpr)current; - var symbol = bin.symbol(); - if(!symbol.equals("|>")) - break; - bin.left().ifPresent(x -> args.add(0, x)); - } - } - return args; - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/ProjectTypeFinder.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/ProjectTypeFinder.java deleted file mode 100644 index baf1dd4..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/ProjectTypeFinder.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.comroid.kscr.intellij.psi.utils; - -import com.intellij.lang.jvm.JvmClass; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ProjectRootManager; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiManager; -import com.intellij.psi.search.GlobalSearchScope; -import org.comroid.kscr.intellij.KScrFileType; -import org.comroid.kscr.intellij.KScrSourceFileType; -import org.comroid.kscr.intellij.psi.*; -import org.comroid.kscr.intellij.psi.types.JvmKScrClass; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Predicate; - -public class ProjectTypeFinder{ - - @Nullable - public static JvmClass firstType(Project p, List candidates){ - for(String candidate : candidates){ - var type = ProjectTypeFinder.findByName(p, candidate); - if(type.isPresent()) - return type.get(); - } - return null; - } - - public static List allVisibleAt(Project in, KScrElement at){ - // TODO: check visibility modifiers - var types = findAll(in, x -> true); - addTypesFromPackage(in, types, "java.lang"); - for(KScrImportStatement imp : at.getContainer().map(KScrFileWrapper::getImports).orElse(Collections.emptyList())){ - if(imp.isWildcard()) - addTypesFromPackage(in, types, imp.getImportName()); - else if(!imp.isWildcard()){ - var t = JavaPsiFacade.getInstance(in).findClass(imp.getImportName(), GlobalSearchScope.allScope(in)); - if(t != null) - types.add(t); - } - } - return types; - } - - private static void addTypesFromPackage(Project in, List types, String pkg){ - var aPackage = JavaPsiFacade.getInstance(in).findPackage(pkg); - if(aPackage != null) - types.addAll(Arrays.asList(aPackage.getClasses())); - } - - public static Optional findByName(Project in, String qualifiedName){ - // first check types in project - // can appear in any file due to inner types - return find(in, y -> y.fullyQualifiedName().equals(qualifiedName), null) - .or(() -> Optional.ofNullable(JavaPsiFacade.getInstance(in).findClass(qualifiedName, GlobalSearchScope.allScope(in)))); - } - - /** - * Checks every KScr type in a project and returns the first type found that matches the criteria, or an empty - * Optional if none exist. - * - * @param in - * The project to search in. - * @param checker - * The criteria to search against. - * @return The first type found that matches the criteria. - */ - public static Optional find(@NotNull Project in, @NotNull Predicate checker, @Nullable Predicate directCheck){ - AtomicReference> ret = new AtomicReference<>(Optional.empty()); - ProjectRootManager.getInstance(in).getFileIndex().iterateContent(vf -> { - if(directCheck != null && !directCheck.test(vf)) - return true; - if(!vf.isDirectory() && Objects.equals(vf.getExtension(), "KScr") && vf.getFileType() == KScrSourceFileType.FILE_TYPE){ - KScrFile file = (KScrFile)PsiManager.getInstance(in).findFile(vf); - if(file != null){ - var type = file.getTypeDef(); - if(type.isPresent()){ - var checked = checkTypeAndMembers(type.get(), checker); - if(checked.isPresent()){ - ret.set(checked); - return false; - } - } - } - } - return true; - }); - return ret.get(); - } - - public static List findAll(@NotNull Project in, @NotNull Predicate checker){ - List ret = new ArrayList<>(); - ProjectRootManager.getInstance(in).getFileIndex().iterateContent(vf -> { - if(!vf.isDirectory() && Objects.equals(vf.getExtension(), "KScr") && vf.getFileType() == KScrSourceFileType.FILE_TYPE){ - KScrFile file = (KScrFile)PsiManager.getInstance(in).findFile(vf); - if(file != null){ - var type = file.getTypeDef(); - if(type.isPresent()){ - var checked = checkTypeAndMembers(type.get(), checker); - if(checked.isPresent()){ - ret.add(checked.get()); - return true; // don't stop - } - } - } - } - return true; - }); - return ret; - } - - public static Optional checkTypeAndMembers(@NotNull KScrType type, @NotNull Predicate checker){ - if(checker.test(type)) - return Optional.of(JvmKScrClass.of(type)); - for(KScrMember member : type.getMembers()){ - Optional def = PsiUtils.childOfType(member, KScrType.class); - if(def.isPresent()){ - var r = checkTypeAndMembers(def.get(), checker); - if(r.isPresent()) - return r; - } - } - return Optional.empty(); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/PsiUtils.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/PsiUtils.java deleted file mode 100644 index ccb2c9a..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/psi/utils/PsiUtils.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.comroid.kscr.intellij.psi.utils; - -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFileFactory; -import com.intellij.psi.impl.PsiFileFactoryImpl; -import com.intellij.psi.tree.IElementType; -import org.comroid.kscr.intellij.KScrLanguage; -import org.comroid.kscr.intellij.antlr_generated.KScrLexer; -import org.comroid.kscr.intellij.antlr_generated.KScrParser; -import org.comroid.kscr.intellij.psi.Tokens; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class PsiUtils{ - - @NotNull - private static PsiElement createFromText(Project project, PsiElement context, String text, IElementType type){ - PsiFileFactoryImpl factory = (PsiFileFactoryImpl)PsiFileFactory.getInstance(project); - var ret = factory.createElementFromText(text, KScrLanguage.LANGUAGE, type, context); - assert ret != null; - return ret; - } - - @NotNull - public static PsiElement createFromText(@NotNull PsiElement context, String text, IElementType elementType){ - return createFromText(context.getProject(), context, text, elementType).getFirstChild(); - } - - // the ID token is understood in ParserAdaptor to mean a full ID - @NotNull - public static PsiElement createIdFromText(@NotNull PsiElement context, String text){ - return createFromText(context, text, Tokens.getFor(KScrLexer.ID)); - } - - @NotNull - public static PsiElement createIdPartFromText(@NotNull PsiElement context, String text){ - return createIdFromText(context, text).getFirstChild(); - } - - @NotNull - public static PsiElement createExpressionFromText(@NotNull PsiElement context, String text){ - return createFromText(context, text, Tokens.getRuleFor(KScrParser.RULE_expr)); - } - - @NotNull - public static PsiElement createImportFromText(@NotNull PsiElement context, String text){ - return createFromText(context, text, Tokens.getRuleFor(KScrParser.RULE_importDecl)); - } - - @NotNull - public static PsiElement createExtendsClauseFromText(@NotNull PsiElement context, String text){ - return createFromText(context, text, Tokens.getRuleFor(KScrParser.RULE_objectExtends)); - } - - @NotNull - public static PsiElement createImplementsClauseFromText(@NotNull PsiElement context, String text){ - return createFromText(context, text, Tokens.getRuleFor(KScrParser.RULE_objectImplements)); - } - - @NotNull - public static PsiElement createTypeReferenceFromText(@NotNull PsiElement context, String text){ - return createFromText(context, text, Tokens.getRuleFor(KScrParser.RULE_type)); - } - - @NotNull - public static PsiElement createWhitespace(@NotNull PsiElement context, String text){ - assert text.isBlank(); - return createFromText(context, text, Tokens.getFor(KScrLexer.ID)); - } - - @NotNull - public static List childrenOfType(@NotNull PsiElement parent, Class filter){ - return streamChildrenOfType(parent, filter) - .collect(Collectors.toList()); - } - - @NotNull - public static Stream streamChildrenOfType(@NotNull PsiElement parent, Class filter){ - return Arrays.stream(parent.getChildren()) - .filter(filter::isInstance) - .map(z -> (X)z); - } - - @NotNull - public static List wrappedChildrenOfType(@NotNull PsiElement parent, Class filter){ - return streamWrappedChildrenOfType(parent, filter) - .collect(Collectors.toList()); - } - - @NotNull - public static Stream streamWrappedChildrenOfType(@NotNull PsiElement parent, Class filter){ - return Arrays.stream(parent.getChildren()) - .map(PsiElement::getFirstChild) - .filter(filter::isInstance) - .map(z -> (X)z); - } - - @NotNull - public static List matchingChildren(@NotNull PsiElement parent, Predicate filter){ - return Arrays.stream(parent.getChildren()) - .filter(filter) - .collect(Collectors.toList()); - } - - @NotNull - public static Optional childOfType(@NotNull PsiElement parent, Class filter){ - return streamChildrenOfType(parent, filter).findFirst(); - } - - @NotNull - public static Optional childOfType(@NotNull PsiElement parent, Class filter, int index){ - var c = childrenOfType(parent, filter); - if(c.size() > index) - return Optional.of(c.get(index)); - else - return Optional.empty(); - } - - @NotNull - public static Optional wrappedChildOfType(@NotNull PsiElement parent, Class filter){ - return streamWrappedChildrenOfType(parent, filter).findFirst(); - } - - @NotNull - public static Optional wrappedChildOfType(@NotNull PsiElement parent, Class filter, int index){ - var c = wrappedChildrenOfType(parent, filter); - if(c.size() > index) - return Optional.of(c.get(index)); - else - return Optional.empty(); - } -} \ No newline at end of file diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/KScrSdkType.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/KScrSdkType.java deleted file mode 100644 index 585225c..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/KScrSdkType.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.comroid.kscr.intellij.sdk; - -import com.intellij.openapi.projectRoots.*; -import org.jdom.Element; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.File; -import java.util.Arrays; - -public class KScrSdkType extends SdkType { - public static final KScrSdkType INSTANCE = new KScrSdkType(); - - public KScrSdkType() { - super("KScrSDK"); - } - - @Override - public @Nullable String suggestHomePath() { - return File.separator + "dev" + File.separator + "sdk" + File.separator + "kscr"; - } - - @Override - public boolean isValidSdkHome(@NotNull String path) { - File f = new File(path); - File[] array = f.listFiles(); - if (array == null) - return false; - return f.exists() && Arrays.stream(array).anyMatch(x -> x.getName().equals("kscr.exe")); - } - - @Override - public @NotNull String suggestSdkName(@Nullable String currentSdkName, @NotNull String sdkHome) { - return currentSdkName == null ? getName() : currentSdkName; - } - - @Override - public @NotNull @Nls(capitalization = Nls.Capitalization.Title) String getPresentableName() { - return getName(); - } - - @Override - public @Nullable AdditionalDataConfigurable createAdditionalDataConfigurable(@NotNull SdkModel sdkModel, @NotNull SdkModificator sdkModificator) { - return null; - } - - @Override - public void saveAdditionalData(@NotNull SdkAdditionalData additionalData, @NotNull Element additional) { - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/config/KScrLanguageConfiguration.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/config/KScrLanguageConfiguration.java deleted file mode 100644 index 22bb2c7..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/config/KScrLanguageConfiguration.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.comroid.kscr.intellij.sdk.config; - -import com.intellij.openapi.options.Configurable; -import com.intellij.openapi.options.ConfigurationException; -import com.intellij.openapi.util.NlsContexts; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; - -public class KScrLanguageConfiguration implements Configurable { - @Override - public @NlsContexts.ConfigurableName String getDisplayName() { - return "KScr"; - } - - @Override - public @Nullable JComponent createComponent() { - return null; - } - - @Override - public boolean isModified() { - return false; - } - - @Override - public void apply() throws ConfigurationException { - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/KScrModuleBuilder.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/KScrModuleBuilder.java deleted file mode 100644 index be7bf8b..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/KScrModuleBuilder.java +++ /dev/null @@ -1,170 +0,0 @@ -package org.comroid.kscr.intellij.sdk.module; - -import com.intellij.ide.NewProjectWizardLegacy; -import com.intellij.ide.util.projectWizard.*; -import com.intellij.openapi.module.ModifiableModuleModel; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.options.ConfigurationException; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.SdkTypeId; -import com.intellij.openapi.roots.*; -import com.intellij.openapi.roots.libraries.Library; -import com.intellij.openapi.roots.libraries.LibraryTable; -import com.intellij.openapi.roots.ui.configuration.ModulesProvider; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import org.comroid.kscr.intellij.sdk.KScrSdkType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -public class KScrModuleBuilder extends ModuleBuilder implements SourcePathsBuilder, ModuleBuilderListener { - private final KScrModuleType moduleType; - // Pair - private List> srcPaths; - // Pair - private List> libraries; - - @Override - public List> getSourcePaths() throws ConfigurationException { - if (srcPaths == null){ - final List> paths = new ArrayList<>(); - final String path = getContentEntryPath() + File.separator + "src" + File.separator + "main"; - new File(path).mkdirs(); - paths.add(Pair.create(path, "")); - return paths; - } - return srcPaths; - } - - @Override - public void setSourcePaths(List> sourcePaths) { - srcPaths = sourcePaths == null ? null : new ArrayList<>(sourcePaths); - } - - @Override - public void addSourcePath(Pair sourcePathInfo) { - if (srcPaths == null) - srcPaths = new ArrayList<>(); - srcPaths.add(sourcePathInfo); - } - - @Override - public boolean isAvailable() { - return NewProjectWizardLegacy.isAvailable(); - } - - @Override - public boolean isSuitableSdkType(SdkTypeId sdkType) { - return sdkType instanceof KScrSdkType; - } - - public KScrModuleBuilder(KScrModuleType moduleType) { - this.moduleType = moduleType; - } - - @Override - public ModuleType getModuleType() { - return moduleType; - } - - @Override - public ModuleWizardStep[] createWizardSteps(@NotNull WizardContext wizardContext, @NotNull ModulesProvider modulesProvider) { - - } - - @Override - public void setupRootModel(@NotNull ModifiableRootModel rootModel) throws ConfigurationException { - final CompilerModuleExtension compilerModuleExtension = rootModel.getModuleExtension(CompilerModuleExtension.class); - compilerModuleExtension.setExcludeOutput(true); - if (myJdk != null){ - rootModel.setSdk(myJdk); - } else { - rootModel.inheritSdk(); - } - - ContentEntry contentEntry = doAddContentEntry(rootModel); - if (contentEntry != null) { - final List> sourcePaths = getSourcePaths(); - - if (sourcePaths != null) { - for (final Pair sourcePath : sourcePaths) { - String first = sourcePath.first; - new File(first).mkdirs(); - final VirtualFile sourceRoot = LocalFileSystem.getInstance() - .refreshAndFindFileByPath(FileUtil.toSystemIndependentName(first)); - if (sourceRoot != null) { - contentEntry.addSourceFolder(sourceRoot, false, sourcePath.second); - } - } - } - } - - if (myCompilerOutputPath != null) { - // should set only absolute paths - String canonicalPath; - try { - canonicalPath = FileUtil.resolveShortWindowsName(myCompilerOutputPath); - } - catch (IOException e) { - canonicalPath = myCompilerOutputPath; - } - compilerModuleExtension - .setCompilerOutputPath(VfsUtilCore.pathToUrl(canonicalPath)); - } - else { - compilerModuleExtension.inheritCompilerOutputPath(true); - } - - LibraryTable libraryTable = rootModel.getModuleLibraryTable(); - for (Pair libInfo : myModuleLibraries) { - final String moduleLibraryPath = libInfo.first; - final String sourceLibraryPath = libInfo.second; - Library library = libraryTable.createLibrary(); - Library.ModifiableModel modifiableModel = library.getModifiableModel(); - modifiableModel.addRoot(getUrlByPath(moduleLibraryPath), OrderRootType.CLASSES); - if (sourceLibraryPath != null) { - modifiableModel.addRoot(getUrlByPath(sourceLibraryPath), OrderRootType.SOURCES); - } - modifiableModel.commit(); - } - } - - @Nullable - @Override - public List commit(@NotNull Project project, ModifiableModuleModel model, ModulesProvider modulesProvider) { - LanguageLevelProjectExtension extension = LanguageLevelProjectExtension.getInstance(ProjectManager.getInstance().getDefaultProject()); - Boolean aDefault = extension.getDefault(); - LOG.debug("commit: aDefault=" + aDefault); - LanguageLevelProjectExtension instance = LanguageLevelProjectExtension.getInstance(project); - if (aDefault != null && !aDefault) { - instance.setLanguageLevel(extension.getLanguageLevel()); - } - else { - //setup language level according to jdk, then setup default flag - Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk(); - LOG.debug("commit: projectSdk=" + sdk); - if (sdk != null) { - JavaSdkVersion version = JavaSdk.getInstance().getVersion(sdk); - LOG.debug("commit: sdk.version=" + version); - if (version != null) { - instance.setLanguageLevel(version.getMaxLanguageLevel()); - instance.setDefault(true); - } - } - } - return super.commit(project, model, modulesProvider); - } - - @Override - public void moduleCreated(@NotNull Module module) { - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/KScrModuleType.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/KScrModuleType.java deleted file mode 100644 index 64f8c2d..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/KScrModuleType.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.comroid.kscr.intellij.sdk.module; - -import com.intellij.openapi.module.ModuleType; -import com.intellij.util.PlatformIcons; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; - -public class KScrModuleType extends ModuleType { - public static final KScrModuleType INSTANCE = new KScrModuleType(); - - protected KScrModuleType() { - super("KScrModule"); - } - - @NotNull - @Override - public KScrModuleBuilder createModuleBuilder() { - return new KScrModuleBuilder(this); - } - - @Override - public @NotNull @Nls(capitalization = Nls.Capitalization.Title) String getName() { - return "KScr Project"; - } - - @Override - public @NotNull @Nls(capitalization = Nls.Capitalization.Sentence) String getDescription() { - return "KScr source project; class library or application"; - } - - @Override - public @NotNull Icon getNodeIcon(boolean isOpened) { - return isOpened ? PlatformIcons.LIBRARY_ICON : PlatformIcons.FOLDER_ICON; - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/KScrWizardStep.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/KScrWizardStep.java deleted file mode 100644 index b28ec7e..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/KScrWizardStep.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.comroid.kscr.intellij.sdk.module.wizard; - -import com.intellij.ide.util.projectWizard.ModuleWizardStep; -import com.intellij.ui.wizard.WizardStep; - -import javax.swing.*; - -public class KScrWizardStep extends ModuleWizardStep { - @Override - public JComponent getComponent() { - return null; - } - - @Override - public void updateDataModel() { - - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/panel/KScrInstallSdkComboBox.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/panel/KScrInstallSdkComboBox.java deleted file mode 100644 index 5618516..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/panel/KScrInstallSdkComboBox.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.comroid.kscr.intellij.sdk.module.wizard.panel; - -public class KScrInstallSdkComboBox { -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/panel/KScrInstallSdkPanel.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/panel/KScrInstallSdkPanel.java deleted file mode 100644 index 98d0c59..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/sdk/module/wizard/panel/KScrInstallSdkPanel.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.comroid.kscr.intellij.sdk.module.wizard.panel; - -import com.google.gson.JsonElement; -import com.intellij.ide.util.PropertiesComponent; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.application.AccessToken; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.fileChooser.FileChooser; -import com.intellij.openapi.fileChooser.FileChooserDescriptor; -import com.intellij.openapi.fileChooser.FileChooserFactory; -import com.intellij.openapi.fileChooser.PathChooserDialog; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.vfs.VfsUtil; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.ui.components.ActionLink; -import com.intellij.util.download.DownloadableFileDescription; -import com.intellij.util.download.DownloadableFileService; -import com.intellij.util.download.FileDownloader; -import com.intellij.util.io.HttpRequests; -import com.intellij.util.io.ZipUtil; -import org.comroid.kscr.intellij.util.RequestUtil; - -import javax.swing.*; -import java.awt.*; -import java.io.FilenameFilter; -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.stream.StreamSupport; - -public class KScrInstallSdkPanel extends JPanel { - public static final String LAST_USED_KSCR_HOME = "LAST_USED_KSCR_HOME"; - private ActionLink myDownloadLink; - private JPanel myRoot; - private KScrInstallSdkComboBox mySdkComboBox; - - public KScrInstallSdkPanel() { - super(new BorderLayout()); - add(myRoot, BorderLayout.CENTER); - } - - private void createUIComponents() { - myDownloadLink = new ActionLink("Download and Install KScr SDK", event -> { - FileChooserDescriptor descriptor = new FileChooserDescriptor(false, true, false, false, false, false); - PathChooserDialog pathChooser = FileChooserFactory.getInstance() - .createPathChooser(descriptor, null, KScrInstallSdkPanel.this); - pathChooser.choose(VfsUtil.getUserHomeDir(), new FileChooser.FileChooserConsumer() { - @Override - public void cancelled() { - } - - @Override - public void consume(List virtualFiles) { - if (virtualFiles.size() == 1) { - VirtualFile dir = virtualFiles.get(0); - String dirName = dir.getName(); - try { - if (!dirName.toLowerCase().contains("smalltalk") && !dirName.toLowerCase().contains("redline")) { - try { - dir = dir.createChildDirectory(this, "RedlineSmalltalk"); - } catch (IOException e) {// - } - } - var url = StreamSupport.stream(HttpRequests.request("https://api.github.com/repos/comroid-git/KScr/releases") - .accept("application/json") - .connect(RequestUtil::parseJson).getAsJsonArray() - .get(0).getAsJsonObject() - .get("assets").getAsJsonArray() - .spliterator(), false) - .map(JsonElement::getAsJsonObject) - .filter(asset -> asset.get("name").getAsString().endsWith(".zip")) - .findFirst() - .map(asset -> asset.get("browser_download_url").getAsString()) - .orElseThrow(() -> new RuntimeException("Could not find latest KScr release")); - var split = url.lastIndexOf('/'); - String urlDir = url.substring(0, split); - String urlFile = url.substring(split + 1); - var fileService = DownloadableFileService.getInstance(); - var fileDescription = fileService.createFileDescription(urlDir, urlFile); - var downloader = fileService.createDownloader(List.of(fileDescription), "KScr Distribution"); - var files = downloader.download(Path.of(System.getProperty("java.io.tmpdir"), "kscr-dist/").toFile()); - if (files.size() == 1) { - ZipUtil.extract(files.get(0).first.toPath(), dir.toNioPath(), (parent, file) -> true); - PropertiesComponent.getInstance().setValue(LAST_USED_KSCR_HOME, dir.getPath()); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - }}); - }); - } - - public String getSdkName() { - final Sdk selectedSdk = mySdkComboBox.getSelectedSdk(); - return selectedSdk == null ? null : selectedSdk.getName(); - } - - public Sdk getSdk() { - return mySdkComboBox.getSelectedSdk(); - } - - public void setSdk(Sdk sdk) { - mySdkComboBox.getComboBox().setSelectedItem(sdk); - } -} diff --git a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/util/RequestUtil.java b/kscr-intellij/src/main/java/org/comroid/kscr/intellij/util/RequestUtil.java deleted file mode 100644 index 4fa6817..0000000 --- a/kscr-intellij/src/main/java/org/comroid/kscr/intellij/util/RequestUtil.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.comroid.kscr.intellij.util; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.intellij.util.io.HttpRequests; - -import java.io.IOException; - -public final class RequestUtil { - public static JsonElement parseJson(HttpRequests.Request request) throws IOException { - String data = request.readString(); - return new Gson().toJsonTree(data); - } -} diff --git a/kscr-intellij/src/main/resources/META-INF/plugin.xml b/kscr-intellij/src/main/resources/META-INF/plugin.xml deleted file mode 100644 index 33ef20c..0000000 --- a/kscr-intellij/src/main/resources/META-INF/plugin.xml +++ /dev/null @@ -1,138 +0,0 @@ - - org.comroid.KScrIntelliJPlugin - KScr Language - comroid - - - - com.intellij.modules.platform - com.intellij.modules.lang - com.intellij.java - - org.jetbrains.plugins.yaml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/kscr-intellij/src/main/resources/fileTemplates/KScr Annotation.kscr.ft b/kscr-intellij/src/main/resources/fileTemplates/KScr Annotation.kscr.ft deleted file mode 100644 index 3b17dd0..0000000 --- a/kscr-intellij/src/main/resources/fileTemplates/KScr Annotation.kscr.ft +++ /dev/null @@ -1,5 +0,0 @@ -package ${PACKAGE_NAME}; - -public annotation ${NAME} { - -} \ No newline at end of file diff --git a/kscr-intellij/src/main/resources/fileTemplates/KScr Class.kscr.ft b/kscr-intellij/src/main/resources/fileTemplates/KScr Class.kscr.ft deleted file mode 100644 index cd2a7d7..0000000 --- a/kscr-intellij/src/main/resources/fileTemplates/KScr Class.kscr.ft +++ /dev/null @@ -1,5 +0,0 @@ -package ${PACKAGE_NAME}; - -public class ${NAME} { - -} \ No newline at end of file diff --git a/kscr-intellij/src/main/resources/fileTemplates/KScr Enum.kscr.ft b/kscr-intellij/src/main/resources/fileTemplates/KScr Enum.kscr.ft deleted file mode 100644 index 3d814f8..0000000 --- a/kscr-intellij/src/main/resources/fileTemplates/KScr Enum.kscr.ft +++ /dev/null @@ -1,5 +0,0 @@ -package ${PACKAGE_NAME}; - -public enum ${NAME} { - -} \ No newline at end of file diff --git a/kscr-intellij/src/main/resources/fileTemplates/KScr Interface.kscr.ft b/kscr-intellij/src/main/resources/fileTemplates/KScr Interface.kscr.ft deleted file mode 100644 index 2cd74d8..0000000 --- a/kscr-intellij/src/main/resources/fileTemplates/KScr Interface.kscr.ft +++ /dev/null @@ -1,5 +0,0 @@ -package ${PACKAGE_NAME}; - -public interface ${NAME} { - -} \ No newline at end of file diff --git a/kscr-intellij/src/main/resources/inspectionDescriptions/InvalidTypeName.html b/kscr-intellij/src/main/resources/inspectionDescriptions/InvalidTypeName.html deleted file mode 100644 index 045fdac..0000000 --- a/kscr-intellij/src/main/resources/inspectionDescriptions/InvalidTypeName.html +++ /dev/null @@ -1,8 +0,0 @@ - - -Reports unresolved type references, such as an occurrence of the expression `X.class` without the type `X` being visible or imported. - - - - - \ No newline at end of file diff --git a/kscr-intellij/src/main/resources/inspectionDescriptions/WrongFileNameForTypeName.html b/kscr-intellij/src/main/resources/inspectionDescriptions/WrongFileNameForTypeName.html deleted file mode 100644 index 40ad42b..0000000 --- a/kscr-intellij/src/main/resources/inspectionDescriptions/WrongFileNameForTypeName.html +++ /dev/null @@ -1,8 +0,0 @@ - - -Reports classes that have a different names to their enclosing file, such as class T; in a file named B.cyc. - - - - - \ No newline at end of file diff --git a/kscr-intellij/src/main/resources/pluginIcon.svg b/kscr-intellij/src/main/resources/pluginIcon.svg deleted file mode 100644 index 31c66f8..0000000 --- a/kscr-intellij/src/main/resources/pluginIcon.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - kscr - - diff --git a/kscr-vscode/language-configuration.json b/kscr-vscode/language-configuration.json deleted file mode 100644 index 4375673..0000000 --- a/kscr-vscode/language-configuration.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "comments": { - // symbol used for single line comment. Remove this entry if your language does not support line comments - "lineComment": "//", - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - //"blockComment": [ "/*", "*/" ] - }, - // symbols used as brackets - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["<", ">"] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["<", ">"], - ["\"", "\""], - ["'", "'"] - ], - // symbols that can be used to surround a selection - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["<", ">"], - ["\"", "\""], - ["'", "'"] - ], - "folding": { - "markers": { - "start": "//region", - "end": "//endregion" - } - } -} \ No newline at end of file From 9bbf10352a34fcf5a8839ee5e0b37a2ada29c1bf Mon Sep 17 00:00:00 2001 From: "Tobias Burdow [Kaleidox]" Date: Fri, 6 May 2022 13:16:47 +0200 Subject: [PATCH 2/4] add some code ref: https://martinbjorkstrom.com/posts/2018-11-29-creating-a-language-server --- kscr-lang-server/CompletionHandler.cs | 140 +++++++++++++++++++++++ kscr-lang-server/KScrFileSyncHandler.cs | 81 +++++++++++++ kscr-lang-server/KScrLangServer.cs | 26 ++++- kscr-lang-server/kscr-lang-server.csproj | 4 +- 4 files changed, 246 insertions(+), 5 deletions(-) create mode 100644 kscr-lang-server/CompletionHandler.cs create mode 100644 kscr-lang-server/KScrFileSyncHandler.cs diff --git a/kscr-lang-server/CompletionHandler.cs b/kscr-lang-server/CompletionHandler.cs new file mode 100644 index 0000000..78337c5 --- /dev/null +++ b/kscr-lang-server/CompletionHandler.cs @@ -0,0 +1,140 @@ +using Antlr4.Runtime; +using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Server; + +namespace KScr.LangServer; + +public class CompletionHandler +{ + + private const string PackageReferenceElement = "PackageReference"; + private const string IncludeAttribute = "Include"; + private const string VersionAttribute = "Version"; + + private readonly ILanguageServer _router; + private readonly BufferManager _bufferManager; + private readonly NuGetAutoCompleteService _nuGetService; + + private readonly DocumentSelector _documentSelector = new DocumentSelector( + new DocumentFilter() + { + Pattern = "**/*.csproj" + } + ); + + private CompletionCapability _capability; + + public CompletionHandler(ILanguageServer router, BufferManager bufferManager, NuGetAutoCompleteService nuGetService) + { + _router = router; + _bufferManager = bufferManager; + _nuGetService = nuGetService; + } + + public CompletionRegistrationOptions GetRegistrationOptions() + { + return new CompletionRegistrationOptions + { + DocumentSelector = _documentSelector, + ResolveProvider = false + }; + } + + public async Task Handle(CompletionParams request, CancellationToken cancellationToken) + { + var documentPath = request.TextDocument.Uri.ToString(); + var buffer = _bufferManager.GetBuffer(documentPath); + + if (buffer == null) + { + return new CompletionList(); + } + + var syntaxTree = Parser.Parse(buffer); + + var position = GetPosition(buffer.GetText(0, buffer.Length), + (int)request.Position.Line, + (int)request.Position.Character); + + var node = syntaxTree.FindNode(position); + + var attribute = node.AncestorNodes().OfType().FirstOrDefault(); + if (attribute != null && node.ParentElement.Name.Equals(PackageReferenceElement)) + { + if (attribute.Name.Equals(IncludeAttribute)) + { + var completions = await _nuGetService.GetPackages(attribute.Value); + + var diff = position - attribute.ValueNode.Start; + + return new CompletionList(completions.Select(x => new CompletionItem + { + Label = x, + Kind = CompletionItemKind.Reference, + TextEdit = new TextEdit + { + NewText = x, + Range = new Range( + new Position + { + Line = request.Position.Line, + Character = request.Position.Character - diff + 1 + }, new Position + { + Line = request.Position.Line, + Character = request.Position.Character - diff + attribute.ValueNode.Width - 1 + }) + } + }), isIncomplete: completions.Count > 1); + } + else if (attribute.Name.Equals(VersionAttribute)) + { + var includeNode = node.ParentElement.Attributes.FirstOrDefault(x => x.Name.Equals(IncludeAttribute)); + + if (includeNode != null && !string.IsNullOrEmpty(includeNode.Value)) + { + var versions = await _nuGetService.GetPackageVersions(includeNode.Value, attribute.Value); + + var diff = position - attribute.ValueNode.Start; + + return new CompletionList(versions.Select(x => new CompletionItem + { + Label = x, + Kind = CompletionItemKind.Reference, + TextEdit = new TextEdit + { + NewText = x, + Range = new Range( + new Position + { + Line = request.Position.Line, + Character = request.Position.Character - diff + 1 + }, new Position + { + Line = request.Position.Line, + Character = request.Position.Character - diff + attribute.ValueNode.Width - 1 + }) + } + })); + } + } + } + + return new CompletionList(); + } + + private static int GetPosition(string buffer, int line, int col) + { + var position = 0; + for (var i = 0; i < line; i++) + { + position = buffer.IndexOf('\n', position) + 1; + } + return position + col; + } + + public void SetCapability(CompletionCapability capability) + { + _capability = capability; + } +} \ No newline at end of file diff --git a/kscr-lang-server/KScrFileSyncHandler.cs b/kscr-lang-server/KScrFileSyncHandler.cs new file mode 100644 index 0000000..3db81b4 --- /dev/null +++ b/kscr-lang-server/KScrFileSyncHandler.cs @@ -0,0 +1,81 @@ +using System.Collections.Concurrent; +using MediatR; +using OmniSharp.Extensions.LanguageServer.Protocol; +using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Document; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; +using OmniSharp.Extensions.LanguageServer.Protocol.Server; +using OmniSharp.Extensions.LanguageServer.Protocol.Server.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Window; + +namespace KScr.LangServer; + +public class KScrFileSyncHandler : ITextDocumentSyncHandler +{ + private readonly ILanguageServer _router; + private readonly BufferManager _bufferManager; + + private readonly DocumentSelector _documentSelector = new DocumentSelector( + new DocumentFilter() + { + Pattern = "**/*.csproj" + } + ); + + private SynchronizationCapability _capability; + + public KScrFileSyncHandler(ILanguageServer router, BufferManager bufferManager) + { + _router = router; + _bufferManager = bufferManager; + } + + public TextDocumentSyncKind Change { get; } = TextDocumentSyncKind.Full; + + public TextDocumentChangeRegistrationOptions GetRegistrationOptions() + { + return new TextDocumentChangeRegistrationOptions() + { + DocumentSelector = _documentSelector, + SyncKind = Change + }; + } + + public TextDocumentAttributes GetTextDocumentAttributes(Uri uri) + { + return new TextDocumentAttributes(uri, "xml"); + } + + public Task Handle(DidChangeTextDocumentParams request, CancellationToken cancellationToken) + { + var documentPath = request.TextDocument.Uri.ToString(); + var text = request.ContentChanges.FirstOrDefault()?.Text; + + _bufferManager.UpdateBuffer(documentPath, text); + + _router.Window.LogInfo($"Updated buffer for document: {documentPath}\n{text}"); + + return Unit.Task; + } + + public Task Handle(DidOpenTextDocumentParams request, CancellationToken cancellationToken) + { + _bufferManager.UpdateBuffer(request.TextDocument.Uri.ToString(), request.TextDocument.Text); + return Unit.Task; + } +} + +public class BufferManager +{ + private ConcurrentDictionary _buffers = new(); + + public void UpdateBuffer(string documentPath, string buffer) + { + _buffers.AddOrUpdate(documentPath, buffer, (k, v) => buffer); + } + + public string? GetBuffer(string documentPath) + { + return _buffers.TryGetValue(documentPath, out var buffer) ? buffer : null; + } +} \ No newline at end of file diff --git a/kscr-lang-server/KScrLangServer.cs b/kscr-lang-server/KScrLangServer.cs index 8326501..70a7e08 100644 --- a/kscr-lang-server/KScrLangServer.cs +++ b/kscr-lang-server/KScrLangServer.cs @@ -1,9 +1,29 @@ -namespace KScr.LangServer; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using OmniSharp.Extensions.LanguageServer.Server; + +namespace KScr.LangServer; public static class KScrLangServer { - public static void Main(string[] args) + public static async Task Main(string[] args) + { + var server = await LanguageServer.From(options => + options + .WithInput(Console.OpenStandardInput()) + .WithOutput(Console.OpenStandardOutput()) + .WithLoggerFactory(new LoggerFactory()) + .AddDefaultLoggingProvider() + //.WithMinimumLogLevel(LogLevel.Trace) + .WithServices(ConfigureServices) + .WithHandler() + ); + + await server.WaitForExit; + } + + static void ConfigureServices(IServiceCollection services) { - throw new NotImplementedException("Language Server is not implemented"); + services.AddSingleton(); } } \ No newline at end of file diff --git a/kscr-lang-server/kscr-lang-server.csproj b/kscr-lang-server/kscr-lang-server.csproj index 05b5a21..c8f33ac 100644 --- a/kscr-lang-server/kscr-lang-server.csproj +++ b/kscr-lang-server/kscr-lang-server.csproj @@ -14,11 +14,11 @@ - + - + From 3120b2b1d3b935a6fd3e45d1b3dc11f7acfc45e2 Mon Sep 17 00:00:00 2001 From: "Tobias Burdow [Kaleidox]" Date: Fri, 6 May 2022 13:18:01 +0200 Subject: [PATCH 3/4] a --- kscr-lang-server/CompletionHandler.cs | 3 ++- kscr-lang-server/KScrLangServer.cs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/kscr-lang-server/CompletionHandler.cs b/kscr-lang-server/CompletionHandler.cs index 78337c5..8bac2fc 100644 --- a/kscr-lang-server/CompletionHandler.cs +++ b/kscr-lang-server/CompletionHandler.cs @@ -1,10 +1,11 @@ using Antlr4.Runtime; using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Document; using OmniSharp.Extensions.LanguageServer.Protocol.Server; namespace KScr.LangServer; -public class CompletionHandler +public class CompletionHandler : ICompletionHandler { private const string PackageReferenceElement = "PackageReference"; diff --git a/kscr-lang-server/KScrLangServer.cs b/kscr-lang-server/KScrLangServer.cs index 70a7e08..d5bba64 100644 --- a/kscr-lang-server/KScrLangServer.cs +++ b/kscr-lang-server/KScrLangServer.cs @@ -17,6 +17,7 @@ public static async Task Main(string[] args) //.WithMinimumLogLevel(LogLevel.Trace) .WithServices(ConfigureServices) .WithHandler() + .WithHandler() ); await server.WaitForExit; From 149c78f26a2e1fb6c25a408f9edd5765341fcbf5 Mon Sep 17 00:00:00 2001 From: "Tobias Burdow [Kaleidox]" Date: Thu, 20 Oct 2022 09:29:47 +0200 Subject: [PATCH 4/4] exmaple server --- .../DidChangeWatchedFilesHandler.cs | 15 ++ kscr-lang-server/FoldingRangeHandler.cs | 33 +++ kscr-lang-server/Program.cs | 179 +++++++++++++ kscr-lang-server/SemanticTokensHandler.cs | 106 ++++++++ kscr-lang-server/TextDocumentHandler.cs | 252 ++++++++++++++++++ 5 files changed, 585 insertions(+) create mode 100644 kscr-lang-server/DidChangeWatchedFilesHandler.cs create mode 100644 kscr-lang-server/FoldingRangeHandler.cs create mode 100644 kscr-lang-server/Program.cs create mode 100644 kscr-lang-server/SemanticTokensHandler.cs create mode 100644 kscr-lang-server/TextDocumentHandler.cs diff --git a/kscr-lang-server/DidChangeWatchedFilesHandler.cs b/kscr-lang-server/DidChangeWatchedFilesHandler.cs new file mode 100644 index 0000000..ce8683a --- /dev/null +++ b/kscr-lang-server/DidChangeWatchedFilesHandler.cs @@ -0,0 +1,15 @@ +using MediatR; +using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; +using OmniSharp.Extensions.LanguageServer.Protocol.Workspace; + +namespace KScr.LangServer; + +internal class DidChangeWatchedFilesHandler : IDidChangeWatchedFilesHandler +{ + public DidChangeWatchedFilesRegistrationOptions GetRegistrationOptions() => new DidChangeWatchedFilesRegistrationOptions(); + + public Task Handle(DidChangeWatchedFilesParams request, CancellationToken cancellationToken) => Unit.Task; + + public DidChangeWatchedFilesRegistrationOptions GetRegistrationOptions(DidChangeWatchedFilesCapability capability, ClientCapabilities clientCapabilities) => new DidChangeWatchedFilesRegistrationOptions(); +} \ No newline at end of file diff --git a/kscr-lang-server/FoldingRangeHandler.cs b/kscr-lang-server/FoldingRangeHandler.cs new file mode 100644 index 0000000..2489c00 --- /dev/null +++ b/kscr-lang-server/FoldingRangeHandler.cs @@ -0,0 +1,33 @@ +using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Document; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; + +namespace KScr.LangServer; + +internal class FoldingRangeHandler : IFoldingRangeHandler +{ + public FoldingRangeRegistrationOptions GetRegistrationOptions() => + new FoldingRangeRegistrationOptions { + DocumentSelector = DocumentSelector.ForLanguage("csharp") + }; + + public Task?> Handle( + FoldingRangeRequestParam request, + CancellationToken cancellationToken + ) => + Task.FromResult?>( + new Container( + new FoldingRange { + StartLine = 10, + EndLine = 20, + Kind = FoldingRangeKind.Region, + EndCharacter = 0, + StartCharacter = 0 + } + ) + ); + + public FoldingRangeRegistrationOptions GetRegistrationOptions(FoldingRangeCapability capability, ClientCapabilities clientCapabilities) => new FoldingRangeRegistrationOptions { + DocumentSelector = DocumentSelector.ForLanguage("csharp") + }; +} \ No newline at end of file diff --git a/kscr-lang-server/Program.cs b/kscr-lang-server/Program.cs new file mode 100644 index 0000000..bbdc5df --- /dev/null +++ b/kscr-lang-server/Program.cs @@ -0,0 +1,179 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json.Linq; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; +using OmniSharp.Extensions.LanguageServer.Server; + +// ReSharper disable UnusedParameter.Local + +namespace KScr.LangServer; + +internal class Program +{ + private static void Main(string[] args) + { + MainAsync(args).Wait(); + } + + private static async Task MainAsync(string[] args) + { + // Debugger.Launch(); + // while (!Debugger.IsAttached) + // { + // await Task.Delay(100); + // } + + IObserver workDone = null!; + + var server = await LanguageServer.From( + options => + options + .WithInput(Console.OpenStandardInput()) + .WithOutput(Console.OpenStandardOutput()) + .ConfigureLogging( + x => x + .AddLanguageProtocolLogging() + .SetMinimumLevel(LogLevel.Debug) + ) + .WithHandler() + .WithHandler() + .WithHandler() + .WithHandler() + .WithHandler() + .WithHandler() + .WithServices(x => x.AddLogging(b => b.SetMinimumLevel(LogLevel.Trace))) + .WithServices( + services => + { + services.AddSingleton( + provider => + { + var loggerFactory = provider.GetService(); + var logger = loggerFactory.CreateLogger(); + + logger.LogInformation("Configuring"); + + return new Foo(logger); + } + ); + services.AddSingleton( + new ConfigurationItem + { + Section = "typescript", + } + ).AddSingleton( + new ConfigurationItem + { + Section = "terminal", + } + ); + } + ) + .OnInitialize( + async (server, request, token) => + { + var manager = server.WorkDoneManager.For( + request, new WorkDoneProgressBegin + { + Title = "Server is starting...", + Percentage = 10, + } + ); + workDone = manager; + + await Task.Delay(2000).ConfigureAwait(false); + + manager.OnNext( + new WorkDoneProgressReport + { + Percentage = 20, + Message = "loading in progress" + } + ); + } + ) + .OnInitialized( + async (server, request, response, token) => + { + workDone.OnNext( + new WorkDoneProgressReport + { + Percentage = 40, + Message = "loading almost done", + } + ); + + await Task.Delay(2000).ConfigureAwait(false); + + workDone.OnNext( + new WorkDoneProgressReport + { + Message = "loading done", + Percentage = 100, + } + ); + workDone.OnCompleted(); + } + ) + .OnStarted( + async (languageServer, token) => + { + using var manager = await languageServer.WorkDoneManager.Create(new WorkDoneProgressBegin { Title = "Doing some work..." }) + .ConfigureAwait(false); + + manager.OnNext(new WorkDoneProgressReport { Message = "doing things..." }); + await Task.Delay(10000).ConfigureAwait(false); + manager.OnNext(new WorkDoneProgressReport { Message = "doing things... 1234" }); + await Task.Delay(10000).ConfigureAwait(false); + manager.OnNext(new WorkDoneProgressReport { Message = "doing things... 56789" }); + + var logger = languageServer.Services.GetService>(); + var configuration = await languageServer.Configuration.GetConfiguration( + new ConfigurationItem + { + Section = "typescript", + }, new ConfigurationItem + { + Section = "terminal", + } + ).ConfigureAwait(false); + + var baseConfig = new JObject(); + foreach (var config in languageServer.Configuration.AsEnumerable()) + { + baseConfig.Add(config.Key, config.Value); + } + + logger.LogInformation("Base Config: {@Config}", baseConfig); + + var scopedConfig = new JObject(); + foreach (var config in configuration.AsEnumerable()) + { + scopedConfig.Add(config.Key, config.Value); + } + + logger.LogInformation("Scoped Config: {@Config}", scopedConfig); + } + ) + ).ConfigureAwait(false); + + await server.WaitForExit.ConfigureAwait(false); + } +} + +internal class Foo +{ + private readonly ILogger _logger; + + public Foo(ILogger logger) + { + logger.LogInformation("inside ctor"); + _logger = logger; + } + + public void SayFoo() + { + _logger.LogInformation("Fooooo!"); + } +} \ No newline at end of file diff --git a/kscr-lang-server/SemanticTokensHandler.cs b/kscr-lang-server/SemanticTokensHandler.cs new file mode 100644 index 0000000..5cc1578 --- /dev/null +++ b/kscr-lang-server/SemanticTokensHandler.cs @@ -0,0 +1,106 @@ +using Microsoft.Extensions.Logging; +using OmniSharp.Extensions.LanguageServer.Protocol; +using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Document; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; + +namespace KScr.LangServer; + +#pragma warning disable 618 +public class SemanticTokensHandler : SemanticTokensHandlerBase +{ + private readonly ILogger _logger; + + public SemanticTokensHandler(ILogger logger) + { + _logger = logger; + } + + public override async Task Handle( + SemanticTokensParams request, CancellationToken cancellationToken + ) + { + var result = await base.Handle(request, cancellationToken).ConfigureAwait(false); + return result; + } + + public override async Task Handle( + SemanticTokensRangeParams request, CancellationToken cancellationToken + ) + { + var result = await base.Handle(request, cancellationToken).ConfigureAwait(false); + return result; + } + + public override async Task Handle( + SemanticTokensDeltaParams request, + CancellationToken cancellationToken + ) + { + var result = await base.Handle(request, cancellationToken).ConfigureAwait(false); + return result; + } + + protected override async Task Tokenize( + SemanticTokensBuilder builder, ITextDocumentIdentifierParams identifier, + CancellationToken cancellationToken + ) + { + using var typesEnumerator = RotateEnum(SemanticTokenType.Defaults).GetEnumerator(); + using var modifiersEnumerator = RotateEnum(SemanticTokenModifier.Defaults).GetEnumerator(); + // you would normally get this from a common source that is managed by current open editor, current active editor, etc. + var content = await File.ReadAllTextAsync(DocumentUri.GetFileSystemPath(identifier), cancellationToken).ConfigureAwait(false); + await Task.Yield(); + + foreach (var (line, text) in content.Split('\n').Select((text, line) => ( line, text ))) + { + var parts = text.TrimEnd().Split(';', ' ', '.', '"', '(', ')'); + var index = 0; + foreach (var part in parts) + { + typesEnumerator.MoveNext(); + modifiersEnumerator.MoveNext(); + if (string.IsNullOrWhiteSpace(part)) continue; + index = text.IndexOf(part, index, StringComparison.Ordinal); + builder.Push(line, index, part.Length, typesEnumerator.Current, modifiersEnumerator.Current); + } + } + } + + protected override Task + GetSemanticTokensDocument(ITextDocumentIdentifierParams @params, CancellationToken cancellationToken) + { + return Task.FromResult(new SemanticTokensDocument(RegistrationOptions.Legend)); + } + + + private IEnumerable RotateEnum(IEnumerable values) + { + while (true) + { + foreach (var item in values) + yield return item; + } + } + + protected override SemanticTokensRegistrationOptions CreateRegistrationOptions( + SemanticTokensCapability capability, ClientCapabilities clientCapabilities + ) + { + return new SemanticTokensRegistrationOptions + { + DocumentSelector = DocumentSelector.ForLanguage("csharp"), + Legend = new SemanticTokensLegend + { + TokenModifiers = capability.TokenModifiers, + TokenTypes = capability.TokenTypes + }, + Full = new SemanticTokensCapabilityRequestFull + { + Delta = true + }, + Range = true + }; + } +} +#pragma warning restore 618 \ No newline at end of file diff --git a/kscr-lang-server/TextDocumentHandler.cs b/kscr-lang-server/TextDocumentHandler.cs new file mode 100644 index 0000000..b16dcf1 --- /dev/null +++ b/kscr-lang-server/TextDocumentHandler.cs @@ -0,0 +1,252 @@ +using MediatR; +using Microsoft.Extensions.Logging; +using OmniSharp.Extensions.LanguageServer.Protocol; +using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Document; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; +using OmniSharp.Extensions.LanguageServer.Protocol.Progress; +using OmniSharp.Extensions.LanguageServer.Protocol.Server; +using OmniSharp.Extensions.LanguageServer.Protocol.Server.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Server.WorkDone; +using OmniSharp.Extensions.LanguageServer.Protocol.Workspace; +using Range = OmniSharp.Extensions.LanguageServer.Protocol.Models.Range; + + +#pragma warning disable CS0618 + +namespace KScr.LangServer; + +internal class TextDocumentHandler : TextDocumentSyncHandlerBase +{ + private readonly ILogger _logger; + private readonly ILanguageServerConfiguration _configuration; + + private readonly DocumentSelector _documentSelector = new DocumentSelector( + new DocumentFilter { + Pattern = "**/*.cs" + } + ); + + public TextDocumentHandler(ILogger logger, Foo foo, ILanguageServerConfiguration configuration) + { + _logger = logger; + _configuration = configuration; + foo.SayFoo(); + } + + public TextDocumentSyncKind Change { get; } = TextDocumentSyncKind.Full; + + public override Task Handle(DidChangeTextDocumentParams notification, CancellationToken token) + { + _logger.LogCritical("Critical"); + _logger.LogDebug("Debug"); + _logger.LogTrace("Trace"); + _logger.LogInformation("Hello world!"); + return Unit.Task; + } + + public override async Task Handle(DidOpenTextDocumentParams notification, CancellationToken token) + { + await Task.Yield(); + _logger.LogInformation("Hello world!"); + await _configuration.GetScopedConfiguration(notification.TextDocument.Uri, token).ConfigureAwait(false); + return Unit.Value; + } + + public override Task Handle(DidCloseTextDocumentParams notification, CancellationToken token) + { + if (_configuration.TryGetScopedConfiguration(notification.TextDocument.Uri, out var disposable)) + { + disposable.Dispose(); + } + + return Unit.Task; + } + + public override Task Handle(DidSaveTextDocumentParams notification, CancellationToken token) => Unit.Task; + + protected override TextDocumentSyncRegistrationOptions CreateRegistrationOptions(SynchronizationCapability capability, ClientCapabilities clientCapabilities) => new TextDocumentSyncRegistrationOptions() { + DocumentSelector = _documentSelector, + Change = Change, + Save = new SaveOptions() { IncludeText = true } + }; + + public override TextDocumentAttributes GetTextDocumentAttributes(DocumentUri uri) => new TextDocumentAttributes(uri, "csharp"); +} + +internal class MyDocumentSymbolHandler : IDocumentSymbolHandler +{ + public async Task Handle( + DocumentSymbolParams request, + CancellationToken cancellationToken + ) + { + // you would normally get this from a common source that is managed by current open editor, current active editor, etc. + var content = await File.ReadAllTextAsync(DocumentUri.GetFileSystemPath(request), cancellationToken).ConfigureAwait(false); + var lines = content.Split('\n'); + var symbols = new List(); + for (var lineIndex = 0; lineIndex < lines.Length; lineIndex++) + { + var line = lines[lineIndex]; + var parts = line.Split(' ', '.', '(', ')', '{', '}', '[', ']', ';'); + var currentCharacter = 0; + foreach (var part in parts) + { + if (string.IsNullOrWhiteSpace(part)) + { + currentCharacter += part.Length + 1; + continue; + } + + symbols.Add( + new DocumentSymbol { + Detail = part, + Deprecated = true, + Kind = SymbolKind.Field, + Tags = new[] { SymbolTag.Deprecated }, + Range = new Range( + new Position(lineIndex, currentCharacter), + new Position(lineIndex, currentCharacter + part.Length) + ), + SelectionRange = + new Range( + new Position(lineIndex, currentCharacter), + new Position(lineIndex, currentCharacter + part.Length) + ), + Name = part + } + ); + currentCharacter += part.Length + 1; + } + } + + // await Task.Delay(2000, cancellationToken); + return symbols; + } + + public DocumentSymbolRegistrationOptions GetRegistrationOptions(DocumentSymbolCapability capability, ClientCapabilities clientCapabilities) => new DocumentSymbolRegistrationOptions { + DocumentSelector = DocumentSelector.ForLanguage("csharp") + }; +} + +internal class MyWorkspaceSymbolsHandler : IWorkspaceSymbolsHandler +{ + private readonly IServerWorkDoneManager _serverWorkDoneManager; + private readonly IProgressManager _progressManager; + private readonly ILogger _logger; + + public MyWorkspaceSymbolsHandler(IServerWorkDoneManager serverWorkDoneManager, IProgressManager progressManager, ILogger logger) + { + _serverWorkDoneManager = serverWorkDoneManager; + _progressManager = progressManager; + _logger = logger; + } + + public async Task> Handle( + WorkspaceSymbolParams request, + CancellationToken cancellationToken + ) + { + using var reporter = _serverWorkDoneManager.For( + request, new WorkDoneProgressBegin { + Cancellable = true, + Message = "This might take a while...", + Title = "Some long task....", + Percentage = 0 + } + ); + using var partialResults = _progressManager.For(request, cancellationToken); + if (partialResults != null) + { + await Task.Delay(2000, cancellationToken).ConfigureAwait(false); + + reporter.OnNext( + new WorkDoneProgressReport { + Cancellable = true, + Percentage = 20 + } + ); + await Task.Delay(500, cancellationToken).ConfigureAwait(false); + + reporter.OnNext( + new WorkDoneProgressReport { + Cancellable = true, + Percentage = 40 + } + ); + await Task.Delay(500, cancellationToken).ConfigureAwait(false); + + reporter.OnNext( + new WorkDoneProgressReport { + Cancellable = true, + Percentage = 50 + } + ); + await Task.Delay(500, cancellationToken).ConfigureAwait(false); + + partialResults.OnNext( + new[] { + new SymbolInformation { + ContainerName = "Partial Container", + Deprecated = true, + Kind = SymbolKind.Constant, + Location = new Location { + Range = new Range( + new Position(2, 1), + new Position(2, 10) + ) + }, + Name = "Partial name" + } + } + ); + + reporter.OnNext( + new WorkDoneProgressReport { + Cancellable = true, + Percentage = 70 + } + ); + await Task.Delay(500, cancellationToken).ConfigureAwait(false); + + reporter.OnNext( + new WorkDoneProgressReport { + Cancellable = true, + Percentage = 90 + } + ); + + partialResults.OnCompleted(); + return new SymbolInformation[] { }; + } + + try + { + return new[] { + new SymbolInformation { + ContainerName = "Container", + Deprecated = true, + Kind = SymbolKind.Constant, + Location = new Location { + Range = new Range( + new Position(1, 1), + new Position(1, 10) + ) + }, + Name = "name" + } + }; + } + finally + { + reporter.OnNext( + new WorkDoneProgressReport { + Cancellable = true, + Percentage = 100 + } + ); + } + } + + public WorkspaceSymbolRegistrationOptions GetRegistrationOptions(WorkspaceSymbolCapability capability, ClientCapabilities clientCapabilities) => new WorkspaceSymbolRegistrationOptions(); +} \ No newline at end of file