From 396f229813d270c52ceb0184986ed9b74f24cd68 Mon Sep 17 00:00:00 2001 From: Lars Reimann Date: Wed, 15 Jun 2022 12:42:20 +0200 Subject: [PATCH] refactor!: replace references to Simple-ML with Safe-DS (#55) * refactor: update file extensions in src * refactor: update file extensions in resources * refactor: rename several folders * refactor: move more stuff around * refactor: replace remaining Simple-ML references * refactor: replace remaining Simple-ML references * fix: `installExtension` Gradle task not working * fix: broken syntax highlighting * style: remove comments (linter error) * refactor: rename missed files * docs: fix broken links * ci: ignore local links (maybe?) * style: apply automatic fixes of linters Co-authored-by: lars-reimann --- .github/dependabot.yml | 30 +- .github/workflows/main.yml | 2 +- .github/workflows/pr.yml | 4 +- .markdown-link-check.json | 3 + .mega-linter.yml | 2 +- DSL/.gitignore | 2 +- DSL/build.gradle.kts | 96 +- .../XtextConfigurationDsl.kt | 2 +- .../.gitignore | 2 +- .../build.gradle.kts | 8 +- .../safeds}/ide/CustomServerModule.kt | 6 +- .../safeds/ide/SafeDSIdeModule.kt} | 40 +- .../larsreimann/safeds/ide/SafeDSIdeSetup.kt | 16 + .../safeds}/ide/ServerLauncher2.kt | 2 +- .../ide/editor/contentassist/Proposals.kt | 92 +- .../SafeDSIdeContentProposalProvider.kt} | 24 +- .../codelens/SafeDSCodeLensProvider.kt} | 4 +- .../safeds}/ide/server/commands/CommandId.kt | 4 +- .../SafeDSExecutableCommandService.kt} | 4 +- .../ide/server/hover/SafeDSHoverService.kt} | 4 +- .../server/project/SafeDSProjectManager.kt} | 6 +- ...SDocumentSymbolDeprecationInfoProvider.kt} | 10 +- .../SafeDSDocumentSymbolDetailsProvider.kt} | 4 +- .../SafeDSDocumentSymbolKindProvider.kt | 39 + .../SafeDSDocumentSymbolNameProvider.kt} | 8 +- .../ide/AbstractSafeDSLanguageServerTest.kt} | 5 +- .../ide/editor/contentassist/ProposalsTest.kt | 62 +- .../ide/server/symbol/DocumentSymbolTest.kt | 24 +- .../resources/symbols/annotations.sdstest} | 0 .../resources/symbols/attributes.sdstest} | 0 .../test/resources/symbols/classes.sdstest} | 0 .../symbols/compilationUnitMembers.sdstest} | 0 .../symbols/compilationUnits.sdstest} | 0 .../resources/symbols/enumVariants.sdstest} | 0 .../src/test/resources/symbols/enums.sdstest} | 0 .../symbols/globalFunctions.sdstest} | 0 .../resources/symbols/lambdaResults.sdstest} | 0 .../test/resources/symbols/methods.sdstest} | 0 .../resources/symbols/parameters.sdstest} | 0 .../resources/symbols/placeholders.sdstest} | 0 .../test/resources/symbols/results.sdstest} | 0 .../resources/symbols/typeParameters.sdstest} | 0 .../resources/symbols/workflowSteps.sdstest} | 0 .../test/resources/symbols/workflows.sdstest} | 0 .../.gitattributes | 0 .../.gitignore | 2 +- .../.vscodeignore | 0 .../CHANGELOG.md | 0 DSL/com.larsreimann.safeds.vscode/README.md | 9 + .../build.gradle.kts | 9 +- .../language-configuration.json | 7 +- .../package-lock.json | 1378 ++++++++++++++ .../package.json | 65 + .../src/extension.ts | 28 +- .../syntaxes/safe-ds.tmLanguage.json} | 14 +- .../tsconfig.json | 12 + .../.gitignore | 6 +- .../build.gradle.kts | 18 +- DSL/com.larsreimann.safeds/model/SafeDS.ecore | 332 ++++ .../model/SafeDS.genmodel | 332 ++++ .../com/larsreimann/safeds/SafeDS.xtext | 802 +++++++++ .../safeds/SafeDSRuntimeModule.kt} | 46 +- .../safeds/SafeDSStandaloneSetup.kt} | 10 +- .../safeds/constant/SdsFileExtension.kt} | 22 +- .../constant/SdsInfixOperationOperator.kt} | 14 +- .../larsreimann/safeds/constant/SdsKind.kt} | 14 +- .../constant/SdsPrefixOperationOperator.kt | 33 + .../SdsProtocolQuantifiedTermQuantifier.kt | 26 + .../constant/SdsProtocolTokenClassValue.kt} | 14 +- .../SdsTypeParameterConstraintOperator.kt} | 14 +- .../safeds/constant/SdsVariance.kt} | 22 +- .../safeds/constant/SdsVisibility.kt | 38 + .../AbstractSafeDSStringValueConverter.kt} | 4 +- .../conversion/SafeDSIDValueConverter.kt} | 4 +- .../SafeDSQualifiedNameValueConverter.kt} | 4 +- .../conversion/SafeDSSTRINGValueConverter.kt} | 4 +- ...afeDSTEMPLATE_STRING_ENDValueConverter.kt} | 4 +- ...eDSTEMPLATE_STRING_INNERValueConverter.kt} | 4 +- ...eDSTEMPLATE_STRING_STARTValueConverter.kt} | 4 +- .../SafeDSValueConverterService.kt} | 10 +- .../com/larsreimann/safeds/emf/Creators.kt | 1599 +++++++++++++++++ .../safeds}/emf/OriginalFilePath.kt | 4 +- .../larsreimann/safeds/emf/SimpleShortcuts.kt | 491 +++++ .../com/larsreimann/safeds}/emf/Traversal.kt | 2 +- .../safeds/formatting2/SafeDSFormatter.kt} | 408 ++--- .../safeds}/generator/GeneratorUtils.kt | 22 +- .../com/larsreimann/safeds}/generator/Main.kt | 8 +- .../safeds/generator/SafeDSGenerator.kt} | 284 +-- .../safeds}/location/LspPosition.kt | 2 +- .../larsreimann/safeds}/location/LspRange.kt | 2 +- .../safeds}/location/ProgramRangeLength.kt | 2 +- .../safeds}/location/XtextPosition.kt | 2 +- .../safeds}/location/XtextRange.kt | 2 +- .../safeds}/naming/QualifiedNameProvider.kt | 6 +- .../safeds}/scoping/IndexExtensions.kt | 18 +- ...portedNamespaceAwareLocalScopeProvider.kt} | 16 +- .../SafeDSResourceDescriptionStrategy.kt} | 54 +- .../safeds/scoping/SafeDSScopeProvider.kt} | 234 +-- .../safeds}/serializer/CommentAdapters.kt | 2 +- .../SafeDSCrossReferenceSerializer.kt} | 10 +- .../serializer/SafeDSHiddenTokenSequencer.kt | 27 + .../serializer/SafeDSSemanticSequencer.kt | 3 + .../serializer/SafeDSSyntacticSequencer.kt | 3 + .../serializer/SerializerExtensions.kt | 2 +- .../safeds}/staticAnalysis/AssigneeToValue.kt | 34 +- .../safeds/staticAnalysis/CallToCallable.kt | 111 ++ .../LocalDeclarationToReferences.kt | 25 + .../safeds}/staticAnalysis/Recursion.kt | 16 +- .../safeds/staticAnalysis/SideEffects.kt | 73 + .../classHierarchy/ClassHierarchy.kt | 64 + .../linking/ArgumentToParameter.kt | 47 + .../staticAnalysis/linking/ResultToYield.kt | 29 + .../linking/TypeArgumentToTypeParameter.kt | 63 + .../SdsSimplifiedExpression.kt | 111 ++ .../partialEvaluation/ToConstantExpression.kt | 409 +++++ .../staticAnalysis/typing/TypeComputer.kt | 232 +-- .../staticAnalysis/typing/TypeConformance.kt | 26 +- .../safeds}/staticAnalysis/typing/Types.kt | 38 +- .../safeds}/stdlibAccess/StdlibAnnotations.kt | 100 +- .../safeds}/stdlibAccess/StdlibClasses.kt | 2 +- .../safeds}/stdlibAccess/StdlibEnums.kt | 4 +- .../safeds}/stdlibAccess/StdlibLoader.kt | 22 +- .../safeds}/stdlibAccess/StdlibPackages.kt | 6 +- .../DocumentationGenerator.kt | 84 +- .../safeds}/stdlibDocumentation/Main.kt | 10 +- .../safeds}/utils/CollectionExtensions.kt | 2 +- .../larsreimann/safeds}/utils/IdManager.kt | 6 +- .../validation/AbstractSafeDSChecker.kt} | 20 +- .../safeds/validation/SafeDSValidator.kt | 107 ++ .../safeds}/validation/codes/ErrorCode.kt | 2 +- .../safeds}/validation/codes/InfoCode.kt | 2 +- .../safeds}/validation/codes/WarningCode.kt | 2 +- .../declarations/AnnotationChecker.kt | 68 + .../declarations/AttributeChecker.kt | 21 + .../validation/declarations/ClassChecker.kt | 84 +- .../declarations/CompilationUnitChecker.kt | 131 ++ .../declarations/DeclarationChecker.kt | 34 +- .../validation/declarations/EnumChecker.kt | 28 + .../declarations/EnumVariantChecker.kt | 40 + .../declarations/FunctionChecker.kt | 88 + .../validation/declarations/ImportChecker.kt | 42 +- .../declarations/NameConventionChecker.kt | 150 ++ .../declarations/ParameterChecker.kt | 69 + .../declarations/ParameterListChecker.kt | 34 +- .../declarations/PlaceholderChecker.kt | 47 + .../validation/declarations/ResultChecker.kt | 21 + .../validation/declarations/StepChecker.kt | 82 + .../declarations/TypeParameterChecker.kt | 25 + .../declarations/WorkflowChecker.kt | 34 + .../validation/expressions/ArgumentChecker.kt | 39 + .../validation/expressions/CallChecker.kt | 153 ++ .../expressions/InfixOperationChecker.kt | 77 + .../validation/expressions/LambdaChecker.kt | 53 + .../expressions/MemberAccessChecker.kt | 67 + .../expressions/ReferenceChecker.kt | 64 + .../expressions/TemplateStringChecker.kt | 26 + .../validation/other/AnnotationCallChecker.kt | 227 +++ .../validation/other/ArgumentListChecker.kt | 44 +- .../validation/other/DeprecationChecker.kt | 98 + .../validation/other/ProtocolChecker.kt | 34 + .../other/TypeArgumentListChecker.kt | 48 +- .../statements/AssignmentChecker.kt | 84 + .../statements/ExpressionsStatementChecker.kt | 21 + .../typeChecking/ArgumentTypeChecker.kt | 28 +- .../typeChecking/DefaultValueTypeChecker.kt | 26 +- .../typeChecking/IndexedAccessTypeChecker.kt | 53 + .../typeChecking/InfixOperationTypeChecker.kt | 78 +- .../PrefixOperationTypeChecker.kt | 55 + .../typeChecking/YieldTypeChecker.kt | 24 +- .../validation/types/CallableTypeChecker.kt | 35 + .../validation/types/NamedTypeChecker.kt | 38 + .../validation/types/UnionTypeChecker.kt | 18 +- .../safeds/lang/codeGeneration.sdsstub} | 2 +- .../safeds/lang/coreAnnotations.sdsstub} | 2 +- .../stdlib/safeds/lang/coreClasses.sdsstub} | 2 +- .../stdlib/safeds/lang/documentation.sdsstub} | 2 +- .../larsreimann/safeds}/IssueFinderTest.kt | 52 +- .../com/larsreimann/safeds}/StdlibTest.kt | 14 +- .../conversion/SafeDSIDValueConverterTest.kt} | 42 +- .../SafeDSINTValueConverterTest.kt} | 40 +- .../SafeDSQualifiedNameValueConverterTest.kt} | 78 +- .../SafeDSSTRINGValueConverterTest.kt} | 78 +- ...STEMPLATE_STRING_ENDValueConverterTest.kt} | 46 +- ...EMPLATE_STRING_INNERValueConverterTest.kt} | 46 +- ...EMPLATE_STRING_STARTValueConverterTest.kt} | 46 +- .../larsreimann/safeds}/emf/CreatorsTest.kt | 488 ++--- .../safeds}/formatting2/FormatterTest.kt | 16 +- .../safeds}/generator/GeneratorUtilsTest.kt | 88 +- .../safeds/generator/SafeDSGeneratorTest.kt} | 34 +- .../naming/QualifiedNameProviderTest.kt | 18 +- .../safeds}/scoping/ScopingTest.kt | 1026 +++++------ .../serializer/SerializerExtensionsTest.kt | 36 +- .../safeds}/staticAnalysis/RecursionTest.kt | 30 +- .../safeds}/staticAnalysis/SideEffectsTest.kt | 30 +- .../linking/ArgumentToParameterTest.kt | 122 +- .../linking/ResultToYieldTest.kt | 68 +- .../TypeArgumentToTypeParameterTest.kt | 110 +- .../ToConstantExpressionTest.kt | 884 ++++----- .../staticAnalysis/typing/TypeComputerTest.kt | 304 ++-- .../stdlibAccess/StdlibAnnotationsTest.kt | 58 +- .../safeds}/testing/TestRangesTest.kt | 18 +- .../safeds}/utils/CollectionUtilsTest.kt | 2 +- .../safeds}/utils/IdManagerTest.kt | 2 +- .../conversion/idValueConverter.sdstest} | 0 .../conversion/intValueConverter.sdstest} | 0 .../qualifiedNameValueConverter.sdstest | 3 + .../conversion/stringValueConverter.sdstest} | 0 .../templateStringPartValueConverter.sdstest} | 0 .../compilationUnits/empty.sdstest} | 0 .../compilationUnits/withoutPackage.sdstest} | 0 .../declarations/annotation.sdstest} | 0 ...nnotationCall on compilation unit.sdstest} | 0 .../annotationCall on declaration.sdstest} | 0 .../declarations/attribute.sdstest} | 0 .../formatting/declarations/class.sdstest} | 0 .../formatting/declarations/enum.sdstest} | 0 .../declarations/enumVariant.sdstest} | 0 .../formatting/declarations/function.sdstest} | 0 .../formatting/declarations/import.sdstest} | 0 .../annotationUsesWithImports.sdstest} | 0 .../packages/annotationUsesWithName.sdstest} | 0 .../declarations/packages/full.sdstest} | 0 .../packages/importsAndMembers.sdstest} | 0 .../packages/nameAndMembers.sdstest} | 0 .../declarations/predicates.sdstest} | 0 .../protocols/alternative.sdstest} | 0 .../declarations/protocols/body.sdstest} | 0 .../protocols/complement.sdstest} | 0 .../declarations/protocols/empty.sdstest} | 0 .../declarations/protocols/full.sdstest} | 0 .../protocols/parenthesizedTerm.sdstest} | 0 ...rotocols and members in one class.sdstest} | 0 .../protocols/quantifiedTerm.sdstest} | 0 .../declarations/protocols/sequence.sdstest} | 0 .../declarations/protocols/subterm.sdstest} | 0 .../protocols/subtermList.sdstest} | 0 .../formatting/declarations/step.sdstest} | 0 .../formatting/declarations/workflow.sdstest} | 0 .../expressions/blockLambda.sdstest} | 0 .../formatting/expressions/call.sdstest} | 0 .../expressions/expressionLambda.sdstest} | 0 .../expressions/indexedAccess.sdstest} | 0 .../expressions/infixOperations.sdstest} | 0 .../expressions/memberAccess.sdstest} | 0 .../parenthesizedExpression.sdstest} | 0 .../parenthesizedGoalExpression.sdstest} | 0 .../expressions/prefixOperations.sdstest} | 0 .../expressions/templateString.sdstest} | 0 .../formatting/statements/assignment.sdstest} | 0 .../formatting/statements/blocks.sdstest} | 0 .../statements/expressionStatement.sdstest} | 0 .../statements/goalAssignment.sdstest} | 0 .../formatting/types/callableType.sdstest} | 0 .../formatting/types/memberType.sdstest} | 0 .../formatting/types/namedType.sdstest} | 0 .../types/parenthesizedType.sdstest} | 0 .../formatting/types/unionType.sdstest} | 0 .../declarations/empty step/input.sdstest} | 0 .../tests/generator/emptyStep/gen_input.py | 0 .../empty workflow/input.sdstest} | 0 .../generator/emptyWorkflow/gen_input.py | 0 .../generator/emptyWorkflow/gen_input_test.py | 0 .../parameter with python name/input.sdstest} | 0 .../parameterWithPythonName/gen_input.py | 0 .../step with python name/input.sdstest} | 0 .../generator/stepWithPythonName/gen_input.py | 0 .../declarations/two steps/input.sdstest} | 0 .../tests/generator/twoSteps/gen_input.py | 0 .../declarations/two workflows/input.sdstest} | 0 .../tests/generator/twoWorkflows/gen_input.py | 0 .../generator/twoWorkflows/gen_input_test1.py | 0 .../generator/twoWorkflows/gen_input_test2.py | 0 .../workflow with python name/input.sdstest} | 0 .../workflowWithPythonName/gen_input.py | 0 .../gen_input_test_flow.py | 0 .../expressions/block lambda/input.sdstest} | 0 .../tests/generator/blockLambda/gen_input.py | 0 .../generator/blockLambda/gen_input_test.py | 0 .../generator/expressions/call/input.sdstest} | 0 .../output/tests/generator/call/gen_input.py | 0 .../tests/generator/call/gen_input_test.py | 0 .../expressions/constant/input.sdstest} | 0 .../tests/generator/constant/gen_input.py | 0 .../generator/constant/gen_input_test.py | 0 .../enum variant call/input.sdstest} | 2 +- .../generator/enumVariantCall/gen_input.py | 0 .../enumVariantCall/gen_input_test.py | 0 .../expression lambda/input.sdstest} | 0 .../generator/expressionLambda/gen_input.py | 0 .../expressionLambda/gen_input_test.py | 0 .../expressions/indexed access/input.sdstest} | 0 .../generator/indexedAccess/gen_input.py | 0 .../infix operation/input.sdstest} | 0 .../generator/infixOperation/gen_input.py | 8 +- .../infixOperation/gen_input_test.py | 0 .../expressions/literals/input.sdstest} | 0 .../tests/generator/literals/gen_input.py | 0 .../generator/literals/gen_input_test.py | 0 .../expressions/member access/input.sdstest} | 0 .../tests/generator/memberAccess/gen_input.py | 6 +- .../generator/memberAccess/gen_input_test.py | 0 .../parenthesized expression/input.sdstest} | 0 .../parenthesizedExpression/gen_input.py | 0 .../parenthesizedExpression/gen_input_test.py | 0 .../prefix operation/input.sdstest} | 0 .../generator/prefixOperation/gen_input.py | 0 .../prefixOperation/gen_input_test.py | 0 .../expressions/reference/input.sdstest} | 0 .../tests/generator/reference/gen_input.py | 0 .../generator/reference/gen_input_test.py | 0 .../template string/input.sdstest} | 0 .../generator/templateString/gen_input.py | 0 .../templateString/gen_input_test.py | 0 .../_skip_ context different package.sdsstub} | 0 ...ontext package with python module.sdsstub} | 0 .../_skip_ context same package.sdstest} | 0 .../generator/imports/input.sdstest} | 0 .../gen__skip__context_same_package.py | 0 .../tests/generator/imports/gen_input.py | 0 .../tests/generator/imports/gen_input_test.py | 0 .../generator/python module/input.sdstest} | 0 .../output/special_module/gen_input.py | 0 .../statements/assignment/input.sdstest} | 0 .../tests/generator/assignment/gen_input.py | 0 .../assignment/gen_input_testFlow.py | 0 .../expression statement/input.sdstest} | 0 .../expressionStatement/gen_input.py | 0 .../expressionStatement/gen_input_testFlow.py | 0 .../statement without effect/input.sdstest} | 0 .../statementWithoutEffect/gen_input.py | 0 .../gen_input_testFlow.py | 0 ...tation between package and import.sdstest} | 0 .../bad-duplicate package.sdstest} | 0 .../bad-import before declaration | 0 .../bad-import before package.sdstest} | 0 .../good-complex example.sdstest} | 0 .../compilationUnits/good-empty.sdstest} | 0 .../good-lone annotation call.sdstest} | 0 .../grammar/declarations/annotation.sdstest} | 0 .../declarations/annotationUse.sdstest} | 0 .../grammar/declarations/class.sdstest} | 0 .../grammar/declarations/enum.sdstest} | 0 .../grammar/declarations/function.sdstest} | 0 .../good-annotationUsesWithImports.sdstest} | 0 .../good-annotationUsesWithName.sdstest} | 0 .../declarations/package/good-full.sdstest} | 0 .../package/good-importsOnly.sdstest} | 0 .../package/good-nameOnly.sdstest} | 0 .../goals/goalsWithArguments.sdstest} | 0 .../predicates/predicate.sdstest} | 0 .../predicates/predicateComplex.sdstest} | 0 .../predicates/predicateWithGoals.sdstest} | 0 ...ith alternative as reference list.sdstest} | 0 ...ment with alternative as universe.sdstest} | 0 ...with complement as reference list.sdstest} | 0 ...ement with complement as universe.sdstest} | 0 ...enthesized term as reference list.sdstest} | 0 ...th parenthesized term as universe.sdstest} | 0 ...plement with sequence as universe.sdstest} | 0 ...complement with token as universe.sdstest} | 0 ...ith token class as reference list.sdstest} | 0 .../protocols/bad-subterm after term.sdstest} | 0 .../bad-subterm without semicolon.sdstest} | 0 .../protocols/good-alternative.sdstest} | 0 ...complement without reference list.sdstest} | 0 .../protocols/good-complement.sdstest} | 0 .../protocols/good-empty.sdstest} | 0 .../protocols/good-parenthesizedTerm.sdstest} | 0 .../protocols/good-quantifiedTerm.sdstest} | 0 .../protocols/good-sequence.sdstest} | 0 .../protocols/good-subterms.sdstest} | 0 .../protocols/good-token.sdstest} | 0 .../protocols/good-tokenClasses.sdstest} | 0 ... visibilities (internal, private).sdstest} | 0 ... visibilities (private, internal).sdstest} | 0 .../good-step in compilation unit.sdstest} | 0 .../steps/good-step in package.sdstest} | 0 .../grammar/declarations/workflow.sdstest} | 0 .../expressions/arithmeticOperator.sdstest} | 0 .../grammar/expressions/blockLambda.sdstest} | 0 .../grammar/expressions/call.sdstest} | 0 .../expressions/chainedExpression.sdstest} | 0 .../expressions/comparisonOperator.sdstest} | 0 .../expressions/expressionLambda.sdstest} | 0 .../bad-indexed access without index.sdstest} | 0 .../good-indexed access.sdstest} | 0 .../literals/booleanLiteral.sdstest} | 0 .../expressions/literals/nullLiteral.sdstest} | 0 .../literals/numberLiteral.sdstest} | 0 .../literals/stringLiteral.sdstest} | 0 .../expressions/logicalOperator.sdstest} | 0 .../grammar/expressions/memberAccess.sdstest} | 0 .../parenthesizedExpression.sdstest} | 0 .../grammar/expressions/reference.sdstest} | 0 .../expressions/templateString_bad.sdstest} | 0 .../expressions/templateString_good.sdstest} | 0 .../keywordsAsNames/bad-unescapedAnd.sdstest} | 0 .../bad-unescapedAnnotation.sdstest} | 0 .../keywordsAsNames/bad-unescapedAs.sdstest} | 0 .../bad-unescapedAttr.sdstest} | 0 .../bad-unescapedClass.sdstest} | 0 .../bad-unescapedConstraint.sdstest} | 0 .../bad-unescapedEnum.sdstest} | 0 .../bad-unescapedFalse.sdstest} | 0 .../keywordsAsNames/bad-unescapedFun.sdstest} | 0 .../bad-unescapedImport.sdstest} | 0 .../keywordsAsNames/bad-unescapedIn.sdstest} | 0 .../keywordsAsNames/bad-unescapedNot.sdstest} | 0 .../bad-unescapedNull.sdstest} | 0 .../keywordsAsNames/bad-unescapedOr.sdstest} | 0 .../keywordsAsNames/bad-unescapedOut.sdstest} | 0 .../bad-unescapedPackage.sdstest} | 0 .../bad-unescapedStatic.sdstest} | 0 .../bad-unescapedStep.sdstest} | 0 .../keywordsAsNames/bad-unescapedSub.sdstest} | 0 .../bad-unescapedSuper.sdstest} | 0 .../bad-unescapedTrue.sdstest} | 0 .../bad-unescapedUnion.sdstest} | 0 .../keywordsAsNames/bad-unescapedVal.sdstest} | 0 .../bad-unescapedVararg.sdstest} | 0 .../bad-unescapedWorkflow.sdstest} | 0 .../bad-unescapedYield.sdstest} | 0 .../keywordsAsNames/bad-unescaped_.sdstest} | 0 .../good-escapedKeywords.sdstest} | 0 .../good-escapedNonKeyword.sdstest} | 0 .../unclosedEnum.sdstest} | 0 .../unclosedParameterList.sdstest} | 0 .../unclosedResultList.sdstest} | 0 .../unclosedTypeParameterList.sdstest} | 0 .../grammar/statements/assignment.sdstest} | 0 .../statements/expressionStatement.sdstest} | 0 .../inAnnotationUse_ArgumentList.sdstest} | 0 .../inAnnotation_ConstraintList.sdstest} | 0 .../inAnnotation_ParameterList.sdstest} | 0 .../inAssignment_AssigneeList.sdstest} | 0 .../inBlockLambda_ParameterList.sdstest} | 0 .../inCall_ArgumentList.sdstest} | 0 .../inCall_TypeArgumentList.sdstest} | 0 .../inClass_ConstraintList.sdstest} | 0 .../inClass_ParameterList.sdstest} | 0 .../inClass_SuperTypeList.sdstest} | 0 .../inClass_TypeParameterList.sdstest} | 0 .../inEnumVariant_ConstraintList.sdstest} | 0 .../inEnumVariant_ParameterList.sdstest} | 0 .../inEnumVariant_TypeParameterList.sdstest} | 0 .../inExpressionLambda_ParameterList.sdstest} | 0 .../inFunctionType_ParameterList.sdstest} | 0 .../inFunctionType_ResultList.sdstest} | 0 .../inFunction_ParameterList.sdstest} | 0 .../inFunction_ResultList.sdstest} | 0 ...ction_TypeParameterConstraintList.sdstest} | 0 .../inFunction_TypeParameterList.sdstest} | 0 .../inNamedType_TypeArgumentList.sdstest} | 0 .../inWorkflowStep_ParameterList.sdstest} | 0 .../grammar/types/callableType.sdstest} | 0 .../grammar/types/memberType.sdstest} | 0 .../grammar/types/namedType.sdstest} | 0 .../grammar/types/parenthesizedType.sdstest} | 0 .../grammar/types/unionType.sdstest} | 0 .../test/resources/junit-platform.properties | 0 .../partialEvaluation/callables.sdstest} | 0 .../partialEvaluation/calls.sdstest} | 0 .../partialEvaluation/memberAccesses.sdstest} | 0 .../partialEvaluation/references.sdstest} | 0 .../externalsInOtherPackage.sdstest} | 0 .../externalsInSamePackage.sdstest} | 0 .../scoping/annotationCall/main.sdstest} | 0 .../argument/externalsInOtherPackage.sdstest} | 0 .../argument/externalsInSamePackage.sdstest} | 0 .../resources/scoping/argument/main.sdstest} | 0 .../externalsInOtherPackage.sdstest} | 0 .../externalsInSamePackage.sdstest} | 0 .../scoping/goalReference/main.sdstest} | 0 .../externalsInOtherPackage.sdstest} | 0 .../externalsInSamePackage.sdstest} | 0 .../scoping/importWithAlias/main.sdstest} | 0 .../externalsInOtherPackage.sdstest} | 0 .../namedType/externalsInSamePackage.sdstest} | 0 .../resources/scoping/namedType/main.sdstest} | 0 .../scoping/protocolReference/main.sdstest} | 0 .../externalsInOtherPackage.sdstest} | 0 .../reference/externalsInSamePackage.sdstest} | 0 .../resources/scoping/reference/main.sdstest} | 0 .../externalsInOtherPackage.sdstest} | 0 .../externalsInSamePackage.sdstest} | 0 .../scoping/typeArgument/main.sdstest} | 0 .../externalsInOtherPackage.sdstest} | 0 .../externalsInSamePackage.sdstest} | 0 .../typeParameterConstraint/main.sdstest} | 0 .../yield/externalsInOtherPackage.sdstest} | 0 .../yield/externalsInSamePackage.sdstest} | 0 .../resources/scoping/yield/main.sdstest} | 0 .../serialization/extensionsTest.sdstest} | 0 .../staticAnalysis/recursion.sdstest} | 0 .../staticAnalysis/sideEffects.sdstest} | 0 .../annotations/deprecated.sdstest} | 0 .../annotations/description.sdstest} | 0 .../stdlibAccess/annotations/pure.sdstest} | 0 .../annotations/pythonModule.sdstest} | 0 .../annotations/pythonModuleMissing.sdstest} | 0 .../pythonModuleMultipleAnnotations.sdstest} | 0 .../annotations/pythonName.sdstest} | 0 .../annotations/repeatable.sdstest} | 0 .../stdlibAccess/annotations/since.sdstest} | 0 .../stdlibAccess/annotations/target.sdstest} | 0 .../assignees/blockLambdaResults.sdstest} | 0 .../assignees/placeholders.sdstest} | 0 .../typeComputer/assignees/yields.sdstest} | 0 .../declarations/attributes.sdstest} | 0 .../declarations/classes.sdstest} | 0 .../declarations/enumVariants.sdstest} | 0 .../typeComputer/declarations/enums.sdstest} | 0 .../declarations/functions.sdstest} | 0 .../declarations/parameters.sdstest} | 0 .../declarations/results.sdstest} | 0 .../typeComputer/declarations/steps.sdstest} | 0 .../expressions/arguments.sdstest} | 0 .../expressions/blockLambdas.sdstest} | 0 .../typeComputer/expressions/calls.sdstest} | 0 .../expressions/expressionLambdas.sdstest} | 0 .../expressions/indexedAccesses.sdstest} | 0 .../expressions/literals.sdstest} | 0 .../expressions/memberAccesses.sdstest} | 0 .../operations/arithmetic.sdstest} | 0 .../operations/comparison.sdstest} | 0 .../expressions/operations/elvis.sdstest} | 0 .../expressions/operations/equality.sdstest} | 0 .../expressions/operations/logical.sdstest} | 0 .../operations/strictEquality.sdstest} | 0 .../parenthesizedExpressions.sdstest} | 0 .../expressions/references.sdstest} | 0 .../expressions/templateStrings.sdstest} | 0 .../typeComputer/types/callableTypes.sdstest} | 0 .../typeComputer/types/memberTypes.sdstest} | 0 .../typeComputer/types/namedTypes.sdstest} | 0 .../types/parenthesizedTypes.sdstest} | 0 .../typeComputer/types/unionTypes.sdstest} | 0 .../stub file (only annotations).sdsstub} | 0 .../stub file (only imports).sdsstub} | 0 .../stub file (with declarations).sdsstub} | 0 .../workflow file (only annotations).sdsflow} | 0 .../workflow file (only imports).sdsflow} | 0 ...workflow file (with declarations).sdsflow} | 0 ...ileMustNotDeclareWorkflowsOrSteps.sdsstub} | 0 .../uniqueNamesAcrossFiles.sdstest | 19 + .../uniqueNamesInStubFile.sdsstub} | 0 .../uniqueNamesInWorkflowFile.sdsflow} | 0 ...eMustOnlyDeclareWorkflowsAndSteps.sdsflow} | 0 .../annotations/parameter types.sdstest} | 0 .../annotations/uniqueNames.sdstest} | 0 .../unnecessaryParameterList.sdstest} | 0 .../attributes/mustHaveType.sdstest} | 0 .../classes/acyclicSuperTypes.sdstest} | 0 ...heritedMembersMustHaveUniqueNames.sdstest} | 0 .../classes/mustInheritOnlyClasses.sdstest} | 0 .../only one protocol per class.sdstest} | 0 ...nce must point to instance member.sdstest} | 0 ...nique names for protocol subterms.sdstest} | 0 .../declarations/classes/uniqueNames.sdstest} | 0 .../classes/uniqueParentTypes.sdstest} | 0 .../classes/unnecessaryBody.sdstest} | 0 .../unnecessaryTypeParameterList.sdstest} | 0 .../declarations/deprecation.sdstest} | 0 .../enumVariants/uniqueNames.sdstest} | 0 .../unnecessaryParameterList.sdstest} | 0 .../unnecessaryTypeParameterList.sdstest} | 0 .../declarations/enums/uniqueNames.sdstest} | 0 .../enums/unnecessaryBody.sdstest} | 0 .../functions/nonStaticPropagates.sdstest} | 0 .../functions/purePropagates.sdstest} | 0 .../functions/staticPropagates.sdstest} | 0 .../functions/uniqueNames.sdstest} | 0 .../functions/unnecessaryResultList.sdstest} | 0 .../unnecessaryTypeParameterList.sdstest} | 0 .../noWildcardImportWithAlias.sdstest} | 0 .../imports/unresolvedNamespace.sdstest | 15 + .../block lambda prefix.sdstest} | 0 .../nameConvention/name convention.sdstest} | 0 .../nameConvention/package lowercase.sdstest} | 0 .../package snake case.sdstest} | 0 .../package underscore.sdstest} | 0 .../nameConvention/package uppercase.sdstest} | 0 ... optional and variadic parameters.sdstest} | 0 ...metersAfterFirstOptionalParameter.sdstest} | 0 .../vararg must be last parameter.sdstest} | 0 .../default value must be constant.sdstest} | 0 .../expert must be optional.sdstest} | 0 .../parameters/mustHaveType.sdstest} | 0 ...mustNotDeprecateRequiredParameter.sdstest} | 0 ...eters must not have default value.sdstest} | 0 .../renamingOfDeclaration.sdstest} | 0 .../declarations/placeholders/unused.sdstest} | 0 .../results/mustHaveType.sdstest} | 0 .../steps/duplicateYield.sdstest} | 0 .../steps/unassignedResult.sdstest} | 0 .../declarations/steps/uniqueNames.sdstest} | 0 .../steps/unnecessaryResultList.sdstest} | 0 .../steps/unusedParameter.sdstest} | 0 .../varienceTogetherWithKind.sdstest} | 0 .../declarations/workflows/noYield.sdstest} | 0 .../workflows/uniqueNames.sdstest} | 0 .../arguments/must be constant.sdstest} | 0 ...riadic parameter assigned by name.sdstest} | 0 .../calledClassMustHaveConstructor.sdstest} | 0 .../expressions/calls/context.sdstest} | 0 .../calls/missingTypeArgumentList.sdstest} | 0 .../calls/receiverMustBeCallable.sdstest} | 0 .../expressions/calls/recursion.sdstest} | 0 .../calls/unnecessaryArgumentList.sdstest} | 0 .../infixOperation/division by zero.sdstest} | 0 .../unnecessaryElvisOperator.sdstest} | 0 .../expressions/lambdas/context.sdstest} | 0 .../expressions/lambdas/uniqueNames.sdstest} | 0 .../enumVariantMustBeInstantiated.sdstest} | 0 .../instanceMethodMustBeCalled.sdstest} | 0 .../memberAccess/missingSafeAccess.sdstest} | 0 .../unnecessarySafeAccess.sdstest} | 0 ...st not statically reference class.sdstest} | 0 ...ust not statically reference enum.sdstest} | 0 .../missingTemplateExpression.sdstest} | 0 .../arguments must be constant.sdstest} | 0 .../annotationCalls/cardinality.sdstest} | 0 .../annotationCalls/duplicateTarget.sdstest} | 0 .../identical python module (1).sdstest} | 2 +- .../identical python module (2).sdstest} | 4 +- .../identical python name.sdstest | 9 + .../missingArgumentList.sdstest} | 0 .../pure implies no side effects.sdstest} | 0 .../other/annotationCalls/target.sdstest} | 0 .../unnecessaryArgumentList.sdstest} | 0 .../missingRequiredParameter.sdstest} | 0 ...lArgumentsAfterFirstNamedArgument.sdstest} | 0 .../argumentLists/tooManyArguments.sdstest} | 0 .../argumentLists/uniqueParameters.sdstest} | 0 .../is unnecessary in call.sdstest} | 0 .../is unnecessary in named type.sdstest} | 0 .../missingRequiredTypeParameter.sdstest} | 0 ...umentsAfterFirstNamedTypeArgument.sdstest} | 0 .../tooManyTypeArguments.sdstest} | 0 .../uniqueTypeParameters.sdstest} | 0 .../assignments/hasNoEffect.sdstest} | 0 .../assignments/ignoresResultOfCall.sdstest} | 0 .../assignments/nothingAssigned.sdstest} | 0 .../unnecessaryAssignment.sdstest} | 0 .../expressionStatements/hasNoEffect.sdstest} | 0 .../typeChecking/arguments.sdstest} | 0 .../typeChecking/defaultValues.sdstest} | 0 .../typeChecking/indexedAccesses.sdstest} | 0 .../typeChecking/infixOperations.sdstest} | 0 .../typeChecking/prefixOperations.sdstest} | 0 .../validation/typeChecking/yields.sdstest} | 0 .../no optional parameters.sdstest} | 0 .../types/callableTypes/uniqueNames.sdstest} | 0 .../missingTypeArgumentList.sdstest} | 0 .../unionTypes/numberOfTypeArguments.sdstest} | 0 .../larsreimann/safeds}/testing/LineBreaks.kt | 2 +- .../safeds}/testing/ParseHelper.kt | 22 +- .../safeds/testing/SafeDSInjectorProvider.kt} | 16 +- .../larsreimann/safeds}/testing/TestMarker.kt | 2 +- .../larsreimann/safeds}/testing/TestRanges.kt | 18 +- .../safeds}/testing/TestResourceUtils.kt | 10 +- .../testing/assertions/EmfAssertions.kt | 14 +- .../testing/assertions/NumberAssertions.kt | 2 +- .../testing/assertions/ParsingAssertions.kt | 4 +- .../unibonn/simpleml/ide/SimpleMLIdeSetup.kt | 16 - .../SimpleMLDocumentSymbolKindProvider.kt | 39 - DSL/de.unibonn.simpleml.vscode/README.md | 7 - DSL/de.unibonn.simpleml.vscode/icons/icon.png | Bin 5783 -> 0 bytes .../package-lock.json | 1378 -------------- DSL/de.unibonn.simpleml.vscode/package.json | 66 - DSL/de.unibonn.simpleml.vscode/tsconfig.json | 12 - .../vsc-extension-quickstart.md | 29 - DSL/de.unibonn.simpleml/model/SimpleML.ecore | 332 ---- .../model/SimpleML.genmodel | 332 ---- .../kotlin/de/unibonn/simpleml/SimpleML.xtext | 802 --------- .../constant/SmlPrefixOperationOperator.kt | 33 - .../SmlProtocolQuantifiedTermQuantifier.kt | 26 - .../simpleml/constant/SmlVisibility.kt | 38 - .../de/unibonn/simpleml/emf/Creators.kt | 1599 ----------------- .../unibonn/simpleml/emf/SimpleShortcuts.kt | 491 ----- .../SimpleMLHiddenTokenSequencer.kt | 27 - .../serializer/SimpleMLSemanticSequencer.kt | 3 - .../serializer/SimpleMLSyntacticSequencer.kt | 3 - .../simpleml/staticAnalysis/CallToCallable.kt | 111 -- .../LocalDeclarationToReferences.kt | 25 - .../simpleml/staticAnalysis/SideEffects.kt | 73 - .../classHierarchy/ClassHierarchy.kt | 64 - .../linking/ArgumentToParameter.kt | 47 - .../staticAnalysis/linking/ResultToYield.kt | 29 - .../linking/TypeArgumentToTypeParameter.kt | 63 - .../SmlSimplifiedExpression.kt | 111 -- .../partialEvaluation/ToConstantExpression.kt | 409 ----- .../simpleml/validation/SimpleMLValidator.kt | 107 -- .../declarations/AnnotationChecker.kt | 69 - .../declarations/AttributeChecker.kt | 21 - .../declarations/CompilationUnitChecker.kt | 131 -- .../validation/declarations/EnumChecker.kt | 28 - .../declarations/EnumVariantChecker.kt | 40 - .../declarations/FunctionChecker.kt | 88 - .../declarations/NameConventionChecker.kt | 150 -- .../declarations/ParameterChecker.kt | 69 - .../declarations/PlaceholderChecker.kt | 47 - .../validation/declarations/ResultChecker.kt | 21 - .../validation/declarations/StepChecker.kt | 82 - .../declarations/TypeParameterChecker.kt | 25 - .../declarations/WorkflowChecker.kt | 34 - .../validation/expressions/ArgumentChecker.kt | 39 - .../validation/expressions/CallChecker.kt | 153 -- .../expressions/InfixOperationChecker.kt | 77 - .../validation/expressions/LambdaChecker.kt | 53 - .../expressions/MemberAccessChecker.kt | 67 - .../expressions/ReferenceChecker.kt | 64 - .../expressions/TemplateStringChecker.kt | 26 - .../validation/other/AnnotationCallChecker.kt | 227 --- .../validation/other/DeprecationChecker.kt | 98 - .../validation/other/ProtocolChecker.kt | 34 - .../statements/AssignmentChecker.kt | 84 - .../statements/ExpressionsStatementChecker.kt | 21 - .../typeChecking/IndexedAccessTypeChecker.kt | 53 - .../PrefixOperationTypeChecker.kt | 55 - .../validation/types/CallableTypeChecker.kt | 35 - .../validation/types/NamedTypeChecker.kt | 38 - .../qualifiedNameValueConverter.smltest | 3 - .../uniqueNamesAcrossFiles.smltest | 19 - .../imports/unresolvedNamespace.smltest | 15 - .../identical python name.smltest | 9 - DSL/settings.gradle.kts | 8 +- .../how-to-add-a-new-language-concept.md | 44 +- docs/DSL/tutorial/README.md | 10 +- docs/DSL/tutorial/common/README.md | 2 +- docs/DSL/tutorial/common/comments.md | 2 +- docs/DSL/tutorial/common/imports.md | 22 +- docs/DSL/tutorial/common/packages.md | 62 +- docs/DSL/tutorial/common/parameters.md | 32 +- docs/DSL/tutorial/common/results.md | 4 +- docs/DSL/tutorial/common/types.md | 8 +- docs/DSL/tutorial/stub-language/README.md | 4 +- .../DSL/tutorial/stub-language/annotations.md | 16 +- .../tutorial/stub-language/enumerations.md | 4 +- docs/DSL/tutorial/workflow-language/README.md | 4 +- .../tutorial/workflow-language/expressions.md | 26 +- .../tutorial/workflow-language/statements.md | 4 +- docs/Stdlib/API/README.md | 4 +- .../API/{simpleml_lang.md => safeds_lang.md} | 2 +- tsconfig.eslint.json | 4 +- 745 files changed, 11736 insertions(+), 11763 deletions(-) create mode 100644 .markdown-link-check.json rename DSL/buildSrc/src/main/kotlin/{de/unibonn/simpleml => com/larsreimann/safeds}/xtextConfiguration/XtextConfigurationDsl.kt (97%) rename DSL/{de.unibonn.simpleml.ide => com.larsreimann.safeds.ide}/.gitignore (67%) rename DSL/{de.unibonn.simpleml.ide => com.larsreimann.safeds.ide}/build.gradle.kts (89%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds}/ide/CustomServerModule.kt (53%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/SimpleMLIdeModule.kt => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/SafeDSIdeModule.kt} (50%) create mode 100644 DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/SafeDSIdeSetup.kt rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds}/ide/ServerLauncher2.kt (88%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds}/ide/editor/contentassist/Proposals.kt (59%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/editor/contentassist/SimpleMLIdeContentProposalProvider.kt => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/editor/contentassist/SafeDSIdeContentProposalProvider.kt} (78%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/codelens/SimpleMLCodeLensProvider.kt => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/codelens/SafeDSCodeLensProvider.kt} (90%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds}/ide/server/commands/CommandId.kt (54%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/commands/SimpleMLExecutableCommandService.kt => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/commands/SafeDSExecutableCommandService.kt} (88%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/hover/SimpleMLHoverService.kt => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/hover/SafeDSHoverService.kt} (90%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/project/SimpleMLProjectManager.kt => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/project/SafeDSProjectManager.kt} (80%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolDeprecationInfoProvider.kt => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolDeprecationInfoProvider.kt} (56%) rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolDetailsProvider.kt => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolDetailsProvider.kt} (55%) create mode 100644 DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolKindProvider.kt rename DSL/{de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolNameProvider.kt => com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolNameProvider.kt} (57%) rename DSL/{de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/AbstractSimpleMLLanguageServerTest.kt => com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/AbstractSafeDSLanguageServerTest.kt} (74%) rename DSL/{de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds}/ide/editor/contentassist/ProposalsTest.kt (82%) rename DSL/{de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds}/ide/server/symbol/DocumentSymbolTest.kt (87%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/annotations.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/annotations.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/attributes.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/attributes.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/classes.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/classes.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/compilationUnitMembers.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/compilationUnitMembers.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/compilationUnits.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/compilationUnits.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/enumVariants.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/enumVariants.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/enums.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/enums.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/globalFunctions.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/globalFunctions.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/lambdaResults.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/lambdaResults.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/methods.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/methods.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/parameters.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/parameters.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/placeholders.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/placeholders.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/results.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/results.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/typeParameters.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/typeParameters.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/workflowSteps.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/workflowSteps.sdstest} (100%) rename DSL/{de.unibonn.simpleml.ide/src/test/resources/symbols/workflows.smltest => com.larsreimann.safeds.ide/src/test/resources/symbols/workflows.sdstest} (100%) rename DSL/{de.unibonn.simpleml.vscode => com.larsreimann.safeds.vscode}/.gitattributes (100%) rename DSL/{de.unibonn.simpleml.vscode => com.larsreimann.safeds.vscode}/.gitignore (68%) rename DSL/{de.unibonn.simpleml.vscode => com.larsreimann.safeds.vscode}/.vscodeignore (100%) rename DSL/{de.unibonn.simpleml.vscode => com.larsreimann.safeds.vscode}/CHANGELOG.md (100%) create mode 100644 DSL/com.larsreimann.safeds.vscode/README.md rename DSL/{de.unibonn.simpleml.vscode => com.larsreimann.safeds.vscode}/build.gradle.kts (85%) rename DSL/{de.unibonn.simpleml.vscode => com.larsreimann.safeds.vscode}/language-configuration.json (53%) create mode 100644 DSL/com.larsreimann.safeds.vscode/package-lock.json create mode 100644 DSL/com.larsreimann.safeds.vscode/package.json rename DSL/{de.unibonn.simpleml.vscode => com.larsreimann.safeds.vscode}/src/extension.ts (70%) rename DSL/{de.unibonn.simpleml.vscode/syntaxes/simple-ml.tmLanguage.json => com.larsreimann.safeds.vscode/syntaxes/safe-ds.tmLanguage.json} (75%) create mode 100644 DSL/com.larsreimann.safeds.vscode/tsconfig.json rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/.gitignore (65%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/build.gradle.kts (89%) create mode 100644 DSL/com.larsreimann.safeds/model/SafeDS.ecore create mode 100644 DSL/com.larsreimann.safeds/model/SafeDS.genmodel create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDS.xtext rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleMLRuntimeModule.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDSRuntimeModule.kt} (58%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleMLStandaloneSetup.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDSStandaloneSetup.kt} (51%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlFileExtension.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsFileExtension.kt} (74%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlInfixOperationOperator.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsInfixOperationOperator.kt} (75%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlKind.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsKind.kt} (58%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsPrefixOperationOperator.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsProtocolQuantifiedTermQuantifier.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlProtocolTokenClassValue.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsProtocolTokenClassValue.kt} (55%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlTypeParameterConstraintOperator.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsTypeParameterConstraintOperator.kt} (62%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlVariance.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsVariance.kt} (78%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsVisibility.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/AbstractSimpleMLStringValueConverter.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/AbstractSafeDSStringValueConverter.kt} (98%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLIDValueConverter.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSIDValueConverter.kt} (94%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLQualifiedNameValueConverter.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSQualifiedNameValueConverter.kt} (50%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLSTRINGValueConverter.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSSTRINGValueConverter.kt} (69%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_ENDValueConverter.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_ENDValueConverter.kt} (70%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_INNERValueConverter.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_INNERValueConverter.kt} (71%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_STARTValueConverter.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_STARTValueConverter.kt} (70%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLValueConverterService.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSValueConverterService.kt} (80%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/Creators.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/emf/OriginalFilePath.kt (68%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/SimpleShortcuts.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/emf/Traversal.kt (97%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/formatting2/SimpleMLFormatter.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/formatting2/SafeDSFormatter.kt} (78%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/generator/GeneratorUtils.kt (64%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/generator/Main.kt (90%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/SimpleMLGenerator.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/SafeDSGenerator.kt} (75%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/location/LspPosition.kt (98%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/location/LspRange.kt (95%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/location/ProgramRangeLength.kt (92%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/location/XtextPosition.kt (98%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/location/XtextRange.kt (95%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/naming/QualifiedNameProvider.kt (82%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/scoping/IndexExtensions.kt (88%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLImportedNamespaceAwareLocalScopeProvider.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSImportedNamespaceAwareLocalScopeProvider.kt} (89%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLResourceDescriptionStrategy.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSResourceDescriptionStrategy.kt} (56%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLScopeProvider.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSScopeProvider.kt} (56%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/serializer/CommentAdapters.kt (95%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLCrossReferenceSerializer.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSCrossReferenceSerializer.kt} (76%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSHiddenTokenSequencer.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSSemanticSequencer.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSSyntacticSequencer.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/serializer/SerializerExtensions.kt (98%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/staticAnalysis/AssigneeToValue.kt (53%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/CallToCallable.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/LocalDeclarationToReferences.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/staticAnalysis/Recursion.kt (59%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/SideEffects.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/classHierarchy/ClassHierarchy.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ArgumentToParameter.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ResultToYield.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/TypeArgumentToTypeParameter.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/SdsSimplifiedExpression.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/ToConstantExpression.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/staticAnalysis/typing/TypeComputer.kt (59%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/staticAnalysis/typing/TypeConformance.kt (83%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/staticAnalysis/typing/Types.kt (82%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/stdlibAccess/StdlibAnnotations.kt (62%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/stdlibAccess/StdlibClasses.kt (93%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/stdlibAccess/StdlibEnums.kt (83%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/stdlibAccess/StdlibLoader.kt (87%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/stdlibAccess/StdlibPackages.kt (50%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/stdlibDocumentation/DocumentationGenerator.kt (82%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/stdlibDocumentation/Main.kt (86%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/utils/CollectionExtensions.kt (98%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/utils/IdManager.kt (89%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/AbstractSimpleMLChecker.kt => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/AbstractSafeDSChecker.kt} (83%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/SafeDSValidator.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/codes/ErrorCode.kt (97%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/codes/InfoCode.kt (90%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/codes/WarningCode.kt (91%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/AnnotationChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/AttributeChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/declarations/ClassChecker.kt (53%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/CompilationUnitChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/declarations/DeclarationChecker.kt (50%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/EnumChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/EnumVariantChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/FunctionChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/declarations/ImportChecker.kt (52%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/NameConventionChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ParameterChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/declarations/ParameterListChecker.kt (60%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/PlaceholderChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ResultChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/StepChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/TypeParameterChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/WorkflowChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/ArgumentChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/CallChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/InfixOperationChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/LambdaChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/MemberAccessChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/ReferenceChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/TemplateStringChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/AnnotationCallChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/other/ArgumentListChecker.kt (67%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/DeprecationChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/ProtocolChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/other/TypeArgumentListChecker.kt (62%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/statements/AssignmentChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/statements/ExpressionsStatementChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/typeChecking/ArgumentTypeChecker.kt (51%) rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/typeChecking/DefaultValueTypeChecker.kt (55%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/IndexedAccessTypeChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/typeChecking/InfixOperationTypeChecker.kt (50%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/PrefixOperationTypeChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/typeChecking/YieldTypeChecker.kt (58%) create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/CallableTypeChecker.kt create mode 100644 DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/NamedTypeChecker.kt rename DSL/{de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds}/validation/types/UnionTypeChecker.kt (53%) rename DSL/{de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/codeGeneration.smlstub => com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/codeGeneration.sdsstub} (97%) rename DSL/{de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/coreAnnotations.smlstub => com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/coreAnnotations.sdsstub} (99%) rename DSL/{de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/coreClasses.smlstub => com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/coreClasses.sdsstub} (94%) rename DSL/{de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/documentation.smlstub => com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/documentation.sdsstub} (95%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/IssueFinderTest.kt (82%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/StdlibTest.kt (82%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLIDValueConverterTest.kt => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSIDValueConverterTest.kt} (66%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLINTValueConverterTest.kt => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSINTValueConverterTest.kt} (63%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLQualifiedNameValueConverterTest.kt => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSQualifiedNameValueConverterTest.kt} (57%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLSTRINGValueConverterTest.kt => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSSTRINGValueConverterTest.kt} (70%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_ENDValueConverterTest.kt => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_ENDValueConverterTest.kt} (60%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_INNERValueConverterTest.kt => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_INNERValueConverterTest.kt} (60%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_STARTValueConverterTest.kt => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_STARTValueConverterTest.kt} (60%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/emf/CreatorsTest.kt (50%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/formatting2/FormatterTest.kt (83%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/generator/GeneratorUtilsTest.kt (61%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/generator/SimpleMLGeneratorTest.kt => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/generator/SafeDSGeneratorTest.kt} (86%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/naming/QualifiedNameProviderTest.kt (70%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/scoping/ScopingTest.kt (73%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/serializer/SerializerExtensionsTest.kt (79%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/staticAnalysis/RecursionTest.kt (71%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/staticAnalysis/SideEffectsTest.kt (71%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/staticAnalysis/linking/ArgumentToParameterTest.kt (55%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/staticAnalysis/linking/ResultToYieldTest.kt (52%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/staticAnalysis/linking/TypeArgumentToTypeParameterTest.kt (54%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/staticAnalysis/partialEvaluation/ToConstantExpressionTest.kt (57%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/staticAnalysis/typing/TypeComputerTest.kt (77%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/stdlibAccess/StdlibAnnotationsTest.kt (77%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/testing/TestRangesTest.kt (88%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/utils/CollectionUtilsTest.kt (98%) rename DSL/{de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds}/utils/IdManagerTest.kt (98%) rename DSL/{de.unibonn.simpleml/src/test/resources/conversion/idValueConverter.smltest => com.larsreimann.safeds/src/test/resources/conversion/idValueConverter.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/conversion/intValueConverter.smltest => com.larsreimann.safeds/src/test/resources/conversion/intValueConverter.sdstest} (100%) create mode 100644 DSL/com.larsreimann.safeds/src/test/resources/conversion/qualifiedNameValueConverter.sdstest rename DSL/{de.unibonn.simpleml/src/test/resources/conversion/stringValueConverter.smltest => com.larsreimann.safeds/src/test/resources/conversion/stringValueConverter.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/conversion/templateStringPartValueConverter.smltest => com.larsreimann.safeds/src/test/resources/conversion/templateStringPartValueConverter.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/compilationUnits/empty.smltest => com.larsreimann.safeds/src/test/resources/formatting/compilationUnits/empty.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/compilationUnits/withoutPackage.smltest => com.larsreimann.safeds/src/test/resources/formatting/compilationUnits/withoutPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/annotation.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/annotation.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/annotationCall on compilation unit.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/annotationCall on compilation unit.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/annotationCall on declaration.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/annotationCall on declaration.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/attribute.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/attribute.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/class.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/class.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/enum.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/enum.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/enumVariant.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/enumVariant.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/function.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/function.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/import.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/import.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/annotationUsesWithImports.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/annotationUsesWithImports.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/annotationUsesWithName.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/annotationUsesWithName.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/full.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/full.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/importsAndMembers.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/importsAndMembers.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/nameAndMembers.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/nameAndMembers.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/predicates.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/predicates.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/alternative.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/alternative.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/body.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/body.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/complement.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/complement.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/empty.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/empty.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/full.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/full.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/parenthesizedTerm.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/parenthesizedTerm.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/protocols and members in one class.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/protocols and members in one class.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/quantifiedTerm.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/quantifiedTerm.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/sequence.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/sequence.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/subterm.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/subterm.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/subtermList.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/subtermList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/step.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/step.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/declarations/workflow.smltest => com.larsreimann.safeds/src/test/resources/formatting/declarations/workflow.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/blockLambda.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/blockLambda.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/call.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/call.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/expressionLambda.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/expressionLambda.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/indexedAccess.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/indexedAccess.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/infixOperations.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/infixOperations.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/memberAccess.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/memberAccess.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/parenthesizedExpression.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/parenthesizedExpression.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/parenthesizedGoalExpression.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/parenthesizedGoalExpression.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/prefixOperations.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/prefixOperations.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/expressions/templateString.smltest => com.larsreimann.safeds/src/test/resources/formatting/expressions/templateString.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/statements/assignment.smltest => com.larsreimann.safeds/src/test/resources/formatting/statements/assignment.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/statements/blocks.smltest => com.larsreimann.safeds/src/test/resources/formatting/statements/blocks.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/statements/expressionStatement.smltest => com.larsreimann.safeds/src/test/resources/formatting/statements/expressionStatement.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/statements/goalAssignment.smltest => com.larsreimann.safeds/src/test/resources/formatting/statements/goalAssignment.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/types/callableType.smltest => com.larsreimann.safeds/src/test/resources/formatting/types/callableType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/types/memberType.smltest => com.larsreimann.safeds/src/test/resources/formatting/types/memberType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/types/namedType.smltest => com.larsreimann.safeds/src/test/resources/formatting/types/namedType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/types/parenthesizedType.smltest => com.larsreimann.safeds/src/test/resources/formatting/types/parenthesizedType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/formatting/types/unionType.smltest => com.larsreimann.safeds/src/test/resources/formatting/types/unionType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/declarations/empty step/input.smltest => com.larsreimann.safeds/src/test/resources/generator/declarations/empty step/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/empty step/output/tests/generator/emptyStep/gen_input.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/declarations/empty workflow/input.smltest => com.larsreimann.safeds/src/test/resources/generator/declarations/empty workflow/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/declarations/parameter with python name/input.smltest => com.larsreimann.safeds/src/test/resources/generator/declarations/parameter with python name/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/parameter with python name/output/tests/generator/parameterWithPythonName/gen_input.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/declarations/step with python name/input.smltest => com.larsreimann.safeds/src/test/resources/generator/declarations/step with python name/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/step with python name/output/tests/generator/stepWithPythonName/gen_input.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/declarations/two steps/input.smltest => com.larsreimann.safeds/src/test/resources/generator/declarations/two steps/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/two steps/output/tests/generator/twoSteps/gen_input.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/declarations/two workflows/input.smltest => com.larsreimann.safeds/src/test/resources/generator/declarations/two workflows/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test1.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test2.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/declarations/workflow with python name/input.smltest => com.larsreimann.safeds/src/test/resources/generator/declarations/workflow with python name/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input_test_flow.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/block lambda/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/block lambda/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/call/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/call/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/constant/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/constant/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/enum variant call/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/enum variant call/input.sdstest} (75%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/expression lambda/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/expression lambda/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/indexed access/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/indexed access/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/indexed access/output/tests/generator/indexedAccess/gen_input.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/infix operation/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/infix operation/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input.py (73%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/literals/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/literals/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/member access/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/member access/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input.py (65%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/parenthesized expression/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/parenthesized expression/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/prefix operation/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/prefix operation/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/reference/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/reference/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/expressions/template string/input.smltest => com.larsreimann.safeds/src/test/resources/generator/expressions/template string/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/imports/_skip_ context different package.smlstub => com.larsreimann.safeds/src/test/resources/generator/imports/_skip_ context different package.sdsstub} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/imports/_skip_ context package with python module.smlstub => com.larsreimann.safeds/src/test/resources/generator/imports/_skip_ context package with python module.sdsstub} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/imports/_skip_ context same package.smltest => com.larsreimann.safeds/src/test/resources/generator/imports/_skip_ context same package.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/imports/input.smltest => com.larsreimann.safeds/src/test/resources/generator/imports/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/imports/output/tests/generator/imports/gen__skip__context_same_package.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/imports/output/tests/generator/imports/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/imports/output/tests/generator/imports/gen_input_test.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/python module/input.smltest => com.larsreimann.safeds/src/test/resources/generator/python module/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/python module/output/special_module/gen_input.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/statements/assignment/input.smltest => com.larsreimann.safeds/src/test/resources/generator/statements/assignment/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input_testFlow.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/statements/expression statement/input.smltest => com.larsreimann.safeds/src/test/resources/generator/statements/expression statement/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input_testFlow.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/generator/statements/statement without effect/input.smltest => com.larsreimann.safeds/src/test/resources/generator/statements/statement without effect/input.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input.py (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input_testFlow.py (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-annotation between package and import.smltest => com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-annotation between package and import.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-duplicate package.smltest => com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-duplicate package.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/grammar/compilationUnits/bad-import before declaration (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-import before package.smltest => com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-import before package.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/good-complex example.smltest => com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/good-complex example.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/good-empty.smltest => com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/good-empty.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/good-lone annotation call.smltest => com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/good-lone annotation call.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/annotation.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/annotation.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/annotationUse.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/annotationUse.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/class.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/class.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/enum.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/enum.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/function.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/function.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-annotationUsesWithImports.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-annotationUsesWithImports.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-annotationUsesWithName.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-annotationUsesWithName.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-full.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-full.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-importsOnly.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-importsOnly.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-nameOnly.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-nameOnly.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/goals/goalsWithArguments.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/goals/goalsWithArguments.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/predicate.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/predicate.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/predicateComplex.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/predicateComplex.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/predicateWithGoals.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/predicateWithGoals.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as reference list.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as reference list.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as universe.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as universe.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with complement as reference list.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with complement as reference list.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with complement as universe.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with complement as universe.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as reference list.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as reference list.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as universe.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as universe.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with sequence as universe.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with sequence as universe.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with token as universe.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with token as universe.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with token class as reference list.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with token class as reference list.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-subterm after term.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-subterm after term.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-subterm without semicolon.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-subterm without semicolon.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-alternative.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-alternative.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-complement without reference list.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-complement without reference list.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-complement.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-complement.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-empty.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-empty.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-parenthesizedTerm.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-parenthesizedTerm.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-quantifiedTerm.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-quantifiedTerm.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-sequence.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-sequence.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-subterms.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-subterms.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-token.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-token.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-tokenClasses.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-tokenClasses.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/bad-two visibilities (internal, private).smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/bad-two visibilities (internal, private).sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/bad-two visibilities (private, internal).smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/bad-two visibilities (private, internal).sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/good-step in compilation unit.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/good-step in compilation unit.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/good-step in package.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/good-step in package.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/declarations/workflow.smltest => com.larsreimann.safeds/src/test/resources/grammar/declarations/workflow.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/arithmeticOperator.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/arithmeticOperator.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/blockLambda.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/blockLambda.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/call.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/call.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/chainedExpression.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/chainedExpression.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/comparisonOperator.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/comparisonOperator.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/expressionLambda.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/expressionLambda.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/indexedAccess/bad-indexed access without index.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/indexedAccess/bad-indexed access without index.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/indexedAccess/good-indexed access.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/indexedAccess/good-indexed access.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/booleanLiteral.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/booleanLiteral.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/nullLiteral.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/nullLiteral.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/numberLiteral.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/numberLiteral.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/stringLiteral.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/stringLiteral.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/logicalOperator.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/logicalOperator.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/memberAccess.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/memberAccess.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/parenthesizedExpression.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/parenthesizedExpression.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/reference.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/reference.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/templateString_bad.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/templateString_bad.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/expressions/templateString_good.smltest => com.larsreimann.safeds/src/test/resources/grammar/expressions/templateString_good.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnd.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnd.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnnotation.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnnotation.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAs.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAs.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAttr.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAttr.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedClass.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedClass.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedConstraint.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedConstraint.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedEnum.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedEnum.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedFalse.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedFalse.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedFun.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedFun.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedImport.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedImport.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedIn.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedIn.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedNot.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedNot.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedNull.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedNull.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedOr.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedOr.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedOut.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedOut.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedPackage.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedStatic.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedStatic.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedStep.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedStep.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedSub.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedSub.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedSuper.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedSuper.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedTrue.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedTrue.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedUnion.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedUnion.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedVal.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedVal.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedVararg.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedVararg.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedWorkflow.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedWorkflow.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedYield.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedYield.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescaped_.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescaped_.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/good-escapedKeywords.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/good-escapedKeywords.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/good-escapedNonKeyword.smltest => com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/good-escapedNonKeyword.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedEnum.smltest => com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedEnum.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedResultList.smltest => com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedResultList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedTypeParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedTypeParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/statements/assignment.smltest => com.larsreimann.safeds/src/test/resources/grammar/statements/assignment.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/statements/expressionStatement.smltest => com.larsreimann.safeds/src/test/resources/grammar/statements/expressionStatement.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAnnotationUse_ArgumentList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAnnotationUse_ArgumentList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAnnotation_ConstraintList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAnnotation_ConstraintList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAnnotation_ParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAnnotation_ParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAssignment_AssigneeList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAssignment_AssigneeList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inBlockLambda_ParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inBlockLambda_ParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inCall_ArgumentList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inCall_ArgumentList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inCall_TypeArgumentList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inCall_TypeArgumentList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_ConstraintList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_ConstraintList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_ParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_ParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_SuperTypeList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_SuperTypeList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_TypeParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_TypeParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inEnumVariant_ConstraintList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inEnumVariant_ConstraintList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inEnumVariant_ParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inEnumVariant_ParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inEnumVariant_TypeParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inEnumVariant_TypeParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inExpressionLambda_ParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inExpressionLambda_ParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunctionType_ParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunctionType_ParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunctionType_ResultList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunctionType_ResultList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_ParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_ParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_ResultList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_ResultList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterConstraintList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterConstraintList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inNamedType_TypeArgumentList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inNamedType_TypeArgumentList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inWorkflowStep_ParameterList.smltest => com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inWorkflowStep_ParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/types/callableType.smltest => com.larsreimann.safeds/src/test/resources/grammar/types/callableType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/types/memberType.smltest => com.larsreimann.safeds/src/test/resources/grammar/types/memberType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/types/namedType.smltest => com.larsreimann.safeds/src/test/resources/grammar/types/namedType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/types/parenthesizedType.smltest => com.larsreimann.safeds/src/test/resources/grammar/types/parenthesizedType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/grammar/types/unionType.smltest => com.larsreimann.safeds/src/test/resources/grammar/types/unionType.sdstest} (100%) rename DSL/{de.unibonn.simpleml => com.larsreimann.safeds}/src/test/resources/junit-platform.properties (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/partialEvaluation/callables.smltest => com.larsreimann.safeds/src/test/resources/partialEvaluation/callables.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/partialEvaluation/calls.smltest => com.larsreimann.safeds/src/test/resources/partialEvaluation/calls.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/partialEvaluation/memberAccesses.smltest => com.larsreimann.safeds/src/test/resources/partialEvaluation/memberAccesses.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/partialEvaluation/references.smltest => com.larsreimann.safeds/src/test/resources/partialEvaluation/references.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/annotationCall/externalsInOtherPackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/annotationCall/externalsInOtherPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/annotationCall/externalsInSamePackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/annotationCall/externalsInSamePackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/annotationCall/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/annotationCall/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/argument/externalsInOtherPackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/argument/externalsInOtherPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/argument/externalsInSamePackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/argument/externalsInSamePackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/argument/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/argument/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/goalReference/externalsInOtherPackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/goalReference/externalsInOtherPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/goalReference/externalsInSamePackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/goalReference/externalsInSamePackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/goalReference/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/goalReference/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/importWithAlias/externalsInOtherPackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/importWithAlias/externalsInOtherPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/importWithAlias/externalsInSamePackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/importWithAlias/externalsInSamePackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/importWithAlias/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/importWithAlias/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/namedType/externalsInOtherPackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/namedType/externalsInOtherPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/namedType/externalsInSamePackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/namedType/externalsInSamePackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/namedType/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/namedType/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/protocolReference/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/protocolReference/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/reference/externalsInOtherPackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/reference/externalsInOtherPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/reference/externalsInSamePackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/reference/externalsInSamePackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/reference/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/reference/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/typeArgument/externalsInOtherPackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/typeArgument/externalsInOtherPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/typeArgument/externalsInSamePackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/typeArgument/externalsInSamePackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/typeArgument/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/typeArgument/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/typeParameterConstraint/externalsInOtherPackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/typeParameterConstraint/externalsInOtherPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/typeParameterConstraint/externalsInSamePackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/typeParameterConstraint/externalsInSamePackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/typeParameterConstraint/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/typeParameterConstraint/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/yield/externalsInOtherPackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/yield/externalsInOtherPackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/yield/externalsInSamePackage.smltest => com.larsreimann.safeds/src/test/resources/scoping/yield/externalsInSamePackage.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/scoping/yield/main.smltest => com.larsreimann.safeds/src/test/resources/scoping/yield/main.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/serialization/extensionsTest.smltest => com.larsreimann.safeds/src/test/resources/serialization/extensionsTest.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/staticAnalysis/recursion.smltest => com.larsreimann.safeds/src/test/resources/staticAnalysis/recursion.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/staticAnalysis/sideEffects.smltest => com.larsreimann.safeds/src/test/resources/staticAnalysis/sideEffects.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/deprecated.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/deprecated.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/description.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/description.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pure.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pure.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonModule.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonModule.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonModuleMissing.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonModuleMissing.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonModuleMultipleAnnotations.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonModuleMultipleAnnotations.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonName.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonName.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/repeatable.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/repeatable.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/since.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/since.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/target.smltest => com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/target.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/assignees/blockLambdaResults.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/assignees/blockLambdaResults.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/assignees/placeholders.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/assignees/placeholders.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/assignees/yields.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/assignees/yields.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/declarations/attributes.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/declarations/attributes.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/declarations/classes.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/declarations/classes.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/declarations/enumVariants.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/declarations/enumVariants.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/declarations/enums.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/declarations/enums.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/declarations/functions.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/declarations/functions.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/declarations/parameters.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/declarations/parameters.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/declarations/results.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/declarations/results.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/declarations/steps.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/declarations/steps.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/arguments.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/arguments.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/blockLambdas.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/blockLambdas.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/calls.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/calls.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/expressionLambdas.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/expressionLambdas.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/indexedAccesses.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/indexedAccesses.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/literals.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/literals.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/memberAccesses.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/memberAccesses.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/arithmetic.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/arithmetic.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/comparison.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/comparison.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/elvis.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/elvis.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/equality.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/equality.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/logical.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/logical.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/strictEquality.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/strictEquality.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/parenthesizedExpressions.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/parenthesizedExpressions.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/references.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/references.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/expressions/templateStrings.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/expressions/templateStrings.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/types/callableTypes.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/types/callableTypes.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/types/memberTypes.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/types/memberTypes.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/types/namedTypes.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/types/namedTypes.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/types/parenthesizedTypes.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/types/parenthesizedTypes.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/typeComputer/types/unionTypes.smltest => com.larsreimann.safeds/src/test/resources/typeComputer/types/unionTypes.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/stub file (only annotations).smlstub => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/stub file (only annotations).sdsstub} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/stub file (only imports).smlstub => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/stub file (only imports).sdsstub} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/stub file (with declarations).smlstub => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/stub file (with declarations).sdsstub} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/workflow file (only annotations).smlflow => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/workflow file (only annotations).sdsflow} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/workflow file (only imports).smlflow => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/workflow file (only imports).sdsflow} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/workflow file (with declarations).smlflow => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/workflow file (with declarations).sdsflow} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/stubFileMustNotDeclareWorkflowsOrSteps.smlstub => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/stubFileMustNotDeclareWorkflowsOrSteps.sdsstub} (100%) create mode 100644 DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesAcrossFiles.sdstest rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesInStubFile.smlstub => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesInStubFile.sdsstub} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesInWorkflowFile.smlflow => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesInWorkflowFile.sdsflow} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/compilationUnits/workflowFileMustOnlyDeclareWorkflowsAndSteps.smlflow => com.larsreimann.safeds/src/test/resources/validation/compilationUnits/workflowFileMustOnlyDeclareWorkflowsAndSteps.sdsflow} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/annotations/parameter types.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/annotations/parameter types.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/annotations/uniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/annotations/uniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/annotations/unnecessaryParameterList.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/annotations/unnecessaryParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/attributes/mustHaveType.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/attributes/mustHaveType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/acyclicSuperTypes.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/acyclicSuperTypes.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/inheritedMembersMustHaveUniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/inheritedMembersMustHaveUniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/mustInheritOnlyClasses.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/mustInheritOnlyClasses.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/only one protocol per class.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/only one protocol per class.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/protocol reference must point to instance member.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/protocol reference must point to instance member.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/unique names for protocol subterms.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/unique names for protocol subterms.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/uniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/uniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/uniqueParentTypes.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/uniqueParentTypes.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/unnecessaryBody.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/unnecessaryBody.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/classes/unnecessaryTypeParameterList.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/classes/unnecessaryTypeParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/deprecation.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/deprecation.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/enumVariants/uniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/enumVariants/uniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/enumVariants/unnecessaryParameterList.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/enumVariants/unnecessaryParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/enumVariants/unnecessaryTypeParameterList.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/enumVariants/unnecessaryTypeParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/enums/uniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/enums/uniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/enums/unnecessaryBody.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/enums/unnecessaryBody.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/functions/nonStaticPropagates.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/functions/nonStaticPropagates.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/functions/purePropagates.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/functions/purePropagates.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/functions/staticPropagates.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/functions/staticPropagates.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/functions/uniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/functions/uniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/functions/unnecessaryResultList.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/functions/unnecessaryResultList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/functions/unnecessaryTypeParameterList.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/functions/unnecessaryTypeParameterList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/imports/noWildcardImportWithAlias.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/imports/noWildcardImportWithAlias.sdstest} (100%) create mode 100644 DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/imports/unresolvedNamespace.sdstest rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/block lambda prefix.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/block lambda prefix.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/name convention.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/name convention.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package lowercase.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package lowercase.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package snake case.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package snake case.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package underscore.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package underscore.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package uppercase.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package uppercase.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/parameterLists/no optional and variadic parameters.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/parameterLists/no optional and variadic parameters.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/parameterLists/noRequiredParametersAfterFirstOptionalParameter.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/parameterLists/noRequiredParametersAfterFirstOptionalParameter.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/parameterLists/vararg must be last parameter.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/parameterLists/vararg must be last parameter.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/default value must be constant.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/default value must be constant.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/expert must be optional.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/expert must be optional.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/mustHaveType.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/mustHaveType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/mustNotDeprecateRequiredParameter.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/mustNotDeprecateRequiredParameter.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/variadic parameters must not have default value.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/variadic parameters must not have default value.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/placeholders/renamingOfDeclaration.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/placeholders/renamingOfDeclaration.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/placeholders/unused.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/placeholders/unused.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/results/mustHaveType.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/results/mustHaveType.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/steps/duplicateYield.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/steps/duplicateYield.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/steps/unassignedResult.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/steps/unassignedResult.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/steps/uniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/steps/uniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/steps/unnecessaryResultList.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/steps/unnecessaryResultList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/steps/unusedParameter.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/steps/unusedParameter.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/typeParameters/varienceTogetherWithKind.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/typeParameters/varienceTogetherWithKind.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/workflows/noYield.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/workflows/noYield.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/declarations/workflows/uniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/declarations/workflows/uniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/arguments/must be constant.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/arguments/must be constant.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/arguments/variadic parameter assigned by name.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/arguments/variadic parameter assigned by name.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/calls/calledClassMustHaveConstructor.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/calls/calledClassMustHaveConstructor.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/calls/context.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/calls/context.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/calls/missingTypeArgumentList.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/calls/missingTypeArgumentList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/calls/receiverMustBeCallable.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/calls/receiverMustBeCallable.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/calls/recursion.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/calls/recursion.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/calls/unnecessaryArgumentList.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/calls/unnecessaryArgumentList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/infixOperation/division by zero.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/infixOperation/division by zero.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/infixOperation/unnecessaryElvisOperator.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/infixOperation/unnecessaryElvisOperator.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/lambdas/context.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/lambdas/context.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/lambdas/uniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/lambdas/uniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/enumVariantMustBeInstantiated.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/enumVariantMustBeInstantiated.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/instanceMethodMustBeCalled.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/instanceMethodMustBeCalled.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/missingSafeAccess.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/missingSafeAccess.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/unnecessarySafeAccess.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/unnecessarySafeAccess.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/references/must not statically reference class.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/references/must not statically reference class.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/references/must not statically reference enum.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/references/must not statically reference enum.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/expressions/templateStrings/missingTemplateExpression.smltest => com.larsreimann.safeds/src/test/resources/validation/expressions/templateStrings/missingTemplateExpression.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/arguments must be constant.smltest => com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/arguments must be constant.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/cardinality.smltest => com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/cardinality.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/duplicateTarget.smltest => com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/duplicateTarget.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python module (1).smltest => com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python module (1).sdstest} (60%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python module (2).smltest => com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python module (2).sdstest} (50%) create mode 100644 DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python name.sdstest rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/missingArgumentList.smltest => com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/missingArgumentList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/pure implies no side effects.smltest => com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/pure implies no side effects.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/target.smltest => com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/target.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/unnecessaryArgumentList.smltest => com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/unnecessaryArgumentList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/missingRequiredParameter.smltest => com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/missingRequiredParameter.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/noPositionalArgumentsAfterFirstNamedArgument.smltest => com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/noPositionalArgumentsAfterFirstNamedArgument.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/tooManyArguments.smltest => com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/tooManyArguments.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/uniqueParameters.smltest => com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/uniqueParameters.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/is unnecessary in call.smltest => com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/is unnecessary in call.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/is unnecessary in named type.smltest => com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/is unnecessary in named type.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/missingRequiredTypeParameter.smltest => com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/missingRequiredTypeParameter.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/noPositionalTypeArgumentsAfterFirstNamedTypeArgument.smltest => com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/noPositionalTypeArgumentsAfterFirstNamedTypeArgument.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/tooManyTypeArguments.smltest => com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/tooManyTypeArguments.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/uniqueTypeParameters.smltest => com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/uniqueTypeParameters.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/statements/assignments/hasNoEffect.smltest => com.larsreimann.safeds/src/test/resources/validation/statements/assignments/hasNoEffect.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/statements/assignments/ignoresResultOfCall.smltest => com.larsreimann.safeds/src/test/resources/validation/statements/assignments/ignoresResultOfCall.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/statements/assignments/nothingAssigned.smltest => com.larsreimann.safeds/src/test/resources/validation/statements/assignments/nothingAssigned.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/statements/assignments/unnecessaryAssignment.smltest => com.larsreimann.safeds/src/test/resources/validation/statements/assignments/unnecessaryAssignment.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/statements/expressionStatements/hasNoEffect.smltest => com.larsreimann.safeds/src/test/resources/validation/statements/expressionStatements/hasNoEffect.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/typeChecking/arguments.smltest => com.larsreimann.safeds/src/test/resources/validation/typeChecking/arguments.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/typeChecking/defaultValues.smltest => com.larsreimann.safeds/src/test/resources/validation/typeChecking/defaultValues.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/typeChecking/indexedAccesses.smltest => com.larsreimann.safeds/src/test/resources/validation/typeChecking/indexedAccesses.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/typeChecking/infixOperations.smltest => com.larsreimann.safeds/src/test/resources/validation/typeChecking/infixOperations.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/typeChecking/prefixOperations.smltest => com.larsreimann.safeds/src/test/resources/validation/typeChecking/prefixOperations.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/typeChecking/yields.smltest => com.larsreimann.safeds/src/test/resources/validation/typeChecking/yields.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/types/callableTypes/no optional parameters.smltest => com.larsreimann.safeds/src/test/resources/validation/types/callableTypes/no optional parameters.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/types/callableTypes/uniqueNames.smltest => com.larsreimann.safeds/src/test/resources/validation/types/callableTypes/uniqueNames.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/types/namedTypes/missingTypeArgumentList.smltest => com.larsreimann.safeds/src/test/resources/validation/types/namedTypes/missingTypeArgumentList.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/test/resources/validation/types/unionTypes/numberOfTypeArguments.smltest => com.larsreimann.safeds/src/test/resources/validation/types/unionTypes/numberOfTypeArguments.sdstest} (100%) rename DSL/{de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds}/testing/LineBreaks.kt (87%) rename DSL/{de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds}/testing/ParseHelper.kt (86%) rename DSL/{de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/SimpleMLInjectorProvider.kt => com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/SafeDSInjectorProvider.kt} (79%) rename DSL/{de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds}/testing/TestMarker.kt (88%) rename DSL/{de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds}/testing/TestRanges.kt (89%) rename DSL/{de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds}/testing/TestResourceUtils.kt (91%) rename DSL/{de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds}/testing/assertions/EmfAssertions.kt (79%) rename DSL/{de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds}/testing/assertions/NumberAssertions.kt (77%) rename DSL/{de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml => com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds}/testing/assertions/ParsingAssertions.kt (97%) delete mode 100644 DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/SimpleMLIdeSetup.kt delete mode 100644 DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolKindProvider.kt delete mode 100644 DSL/de.unibonn.simpleml.vscode/README.md delete mode 100644 DSL/de.unibonn.simpleml.vscode/icons/icon.png delete mode 100644 DSL/de.unibonn.simpleml.vscode/package-lock.json delete mode 100644 DSL/de.unibonn.simpleml.vscode/package.json delete mode 100644 DSL/de.unibonn.simpleml.vscode/tsconfig.json delete mode 100644 DSL/de.unibonn.simpleml.vscode/vsc-extension-quickstart.md delete mode 100644 DSL/de.unibonn.simpleml/model/SimpleML.ecore delete mode 100644 DSL/de.unibonn.simpleml/model/SimpleML.genmodel delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleML.xtext delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlPrefixOperationOperator.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlProtocolQuantifiedTermQuantifier.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlVisibility.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/Creators.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/SimpleShortcuts.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLHiddenTokenSequencer.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLSemanticSequencer.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLSyntacticSequencer.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/CallToCallable.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/LocalDeclarationToReferences.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/SideEffects.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/classHierarchy/ClassHierarchy.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ArgumentToParameter.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ResultToYield.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/TypeArgumentToTypeParameter.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/SmlSimplifiedExpression.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/ToConstantExpression.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/SimpleMLValidator.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/AnnotationChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/AttributeChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/CompilationUnitChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/EnumChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/EnumVariantChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/FunctionChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/NameConventionChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ParameterChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/PlaceholderChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ResultChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/StepChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/TypeParameterChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/WorkflowChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/ArgumentChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/CallChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/InfixOperationChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/LambdaChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/MemberAccessChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/ReferenceChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/TemplateStringChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/AnnotationCallChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/DeprecationChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/ProtocolChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/statements/AssignmentChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/statements/ExpressionsStatementChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/IndexedAccessTypeChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/PrefixOperationTypeChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/CallableTypeChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/NamedTypeChecker.kt delete mode 100644 DSL/de.unibonn.simpleml/src/test/resources/conversion/qualifiedNameValueConverter.smltest delete mode 100644 DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesAcrossFiles.smltest delete mode 100644 DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/imports/unresolvedNamespace.smltest delete mode 100644 DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python name.smltest rename docs/Stdlib/API/{simpleml_lang.md => safeds_lang.md} (99%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index fd24275c9..e40191ca9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,27 +6,27 @@ version: 2 updates: # Root - - package-ecosystem: "github-actions" - directory: "/" + - package-ecosystem: 'github-actions' + directory: '/' schedule: - interval: "monthly" + interval: 'monthly' # DSL - - package-ecosystem: "gradle" - directory: "/DSL" + - package-ecosystem: 'gradle' + directory: '/DSL' schedule: - interval: "monthly" - - package-ecosystem: "npm" - directory: "/DSL/de.unibonn.simpleml.vscode" + interval: 'monthly' + - package-ecosystem: 'npm' + directory: '/DSL/com.larsreimann.safeds.vscode' schedule: - interval: "monthly" + interval: 'monthly' # Runtime - - package-ecosystem: "pip" - directory: "/Runtime/safe-ds" + - package-ecosystem: 'pip' + directory: '/Runtime/safe-ds' schedule: - interval: "monthly" - - package-ecosystem: "pip" - directory: "/Runtime/safe-ds-runner" + interval: 'monthly' + - package-ecosystem: 'pip' + directory: '/Runtime/safe-ds-runner' schedule: - interval: "monthly" + interval: 'monthly' diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4fc830f02..72735058d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -38,7 +38,7 @@ jobs: with: name: Test report # upload-artifact does not use working-directory - path: DSL/de.unibonn.simpleml/build/reports/tests/test/ + path: DSL/com.larsreimann.safeds/build/reports/tests/test/ # Build and test Runtime > Runner component build-runtime-runner: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index d486d1b91..e92de55f5 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -45,8 +45,8 @@ jobs: name: Test report # upload-artifact does not use working-directory path: | - DSL/de.unibonn.simpleml/build/reports/tests/test/ - DSL/de.unibonn.simpleml.ide/build/reports/tests/test/ + DSL/com.larsreimann.safeds/build/reports/tests/test/ + DSL/com.larsreimann.safeds.ide/build/reports/tests/test/ - name: Upload test coverage if: ${{ github.actor != 'dependabot[bot]' }} diff --git a/.markdown-link-check.json b/.markdown-link-check.json new file mode 100644 index 000000000..0a11527c7 --- /dev/null +++ b/.markdown-link-check.json @@ -0,0 +1,3 @@ +{ + "ignorePatterns": ["(^#.*)"] +} diff --git a/.mega-linter.yml b/.mega-linter.yml index add42b696..11fbca4bb 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -3,4 +3,4 @@ EXTENDS: https://raw.githubusercontent.com/lars-reimann/.github/main/.mega-linter.yml # Config -FILTER_REGEX_EXCLUDE: (\.github/workflows/|DSL/de\.unibonn\.simpleml/src/test/resources/) +FILTER_REGEX_EXCLUDE: (\.github/workflows/|DSL/com\.larsreimann\.safeds/src/test/resources/) diff --git a/DSL/.gitignore b/DSL/.gitignore index 66b17bceb..ea53e4103 100644 --- a/DSL/.gitignore +++ b/DSL/.gitignore @@ -1,2 +1,2 @@ # Xtext test module (gets created by workflow but removed afterwards) -de.unibonn.simpleml.tests/ +com.larsreimann.safeds.tests/ diff --git a/DSL/build.gradle.kts b/DSL/build.gradle.kts index a3866232a..52cb89d27 100644 --- a/DSL/build.gradle.kts +++ b/DSL/build.gradle.kts @@ -1,14 +1,14 @@ -import de.unibonn.simpleml.xtextConfiguration.code -import de.unibonn.simpleml.xtextConfiguration.configuration -import de.unibonn.simpleml.xtextConfiguration.directoryCleaner -import de.unibonn.simpleml.xtextConfiguration.ecoreGenerator -import de.unibonn.simpleml.xtextConfiguration.execute -import de.unibonn.simpleml.xtextConfiguration.project -import de.unibonn.simpleml.xtextConfiguration.projectMapping -import de.unibonn.simpleml.xtextConfiguration.standaloneSetup -import de.unibonn.simpleml.xtextConfiguration.standardLanguage -import de.unibonn.simpleml.xtextConfiguration.workflow -import de.unibonn.simpleml.xtextConfiguration.xtextGenerator +import com.larsreimann.safeds.xtextConfiguration.code +import com.larsreimann.safeds.xtextConfiguration.configuration +import com.larsreimann.safeds.xtextConfiguration.directoryCleaner +import com.larsreimann.safeds.xtextConfiguration.ecoreGenerator +import com.larsreimann.safeds.xtextConfiguration.execute +import com.larsreimann.safeds.xtextConfiguration.project +import com.larsreimann.safeds.xtextConfiguration.projectMapping +import com.larsreimann.safeds.xtextConfiguration.standaloneSetup +import com.larsreimann.safeds.xtextConfiguration.standardLanguage +import com.larsreimann.safeds.xtextConfiguration.workflow +import com.larsreimann.safeds.xtextConfiguration.xtextGenerator import org.eclipse.xtext.xtext.generator.formatting.Formatter2Fragment2 import org.eclipse.xtext.xtext.generator.generator.GeneratorFragment2 import org.eclipse.xtext.xtext.generator.junit.JUnitFragment @@ -42,19 +42,19 @@ kover { coverageEngine.set(kotlinx.kover.api.CoverageEngine.INTELLIJ) intellijEngineVersion.set("1.0.669") this.disabledProjects = setOf( - "Simple-ML.DSL", - "de.unibonn.simpleml.vscode" + "Safe-DS.DSL", + "com.larsreimann.safeds.vscode" ) } val koverExcludes = listOf( - "de.unibonn.simpleml.parser.antlr.*", - "de.unibonn.simpleml.serializer.AbstractSimpleMLSemanticSequencer", - "de.unibonn.simpleml.serializer.AbstractSimpleMLSyntacticSequencer", - "de.unibonn.simpleml.services.*", - "de.unibonn.simpleml.simpleML.*", - "de.unibonn.simpleml.testing.*", - "de.unibonn.simpleml.ide.contentassist.antlr.*" + "com.larsreimann.safeds.parser.antlr.*", + "com.larsreimann.safeds.serializer.AbstractSafeDSSemanticSequencer", + "com.larsreimann.safeds.serializer.AbstractSafeDSSyntacticSequencer", + "com.larsreimann.safeds.services.*", + "com.larsreimann.safeds.safeDS.*", + "com.larsreimann.safeds.testing.*", + "com.larsreimann.safeds.ide.contentassist.antlr.*" ) // Variables ----------------------------------------------------------------------------------------------------------- @@ -65,7 +65,7 @@ val xtextVersion by extra("2.27.0") // Subprojects --------------------------------------------------------------------------------------------------------- subprojects { - group = "de.unibonn.simpleml" + group = "com.larsreimann" version = "1.0.0-SNAPSHOT" repositories { @@ -84,21 +84,21 @@ tasks.register("generateXtextLanguage") { outputs.cacheIf { true } inputs.files( - "$rootPath/de.unibonn.simpleml/model/SimpleML.ecore", - "$rootPath/de.unibonn.simpleml/model/SimpleML.genmodel", - "$rootPath/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleML.xtext" + "$rootPath/com.larsreimann.safeds/model/SafeDS.ecore", + "$rootPath/com.larsreimann.safeds/model/SafeDS.genmodel", + "$rootPath/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDS.xtext" ) outputs.dirs( - "$rootPath/de.unibonn.simpleml/META-INF", - "$rootPath/de.unibonn.simpleml/emf-gen", - "$rootPath/de.unibonn.simpleml/src-gen", - "$rootPath/de.unibonn.simpleml.ide/src-gen", - "$rootPath/de.unibonn.simpleml.tests" + "$rootPath/com.larsreimann.safeds/META-INF", + "$rootPath/com.larsreimann.safeds/emf-gen", + "$rootPath/com.larsreimann.safeds/src-gen", + "$rootPath/com.larsreimann.safeds.ide/src-gen", + "$rootPath/com.larsreimann.safeds.tests" ) outputs.files( - "$rootPath/de.unibonn.simpleml/build.properties", - "$rootPath/de.unibonn.simpleml/plugin.properties", - "$rootPath/de.unibonn.simpleml/plugin.xml" + "$rootPath/com.larsreimann.safeds/build.properties", + "$rootPath/com.larsreimann.safeds/plugin.properties", + "$rootPath/com.larsreimann.safeds/plugin.xml" ) doFirst { @@ -108,36 +108,36 @@ tasks.register("generateXtextLanguage") { setScanClassPath(true) projectMapping( - projectName = "de.unibonn.simpleml", - path = "$rootPath/de.unibonn.simpleml" + projectName = "com.larsreimann.safeds", + path = "$rootPath/com.larsreimann.safeds" ) projectMapping( - projectName = "de.unibonn.simpleml.ide", - path = "$rootPath/de.unibonn.simpleml.ide" + projectName = "com.larsreimann.safeds.ide", + path = "$rootPath/com.larsreimann.safeds.ide" ) } - directoryCleaner("$rootPath/de.unibonn.simpleml/emf-gen") + directoryCleaner("$rootPath/com.larsreimann.safeds/emf-gen") ecoreGenerator( - genModel = "platform:/resource/de.unibonn.simpleml/model/SimpleML.genmodel", - srcPaths = listOf("platform:/resource/de.unibonn.simpleml/src/main/kotlin") + genModel = "platform:/resource/com.larsreimann.safeds/model/SafeDS.genmodel", + srcPaths = listOf("platform:/resource/com.larsreimann.safeds/src/main/kotlin") ) xtextGenerator { configuration { project { - baseName = "de.unibonn.simpleml" + baseName = "com.larsreimann.safeds" this.rootPath = rootPath runtime = RuntimeProjectConfig().apply { - setSrc("$rootPath/de.unibonn.simpleml/src/main/kotlin") + setSrc("$rootPath/com.larsreimann.safeds/src/main/kotlin") } genericIde = BundleProjectConfig().apply { isEnabled = true - setSrc("$rootPath/de.unibonn.simpleml.ide/src/main/kotlin") + setSrc("$rootPath/com.larsreimann.safeds.ide/src/main/kotlin") } runtimeTest = BundleProjectConfig().apply { @@ -156,9 +156,9 @@ tasks.register("generateXtextLanguage") { } standardLanguage { - setName("de.unibonn.simpleml.SimpleML") - setFileExtensions("smlflow,smlstub,smltest") - addReferencedResource("platform:/resource/de.unibonn.simpleml/model/SimpleML.genmodel") + setName("com.larsreimann.safeds.SafeDS") + setFileExtensions("sdsflow,sdsstub,sdstest") + addReferencedResource("platform:/resource/com.larsreimann.safeds/model/SafeDS.genmodel") setFormatter( Formatter2Fragment2().apply { @@ -197,16 +197,16 @@ tasks.register("generateXtextLanguage") { doLast { delete( - fileTree("$rootPath/de.unibonn.simpleml/src") { + fileTree("$rootPath/com.larsreimann.safeds/src") { include("**/*.xtend") } ) delete( - fileTree("$rootPath/de.unibonn.simpleml.ide/src") { + fileTree("$rootPath/com.larsreimann.safeds.ide/src") { include("**/*.xtend") } ) - delete(file("$rootPath/de.unibonn.simpleml.tests")) + delete(file("$rootPath/com.larsreimann.safeds.tests")) } } diff --git a/DSL/buildSrc/src/main/kotlin/de/unibonn/simpleml/xtextConfiguration/XtextConfigurationDsl.kt b/DSL/buildSrc/src/main/kotlin/com/larsreimann/safeds/xtextConfiguration/XtextConfigurationDsl.kt similarity index 97% rename from DSL/buildSrc/src/main/kotlin/de/unibonn/simpleml/xtextConfiguration/XtextConfigurationDsl.kt rename to DSL/buildSrc/src/main/kotlin/com/larsreimann/safeds/xtextConfiguration/XtextConfigurationDsl.kt index adc31a233..168982941 100644 --- a/DSL/buildSrc/src/main/kotlin/de/unibonn/simpleml/xtextConfiguration/XtextConfigurationDsl.kt +++ b/DSL/buildSrc/src/main/kotlin/com/larsreimann/safeds/xtextConfiguration/XtextConfigurationDsl.kt @@ -1,6 +1,6 @@ @file:Suppress("unused") -package de.unibonn.simpleml.xtextConfiguration +package com.larsreimann.safeds.xtextConfiguration import org.eclipse.emf.mwe.utils.DirectoryCleaner import org.eclipse.emf.mwe.utils.ProjectMapping diff --git a/DSL/de.unibonn.simpleml.ide/.gitignore b/DSL/com.larsreimann.safeds.ide/.gitignore similarity index 67% rename from DSL/de.unibonn.simpleml.ide/.gitignore rename to DSL/com.larsreimann.safeds.ide/.gitignore index c441ecaf1..f96c8ba13 100644 --- a/DSL/de.unibonn.simpleml.ide/.gitignore +++ b/DSL/com.larsreimann.safeds.ide/.gitignore @@ -1,3 +1,3 @@ -/src-gen /test-data +src-gen/ *.xtend diff --git a/DSL/de.unibonn.simpleml.ide/build.gradle.kts b/DSL/com.larsreimann.safeds.ide/build.gradle.kts similarity index 89% rename from DSL/de.unibonn.simpleml.ide/build.gradle.kts rename to DSL/com.larsreimann.safeds.ide/build.gradle.kts index ac3975be3..fced0d03f 100644 --- a/DSL/de.unibonn.simpleml.ide/build.gradle.kts +++ b/DSL/com.larsreimann.safeds.ide/build.gradle.kts @@ -16,17 +16,17 @@ java { } application { - mainClass.set("de.unibonn.simpleml.ide.ServerLauncher2") + mainClass.set("com.larsreimann.safeds.ide.ServerLauncher2") } // Dependencies -------------------------------------------------------------------------------------------------------- dependencies { - implementation(project(":de.unibonn.simpleml")) + implementation(project(":com.larsreimann.safeds")) implementation("org.eclipse.xtext:org.eclipse.xtext.ide:$xtextVersion") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") - testImplementation(testFixtures(project(":de.unibonn.simpleml"))) + testImplementation(testFixtures(project(":com.larsreimann.safeds"))) testImplementation("org.junit.jupiter:junit-jupiter-api") testImplementation("org.eclipse.xtext:org.eclipse.xtext.testing:$xtextVersion") testImplementation("org.eclipse.xtext:org.eclipse.xtext.xbase.testing:$xtextVersion") @@ -46,7 +46,7 @@ sourceSets { // Tasks --------------------------------------------------------------------------------------------------------------- val koverExcludes = listOf( - "de.unibonn.simpleml.ide.contentassist.antlr.*" + "com.larsreimann.safeds.ide.contentassist.antlr.*" ) tasks { diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/CustomServerModule.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/CustomServerModule.kt similarity index 53% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/CustomServerModule.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/CustomServerModule.kt index a81d3df38..0df2edcc2 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/CustomServerModule.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/CustomServerModule.kt @@ -1,12 +1,12 @@ -package de.unibonn.simpleml.ide +package com.larsreimann.safeds.ide -import de.unibonn.simpleml.ide.server.project.SimpleMLProjectManager +import com.larsreimann.safeds.ide.server.project.SafeDSProjectManager import org.eclipse.xtext.ide.server.ProjectManager import org.eclipse.xtext.ide.server.ServerModule class CustomServerModule : ServerModule() { override fun configure() { super.configure() - bind(ProjectManager::class.java).to(SimpleMLProjectManager::class.java) + bind(ProjectManager::class.java).to(SafeDSProjectManager::class.java) } } diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/SimpleMLIdeModule.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/SafeDSIdeModule.kt similarity index 50% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/SimpleMLIdeModule.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/SafeDSIdeModule.kt index d223cdd4d..929d2bf9f 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/SimpleMLIdeModule.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/SafeDSIdeModule.kt @@ -1,13 +1,13 @@ -package de.unibonn.simpleml.ide - -import de.unibonn.simpleml.ide.editor.contentassist.SimpleMLIdeContentProposalProvider -import de.unibonn.simpleml.ide.server.codelens.SimpleMLCodeLensProvider -import de.unibonn.simpleml.ide.server.commands.SimpleMLExecutableCommandService -import de.unibonn.simpleml.ide.server.hover.SimpleMLHoverService -import de.unibonn.simpleml.ide.server.symbol.SimpleMLDocumentSymbolDeprecationInfoProvider -import de.unibonn.simpleml.ide.server.symbol.SimpleMLDocumentSymbolDetailsProvider -import de.unibonn.simpleml.ide.server.symbol.SimpleMLDocumentSymbolKindProvider -import de.unibonn.simpleml.ide.server.symbol.SimpleMLDocumentSymbolNameProvider +package com.larsreimann.safeds.ide + +import com.larsreimann.safeds.ide.editor.contentassist.SafeDSIdeContentProposalProvider +import com.larsreimann.safeds.ide.server.codelens.SafeDSCodeLensProvider +import com.larsreimann.safeds.ide.server.commands.SafeDSExecutableCommandService +import com.larsreimann.safeds.ide.server.hover.SafeDSHoverService +import com.larsreimann.safeds.ide.server.symbol.SafeDSDocumentSymbolDeprecationInfoProvider +import com.larsreimann.safeds.ide.server.symbol.SafeDSDocumentSymbolDetailsProvider +import com.larsreimann.safeds.ide.server.symbol.SafeDSDocumentSymbolKindProvider +import com.larsreimann.safeds.ide.server.symbol.SafeDSDocumentSymbolNameProvider import org.eclipse.xtext.ide.editor.contentassist.IdeContentProposalProvider import org.eclipse.xtext.ide.server.codelens.ICodeLensResolver import org.eclipse.xtext.ide.server.codelens.ICodeLensService @@ -18,40 +18,40 @@ import org.eclipse.xtext.ide.server.symbol.DocumentSymbolMapper /** * Use this class to register IDE components. */ -class SimpleMLIdeModule : AbstractSimpleMLIdeModule() { +class SafeDSIdeModule : AbstractSafeDSIdeModule() { fun bindICodeLensResolver(): Class { - return SimpleMLCodeLensProvider::class.java + return SafeDSCodeLensProvider::class.java } fun bindICodeLensService(): Class { - return SimpleMLCodeLensProvider::class.java + return SafeDSCodeLensProvider::class.java } fun bindIExecutableCommandService(): Class { - return SimpleMLExecutableCommandService::class.java + return SafeDSExecutableCommandService::class.java } fun bindDocumentSymbolDeprecationInfoProvider(): Class { - return SimpleMLDocumentSymbolDeprecationInfoProvider::class.java + return SafeDSDocumentSymbolDeprecationInfoProvider::class.java } fun bindDocumentSymbolDetailsProvider(): Class { - return SimpleMLDocumentSymbolDetailsProvider::class.java + return SafeDSDocumentSymbolDetailsProvider::class.java } fun bindDocumentSymbolKindProvider(): Class { - return SimpleMLDocumentSymbolKindProvider::class.java + return SafeDSDocumentSymbolKindProvider::class.java } fun bindDocumentSymbolNameProvider(): Class { - return SimpleMLDocumentSymbolNameProvider::class.java + return SafeDSDocumentSymbolNameProvider::class.java } fun bindIdeContentProposalProvider(): Class { - return SimpleMLIdeContentProposalProvider::class.java + return SafeDSIdeContentProposalProvider::class.java } fun bindHoverService(): Class { - return SimpleMLHoverService::class.java + return SafeDSHoverService::class.java } } diff --git a/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/SafeDSIdeSetup.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/SafeDSIdeSetup.kt new file mode 100644 index 000000000..76dc31820 --- /dev/null +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/SafeDSIdeSetup.kt @@ -0,0 +1,16 @@ +package com.larsreimann.safeds.ide + +import com.google.inject.Guice +import com.google.inject.Injector +import com.larsreimann.safeds.SafeDSRuntimeModule +import com.larsreimann.safeds.SafeDSStandaloneSetup +import org.eclipse.xtext.util.Modules2 + +/** + * Initialization support for running Xtext languages as language servers. + */ +class SafeDSIdeSetup : SafeDSStandaloneSetup() { + override fun createInjector(): Injector? { + return Guice.createInjector(Modules2.mixin(SafeDSRuntimeModule(), SafeDSIdeModule())) + } +} diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/ServerLauncher2.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/ServerLauncher2.kt similarity index 88% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/ServerLauncher2.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/ServerLauncher2.kt index 28b4b3bf8..ed0c970ee 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/ServerLauncher2.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/ServerLauncher2.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.ide +package com.larsreimann.safeds.ide import org.eclipse.xtext.ide.server.ServerLauncher diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/editor/contentassist/Proposals.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/editor/contentassist/Proposals.kt similarity index 59% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/editor/contentassist/Proposals.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/editor/contentassist/Proposals.kt index d51b29589..87c6d8f47 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/editor/contentassist/Proposals.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/editor/contentassist/Proposals.kt @@ -1,24 +1,24 @@ -package de.unibonn.simpleml.ide.editor.contentassist +package com.larsreimann.safeds.ide.editor.contentassist -import de.unibonn.simpleml.emf.classMembersOrEmpty -import de.unibonn.simpleml.emf.containingClassOrNull -import de.unibonn.simpleml.emf.isClassMember -import de.unibonn.simpleml.emf.isGlobal -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.variantsOrEmpty -import de.unibonn.simpleml.scoping.allGlobalDeclarations -import de.unibonn.simpleml.simpleML.SmlAbstractCallable -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.staticAnalysis.typing.Type -import de.unibonn.simpleml.staticAnalysis.typing.hasPrimitiveType -import de.unibonn.simpleml.staticAnalysis.typing.isSubstitutableFor -import de.unibonn.simpleml.staticAnalysis.typing.type +import com.larsreimann.safeds.emf.classMembersOrEmpty +import com.larsreimann.safeds.emf.containingClassOrNull +import com.larsreimann.safeds.emf.isClassMember +import com.larsreimann.safeds.emf.isGlobal +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.variantsOrEmpty +import com.larsreimann.safeds.safeDS.SdsAbstractCallable +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.scoping.allGlobalDeclarations +import com.larsreimann.safeds.staticAnalysis.typing.Type +import com.larsreimann.safeds.staticAnalysis.typing.hasPrimitiveType +import com.larsreimann.safeds.staticAnalysis.typing.isSubstitutableFor +import com.larsreimann.safeds.staticAnalysis.typing.type import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.EcoreUtil2 @@ -27,27 +27,27 @@ import org.eclipse.xtext.EcoreUtil2 * Suggests callables that only require primitive values as arguments when called. * * @param context - * Any EObject in the current file, e.g. the [SmlCompilationUnit]. This is used to determine which declarations are + * Any EObject in the current file, e.g. the [SdsCompilationUnit]. This is used to determine which declarations are * visible from here. * * @return - * A map of URIs to EObjects (SmlClass, SmlFunction, or SmlWorkflowStep). + * A map of URIs to EObjects (SdsClass, SdsFunction, or SdsWorkflowStep). */ -fun listCallablesWithOnlyPrimitiveParameters(context: EObject): Map { +fun listCallablesWithOnlyPrimitiveParameters(context: EObject): Map { return context.allCallables() .filterValues { obj -> when (obj) { - is SmlClass -> { + is SdsClass -> { obj.parameterList != null && obj.parametersOrEmpty().all { it.hasPrimitiveType() } } - is SmlFunction -> { + is SdsFunction -> { obj.isGlobal() && obj.parametersOrEmpty().all { it.hasPrimitiveType() } } - is SmlStep -> { + is SdsStep -> { obj.parametersOrEmpty().all { it.hasPrimitiveType() } @@ -62,37 +62,37 @@ fun listCallablesWithOnlyPrimitiveParameters(context: EObject): Map -): Map { + declarations: List +): Map { val requiredTypes = declarations.map { it.type() } return context.allCallables() .filterValues { obj -> val availableTypes = when (obj) { - is SmlClass -> { + is SdsClass -> { if (obj.parameterList == null) { return@filterValues false } obj.parametersOrEmpty().map { it.type() } } - is SmlEnumVariant -> { + is SdsEnumVariant -> { obj.parametersOrEmpty().map { it.type() } } - is SmlFunction -> { + is SdsFunction -> { val parameterTypes = obj.parametersOrEmpty().map { it.type() } if (obj.isClassMember()) { parameterTypes + obj.containingClassOrNull()!!.type() @@ -100,7 +100,7 @@ fun listCallablesWithMatchingParameters( parameterTypes } } - is SmlStep -> { + is SdsStep -> { obj.parametersOrEmpty().map { it.type() } } else -> return@filterValues false @@ -128,16 +128,16 @@ private fun typesMatch(requiredTypes: List, availableTypes: List): B } /** - * Lists all [SmlAbstractCallable]s that can be called from the given context. + * Lists all [SdsAbstractCallable]s that can be called from the given context. */ -private fun EObject.allCallables(): Map { +private fun EObject.allCallables(): Map { return allGlobalDeclarations() .flatMap { when (val obj = it.eObjectOrProxy) { - is SmlClass -> obj.allNestedCallables().toList() - is SmlEnum -> obj.variantsOrEmpty() - is SmlFunction -> listOf(obj) - is SmlStep -> listOf(obj) + is SdsClass -> obj.allNestedCallables().toList() + is SdsEnum -> obj.variantsOrEmpty() + is SdsFunction -> listOf(obj) + is SdsStep -> listOf(obj) else -> emptyList() } } @@ -145,18 +145,18 @@ private fun EObject.allCallables(): Map { } /** - * Lists all [SmlAbstractCallable]s nested in an [SmlClass]. + * Lists all [SdsAbstractCallable]s nested in an [SdsClass]. */ -private fun SmlClass.allNestedCallables(): Sequence = sequence { +private fun SdsClass.allNestedCallables(): Sequence = sequence { if (parameterList != null) { yield(this@allNestedCallables) } classMembersOrEmpty().forEach { when (it) { - is SmlClass -> yieldAll(it.allNestedCallables()) - is SmlEnum -> yieldAll(it.variantsOrEmpty()) - is SmlFunction -> yield(it) + is SdsClass -> yieldAll(it.allNestedCallables()) + is SdsEnum -> yieldAll(it.variantsOrEmpty()) + is SdsFunction -> yield(it) } } } diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/editor/contentassist/SimpleMLIdeContentProposalProvider.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/editor/contentassist/SafeDSIdeContentProposalProvider.kt similarity index 78% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/editor/contentassist/SimpleMLIdeContentProposalProvider.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/editor/contentassist/SafeDSIdeContentProposalProvider.kt index de7f57d40..ae2ccb8d1 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/editor/contentassist/SimpleMLIdeContentProposalProvider.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/editor/contentassist/SafeDSIdeContentProposalProvider.kt @@ -1,10 +1,10 @@ -package de.unibonn.simpleml.ide.editor.contentassist +package com.larsreimann.safeds.ide.editor.contentassist import com.google.inject.Inject -import de.unibonn.simpleml.services.SimpleMLGrammarAccess -import de.unibonn.simpleml.simpleML.SmlArgumentList -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.staticAnalysis.linking.parametersOrNull +import com.larsreimann.safeds.safeDS.SdsArgumentList +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.services.SafeDSGrammarAccess +import com.larsreimann.safeds.staticAnalysis.linking.parametersOrNull import org.eclipse.xtext.Assignment import org.eclipse.xtext.Keyword import org.eclipse.xtext.RuleCall @@ -13,8 +13,8 @@ import org.eclipse.xtext.ide.editor.contentassist.IIdeContentProposalAcceptor import org.eclipse.xtext.ide.editor.contentassist.IdeContentProposalProvider import org.eclipse.xtext.scoping.IScopeProvider -class SimpleMLIdeContentProposalProvider @Inject constructor( - private val grammarAccess: SimpleMLGrammarAccess, +class SafeDSIdeContentProposalProvider @Inject constructor( + private val grammarAccess: SafeDSGrammarAccess, private val scopeProvider2: IScopeProvider ) : IdeContentProposalProvider() { @@ -34,11 +34,11 @@ class SimpleMLIdeContentProposalProvider @Inject constructor( println("Auto-completion model: $model") when { - model is SmlCompilationUnit -> { + model is SdsCompilationUnit -> { completeGlobalSnippets(context, acceptor) } - model is SmlArgumentList && rule == grammarAccess.smlCallArgumentRule -> { - completeSmlCallArguments(model, context, acceptor) + model is SdsArgumentList && rule == grammarAccess.sdsCallArgumentRule -> { + completeSdsCallArguments(model, context, acceptor) } } } @@ -76,8 +76,8 @@ class SimpleMLIdeContentProposalProvider @Inject constructor( acceptor.accept(proposalCreator.createSnippet(workflow, "workflow", context), snippetPriority) } - private fun completeSmlCallArguments( - model: SmlArgumentList, + private fun completeSdsCallArguments( + model: SdsArgumentList, context: ContentAssistContext, acceptor: IIdeContentProposalAcceptor ) { diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/codelens/SimpleMLCodeLensProvider.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/codelens/SafeDSCodeLensProvider.kt similarity index 90% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/codelens/SimpleMLCodeLensProvider.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/codelens/SafeDSCodeLensProvider.kt index 9f561b2bb..c0aac6027 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/codelens/SimpleMLCodeLensProvider.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/codelens/SafeDSCodeLensProvider.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.ide.server.codelens +package com.larsreimann.safeds.ide.server.codelens import com.google.inject.Inject import org.eclipse.lsp4j.CodeLens @@ -11,7 +11,7 @@ import org.eclipse.xtext.resource.XtextResource import org.eclipse.xtext.service.OperationCanceledManager import org.eclipse.xtext.util.CancelIndicator -class SimpleMLCodeLensProvider : ICodeLensResolver, ICodeLensService { +class SafeDSCodeLensProvider : ICodeLensResolver, ICodeLensService { @Inject private lateinit var operationCanceledManager: OperationCanceledManager diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/commands/CommandId.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/commands/CommandId.kt similarity index 54% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/commands/CommandId.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/commands/CommandId.kt index ffc000ea8..0312f3f31 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/commands/CommandId.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/commands/CommandId.kt @@ -1,9 +1,9 @@ -package de.unibonn.simpleml.ide.server.commands +package com.larsreimann.safeds.ide.server.commands enum class CommandId { RemoveOnceOtherCommandsAreAdded; override fun toString(): String { - return "simple-ml." + this.name + return "safe-ds." + this.name } } diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/commands/SimpleMLExecutableCommandService.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/commands/SafeDSExecutableCommandService.kt similarity index 88% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/commands/SimpleMLExecutableCommandService.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/commands/SafeDSExecutableCommandService.kt index 0ca27d020..ed2ed0ded 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/commands/SimpleMLExecutableCommandService.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/commands/SafeDSExecutableCommandService.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.ide.server.commands +package com.larsreimann.safeds.ide.server.commands import com.google.inject.Inject import org.eclipse.lsp4j.ExecuteCommandParams @@ -7,7 +7,7 @@ import org.eclipse.xtext.ide.server.commands.IExecutableCommandService import org.eclipse.xtext.service.OperationCanceledManager import org.eclipse.xtext.util.CancelIndicator -class SimpleMLExecutableCommandService : IExecutableCommandService { +class SafeDSExecutableCommandService : IExecutableCommandService { @Inject private lateinit var operationCanceledManager: OperationCanceledManager diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/hover/SimpleMLHoverService.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/hover/SafeDSHoverService.kt similarity index 90% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/hover/SimpleMLHoverService.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/hover/SafeDSHoverService.kt index e05b7081c..84ef7a476 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/hover/SimpleMLHoverService.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/hover/SafeDSHoverService.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.ide.server.hover +package com.larsreimann.safeds.ide.server.hover import com.google.inject.Inject import org.eclipse.emf.ecore.EObject @@ -6,7 +6,7 @@ import org.eclipse.xtext.documentation.IEObjectDocumentationProvider import org.eclipse.xtext.ide.labels.INameLabelProvider import org.eclipse.xtext.ide.server.hover.HoverService -class SimpleMLHoverService @Inject constructor( +class SafeDSHoverService @Inject constructor( private val documentationProvider: IEObjectDocumentationProvider, private val nameLabelProvider: INameLabelProvider ) : HoverService() { diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/project/SimpleMLProjectManager.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/project/SafeDSProjectManager.kt similarity index 80% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/project/SimpleMLProjectManager.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/project/SafeDSProjectManager.kt index 3e5af458c..103d7f0db 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/project/SimpleMLProjectManager.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/project/SafeDSProjectManager.kt @@ -1,11 +1,11 @@ -package de.unibonn.simpleml.ide.server.project +package com.larsreimann.safeds.ide.server.project -import de.unibonn.simpleml.stdlibAccess.listStdlibFiles +import com.larsreimann.safeds.stdlibAccess.listStdlibFiles import org.eclipse.xtext.build.IncrementalBuilder import org.eclipse.xtext.ide.server.ProjectManager import org.eclipse.xtext.util.CancelIndicator -class SimpleMLProjectManager : ProjectManager() { +class SafeDSProjectManager : ProjectManager() { override fun doInitialBuild(cancelIndicator: CancelIndicator): IncrementalBuilder.Result { diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolDeprecationInfoProvider.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolDeprecationInfoProvider.kt similarity index 56% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolDeprecationInfoProvider.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolDeprecationInfoProvider.kt index b48a2ac15..b1399d49d 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolDeprecationInfoProvider.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolDeprecationInfoProvider.kt @@ -1,15 +1,15 @@ -package de.unibonn.simpleml.ide.server.symbol +package com.larsreimann.safeds.ide.server.symbol -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.stdlibAccess.isDeprecated +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.stdlibAccess.isDeprecated import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.ide.server.symbol.DocumentSymbolMapper import org.eclipse.xtext.resource.IEObjectDescription -class SimpleMLDocumentSymbolDeprecationInfoProvider : DocumentSymbolMapper.DocumentSymbolDeprecationInfoProvider() { +class SafeDSDocumentSymbolDeprecationInfoProvider : DocumentSymbolMapper.DocumentSymbolDeprecationInfoProvider() { override fun isDeprecated(obj: EObject): Boolean { - if (obj !is SmlAbstractDeclaration) { + if (obj !is SdsAbstractDeclaration) { return false } diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolDetailsProvider.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolDetailsProvider.kt similarity index 55% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolDetailsProvider.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolDetailsProvider.kt index 83a518c2f..5338c8678 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolDetailsProvider.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolDetailsProvider.kt @@ -1,9 +1,9 @@ -package de.unibonn.simpleml.ide.server.symbol +package com.larsreimann.safeds.ide.server.symbol import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.ide.server.symbol.DocumentSymbolMapper -class SimpleMLDocumentSymbolDetailsProvider : DocumentSymbolMapper.DocumentSymbolDetailsProvider() { +class SafeDSDocumentSymbolDetailsProvider : DocumentSymbolMapper.DocumentSymbolDetailsProvider() { override fun getDetails(obj: EObject?): String { return "" } diff --git a/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolKindProvider.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolKindProvider.kt new file mode 100644 index 000000000..cb69e5077 --- /dev/null +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolKindProvider.kt @@ -0,0 +1,39 @@ +package com.larsreimann.safeds.ide.server.symbol + +import com.larsreimann.safeds.emf.isClassMember +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsFunction +import org.eclipse.emf.ecore.EClass +import org.eclipse.emf.ecore.EObject +import org.eclipse.lsp4j.SymbolKind +import org.eclipse.xtext.ide.server.symbol.DocumentSymbolMapper +import org.eclipse.xtext.resource.IEObjectDescription + +class SafeDSDocumentSymbolKindProvider : DocumentSymbolMapper.DocumentSymbolKindProvider() { + override fun getSymbolKind(obj: EObject?): SymbolKind? { + if (obj is SdsFunction && obj.isClassMember()) { + return SymbolKind.Method + } + + return obj?.let { getSymbolKind(it.eClass()) } + } + + override fun getSymbolKind(description: IEObjectDescription?): SymbolKind? { + return getSymbolKind(description?.eObjectOrProxy) + } + + override fun getSymbolKind(clazz: EClass): SymbolKind? { + return when (clazz) { + Literals.SDS_ANNOTATION -> SymbolKind.Interface // Not ideal but matches @interface in Java + Literals.SDS_ATTRIBUTE -> SymbolKind.Field + Literals.SDS_CLASS -> SymbolKind.Class + Literals.SDS_COMPILATION_UNIT -> SymbolKind.Package + Literals.SDS_ENUM -> SymbolKind.Enum + Literals.SDS_ENUM_VARIANT -> SymbolKind.EnumMember + Literals.SDS_FUNCTION -> SymbolKind.Function + Literals.SDS_STEP -> SymbolKind.Function + Literals.SDS_WORKFLOW -> SymbolKind.Function + else -> null + } + } +} diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolNameProvider.kt b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolNameProvider.kt similarity index 57% rename from DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolNameProvider.kt rename to DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolNameProvider.kt index 6423a5415..a93de5bf5 100644 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolNameProvider.kt +++ b/DSL/com.larsreimann.safeds.ide/src/main/kotlin/com/larsreimann/safeds/ide/server/symbol/SafeDSDocumentSymbolNameProvider.kt @@ -1,13 +1,13 @@ -package de.unibonn.simpleml.ide.server.symbol +package com.larsreimann.safeds.ide.server.symbol -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.ide.server.symbol.DocumentSymbolMapper import org.eclipse.xtext.resource.IEObjectDescription -class SimpleMLDocumentSymbolNameProvider : DocumentSymbolMapper.DocumentSymbolNameProvider() { +class SafeDSDocumentSymbolNameProvider : DocumentSymbolMapper.DocumentSymbolNameProvider() { override fun getName(obj: EObject): String? { - return (obj as? SmlAbstractDeclaration)?.name + return (obj as? SdsAbstractDeclaration)?.name } override fun getName(description: IEObjectDescription): String? { diff --git a/DSL/de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/AbstractSimpleMLLanguageServerTest.kt b/DSL/com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/AbstractSafeDSLanguageServerTest.kt similarity index 74% rename from DSL/de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/AbstractSimpleMLLanguageServerTest.kt rename to DSL/com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/AbstractSafeDSLanguageServerTest.kt index 4b2966b3b..e476417e9 100644 --- a/DSL/de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/AbstractSimpleMLLanguageServerTest.kt +++ b/DSL/com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/AbstractSafeDSLanguageServerTest.kt @@ -1,12 +1,13 @@ -package de.unibonn.simpleml.ide +package com.larsreimann.safeds.ide +import com.larsreimann.safeds.constant.SdsFileExtension import org.eclipse.lsp4j.InitializeParams import org.eclipse.lsp4j.InitializeResult import org.eclipse.xtext.testing.AbstractLanguageServerTest import org.eclipse.xtext.xbase.lib.Procedures.Procedure1 import java.lang.IllegalStateException -abstract class AbstractSimpleMLLanguageServerTest : AbstractLanguageServerTest("smltest") { +abstract class AbstractSafeDSLanguageServerTest : AbstractLanguageServerTest(SdsFileExtension.Test.extension) { /** * This override is necessary since `LanguageServerImpl` throws if it is initialized twice. diff --git a/DSL/de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/editor/contentassist/ProposalsTest.kt b/DSL/com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/editor/contentassist/ProposalsTest.kt similarity index 82% rename from DSL/de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/editor/contentassist/ProposalsTest.kt rename to DSL/com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/editor/contentassist/ProposalsTest.kt index e4014a215..5854fe4cd 100644 --- a/DSL/de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/editor/contentassist/ProposalsTest.kt +++ b/DSL/com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/editor/contentassist/ProposalsTest.kt @@ -1,13 +1,13 @@ -package de.unibonn.simpleml.ide.editor.contentassist +package com.larsreimann.safeds.ide.editor.contentassist import com.google.inject.Inject -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.maps.shouldContainValue import io.kotest.matchers.maps.shouldContainValues @@ -20,7 +20,7 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class ProposalsTest { @Inject @@ -65,7 +65,7 @@ class ProposalsTest { val steps = context.members .asSequence() - .filterIsInstance() + .filterIsInstance() .filter { it.name.startsWith("primitive") } .toList() steps.shouldHaveSize(5) @@ -83,9 +83,9 @@ class ProposalsTest { val context = parseHelper.parseProgramText(testProgram) context.shouldNotBeNull() - val placeholder = context.findUniqueDeclarationOrFail("test_placeholder_a") - val workflowStepA = context.findUniqueDeclarationOrFail("matching_a") - val workflowStepB = context.findUniqueDeclarationOrFail("matching_b") + val placeholder = context.findUniqueDeclarationOrFail("test_placeholder_a") + val workflowStepA = context.findUniqueDeclarationOrFail("matching_a") + val workflowStepB = context.findUniqueDeclarationOrFail("matching_b") val descriptions = listCallablesWithMatchingParameters(context, listOf(placeholder)) descriptions.shouldContainValue(workflowStepA) @@ -97,9 +97,9 @@ class ProposalsTest { val context = parseHelper.parseProgramText(testProgram) context.shouldNotBeNull() - val result = context.findUniqueDeclarationOrFail("test_result_a") - val workflowStepA = context.findUniqueDeclarationOrFail("matching_a") - val workflowStepB = context.findUniqueDeclarationOrFail("matching_b") + val result = context.findUniqueDeclarationOrFail("test_result_a") + val workflowStepA = context.findUniqueDeclarationOrFail("matching_a") + val workflowStepB = context.findUniqueDeclarationOrFail("matching_b") val descriptions = listCallablesWithMatchingParameters(context, listOf(result)) descriptions.shouldContainValue(workflowStepA) @@ -111,9 +111,9 @@ class ProposalsTest { val context = parseHelper.parseProgramText(testProgram) context.shouldNotBeNull() - val result = context.findUniqueDeclarationOrFail("test_result_c") - val matchingWorkflow = context.findUniqueDeclarationOrFail("matching_multiple_c") - val nonMatchingWorkflow = context.findUniqueDeclarationOrFail("not_matching_multiple_c") + val result = context.findUniqueDeclarationOrFail("test_result_c") + val matchingWorkflow = context.findUniqueDeclarationOrFail("matching_multiple_c") + val nonMatchingWorkflow = context.findUniqueDeclarationOrFail("not_matching_multiple_c") val descriptions = listCallablesWithMatchingParameters(context, listOf(result, result)) descriptions.shouldContainValue(matchingWorkflow) @@ -125,10 +125,10 @@ class ProposalsTest { val context = parseHelper.parseProgramText(testProgram) context.shouldNotBeNull() - val result = context.findUniqueDeclarationOrFail("test_result_c") - val placeholder = context.findUniqueDeclarationOrFail("test_placeholder_d") - val matchingWorkflow1 = context.findUniqueDeclarationOrFail("matching_multiple_c_d") - val matchingWorkflow2 = context.findUniqueDeclarationOrFail("matching_multiple_d_c") + val result = context.findUniqueDeclarationOrFail("test_result_c") + val placeholder = context.findUniqueDeclarationOrFail("test_placeholder_d") + val matchingWorkflow1 = context.findUniqueDeclarationOrFail("matching_multiple_c_d") + val matchingWorkflow2 = context.findUniqueDeclarationOrFail("matching_multiple_d_c") // Inverse order of placeholder and result compared to (3) val descriptions = listCallablesWithMatchingParameters(context, listOf(result, placeholder)) @@ -141,10 +141,10 @@ class ProposalsTest { val context = parseHelper.parseProgramText(testProgram) context.shouldNotBeNull() - val result = context.findUniqueDeclarationOrFail("test_result_c") - val placeholder = context.findUniqueDeclarationOrFail("test_placeholder_d") - val matchingWorkflow1 = context.findUniqueDeclarationOrFail("matching_multiple_c_d") - val matchingWorkflow2 = context.findUniqueDeclarationOrFail("matching_multiple_d_c") + val result = context.findUniqueDeclarationOrFail("test_result_c") + val placeholder = context.findUniqueDeclarationOrFail("test_placeholder_d") + val matchingWorkflow1 = context.findUniqueDeclarationOrFail("matching_multiple_c_d") + val matchingWorkflow2 = context.findUniqueDeclarationOrFail("matching_multiple_d_c") // Inverse order of placeholder and result compared to (2) val descriptions = listCallablesWithMatchingParameters(context, listOf(placeholder, result)) @@ -157,8 +157,8 @@ class ProposalsTest { val context = parseHelper.parseProgramText(testProgram) context.shouldNotBeNull() - val result = context.findUniqueDeclarationOrFail("test_result_c") - val matchingMethod = context.findUniqueDeclarationOrFail("someMethod") + val result = context.findUniqueDeclarationOrFail("test_result_c") + val matchingMethod = context.findUniqueDeclarationOrFail("someMethod") // Inverse order of placeholder and result compared to (2) val descriptions = listCallablesWithMatchingParameters(context, listOf(result)) @@ -170,8 +170,8 @@ class ProposalsTest { val context = parseHelper.parseProgramText(testProgram) context.shouldNotBeNull() - val placeholder = context.findUniqueDeclarationOrFail("test_placeholder_d") - val matchingMethod = context.findUniqueDeclarationOrFail("someMethod") + val placeholder = context.findUniqueDeclarationOrFail("test_placeholder_d") + val matchingMethod = context.findUniqueDeclarationOrFail("someMethod") // Inverse order of placeholder and result compared to (2) val descriptions = listCallablesWithMatchingParameters(context, listOf(placeholder)) diff --git a/DSL/de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/server/symbol/DocumentSymbolTest.kt b/DSL/com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/server/symbol/DocumentSymbolTest.kt similarity index 87% rename from DSL/de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/server/symbol/DocumentSymbolTest.kt rename to DSL/com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/server/symbol/DocumentSymbolTest.kt index ca7a8eae5..09d561825 100644 --- a/DSL/de.unibonn.simpleml.ide/src/test/kotlin/de/unibonn/simpleml/ide/server/symbol/DocumentSymbolTest.kt +++ b/DSL/com.larsreimann.safeds.ide/src/test/kotlin/com/larsreimann/safeds/ide/server/symbol/DocumentSymbolTest.kt @@ -1,13 +1,13 @@ -package de.unibonn.simpleml.ide.server.symbol - -import de.unibonn.simpleml.ide.AbstractSimpleMLLanguageServerTest -import de.unibonn.simpleml.location.LspRange -import de.unibonn.simpleml.testing.CategorizedTest -import de.unibonn.simpleml.testing.FindTestRangesResult -import de.unibonn.simpleml.testing.createDynamicTestsFromResourceFolder -import de.unibonn.simpleml.testing.findTestRanges -import de.unibonn.simpleml.testing.getResourcePath -import de.unibonn.simpleml.testing.testDisplayName +package com.larsreimann.safeds.ide.server.symbol + +import com.larsreimann.safeds.ide.AbstractSafeDSLanguageServerTest +import com.larsreimann.safeds.location.LspRange +import com.larsreimann.safeds.testing.CategorizedTest +import com.larsreimann.safeds.testing.FindTestRangesResult +import com.larsreimann.safeds.testing.createDynamicTestsFromResourceFolder +import com.larsreimann.safeds.testing.findTestRanges +import com.larsreimann.safeds.testing.getResourcePath +import com.larsreimann.safeds.testing.testDisplayName import org.eclipse.lsp4j.SymbolKind import org.junit.jupiter.api.DynamicNode import org.junit.jupiter.api.DynamicTest @@ -15,7 +15,7 @@ import org.junit.jupiter.api.TestFactory import java.nio.file.Path import java.util.stream.Stream -class DocumentSymbolTest : AbstractSimpleMLLanguageServerTest() { +class DocumentSymbolTest : AbstractSafeDSLanguageServerTest() { @TestFactory fun `should provide correct symbols`(): Stream { @@ -122,7 +122,7 @@ private data class ExpectedSymbol( override fun toString() = buildString { appendLine("symbol \"$name\" {") appendLine("${indent}kind: ${kind.value}") - appendLine("${indent}location: MyModel.smltest $range") + appendLine("${indent}location: MyModel.sdstest $range") if (!containerName.isNullOrEmpty()) { appendLine("${indent}container: \"$containerName\"") diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/annotations.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/annotations.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/annotations.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/annotations.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/attributes.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/attributes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/attributes.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/attributes.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/classes.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/classes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/classes.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/classes.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/compilationUnitMembers.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/compilationUnitMembers.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/compilationUnitMembers.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/compilationUnitMembers.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/compilationUnits.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/compilationUnits.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/compilationUnits.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/compilationUnits.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/enumVariants.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/enumVariants.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/enumVariants.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/enumVariants.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/enums.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/enums.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/enums.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/enums.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/globalFunctions.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/globalFunctions.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/globalFunctions.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/globalFunctions.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/lambdaResults.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/lambdaResults.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/lambdaResults.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/lambdaResults.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/methods.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/methods.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/methods.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/methods.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/parameters.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/parameters.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/parameters.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/parameters.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/placeholders.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/placeholders.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/placeholders.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/placeholders.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/results.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/results.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/results.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/results.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/typeParameters.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/typeParameters.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/typeParameters.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/typeParameters.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/workflowSteps.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/workflowSteps.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/workflowSteps.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/workflowSteps.sdstest diff --git a/DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/workflows.smltest b/DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/workflows.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml.ide/src/test/resources/symbols/workflows.smltest rename to DSL/com.larsreimann.safeds.ide/src/test/resources/symbols/workflows.sdstest diff --git a/DSL/de.unibonn.simpleml.vscode/.gitattributes b/DSL/com.larsreimann.safeds.vscode/.gitattributes similarity index 100% rename from DSL/de.unibonn.simpleml.vscode/.gitattributes rename to DSL/com.larsreimann.safeds.vscode/.gitattributes diff --git a/DSL/de.unibonn.simpleml.vscode/.gitignore b/DSL/com.larsreimann.safeds.vscode/.gitignore similarity index 68% rename from DSL/de.unibonn.simpleml.vscode/.gitignore rename to DSL/com.larsreimann.safeds.vscode/.gitignore index f0308a903..f034388c5 100644 --- a/DSL/de.unibonn.simpleml.vscode/.gitignore +++ b/DSL/com.larsreimann.safeds.vscode/.gitignore @@ -2,4 +2,4 @@ /ls/ /out/ /node_modules/ -/src/simpleml/ +/src/safeds/ diff --git a/DSL/de.unibonn.simpleml.vscode/.vscodeignore b/DSL/com.larsreimann.safeds.vscode/.vscodeignore similarity index 100% rename from DSL/de.unibonn.simpleml.vscode/.vscodeignore rename to DSL/com.larsreimann.safeds.vscode/.vscodeignore diff --git a/DSL/de.unibonn.simpleml.vscode/CHANGELOG.md b/DSL/com.larsreimann.safeds.vscode/CHANGELOG.md similarity index 100% rename from DSL/de.unibonn.simpleml.vscode/CHANGELOG.md rename to DSL/com.larsreimann.safeds.vscode/CHANGELOG.md diff --git a/DSL/com.larsreimann.safeds.vscode/README.md b/DSL/com.larsreimann.safeds.vscode/README.md new file mode 100644 index 000000000..cf656fb70 --- /dev/null +++ b/DSL/com.larsreimann.safeds.vscode/README.md @@ -0,0 +1,9 @@ +# Safe-DS + +A preview of the language support for the [Safe-DS][safe-ds-repo] DSL. + +## Requirements + +You need to install [OpenJDK 17 LTS](https://adoptium.net/temurin/releases). Later releases should also work fine. + +[safe-ds-repo]: https://github.com/lars-reimann/safe-data-science diff --git a/DSL/de.unibonn.simpleml.vscode/build.gradle.kts b/DSL/com.larsreimann.safeds.vscode/build.gradle.kts similarity index 85% rename from DSL/de.unibonn.simpleml.vscode/build.gradle.kts rename to DSL/com.larsreimann.safeds.vscode/build.gradle.kts index 8c6cc13f2..d3eb031d9 100644 --- a/DSL/de.unibonn.simpleml.vscode/build.gradle.kts +++ b/DSL/com.larsreimann.safeds.vscode/build.gradle.kts @@ -26,10 +26,10 @@ idea { // Tasks --------------------------------------------------------------------------------------------------------------- -val extensionPath = "dist/simple-ml-${project.version}.vsix" +val extensionPath = "dist/safe-ds-${project.version}.vsix" tasks.register("copyApplication") { - val installDistTask = project(":de.unibonn.simpleml.ide").tasks.named("installDist") + val installDistTask = project(":com.larsreimann.safeds.ide").tasks.named("installDist") dependsOn(installDistTask) from(installDistTask.get().outputs) @@ -48,7 +48,6 @@ tasks.register("vsCodeExtension") { dependsOn("npmInstall") - inputs.dir("icons") inputs.dir("ls") inputs.dir("src") inputs.dir("syntaxes") @@ -86,9 +85,9 @@ tasks.register("launchVSCode") { dependsOn("installExtension") if (System.getProperty("os.name").toLowerCase().contains("windows")) { - commandLine("powershell", "code", "-n", "../de.unibonn.simpleml/src/main/resources/stdlib") + commandLine("powershell", "code", "-n", "../com.larsreimann.safeds/src/main/resources/stdlib") } else { - commandLine("code", "-n", "../de.unibonn.simpleml/src/main/resources/stdlib") + commandLine("code", "-n", "../com.larsreimann.safeds/src/main/resources/stdlib") } } diff --git a/DSL/de.unibonn.simpleml.vscode/language-configuration.json b/DSL/com.larsreimann.safeds.vscode/language-configuration.json similarity index 53% rename from DSL/de.unibonn.simpleml.vscode/language-configuration.json rename to DSL/com.larsreimann.safeds.vscode/language-configuration.json index 1756c1c1b..1d9913446 100644 --- a/DSL/de.unibonn.simpleml.vscode/language-configuration.json +++ b/DSL/com.larsreimann.safeds.vscode/language-configuration.json @@ -1,18 +1,14 @@ { "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": [ "/*", "*/" ] + "blockComment": ["/*", "*/"] }, - // symbols used as brackets "brackets": [ ["{", "}"], ["(", ")"], ["<", ">"], ["»", "«"] ], - // symbols that are auto closed when typing "autoClosingPairs": [ ["{", "}"], ["(", ")"], @@ -21,7 +17,6 @@ ["\"", "\""], ["`", "`"] ], - // symbols that can be used to surround a selection "surroundingPairs": [ ["{", "}"], ["(", ")"], diff --git a/DSL/com.larsreimann.safeds.vscode/package-lock.json b/DSL/com.larsreimann.safeds.vscode/package-lock.json new file mode 100644 index 000000000..d9a1168b2 --- /dev/null +++ b/DSL/com.larsreimann.safeds.vscode/package-lock.json @@ -0,0 +1,1378 @@ +{ + "name": "safe-ds", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "safe-ds", + "version": "0.0.1", + "dependencies": { + "vscode-languageclient": "^8.0.1" + }, + "devDependencies": { + "@types/node": "^17.0.40", + "@types/vscode": "^1.67.0", + "esbuild": "^0.14.42", + "typescript": "^4.7.3", + "vscode-test": "^1.6.1" + }, + "engines": { + "vscode": "^1.67.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/node": { + "version": "17.0.40", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.40.tgz", + "integrity": "sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.67.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.67.0.tgz", + "integrity": "sha512-GH8BDf8cw9AC9080uneJfulhSa7KHSMI2s/CyKePXoGNos9J486w2V4YKoeNUqIEkW4hKoEAWp6/cXTwyGj47g==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/big-integer": { + "version": "1.6.48", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.1", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/esbuild": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.42.tgz", + "integrity": "sha512-V0uPZotCEHokJdNqyozH6qsaQXqmZEOiZWrXnds/zaH/0SyrIayRXWRB98CENO73MIZ9T3HBIOsmds5twWtmgw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.42", + "esbuild-android-arm64": "0.14.42", + "esbuild-darwin-64": "0.14.42", + "esbuild-darwin-arm64": "0.14.42", + "esbuild-freebsd-64": "0.14.42", + "esbuild-freebsd-arm64": "0.14.42", + "esbuild-linux-32": "0.14.42", + "esbuild-linux-64": "0.14.42", + "esbuild-linux-arm": "0.14.42", + "esbuild-linux-arm64": "0.14.42", + "esbuild-linux-mips64le": "0.14.42", + "esbuild-linux-ppc64le": "0.14.42", + "esbuild-linux-riscv64": "0.14.42", + "esbuild-linux-s390x": "0.14.42", + "esbuild-netbsd-64": "0.14.42", + "esbuild-openbsd-64": "0.14.42", + "esbuild-sunos-64": "0.14.42", + "esbuild-windows-32": "0.14.42", + "esbuild-windows-64": "0.14.42", + "esbuild-windows-arm64": "0.14.42" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.42.tgz", + "integrity": "sha512-P4Y36VUtRhK/zivqGVMqhptSrFILAGlYp0Z8r9UQqHJ3iWztRCNWnlBzD9HRx0DbueXikzOiwyOri+ojAFfW6A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.42.tgz", + "integrity": "sha512-0cOqCubq+RWScPqvtQdjXG3Czb3AWI2CaKw3HeXry2eoA2rrPr85HF7IpdU26UWdBXgPYtlTN1LUiuXbboROhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.42.tgz", + "integrity": "sha512-ipiBdCA3ZjYgRfRLdQwP82rTiv/YVMtW36hTvAN5ZKAIfxBOyPXY7Cejp3bMXWgzKD8B6O+zoMzh01GZsCuEIA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.42.tgz", + "integrity": "sha512-bU2tHRqTPOaoH/4m0zYHbFWpiYDmaA0gt90/3BMEFaM0PqVK/a6MA2V/ypV5PO0v8QxN6gH5hBPY4YJ2lopXgA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.42.tgz", + "integrity": "sha512-75h1+22Ivy07+QvxHyhVqOdekupiTZVLN1PMwCDonAqyXd8TVNJfIRFrdL8QmSJrOJJ5h8H1I9ETyl2L8LQDaw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.42.tgz", + "integrity": "sha512-W6Jebeu5TTDQMJUJVarEzRU9LlKpNkPBbjqSu+GUPTHDCly5zZEQq9uHkmHHl7OKm+mQ2zFySN83nmfCeZCyNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.42.tgz", + "integrity": "sha512-Ooy/Bj+mJ1z4jlWcK5Dl6SlPlCgQB9zg1UrTCeY8XagvuWZ4qGPyYEWGkT94HUsRi2hKsXvcs6ThTOjBaJSMfg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.42.tgz", + "integrity": "sha512-2L0HbzQfbTuemUWfVqNIjOfaTRt9zsvjnme6lnr7/MO9toz/MJ5tZhjqrG6uDWDxhsaHI2/nsDgrv8uEEN2eoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.42.tgz", + "integrity": "sha512-STq69yzCMhdRaWnh29UYrLSr/qaWMm/KqwaRF1pMEK7kDiagaXhSL1zQGXbYv94GuGY/zAwzK98+6idCMUOOCg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.42.tgz", + "integrity": "sha512-c3Ug3e9JpVr8jAcfbhirtpBauLxzYPpycjWulD71CF6ZSY26tvzmXMJYooQ2YKqDY4e/fPu5K8bm7MiXMnyxuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.42.tgz", + "integrity": "sha512-QuvpHGbYlkyXWf2cGm51LBCHx6eUakjaSrRpUqhPwjh/uvNUYvLmz2LgPTTPwCqaKt0iwL+OGVL0tXA5aDbAbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.42.tgz", + "integrity": "sha512-8ohIVIWDbDT+i7lCx44YCyIRrOW1MYlks9fxTo0ME2LS/fxxdoJBwHWzaDYhjvf8kNpA+MInZvyOEAGoVDrMHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.42.tgz", + "integrity": "sha512-DzDqK3TuoXktPyG1Lwx7vhaF49Onv3eR61KwQyxYo4y5UKTpL3NmuarHSIaSVlTFDDpcIajCDwz5/uwKLLgKiQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.42.tgz", + "integrity": "sha512-YFRhPCxl8nb//Wn6SiS5pmtplBi4z9yC2gLrYoYI/tvwuB1jldir9r7JwAGy1Ck4D7sE7wBN9GFtUUX/DLdcEQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.42.tgz", + "integrity": "sha512-QYSD2k+oT9dqB/4eEM9c+7KyNYsIPgzYOSrmfNGDIyJrbT1d+CFVKvnKahDKNJLfOYj8N4MgyFaU9/Ytc6w5Vw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.42.tgz", + "integrity": "sha512-M2meNVIKWsm2HMY7+TU9AxM7ZVwI9havdsw6m/6EzdXysyCFFSoaTQ/Jg03izjCsK17FsVRHqRe26Llj6x0MNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.42.tgz", + "integrity": "sha512-uXV8TAZEw36DkgW8Ak3MpSJs1ofBb3Smkc/6pZ29sCAN1KzCAQzsje4sUwugf+FVicrHvlamCOlFZIXgct+iqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.42.tgz", + "integrity": "sha512-4iw/8qWmRICWi9ZOnJJf9sYt6wmtp3hsN4TdI5NqgjfOkBVMxNdM9Vt3626G1Rda9ya2Q0hjQRD9W1o+m6Lz6g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.42.tgz", + "integrity": "sha512-j3cdK+Y3+a5H0wHKmLGTJcq0+/2mMBHPWkItR3vytp/aUGD/ua/t2BLdfBIzbNN9nLCRL9sywCRpOpFMx3CxzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.42.tgz", + "integrity": "sha512-+lRAARnF+hf8J0mN27ujO+VbhPbDqJ8rCcJKye4y7YZLV6C4n3pTRThAb388k/zqF5uM0lS5O201u0OqoWSicw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fstream": { + "version": "1.0.12", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/listenercount": { + "version": "1.0.1", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/typescript": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", + "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unzipper": { + "version": "0.10.11", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/vscode-jsonrpc": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", + "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz", + "integrity": "sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==", + "dependencies": { + "minimatch": "^3.0.4", + "semver": "^7.3.5", + "vscode-languageserver-protocol": "3.17.1" + }, + "engines": { + "vscode": "^1.67.0" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", + "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", + "dependencies": { + "vscode-jsonrpc": "8.0.1", + "vscode-languageserver-types": "3.17.1" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", + "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==" + }, + "node_modules/vscode-test": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", + "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + }, + "engines": { + "node": ">=8.9.3" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + }, + "dependencies": { + "@tootallnate/once": { + "version": "1.1.2", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/node": { + "version": "17.0.40", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.40.tgz", + "integrity": "sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg==", + "dev": true + }, + "@types/vscode": { + "version": "1.67.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.67.0.tgz", + "integrity": "sha512-GH8BDf8cw9AC9080uneJfulhSa7KHSMI2s/CyKePXoGNos9J486w2V4YKoeNUqIEkW4hKoEAWp6/cXTwyGj47g==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "balanced-match": { + "version": "1.0.0", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "big-integer": { + "version": "1.6.48", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "dev": true + }, + "binary": { + "version": "0.3.0", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bluebird": { + "version": "3.4.7", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "concat-map": { + "version": "0.0.1", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.2", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "debug": { + "version": "4.3.1", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "duplexer2": { + "version": "0.1.4", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "esbuild": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.42.tgz", + "integrity": "sha512-V0uPZotCEHokJdNqyozH6qsaQXqmZEOiZWrXnds/zaH/0SyrIayRXWRB98CENO73MIZ9T3HBIOsmds5twWtmgw==", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.42", + "esbuild-android-arm64": "0.14.42", + "esbuild-darwin-64": "0.14.42", + "esbuild-darwin-arm64": "0.14.42", + "esbuild-freebsd-64": "0.14.42", + "esbuild-freebsd-arm64": "0.14.42", + "esbuild-linux-32": "0.14.42", + "esbuild-linux-64": "0.14.42", + "esbuild-linux-arm": "0.14.42", + "esbuild-linux-arm64": "0.14.42", + "esbuild-linux-mips64le": "0.14.42", + "esbuild-linux-ppc64le": "0.14.42", + "esbuild-linux-riscv64": "0.14.42", + "esbuild-linux-s390x": "0.14.42", + "esbuild-netbsd-64": "0.14.42", + "esbuild-openbsd-64": "0.14.42", + "esbuild-sunos-64": "0.14.42", + "esbuild-windows-32": "0.14.42", + "esbuild-windows-64": "0.14.42", + "esbuild-windows-arm64": "0.14.42" + } + }, + "esbuild-android-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.42.tgz", + "integrity": "sha512-P4Y36VUtRhK/zivqGVMqhptSrFILAGlYp0Z8r9UQqHJ3iWztRCNWnlBzD9HRx0DbueXikzOiwyOri+ojAFfW6A==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.42.tgz", + "integrity": "sha512-0cOqCubq+RWScPqvtQdjXG3Czb3AWI2CaKw3HeXry2eoA2rrPr85HF7IpdU26UWdBXgPYtlTN1LUiuXbboROhg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.42.tgz", + "integrity": "sha512-ipiBdCA3ZjYgRfRLdQwP82rTiv/YVMtW36hTvAN5ZKAIfxBOyPXY7Cejp3bMXWgzKD8B6O+zoMzh01GZsCuEIA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.42.tgz", + "integrity": "sha512-bU2tHRqTPOaoH/4m0zYHbFWpiYDmaA0gt90/3BMEFaM0PqVK/a6MA2V/ypV5PO0v8QxN6gH5hBPY4YJ2lopXgA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.42.tgz", + "integrity": "sha512-75h1+22Ivy07+QvxHyhVqOdekupiTZVLN1PMwCDonAqyXd8TVNJfIRFrdL8QmSJrOJJ5h8H1I9ETyl2L8LQDaw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.42.tgz", + "integrity": "sha512-W6Jebeu5TTDQMJUJVarEzRU9LlKpNkPBbjqSu+GUPTHDCly5zZEQq9uHkmHHl7OKm+mQ2zFySN83nmfCeZCyNA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.42.tgz", + "integrity": "sha512-Ooy/Bj+mJ1z4jlWcK5Dl6SlPlCgQB9zg1UrTCeY8XagvuWZ4qGPyYEWGkT94HUsRi2hKsXvcs6ThTOjBaJSMfg==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.42.tgz", + "integrity": "sha512-2L0HbzQfbTuemUWfVqNIjOfaTRt9zsvjnme6lnr7/MO9toz/MJ5tZhjqrG6uDWDxhsaHI2/nsDgrv8uEEN2eoA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.42.tgz", + "integrity": "sha512-STq69yzCMhdRaWnh29UYrLSr/qaWMm/KqwaRF1pMEK7kDiagaXhSL1zQGXbYv94GuGY/zAwzK98+6idCMUOOCg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.42.tgz", + "integrity": "sha512-c3Ug3e9JpVr8jAcfbhirtpBauLxzYPpycjWulD71CF6ZSY26tvzmXMJYooQ2YKqDY4e/fPu5K8bm7MiXMnyxuA==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.42.tgz", + "integrity": "sha512-QuvpHGbYlkyXWf2cGm51LBCHx6eUakjaSrRpUqhPwjh/uvNUYvLmz2LgPTTPwCqaKt0iwL+OGVL0tXA5aDbAbg==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.42.tgz", + "integrity": "sha512-8ohIVIWDbDT+i7lCx44YCyIRrOW1MYlks9fxTo0ME2LS/fxxdoJBwHWzaDYhjvf8kNpA+MInZvyOEAGoVDrMHg==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.42.tgz", + "integrity": "sha512-DzDqK3TuoXktPyG1Lwx7vhaF49Onv3eR61KwQyxYo4y5UKTpL3NmuarHSIaSVlTFDDpcIajCDwz5/uwKLLgKiQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.42.tgz", + "integrity": "sha512-YFRhPCxl8nb//Wn6SiS5pmtplBi4z9yC2gLrYoYI/tvwuB1jldir9r7JwAGy1Ck4D7sE7wBN9GFtUUX/DLdcEQ==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.42.tgz", + "integrity": "sha512-QYSD2k+oT9dqB/4eEM9c+7KyNYsIPgzYOSrmfNGDIyJrbT1d+CFVKvnKahDKNJLfOYj8N4MgyFaU9/Ytc6w5Vw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.42.tgz", + "integrity": "sha512-M2meNVIKWsm2HMY7+TU9AxM7ZVwI9havdsw6m/6EzdXysyCFFSoaTQ/Jg03izjCsK17FsVRHqRe26Llj6x0MNA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.42.tgz", + "integrity": "sha512-uXV8TAZEw36DkgW8Ak3MpSJs1ofBb3Smkc/6pZ29sCAN1KzCAQzsje4sUwugf+FVicrHvlamCOlFZIXgct+iqQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.42.tgz", + "integrity": "sha512-4iw/8qWmRICWi9ZOnJJf9sYt6wmtp3hsN4TdI5NqgjfOkBVMxNdM9Vt3626G1Rda9ya2Q0hjQRD9W1o+m6Lz6g==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.42.tgz", + "integrity": "sha512-j3cdK+Y3+a5H0wHKmLGTJcq0+/2mMBHPWkItR3vytp/aUGD/ua/t2BLdfBIzbNN9nLCRL9sywCRpOpFMx3CxzA==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.42", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.42.tgz", + "integrity": "sha512-+lRAARnF+hf8J0mN27ujO+VbhPbDqJ8rCcJKye4y7YZLV6C4n3pTRThAb388k/zqF5uM0lS5O201u0OqoWSicw==", + "dev": true, + "optional": true + }, + "fs.realpath": { + "version": "1.0.0", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.12", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "glob": { + "version": "7.1.6", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "inflight": { + "version": "1.0.6", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "listenercount": { + "version": "1.0.1", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "once": { + "version": "1.4.0", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "3.0.2", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "traverse": { + "version": "0.3.9", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, + "typescript": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", + "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", + "dev": true + }, + "unzipper": { + "version": "0.10.11", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vscode-jsonrpc": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", + "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==" + }, + "vscode-languageclient": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz", + "integrity": "sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==", + "requires": { + "minimatch": "^3.0.4", + "semver": "^7.3.5", + "vscode-languageserver-protocol": "3.17.1" + } + }, + "vscode-languageserver-protocol": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", + "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", + "requires": { + "vscode-jsonrpc": "8.0.1", + "vscode-languageserver-types": "3.17.1" + } + }, + "vscode-languageserver-types": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", + "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==" + }, + "vscode-test": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", + "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + } + }, + "wrappy": { + "version": "1.0.2", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/DSL/com.larsreimann.safeds.vscode/package.json b/DSL/com.larsreimann.safeds.vscode/package.json new file mode 100644 index 000000000..fd8959e0e --- /dev/null +++ b/DSL/com.larsreimann.safeds.vscode/package.json @@ -0,0 +1,65 @@ +{ + "name": "safe-ds", + "displayName": "Safe-DS", + "description": "Statically checked Data Science programs.", + "publisher": "Lars Reimann", + "repository": { + "url": "https://github.com/lars-reimann/safe-data-science" + }, + "galleryBanner": { + "color": "#ffffff" + }, + "version": "0.0.1", + "engines": { + "vscode": "^1.67.0" + }, + "categories": [ + "Programming Languages", + "Machine Learning", + "Data Science" + ], + "contributes": { + "languages": [ + { + "id": "safe-ds", + "aliases": [ + "Safe-DS", + "safe-ds", + "SafeDS", + "safeds" + ], + "extensions": [ + ".sdsflow", + ".sdsstub", + ".sdstest" + ], + "configuration": "./language-configuration.json" + } + ], + "grammars": [ + { + "language": "safe-ds", + "scopeName": "source.safeds", + "path": "./syntaxes/safe-ds.tmLanguage.json" + } + ] + }, + "activationEvents": [ + "onLanguage:safe-ds" + ], + "main": "./dist/extension.js", + "scripts": { + "vscode:prepublish": "esbuild src/extension.ts --bundle --platform=node --external:vscode --outfile=dist/extension.js", + "vscode:package": "vsce package" + }, + "dependencies": { + "vscode-languageclient": "^8.0.1" + }, + "devDependencies": { + "@types/node": "^17.0.40", + "@types/vscode": "^1.67.0", + "esbuild": "^0.14.42", + "typescript": "^4.7.3", + "vscode-test": "^1.6.1" + } +} diff --git a/DSL/de.unibonn.simpleml.vscode/src/extension.ts b/DSL/com.larsreimann.safeds.vscode/src/extension.ts similarity index 70% rename from DSL/de.unibonn.simpleml.vscode/src/extension.ts rename to DSL/com.larsreimann.safeds.vscode/src/extension.ts index 70b0bb0c8..c86ef680b 100644 --- a/DSL/de.unibonn.simpleml.vscode/src/extension.ts +++ b/DSL/com.larsreimann.safeds.vscode/src/extension.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. * ------------------------------------------------------------------------------------------ */ -import * as os from 'os' -import * as path from 'path' -import { workspace, ExtensionContext } from 'vscode' +import * as os from 'os'; +import * as path from 'path'; +import { workspace, ExtensionContext } from 'vscode'; -import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node' +import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node'; -let client: LanguageClient +let client: LanguageClient; export const activate = (context: ExtensionContext) => { - let launcher = os.platform() === 'win32' ? 'de.unibonn.simpleml.ide.bat' : 'de.unibonn.simpleml.ide'; + let launcher = os.platform() === 'win32' ? 'com.larsreimann.safeds.ide.bat' : 'com.larsreimann.safeds.ide'; let script = context.asAbsolutePath(path.join('ls', 'bin', launcher)); const serverOptions: ServerOptions = { @@ -24,29 +24,29 @@ export const activate = (context: ExtensionContext) => { command: script, args: ['-log', 'debug', '--trace-deprecation'], }, - } + }; // Options to control the language client let clientOptions: LanguageClientOptions = { // Register the server for plain text documents - documentSelector: [{ scheme: 'file', language: 'simple-ml' }], + documentSelector: [{ scheme: 'file', language: 'safe-ds' }], synchronize: { // Notify the server about file changes to '.clientrc files contained in the workspace fileEvents: workspace.createFileSystemWatcher('**/.clientrc'), }, - outputChannelName: 'Simple-ML Language Server', - } + outputChannelName: 'Safe-DS Language Server', + }; // Create the language client and start the client. - client = new LanguageClient('simpleml', 'Simple-ML', serverOptions, clientOptions) + client = new LanguageClient('safeds', 'Safe-DS', serverOptions, clientOptions); // Start the client. This will also launch the server - client.start() + client.start(); }; export const deactivate = (): Thenable | undefined => { if (!client) { - return undefined + return undefined; } - return client.stop() + return client.stop(); }; diff --git a/DSL/de.unibonn.simpleml.vscode/syntaxes/simple-ml.tmLanguage.json b/DSL/com.larsreimann.safeds.vscode/syntaxes/safe-ds.tmLanguage.json similarity index 75% rename from DSL/de.unibonn.simpleml.vscode/syntaxes/simple-ml.tmLanguage.json rename to DSL/com.larsreimann.safeds.vscode/syntaxes/safe-ds.tmLanguage.json index 77e079c4c..32b7fa943 100644 --- a/DSL/de.unibonn.simpleml.vscode/syntaxes/simple-ml.tmLanguage.json +++ b/DSL/com.larsreimann.safeds.vscode/syntaxes/safe-ds.tmLanguage.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "name": "Simple-ML", + "name": "Safe-DS", "patterns": [ { "include": "#comment" @@ -16,12 +16,12 @@ "comment": { "patterns": [ { - "name": "comment.block.simpleml", + "name": "comment.block.safeds", "begin": "/\\*", "end": "\\*/" }, { - "name": "comment.line.double-slash.simpleml", + "name": "comment.line.double-slash.safeds", "begin": "//", "end": "(?=$)" } @@ -30,22 +30,22 @@ "keywords": { "patterns": [ { - "name": "keyword.control.simple-ml", + "name": "keyword.control.safeds", "match": "\\b(_|and|annotation|as|attr|class|enum|false|fun|import|in|internal|not|null|or|out|package|private|protocol|static|step|sub|subterm|super|true|union|val|vararg|where|workflow|yield)\\b" } ] }, "strings": { - "name": "string.quoted.double.simple-ml", + "name": "string.quoted.double.safeds", "begin": "\"", "end": "\"", "patterns": [ { - "name": "constant.character.escape.simple-ml", + "name": "constant.character.escape.safeds", "match": "\\\\." } ] } }, - "scopeName": "source.simpleml" + "scopeName": "source.safeds" } diff --git a/DSL/com.larsreimann.safeds.vscode/tsconfig.json b/DSL/com.larsreimann.safeds.vscode/tsconfig.json new file mode 100644 index 000000000..07796ad38 --- /dev/null +++ b/DSL/com.larsreimann.safeds.vscode/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es2019", + "lib": ["ES2019"], + "outDir": "out", + "rootDir": "src", + "sourceMap": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", ".vscode-test"] +} diff --git a/DSL/de.unibonn.simpleml/.gitignore b/DSL/com.larsreimann.safeds/.gitignore similarity index 65% rename from DSL/de.unibonn.simpleml/.gitignore rename to DSL/com.larsreimann.safeds/.gitignore index 5ade2c876..6424543f4 100644 --- a/DSL/de.unibonn.simpleml/.gitignore +++ b/DSL/com.larsreimann.safeds/.gitignore @@ -1,6 +1,6 @@ -/emf-gen -/META-INF -/src-gen +/META-INF/ +emf-gen/ +src-gen/ build.properties plugin.properties plugin.xml diff --git a/DSL/de.unibonn.simpleml/build.gradle.kts b/DSL/com.larsreimann.safeds/build.gradle.kts similarity index 89% rename from DSL/de.unibonn.simpleml/build.gradle.kts rename to DSL/com.larsreimann.safeds/build.gradle.kts index 9f1280eae..03f56b699 100644 --- a/DSL/de.unibonn.simpleml/build.gradle.kts +++ b/DSL/com.larsreimann.safeds/build.gradle.kts @@ -48,8 +48,8 @@ sourceSets { java.srcDirs("emf-gen", "src-gen") resources.srcDirs("src-gen") resources.include( - "**/*.smlflow", - "**/*.smlstub", + "**/*.sdsflow", + "**/*.sdsstub", "**/*.tokens", "**/*.xtextbin" ) @@ -59,12 +59,12 @@ sourceSets { // Tasks --------------------------------------------------------------------------------------------------------------- val koverExcludes = listOf( - "de.unibonn.simpleml.parser.antlr.*", - "de.unibonn.simpleml.serializer.AbstractSimpleMLSemanticSequencer", - "de.unibonn.simpleml.serializer.AbstractSimpleMLSyntacticSequencer", - "de.unibonn.simpleml.services.*", - "de.unibonn.simpleml.simpleML.*", - "de.unibonn.simpleml.testing.*" + "com.larsreimann.safeds.parser.antlr.*", + "com.larsreimann.safeds.serializer.AbstractSafeDSSemanticSequencer", + "com.larsreimann.safeds.serializer.AbstractSafeDSSyntacticSequencer", + "com.larsreimann.safeds.services.*", + "com.larsreimann.safeds.safeDS.*", + "com.larsreimann.safeds.testing.*" ) tasks { @@ -134,6 +134,6 @@ tasks.register("generateStdlibDocumentation") { dependsOn(sourceSets.main.get().runtimeClasspath) classpath = sourceSets.main.get().runtimeClasspath.filter { it.exists() } - mainClass.set("de.unibonn.simpleml.stdlibDocumentation.MainKt") + mainClass.set("com.larsreimann.safeds.stdlibDocumentation.MainKt") args = listOf(outputDirectory) } diff --git a/DSL/com.larsreimann.safeds/model/SafeDS.ecore b/DSL/com.larsreimann.safeds/model/SafeDS.ecore new file mode 100644 index 000000000..1d33f4225 --- /dev/null +++ b/DSL/com.larsreimann.safeds/model/SafeDS.ecore @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DSL/com.larsreimann.safeds/model/SafeDS.genmodel b/DSL/com.larsreimann.safeds/model/SafeDS.genmodel new file mode 100644 index 000000000..5c84786ac --- /dev/null +++ b/DSL/com.larsreimann.safeds/model/SafeDS.genmodel @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDS.xtext b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDS.xtext new file mode 100644 index 000000000..4c1be1827 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDS.xtext @@ -0,0 +1,802 @@ +grammar com.larsreimann.safeds.SafeDS hidden ( + WS, + SL_COMMENT, + ML_COMMENT, + TEST_MARKER +) +import 'http://www.eclipse.org/emf/2002/Ecore' as ecore +import 'https://larsreimann.com/safeds/SafeDS' + + + +/********************************************************************************************************************** + * Declarations + **********************************************************************************************************************/ + +// Compilations Units -------------------------------------------------------------------------------------------------- + +SdsCompilationUnit + : {SdsCompilationUnit} + =>annotationCalls+=SdsAnnotationCall* // Annotation calls before a package declaration belong to the compilation unit + ('package' name=QualifiedName)? + imports+=SdsImport* + members+=SdsCompilationUnitMember* + ; + +SdsCompilationUnitMember returns SdsAbstractAnnotatedObject + : {SdsAnnotationCallList} annotationCalls+=SdsAnnotationCall* + + ( {SdsAnnotation.annotationCallList=current} + 'annotation' name=ID + parameterList=SdsParameterList? + constraint=SdsConstraint? + + | {SdsClass.annotationCallList=current} + 'class' name=ID + typeParameterList=SdsTypeParameterList? + parameterList=SdsParameterList? + parentTypeList=SdsParentTypeList? + body=SdsClassBody? + + | {SdsEnum.annotationCallList=current} + 'enum' name=ID + body=SdsEnumBody? + + | {SdsFunction.annotationCallList=current} + 'fun' name=ID + typeParameterList=SdsTypeParameterList? + parameterList=SdsParameterList + resultList=SdsResultList? + body=SdsFunctionBody? + + | {SdsStep.annotationCallList=current} + visibility=('internal'|'private')? + 'step' name=ID + parameterList=SdsParameterList + resultList=SdsResultList? + body=SdsBlock + + | {SdsWorkflow.annotationCallList=current} + 'workflow' name=ID + body=SdsBlock + + | {SdsPredicate.annotationCallList=current} + 'predicate' name=ID + parameterList=SdsParameterList + resultList=SdsResultList? + goalList=SdsGoalList + ) + ; + +SdsImport + : 'import' importedNamespace=QualifiedNameWithWildcard alias=SdsImportAlias? + ; + +SdsImportAlias + : 'as' name=ID + ; + + +// Annotations --------------------------------------------------------------------------------------------------------- + +SdsAnnotationCall + : '@' annotation=[SdsAnnotation] argumentList=SdsAnnotationCallArgumentList? + ; + +SdsAnnotationCallArgumentList returns SdsArgumentList + : {SdsArgumentList} '(' (arguments+=SdsAnnotationCallArgument (',' arguments+=SdsAnnotationCallArgument)* ','?)? ')' + ; + +SdsAnnotationCallArgument returns SdsArgument + : (parameter=[SdsParameter] '=')? value=SdsExpression + ; + + +// Classes ------------------------------------------------------------------------------------------------------------- + +SdsParentTypeList + : 'sub' parentTypes+=SdsParentType (',' parentTypes+=SdsParentType)* ','? + ; + +SdsParentType returns SdsAbstractType + : SdsParentPrimaryType =>({SdsMemberType.receiver=current} '.' member=SdsNamedType)* + ; + +SdsParentPrimaryType returns SdsAbstractType + : SdsNamedType + | SdsParentParenthesizedType + ; + +SdsParentParenthesizedType returns SdsParenthesizedType + : '(' type=SdsParentType ')' + ; + +SdsClassBody + : {SdsClassBody} '{' members+=SdsClassMember* '}' + ; + +SdsClassMember returns SdsAbstractObject + : SdsAnnotatedClassMember + | SdsProtocol + | SdsConstraint + ; + +SdsAnnotatedClassMember returns SdsAbstractAnnotatedObject + : {SdsAnnotationCallList} annotationCalls+=SdsAnnotationCall* + + ( {SdsAttribute.annotationCallList=current} + static?='static'? + 'attr' name=ID (':' type=SdsType)? + + | {SdsClass.annotationCallList=current} + 'class' name=ID + typeParameterList=SdsTypeParameterList? + parameterList=SdsParameterList? + parentTypeList=SdsParentTypeList? + body=SdsClassBody? + + | {SdsEnum.annotationCallList=current} + 'enum' name=ID + body=SdsEnumBody? + + | {SdsFunction.annotationCallList=current} + static?='static'? + 'fun' name=ID + typeParameterList=SdsTypeParameterList? + parameterList=SdsParameterList + resultList=SdsResultList? + body=SdsFunctionBody? + ) + ; + +SdsConstraint + : 'constraint' constraintList=SdsGoalList + ; + +SdsProtocol + : 'protocol' body=SdsProtocolBody + ; + +SdsProtocolBody + : {SdsProtocolBody} + '{' + subtermList=SdsProtocolSubtermList? + term=SdsProtocolTerm? + '}' + ; + +SdsProtocolSubtermList + : subterms+=SdsProtocolSubterm+ + ; + +SdsProtocolSubterm + : 'subterm' name=ID '=' term=SdsProtocolTerm ';' + ; + +SdsProtocolTerm returns SdsAbstractProtocolTerm + : SdsProtocolAlternative + ; + +SdsProtocolAlternative returns SdsAbstractProtocolTerm + : SdsProtocolSequence + ( + {SdsProtocolAlternative.terms+=current} '|' terms+=SdsProtocolSequence + ('|' terms+=SdsProtocolSequence)* + )? + ; + +SdsProtocolSequence returns SdsAbstractProtocolTerm + : SdsProtocolQuantifiedTerm + ( + {SdsProtocolSequence.terms+=current} terms+=SdsProtocolQuantifiedTerm + (terms+=SdsProtocolQuantifiedTerm)* + )? + ; + +SdsProtocolQuantifiedTerm returns SdsAbstractProtocolTerm + : SdsProtocolPrimaryElement + ({SdsProtocolQuantifiedTerm.term=current} quantifier=SdsProtocolQuantifier)? + ; + +SdsProtocolQuantifier + : '?' + | '*' + | '+' + ; + +SdsProtocolPrimaryElement returns SdsAbstractProtocolTerm + : SdsProtocolComplement + | SdsProtocolReference + | SdsProtocolTokenClass + | SdsProtocolParenthesizedTerm + ; + +SdsProtocolComplement + : {SdsProtocolComplement} + '[' + universe=SdsProtocolTokenClass? + '^' + referenceList=SdsProtocolReferenceList? + ']' + ; + +SdsProtocolReferenceList + : references+=SdsProtocolReference+ + ; + +SdsProtocolReference + : token=[SdsAbstractProtocolToken] + ; + +SdsProtocolTokenClass + : value=SdsProtocolTokenClassValue + ; + +SdsProtocolTokenClassValue + : '.' + | '\\a' + | '\\f' + ; + +SdsProtocolParenthesizedTerm + : '(' term=SdsProtocolTerm ')' + ; + + +// Enums --------------------------------------------------------------------------------------------------------------- + +SdsEnumBody + : {SdsEnumBody} '{' variants+=SdsEnumVariant* '}' + ; + +SdsEnumVariant + : annotationCalls+=SdsAnnotationCall* + name=ID + typeParameterList=SdsTypeParameterList? + parameterList=SdsParameterList? + constraint=SdsConstraint? + ; + + +// Parameters ---------------------------------------------------------------------------------------------------------- + +SdsParameterList + : {SdsParameterList} '(' (parameters+=SdsParameter (',' parameters+=SdsParameter)* ','?)? ')' + ; + +// Used while parsing lambdas to avoid left-recursion. Can be treated like a normal parameter list. +SdsLambdaParameterList + : {SdsLambdaParameterList} '(' (parameters+=SdsParameter (',' parameters+=SdsParameter)* ','?)? ')' + ; + +SdsParameter + : annotationCalls+=SdsAnnotationCall* + variadic?='vararg'? + name=ID (':' type=SdsType)? + ('=' defaultValue=SdsExpression)? + ; + + +// Results ------------------------------------------------------------------------------------------------------------- + +SdsResultList + : {SdsResultList} '->' results+=SdsResult // If there is exactly one result we need no parentheses + | {SdsResultList} '->' '(' (results+=SdsResult (',' results+=SdsResult)* ','?)? ')' + ; + +SdsResult + : annotationCalls+=SdsAnnotationCall* + name=ID (':' type=SdsType)? + ; + +// Function ------------------------------------------------------------------------------------------------------------- + +SdsFunctionBody + : {SdsFunctionBody} '{' statements+=SdsFunctionStatement* '}' + ; + +SdsFunctionStatement returns SdsAbstractObject + : SdsConstraint + ; + +/********************************************************************************************************************** + * Statements + **********************************************************************************************************************/ + +// Functions and workflows -------------------------------------------------------------------------------------------- + +SdsBlock + : {SdsBlock} '{' statements+=SdsStatement* '}' + ; + +SdsStatement returns SdsAbstractStatement + : SdsAssignment + | SdsExpressionStatement + ; + +SdsAssignment + : assigneeList=SdsAssigneeList '=' expression=SdsExpression ';' + ; + +SdsAssigneeList + : assignees+=SdsAssignee (',' assignees+=SdsAssignee)* ','? + ; + +SdsAssignee returns SdsAbstractAssignee + : {SdsPlaceholder} 'val' name=ID + | {SdsWildcard} '_' + | {SdsYield} 'yield' result=[SdsResult] + ; + +SdsExpressionStatement + : expression=SdsExpression ';' + ; + +/********************************************************************************************************************** + * Expressions + **********************************************************************************************************************/ + +SdsExpression returns SdsAbstractExpression + : SdsLambda + | SdsOrExpression + ; + +SdsLambda returns SdsAbstractExpression + : SdsLambdaParameterList + ( {SdsBlockLambda.parameterList=current} body=SdsBlockLambdaBlock + | {SdsExpressionLambda.parameterList=current} '->' result=SdsExpression + ) + ; + +SdsBlockLambdaBlock returns SdsBlock + : {SdsBlock} '{' statements+=SdsBlockLambdaStatement* '}' + ; + +SdsBlockLambdaStatement returns SdsAbstractStatement + : SdsBlockLambdaAssignment + | SdsExpressionStatement + ; + +SdsBlockLambdaAssignment returns SdsAssignment + : assigneeList=SdsBlockLambdaAssigneeList '=' expression=SdsExpression ';' + ; + +SdsBlockLambdaAssigneeList returns SdsAssigneeList + : assignees+=SdsBlockLambdaAssignee (',' assignees+=SdsBlockLambdaAssignee)* ','? + ; + +SdsBlockLambdaAssignee returns SdsAbstractAssignee + : {SdsWildcard} '_' + | {SdsPlaceholder} 'val' name=ID + | {SdsBlockLambdaResult} 'yield' name=ID + ; + +SdsOrExpression returns SdsAbstractExpression + : SdsAndExpression ({SdsInfixOperation.leftOperand=current} operator='or' rightOperand=SdsAndExpression)* + ; + +SdsAndExpression returns SdsAbstractExpression + : SdsNotExpression ({SdsInfixOperation.leftOperand=current} operator='and' rightOperand=SdsNotExpression)* + ; + +SdsNotExpression returns SdsAbstractExpression + : {SdsPrefixOperation} operator='not' operand=SdsNotExpression + | SdsEqualityExpression + ; + +SdsEqualityExpression returns SdsAbstractExpression + : SdsComparisonExpression ({SdsInfixOperation.leftOperand=current} operator=SdsEqualityOperator rightOperand=SdsComparisonExpression)? + ; + +SdsEqualityOperator + : '==' + | '!=' + | '===' + | '!==' + ; + +SdsComparisonExpression returns SdsAbstractExpression + : SdsAdditiveExpression ({SdsInfixOperation.leftOperand=current} operator=SdsComparisonOperator rightOperand=SdsAdditiveExpression)? + ; + +SdsComparisonOperator + : '<' + | '<=' + | '>=' + | '>' + ; + +SdsAdditiveExpression returns SdsAbstractExpression + : SdsMultiplicativeExpression ({SdsInfixOperation.leftOperand=current} operator=SdsAdditiveOperator rightOperand=SdsMultiplicativeExpression)* + ; + +SdsAdditiveOperator + : '+' + | '-' + ; + +SdsMultiplicativeExpression returns SdsAbstractExpression + : SdsElvisExpression ({SdsInfixOperation.leftOperand=current} operator=SdsMultiplicativeOperator rightOperand=SdsElvisExpression)* + ; + +SdsMultiplicativeOperator + : '*' + | '/' + ; + +SdsElvisExpression returns SdsAbstractExpression + : SdsUnaryOperation ({SdsInfixOperation.leftOperand=current} operator='?:' rightOperand=SdsUnaryOperation)* + ; + +SdsUnaryOperation returns SdsAbstractExpression + : {SdsPrefixOperation} operator='-' operand=SdsUnaryOperation + | SdsChainedExpression + ; + +SdsChainedExpression returns SdsAbstractExpression + : SdsPrimaryExpression =>( + {SdsCall.receiver=current} typeArgumentList=SdsTypeArgumentList? argumentList=SdsCallArgumentList + | {SdsIndexedAccess.receiver=current} '[' index=SdsExpression ']' + | {SdsMemberAccess.receiver=current} (nullSafe?='?')? '.' member=SdsReference + )* + ; + +SdsCallArgumentList returns SdsArgumentList + : {SdsArgumentList} '(' (arguments+=SdsCallArgument (',' arguments+=SdsCallArgument)* ','?)? ')' + ; + +SdsCallArgument returns SdsArgument + : (parameter=[SdsParameter] '=')? value=SdsExpression + ; + +SdsPrimaryExpression returns SdsAbstractExpression + : SdsLiteral + | SdsParenthesizedExpression + | SdsReference + | SdsTemplateString + ; + +SdsLiteral returns SdsAbstractLiteral + : SdsBoolean + | SdsFloat + | SdsInt + | SdsNull + | SdsString + ; + +SdsBoolean + : true?='true' + | {SdsBoolean} 'false' + ; + +SdsFloat + : value=FLOAT + ; + +SdsInt + : value=INT + ; + +SdsNull + : {SdsNull} 'null' + ; + +SdsString + : value=STRING + ; + +SdsReference + : declaration=[SdsAbstractDeclaration] + ; + +SdsParenthesizedExpression + : '(' expression=SdsExpression ')' + ; + + +// Template strings ---------------------------------------------------------------------------------------------------- + +SdsTemplateString + : expressions+=SdsTemplateStringStart expressions+=SdsExpression? + (expressions+=SdsTemplateStringInner expressions+=SdsExpression?)* + expressions+=SdsTemplateStringEnd + ; + +SdsTemplateStringStart + : value=TEMPLATE_STRING_START + ; + +SdsTemplateStringInner + : value=TEMPLATE_STRING_INNER + ; + +SdsTemplateStringEnd + : value=TEMPLATE_STRING_END + ; + + +/********************************************************************************************************************** + * Predicates + **********************************************************************************************************************/ + +SdsGoalList + : {SdsGoalList} '{' ( goals+=SdsGoal (',' goals+=SdsGoal)* )? '}' + ; + +SdsGoal returns SdsAbstractGoal + : SdsExpressionGoal + | SdsAssignmentGoal + | SdsAbstractConstraintGoal + ; + +SdsAssignmentGoal + : placeholder=SdsGoalPlaceholder "=" expression=SdsGoalExpression + ; + +SdsGoalPlaceholder + : 'val' name=ID + ; + +SdsExpressionGoal + : expression=SdsGoalExpression + ; + +SdsGoalExpression returns SdsAbstractGoalExpression + : SdsChainedGoalExpression + ; + +SdsChainedGoalExpression returns SdsAbstractGoalExpression + : SdsGoalCall + ; + +SdsGoalCall returns SdsAbstractGoalExpression + : SdsPrimaryGoalExpression ( {SdsGoalCall.receiver=current}'(' (argumentList=SdsGoalArgumentList)? ')' )? + ; + +SdsGoalArgumentList + : {SdsGoalArgumentList} arguments+=SdsGoalArgument (',' arguments+=SdsGoalArgument)* + ; + +SdsGoalArgument + : (parameter=[SdsParameter] "=")? value=SdsGoalExpression + ; + +SdsPrimaryGoalExpression returns SdsAbstractGoalExpression + : SdsGoalReference + | SdsParenthesizedGoalExpression + | SdsLiteral + ; + +SdsGoalReference + : declaration=[SdsAbstractDeclaration] + ; + +SdsParenthesizedGoalExpression + : '(' expressions+=SdsGoalExpression (',' expressions+=SdsGoalExpression)* ')' + ; + + +/********************************************************************************************************************** + * Names + **********************************************************************************************************************/ + +QualifiedName + : ID ('.' ID)* + ; + +QualifiedNameWithWildcard + : QualifiedName ('.' '*')? + ; + + + +/********************************************************************************************************************** + * Types + **********************************************************************************************************************/ + +SdsType returns SdsAbstractType + : SdsPrimaryType =>({SdsMemberType.receiver=current} '.' member=SdsNamedType)* + ; + +SdsPrimaryType returns SdsAbstractType + : SdsCallableType + | SdsNamedType + | SdsUnionType + | SdsParenthesizedType + ; + +SdsParenthesizedType + : '(' type=SdsType ')' + ; + +// Callable Types ------------------------------------------------------------------------------------------------------ + +SdsCallableType + : parameterList=SdsParameterList + resultList=SdsResultList + ; + + +// Named Types --------------------------------------------------------------------------------------------------------- + +SdsNamedType + : declaration=[SdsAbstractNamedTypeDeclaration] + typeArgumentList=SdsTypeArgumentList? + (nullable?='?')? + ; + + +// Union Types --------------------------------------------------------------------------------------------------------- + +SdsUnionType + : 'union' typeArgumentList=SdsUnionTypeArgumentList + ; + +SdsUnionTypeArgumentList returns SdsTypeArgumentList + : {SdsTypeArgumentList} ('<' (typeArguments+=SdsUnionTypeArgument (',' typeArguments+=SdsUnionTypeArgument)* ','?)? '>') + ; + +SdsUnionTypeArgument returns SdsTypeArgument + : value=SdsUnionTypeArgumentValue + ; + +SdsUnionTypeArgumentValue returns SdsAbstractTypeArgumentValue + : {SdsTypeProjection} type=SdsType + ; + + +// Generics ------------------------------------------------------------------------------------------------------------ + +SdsTypeParameterList + : {SdsTypeParameterList} ('<' (typeParameters+=SdsTypeParameter (',' typeParameters+=SdsTypeParameter)* ','?)? '>') + ; + +SdsTypeParameter + : annotationCalls+=SdsAnnotationCall* + variance=SdsTypeParameterVariance? + name=ID + ('::' kind=SdsTypeParameterKind)? + ; + +SdsTypeParameterVariance + : 'in' + | 'out' + ; + +SdsTypeParameterKind + : '$SchemaType' + | '$ExpressionType' + | '$IntType' + | '$FloatType' + | '$BooleanType' + | '$StringType' + | '$NamedType' + ; + +SdsAbstractConstraintGoal + : SdsTypeParameterConstraintGoal + ; + +SdsTypeParameterConstraintGoal + : leftOperand=[SdsTypeParameter] operator=SdsTypeParameterConstraintOperator rightOperand=SdsType + ; + +SdsTypeParameterConstraintOperator + : 'sub' + | 'super' + ; + +SdsTypeArgumentList + : {SdsTypeArgumentList} '<' (typeArguments+=SdsTypeArgument (',' typeArguments+=SdsTypeArgument)* ','?)? '>' + ; + +SdsTypeArgument + : (typeParameter=[SdsTypeParameter] '=')? value=SdsTypeArgumentValue + ; + +SdsTypeArgumentValue returns SdsAbstractTypeArgumentValue + : {SdsStarProjection} '*' + | {SdsTypeProjection} variance=SdsTypeParameterVariance? type=SdsType + ; + + + +/********************************************************************************************************************** + * Terminals + **********************************************************************************************************************/ + +terminal FLOAT returns ecore::EDouble + : DECIMAL_DIGIT+ '.' DECIMAL_DIGIT+ FLOAT_EXPONENT? + | DECIMAL_DIGIT+ FLOAT_EXPONENT + ; + +terminal fragment DECIMAL_DIGIT + : '0'..'9' + ; + +terminal fragment FLOAT_EXPONENT + : ('e'|'E') ('+'|'-')? DECIMAL_DIGIT+ + ; + +terminal ID + : IDENTIFIER + | '`' IDENTIFIER '`' + ; + +terminal fragment IDENTIFIER + : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +terminal INT returns ecore::EInt + : DECIMAL_DIGIT+ + ; + +terminal ML_COMMENT + : '/*' -> '*/' + ; + +terminal SL_COMMENT + : '//' !('\r'|'\n')* ('\r'? '\n')? + ; + +terminal STRING returns ecore::EString + : STRING_START + STRING_TEXT* + STRING_END + ; + +terminal fragment STRING_START + : STRING_DELIMITER + ; + +terminal fragment STRING_END + : '{'? STRING_DELIMITER + ; + +terminal fragment STRING_DELIMITER + : '"' + ; + +terminal fragment STRING_TEXT + : '{'? ESCAPE_SEQUENCE + | '{'? !('\\'|STRING_DELIMITER|'{') + ; + +terminal fragment ESCAPE_SEQUENCE + : '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\'|'{' */ + ; + +terminal fragment TEMPLATE_EXPRESSION_START + : '{{' + ; + +terminal fragment TEMPLATE_EXPRESSION_END + : '}}' + ; + +terminal TEMPLATE_STRING_START + : STRING_START + STRING_TEXT* + TEMPLATE_EXPRESSION_START + ; + +terminal TEMPLATE_STRING_INNER + : TEMPLATE_EXPRESSION_END + STRING_TEXT* + TEMPLATE_EXPRESSION_START + ; + +terminal TEMPLATE_STRING_END + : TEMPLATE_EXPRESSION_END + STRING_TEXT* + STRING_END + ; + +terminal TEST_MARKER + : '»' + | '«' + ; + +terminal WS + : (' '|'\t'|'\r'|'\n')+ + ; diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleMLRuntimeModule.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDSRuntimeModule.kt similarity index 58% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleMLRuntimeModule.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDSRuntimeModule.kt index b799b60f1..b507af027 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleMLRuntimeModule.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDSRuntimeModule.kt @@ -1,19 +1,19 @@ -package de.unibonn.simpleml +package com.larsreimann.safeds import com.google.inject.Binder import com.google.inject.name.Names -import de.unibonn.simpleml.conversion.SimpleMLIDValueConverter -import de.unibonn.simpleml.conversion.SimpleMLQualifiedNameValueConverter -import de.unibonn.simpleml.conversion.SimpleMLSTRINGValueConverter -import de.unibonn.simpleml.conversion.SimpleMLValueConverterService -import de.unibonn.simpleml.naming.QualifiedNameProviderInjectionTarget -import de.unibonn.simpleml.scoping.IndexExtensionsInjectionTarget -import de.unibonn.simpleml.scoping.SimpleMLImportedNamespaceAwareLocalScopeProvider -import de.unibonn.simpleml.scoping.SimpleMLResourceDescriptionStrategy -import de.unibonn.simpleml.serializer.SerializerExtensionsInjectionTarget -import de.unibonn.simpleml.serializer.SimpleMLCrossReferenceSerializer -import de.unibonn.simpleml.serializer.SimpleMLHiddenTokenSequencer -import de.unibonn.simpleml.services.SimpleMLGrammarAccess +import com.larsreimann.safeds.conversion.SafeDSIDValueConverter +import com.larsreimann.safeds.conversion.SafeDSQualifiedNameValueConverter +import com.larsreimann.safeds.conversion.SafeDSSTRINGValueConverter +import com.larsreimann.safeds.conversion.SafeDSValueConverterService +import com.larsreimann.safeds.naming.QualifiedNameProviderInjectionTarget +import com.larsreimann.safeds.scoping.IndexExtensionsInjectionTarget +import com.larsreimann.safeds.scoping.SafeDSImportedNamespaceAwareLocalScopeProvider +import com.larsreimann.safeds.scoping.SafeDSResourceDescriptionStrategy +import com.larsreimann.safeds.serializer.SafeDSCrossReferenceSerializer +import com.larsreimann.safeds.serializer.SafeDSHiddenTokenSequencer +import com.larsreimann.safeds.serializer.SerializerExtensionsInjectionTarget +import com.larsreimann.safeds.services.SafeDSGrammarAccess import org.eclipse.xtext.IGrammarAccess import org.eclipse.xtext.conversion.IValueConverterService import org.eclipse.xtext.conversion.impl.IDValueConverter @@ -29,43 +29,43 @@ import org.eclipse.xtext.serializer.tokens.ICrossReferenceSerializer * Use this class to register components to be used at runtime / without the Equinox extension registry. */ @Suppress("unused") -open class SimpleMLRuntimeModule : AbstractSimpleMLRuntimeModule() { +open class SafeDSRuntimeModule : AbstractSafeDSRuntimeModule() { fun bindICrossReferenceSerializer(): Class { - return SimpleMLCrossReferenceSerializer::class.java + return SafeDSCrossReferenceSerializer::class.java } fun bindIDefaultResourceDescriptionStrategy(): Class { - return SimpleMLResourceDescriptionStrategy::class.java + return SafeDSResourceDescriptionStrategy::class.java } override fun bindIGrammarAccess(): Class { - return SimpleMLGrammarAccess::class.java + return SafeDSGrammarAccess::class.java } fun bindIHiddenTokenSequencer(): Class { - return SimpleMLHiddenTokenSequencer::class.java + return SafeDSHiddenTokenSequencer::class.java } override fun bindIValueConverterService(): Class { - return SimpleMLValueConverterService::class.java + return SafeDSValueConverterService::class.java } fun bindIDValueConverter(): Class { - return SimpleMLIDValueConverter::class.java + return SafeDSIDValueConverter::class.java } fun bindSTRINGValueConverter(): Class { - return SimpleMLSTRINGValueConverter::class.java + return SafeDSSTRINGValueConverter::class.java } fun bindQualifiedNameValueConverter(): Class { - return SimpleMLQualifiedNameValueConverter::class.java + return SafeDSQualifiedNameValueConverter::class.java } override fun configureIScopeProviderDelegate(binder: Binder) { binder.bind(IScopeProvider::class.java) .annotatedWith(Names.named(AbstractDeclarativeScopeProvider.NAMED_DELEGATE)) - .to(SimpleMLImportedNamespaceAwareLocalScopeProvider::class.java) + .to(SafeDSImportedNamespaceAwareLocalScopeProvider::class.java) } override fun configure(binder: Binder) { diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleMLStandaloneSetup.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDSStandaloneSetup.kt similarity index 51% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleMLStandaloneSetup.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDSStandaloneSetup.kt index 2c419274c..fe90330d1 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleMLStandaloneSetup.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDSStandaloneSetup.kt @@ -1,23 +1,23 @@ -package de.unibonn.simpleml +package com.larsreimann.safeds import com.google.inject.Injector -import de.unibonn.simpleml.simpleML.SimpleMLPackage +import com.larsreimann.safeds.safeDS.SafeDSPackage import org.eclipse.emf.ecore.EPackage /** * Initialization support for running Xtext languages without Equinox extension registry. */ @Suppress("unused") -open class SimpleMLStandaloneSetup : SimpleMLStandaloneSetupGenerated() { +open class SafeDSStandaloneSetup : SafeDSStandaloneSetupGenerated() { override fun register(injector: Injector) { - EPackage.Registry.INSTANCE.putIfAbsent(SimpleMLPackage.eNS_URI, SimpleMLPackage.eINSTANCE) + EPackage.Registry.INSTANCE.putIfAbsent(SafeDSPackage.eNS_URI, SafeDSPackage.eINSTANCE) super.register(injector) } companion object { fun doSetup() { - SimpleMLStandaloneSetup().createInjectorAndDoEMFRegistration() + SafeDSStandaloneSetup().createInjectorAndDoEMFRegistration() } } } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlFileExtension.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsFileExtension.kt similarity index 74% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlFileExtension.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsFileExtension.kt index 4895f290c..c4f72d8ca 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlFileExtension.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsFileExtension.kt @@ -1,14 +1,14 @@ -package de.unibonn.simpleml.constant +package com.larsreimann.safeds.constant -import de.unibonn.simpleml.emf.OriginalFilePath +import com.larsreimann.safeds.emf.OriginalFilePath import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.resource.Resource /** - * Different file extensions associated with Simple-ML programs. The dot that separates file name and file extension is + * Different file extensions associated with Safe-DS programs. The dot that separates file name and file extension is * not included. */ -enum class SmlFileExtension(val extension: String) { +enum class SdsFileExtension(val extension: String) { /** * Marks the file as a workflow file, which can be executed by our runtime component. @@ -16,7 +16,7 @@ enum class SmlFileExtension(val extension: String) { * @see isInFlowFile * @see isFlowFile */ - Flow("smlflow"), + Flow("sdsflow"), /** * Marks the file as a stub file, which describes an external API. @@ -24,7 +24,7 @@ enum class SmlFileExtension(val extension: String) { * @see isInStubFile * @see isStubFile */ - Stub("smlstub"), + Stub("sdsstub"), /** * Marks the file as a test file, which disables some checks to simplify its use as input of test cases. This file @@ -33,7 +33,7 @@ enum class SmlFileExtension(val extension: String) { * @see isInTestFile * @see isTestFile */ - Test("smltest"); + Test("sdstest"); override fun toString(): String { return extension @@ -58,22 +58,22 @@ fun EObject.isInTestFile() = this.eResource().isTestFile() /** * Returns whether the resource represents a flow file. */ -fun Resource.isFlowFile() = this.hasExtension(SmlFileExtension.Flow) +fun Resource.isFlowFile() = this.hasExtension(SdsFileExtension.Flow) /** * Returns whether the resource represents a stub file. */ -fun Resource.isStubFile() = this.hasExtension(SmlFileExtension.Stub) +fun Resource.isStubFile() = this.hasExtension(SdsFileExtension.Stub) /** * Returns whether the resource represents a test file. */ -fun Resource.isTestFile() = this.hasExtension(SmlFileExtension.Test) +fun Resource.isTestFile() = this.hasExtension(SdsFileExtension.Test) /** * Returns whether the resource represents a file with the given extension. */ -private fun Resource.hasExtension(fileExtension: SmlFileExtension): Boolean { +private fun Resource.hasExtension(fileExtension: SdsFileExtension): Boolean { // The original file path is normally lost for dynamic tests, so it's attached as an EMF adapter this.eAdapters().filterIsInstance().firstOrNull()?.let { diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlInfixOperationOperator.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsInfixOperationOperator.kt similarity index 75% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlInfixOperationOperator.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsInfixOperationOperator.kt index ea71ff31b..babc9a950 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlInfixOperationOperator.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsInfixOperationOperator.kt @@ -1,11 +1,11 @@ -package de.unibonn.simpleml.constant +package com.larsreimann.safeds.constant -import de.unibonn.simpleml.simpleML.SmlInfixOperation +import com.larsreimann.safeds.safeDS.SdsInfixOperation /** - * The possible operators for an [SmlInfixOperation]. + * The possible operators for an [SdsInfixOperation]. */ -enum class SmlInfixOperationOperator(val operator: String) { +enum class SdsInfixOperationOperator(val operator: String) { /** * Disjunction. @@ -76,11 +76,11 @@ enum class SmlInfixOperationOperator(val operator: String) { } /** - * Returns the [SmlInfixOperationOperator] of this [SmlInfixOperation]. + * Returns the [SdsInfixOperationOperator] of this [SdsInfixOperation]. * * @throws IllegalArgumentException If the operator is unknown. */ -fun SmlInfixOperation.operator(): SmlInfixOperationOperator { - return SmlInfixOperationOperator.values().firstOrNull { it.operator == this.operator } +fun SdsInfixOperation.operator(): SdsInfixOperationOperator { + return SdsInfixOperationOperator.values().firstOrNull { it.operator == this.operator } ?: throw IllegalArgumentException("Unknown infix operator '$operator'.") } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlKind.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsKind.kt similarity index 58% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlKind.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsKind.kt index facbb2a47..d0f8e736c 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlKind.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsKind.kt @@ -1,11 +1,11 @@ -package de.unibonn.simpleml.constant +package com.larsreimann.safeds.constant -import de.unibonn.simpleml.simpleML.SmlTypeParameter +import com.larsreimann.safeds.safeDS.SdsTypeParameter /** - * The possible Kinds for an [SmlTypeParameter]. + * The possible Kinds for an [SdsTypeParameter]. */ -enum class SmlKind(val kind: String?) { +enum class SdsKind(val kind: String?) { NoKind(null), SchemaKind("\$SchemaType"), ExpressionKind("\$ExpressionType"), @@ -21,11 +21,11 @@ enum class SmlKind(val kind: String?) { } /** - * Returns the [SmlKind] of this [SmlTypeParameter]. + * Returns the [SdsKind] of this [SdsTypeParameter]. * * @throws IllegalArgumentException If the kind is unknown. */ -fun SmlTypeParameter.kind(): SmlKind { - return SmlKind.values().firstOrNull { it.kind == this.kind } +fun SdsTypeParameter.kind(): SdsKind { + return SdsKind.values().firstOrNull { it.kind == this.kind } ?: throw IllegalArgumentException("Unknown kind '$kind'.") } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsPrefixOperationOperator.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsPrefixOperationOperator.kt new file mode 100644 index 000000000..d8d77328b --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsPrefixOperationOperator.kt @@ -0,0 +1,33 @@ +package com.larsreimann.safeds.constant + +import com.larsreimann.safeds.safeDS.SdsPrefixOperation + +/** + * The possible operators for an [SdsPrefixOperation]. + */ +enum class SdsPrefixOperationOperator(val operator: String) { + + /** + * Logical negation. + */ + Not("not"), + + /** + * Arithmetic negation. + */ + Minus("-"); + + override fun toString(): String { + return operator + } +} + +/** + * Returns the [SdsPrefixOperationOperator] of this [SdsPrefixOperation]. + * + * @throws IllegalArgumentException If the operator is unknown. + */ +fun SdsPrefixOperation.operator(): SdsPrefixOperationOperator { + return SdsPrefixOperationOperator.values().firstOrNull { it.operator == this.operator } + ?: throw IllegalArgumentException("Unknown prefix operator '$operator'.") +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsProtocolQuantifiedTermQuantifier.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsProtocolQuantifiedTermQuantifier.kt new file mode 100644 index 000000000..c60864379 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsProtocolQuantifiedTermQuantifier.kt @@ -0,0 +1,26 @@ +package com.larsreimann.safeds.constant + +import com.larsreimann.safeds.safeDS.SdsProtocolQuantifiedTerm + +/** + * The possible quantifiers for an [SdsProtocolQuantifiedTerm]. + */ +enum class SdsProtocolQuantifiedTermQuantifier(val quantifier: String) { + ZeroOrOne("?"), + ZeroOrMore("*"), + OneOrMore("+"); + + override fun toString(): String { + return quantifier + } +} + +/** + * Returns the [SdsProtocolQuantifiedTermQuantifier] of this [SdsProtocolQuantifiedTerm]. + * + * @throws IllegalArgumentException If the quantifier is unknown. + */ +fun SdsProtocolQuantifiedTerm.quantifier(): SdsProtocolQuantifiedTermQuantifier { + return SdsProtocolQuantifiedTermQuantifier.values().firstOrNull { it.quantifier == this.quantifier } + ?: throw IllegalArgumentException("Unknown quantified term quantifier '$quantifier'.") +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlProtocolTokenClassValue.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsProtocolTokenClassValue.kt similarity index 55% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlProtocolTokenClassValue.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsProtocolTokenClassValue.kt index 610ce736a..19904220d 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlProtocolTokenClassValue.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsProtocolTokenClassValue.kt @@ -1,11 +1,11 @@ -package de.unibonn.simpleml.constant +package com.larsreimann.safeds.constant -import de.unibonn.simpleml.simpleML.SmlProtocolTokenClass +import com.larsreimann.safeds.safeDS.SdsProtocolTokenClass /** - * The possible values for an [SmlProtocolTokenClass]. + * The possible values for an [SdsProtocolTokenClass]. */ -enum class SmlProtocolTokenClassValue(val value: String) { +enum class SdsProtocolTokenClassValue(val value: String) { /** * Matches any attribute or function. @@ -28,11 +28,11 @@ enum class SmlProtocolTokenClassValue(val value: String) { } /** - * Returns the [SmlProtocolTokenClassValue] of this [SmlProtocolTokenClass]. + * Returns the [SdsProtocolTokenClassValue] of this [SdsProtocolTokenClass]. * * @throws IllegalArgumentException If the value is unknown. */ -fun SmlProtocolTokenClass.value(): SmlProtocolTokenClassValue { - return SmlProtocolTokenClassValue.values().firstOrNull { it.value == this.value } +fun SdsProtocolTokenClass.value(): SdsProtocolTokenClassValue { + return SdsProtocolTokenClassValue.values().firstOrNull { it.value == this.value } ?: throw IllegalArgumentException("Unknown token class value value '$value'.") } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlTypeParameterConstraintOperator.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsTypeParameterConstraintOperator.kt similarity index 62% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlTypeParameterConstraintOperator.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsTypeParameterConstraintOperator.kt index d5b3c80e0..5b6025916 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlTypeParameterConstraintOperator.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsTypeParameterConstraintOperator.kt @@ -1,11 +1,11 @@ -package de.unibonn.simpleml.constant +package com.larsreimann.safeds.constant -import de.unibonn.simpleml.simpleML.SmlTypeParameterConstraintGoal +import com.larsreimann.safeds.safeDS.SdsTypeParameterConstraintGoal /** - * The possible operators for an [SmlTypeParameterConstraintGoal]. + * The possible operators for an [SdsTypeParameterConstraintGoal]. */ -enum class SmlTypeParameterConstraintOperator(val operator: String) { +enum class SdsTypeParameterConstraintOperator(val operator: String) { /** * Left operand is a subclass of the right operand. Each class is a subclass of itself for the purpose of this @@ -25,11 +25,11 @@ enum class SmlTypeParameterConstraintOperator(val operator: String) { } /** - * Returns the [SmlTypeParameterConstraintOperator] of this [SmlTypeParameterConstraintGoal]. + * Returns the [SdsTypeParameterConstraintOperator] of this [SdsTypeParameterConstraintGoal]. * * @throws IllegalArgumentException If the operator is unknown. */ -fun SmlTypeParameterConstraintGoal.operator(): SmlTypeParameterConstraintOperator { - return SmlTypeParameterConstraintOperator.values().firstOrNull { it.operator == this.operator } +fun SdsTypeParameterConstraintGoal.operator(): SdsTypeParameterConstraintOperator { + return SdsTypeParameterConstraintOperator.values().firstOrNull { it.operator == this.operator } ?: throw IllegalArgumentException("Unknown type parameter constraint operator '$operator'.") } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlVariance.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsVariance.kt similarity index 78% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlVariance.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsVariance.kt index acd7b69ff..3e3e8fd99 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlVariance.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsVariance.kt @@ -1,12 +1,12 @@ -package de.unibonn.simpleml.constant +package com.larsreimann.safeds.constant -import de.unibonn.simpleml.simpleML.SmlTypeParameter -import de.unibonn.simpleml.simpleML.SmlTypeProjection +import com.larsreimann.safeds.safeDS.SdsTypeParameter +import com.larsreimann.safeds.safeDS.SdsTypeProjection /** - * The possible variances for an [SmlTypeParameter] or [SmlTypeProjection]. + * The possible variances for an [SdsTypeParameter] or [SdsTypeProjection]. */ -enum class SmlVariance(val variance: String?) { +enum class SdsVariance(val variance: String?) { /** * A complex type `G` is invariant if it is neither covariant nor contravariant. @@ -48,21 +48,21 @@ enum class SmlVariance(val variance: String?) { } /** - * Returns the [SmlVariance] of this [SmlTypeParameter]. + * Returns the [SdsVariance] of this [SdsTypeParameter]. * * @throws IllegalArgumentException If the variance is unknown. */ -fun SmlTypeParameter.variance(): SmlVariance { - return SmlVariance.values().firstOrNull { it.variance == this.variance } +fun SdsTypeParameter.variance(): SdsVariance { + return SdsVariance.values().firstOrNull { it.variance == this.variance } ?: throw IllegalArgumentException("Unknown variance '$variance'.") } /** - * Returns the [SmlVariance] of this [SmlTypeProjection]. + * Returns the [SdsVariance] of this [SdsTypeProjection]. * * @throws IllegalArgumentException If the variance is unknown. */ -fun SmlTypeProjection.variance(): SmlVariance { - return SmlVariance.values().firstOrNull { it.variance == this.variance } +fun SdsTypeProjection.variance(): SdsVariance { + return SdsVariance.values().firstOrNull { it.variance == this.variance } ?: throw IllegalArgumentException("Unknown variance '$variance'.") } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsVisibility.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsVisibility.kt new file mode 100644 index 000000000..583ac37ca --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant/SdsVisibility.kt @@ -0,0 +1,38 @@ +package com.larsreimann.safeds.constant + +import com.larsreimann.safeds.safeDS.SdsStep + +/** + * The possible visibilities of an [SdsStep]. + */ +enum class SdsVisibility(val visibility: String?) { + + /** + * The [SdsStep] is visible everywhere. + */ + Public(null), + + /** + * The [SdsStep] is only visible in the same package. + */ + Internal("internal"), + + /** + * The [SdsStep] is only visible in the same file. + */ + Private("private"); + + override fun toString(): String { + return name + } +} + +/** + * Returns the [SdsVisibility] of this [SdsStep]. + * + * @throws IllegalArgumentException If the visibility is unknown. + */ +fun SdsStep.visibility(): SdsVisibility { + return SdsVisibility.values().firstOrNull { it.visibility == this.visibility } + ?: throw IllegalArgumentException("Unknown visibility '$visibility'.") +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/AbstractSimpleMLStringValueConverter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/AbstractSafeDSStringValueConverter.kt similarity index 98% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/AbstractSimpleMLStringValueConverter.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/AbstractSafeDSStringValueConverter.kt index ae14fda84..a6449964f 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/AbstractSimpleMLStringValueConverter.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/AbstractSafeDSStringValueConverter.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Singleton import org.eclipse.xtext.conversion.ValueConverterException @@ -13,7 +13,7 @@ import org.eclipse.xtext.nodemodel.INode * Example: The string `"myString \{"` in a DSL program has the value `myString {`. */ @Singleton -abstract class AbstractSimpleMLStringValueConverter( +abstract class AbstractSafeDSStringValueConverter( private val startDelimiter: String, private val endDelimiter: String ) : STRINGValueConverter() { diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLIDValueConverter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSIDValueConverter.kt similarity index 94% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLIDValueConverter.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSIDValueConverter.kt index 17089bf7c..39ad6d577 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLIDValueConverter.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSIDValueConverter.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Singleton import org.eclipse.xtext.GrammarUtil @@ -15,7 +15,7 @@ import org.eclipse.xtext.nodemodel.INode * converter. See the Eclipse forum for more information: [https://www.eclipse.org/forums/index.php/t/1088504/]. */ @Singleton -class SimpleMLIDValueConverter : IDValueConverter() { +class SafeDSIDValueConverter : IDValueConverter() { /** * Syntax of valid identifiers. diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLQualifiedNameValueConverter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSQualifiedNameValueConverter.kt similarity index 50% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLQualifiedNameValueConverter.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSQualifiedNameValueConverter.kt index d9958ccd4..3e6457d0e 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLQualifiedNameValueConverter.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSQualifiedNameValueConverter.kt @@ -1,7 +1,7 @@ -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Singleton import org.eclipse.xtext.conversion.impl.QualifiedNameValueConverter @Singleton -class SimpleMLQualifiedNameValueConverter : QualifiedNameValueConverter() +class SafeDSQualifiedNameValueConverter : QualifiedNameValueConverter() diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLSTRINGValueConverter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSSTRINGValueConverter.kt similarity index 69% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLSTRINGValueConverter.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSSTRINGValueConverter.kt index 53157f907..f97ae6cca 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLSTRINGValueConverter.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSSTRINGValueConverter.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Singleton @@ -9,4 +9,4 @@ import com.google.inject.Singleton * Example: The string `"myString \{"` in a DSL program has the value `myString {`. */ @Singleton -class SimpleMLSTRINGValueConverter : AbstractSimpleMLStringValueConverter("\"", "\"") +class SafeDSSTRINGValueConverter : AbstractSafeDSStringValueConverter("\"", "\"") diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_ENDValueConverter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_ENDValueConverter.kt similarity index 70% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_ENDValueConverter.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_ENDValueConverter.kt index a122fccdc..323cb2d2b 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_ENDValueConverter.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_ENDValueConverter.kt @@ -1,6 +1,6 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Singleton @@ -11,4 +11,4 @@ import com.google.inject.Singleton * Example: The template string end `}}end"` in a DSL program has the value `end`. */ @Singleton -class SimpleMLTEMPLATE_STRING_ENDValueConverter : AbstractSimpleMLStringValueConverter("}}", "\"") +class SafeDSTEMPLATE_STRING_ENDValueConverter : AbstractSafeDSStringValueConverter("}}", "\"") diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_INNERValueConverter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_INNERValueConverter.kt similarity index 71% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_INNERValueConverter.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_INNERValueConverter.kt index 720b21319..fbe997bdc 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_INNERValueConverter.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_INNERValueConverter.kt @@ -1,6 +1,6 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Singleton @@ -11,4 +11,4 @@ import com.google.inject.Singleton * Example: The template string inner part `}}inner{{` in a DSL program has the value `inner`. */ @Singleton -class SimpleMLTEMPLATE_STRING_INNERValueConverter : AbstractSimpleMLStringValueConverter("}}", "{{") +class SafeDSTEMPLATE_STRING_INNERValueConverter : AbstractSafeDSStringValueConverter("}}", "{{") diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_STARTValueConverter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_STARTValueConverter.kt similarity index 70% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_STARTValueConverter.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_STARTValueConverter.kt index 130cc4695..84fdbad6d 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_STARTValueConverter.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_STARTValueConverter.kt @@ -1,6 +1,6 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Singleton @@ -11,4 +11,4 @@ import com.google.inject.Singleton * Example: The template string start `"start{{` in a DSL program has the value `start`. */ @Singleton -class SimpleMLTEMPLATE_STRING_STARTValueConverter : AbstractSimpleMLStringValueConverter("\"", "{{") +class SafeDSTEMPLATE_STRING_STARTValueConverter : AbstractSafeDSStringValueConverter("\"", "{{") diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLValueConverterService.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSValueConverterService.kt similarity index 80% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLValueConverterService.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSValueConverterService.kt index 8b8a41e77..06c82b0f9 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion/SimpleMLValueConverterService.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion/SafeDSValueConverterService.kt @@ -1,6 +1,6 @@ @file:Suppress("FunctionName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Inject import com.google.inject.Singleton @@ -16,7 +16,7 @@ import org.eclipse.xtext.conversion.impl.STRINGValueConverter * Converters for ID, INT, and STRING. */ @Singleton -open class SimpleMLValueConverterService : AbstractDeclarativeValueConverterService() { +open class SafeDSValueConverterService : AbstractDeclarativeValueConverterService() { @Inject private lateinit var idValueConverter: IDValueConverter @@ -39,19 +39,19 @@ open class SimpleMLValueConverterService : AbstractDeclarativeValueConverterServ fun STRING() = stringValueConverter @Inject - private lateinit var templateStringStartValueConverter: SimpleMLTEMPLATE_STRING_STARTValueConverter + private lateinit var templateStringStartValueConverter: SafeDSTEMPLATE_STRING_STARTValueConverter @ValueConverter(rule = "TEMPLATE_STRING_START") fun TEMPLATE_STRING_START() = templateStringStartValueConverter @Inject - private lateinit var templateStringInnerValueConverter: SimpleMLTEMPLATE_STRING_INNERValueConverter + private lateinit var templateStringInnerValueConverter: SafeDSTEMPLATE_STRING_INNERValueConverter @ValueConverter(rule = "TEMPLATE_STRING_INNER") fun TEMPLATE_STRING_INNER() = templateStringInnerValueConverter @Inject - private lateinit var templateStringEndValueConverter: SimpleMLTEMPLATE_STRING_ENDValueConverter + private lateinit var templateStringEndValueConverter: SafeDSTEMPLATE_STRING_ENDValueConverter @ValueConverter(rule = "TEMPLATE_STRING_END") fun TEMPLATE_STRING_END() = templateStringEndValueConverter diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/Creators.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/Creators.kt new file mode 100644 index 000000000..09315aa6b --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/Creators.kt @@ -0,0 +1,1599 @@ +@file:Suppress("unused") + +package com.larsreimann.safeds.emf + +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.constant.SdsInfixOperationOperator +import com.larsreimann.safeds.constant.SdsKind +import com.larsreimann.safeds.constant.SdsPrefixOperationOperator +import com.larsreimann.safeds.constant.SdsProtocolQuantifiedTermQuantifier +import com.larsreimann.safeds.constant.SdsProtocolTokenClassValue +import com.larsreimann.safeds.constant.SdsTypeParameterConstraintOperator +import com.larsreimann.safeds.constant.SdsVariance +import com.larsreimann.safeds.constant.SdsVisibility +import com.larsreimann.safeds.safeDS.SafeDSFactory +import com.larsreimann.safeds.safeDS.SdsAbstractAssignee +import com.larsreimann.safeds.safeDS.SdsAbstractClassMember +import com.larsreimann.safeds.safeDS.SdsAbstractCompilationUnitMember +import com.larsreimann.safeds.safeDS.SdsAbstractConstraintGoal +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsAbstractGoal +import com.larsreimann.safeds.safeDS.SdsAbstractGoalExpression +import com.larsreimann.safeds.safeDS.SdsAbstractLambda +import com.larsreimann.safeds.safeDS.SdsAbstractNamedTypeDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractObject +import com.larsreimann.safeds.safeDS.SdsAbstractProtocolTerm +import com.larsreimann.safeds.safeDS.SdsAbstractProtocolToken +import com.larsreimann.safeds.safeDS.SdsAbstractStatement +import com.larsreimann.safeds.safeDS.SdsAbstractType +import com.larsreimann.safeds.safeDS.SdsAbstractTypeArgumentValue +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsAnnotationCallList +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsArgumentList +import com.larsreimann.safeds.safeDS.SdsAssigneeList +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsAssignmentGoal +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsBlock +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsBoolean +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCallableType +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsConstraint +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionGoal +import com.larsreimann.safeds.safeDS.SdsExpressionLambda +import com.larsreimann.safeds.safeDS.SdsExpressionStatement +import com.larsreimann.safeds.safeDS.SdsFloat +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsGoalArgument +import com.larsreimann.safeds.safeDS.SdsGoalArgumentList +import com.larsreimann.safeds.safeDS.SdsGoalCall +import com.larsreimann.safeds.safeDS.SdsGoalList +import com.larsreimann.safeds.safeDS.SdsGoalReference +import com.larsreimann.safeds.safeDS.SdsImport +import com.larsreimann.safeds.safeDS.SdsImportAlias +import com.larsreimann.safeds.safeDS.SdsIndexedAccess +import com.larsreimann.safeds.safeDS.SdsInfixOperation +import com.larsreimann.safeds.safeDS.SdsInt +import com.larsreimann.safeds.safeDS.SdsLambdaParameterList +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsMemberType +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsNull +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsParameterList +import com.larsreimann.safeds.safeDS.SdsParentTypeList +import com.larsreimann.safeds.safeDS.SdsParenthesizedExpression +import com.larsreimann.safeds.safeDS.SdsParenthesizedGoalExpression +import com.larsreimann.safeds.safeDS.SdsParenthesizedType +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsPredicate +import com.larsreimann.safeds.safeDS.SdsPrefixOperation +import com.larsreimann.safeds.safeDS.SdsProtocol +import com.larsreimann.safeds.safeDS.SdsProtocolAlternative +import com.larsreimann.safeds.safeDS.SdsProtocolComplement +import com.larsreimann.safeds.safeDS.SdsProtocolParenthesizedTerm +import com.larsreimann.safeds.safeDS.SdsProtocolQuantifiedTerm +import com.larsreimann.safeds.safeDS.SdsProtocolReference +import com.larsreimann.safeds.safeDS.SdsProtocolReferenceList +import com.larsreimann.safeds.safeDS.SdsProtocolSequence +import com.larsreimann.safeds.safeDS.SdsProtocolSubterm +import com.larsreimann.safeds.safeDS.SdsProtocolTokenClass +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsResultList +import com.larsreimann.safeds.safeDS.SdsStarProjection +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsString +import com.larsreimann.safeds.safeDS.SdsTemplateString +import com.larsreimann.safeds.safeDS.SdsTypeArgument +import com.larsreimann.safeds.safeDS.SdsTypeArgumentList +import com.larsreimann.safeds.safeDS.SdsTypeParameter +import com.larsreimann.safeds.safeDS.SdsTypeParameterConstraintGoal +import com.larsreimann.safeds.safeDS.SdsTypeParameterList +import com.larsreimann.safeds.safeDS.SdsTypeProjection +import com.larsreimann.safeds.safeDS.SdsUnionType +import com.larsreimann.safeds.safeDS.SdsWildcard +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.utils.nullIfEmptyElse +import org.eclipse.emf.common.util.URI +import org.eclipse.emf.ecore.resource.Resource +import org.eclipse.xtext.resource.XtextResource +import kotlin.math.absoluteValue + +private val factory = SafeDSFactory.eINSTANCE + +/** + * Returns a new [Resource]. + * + * This can be useful to serialize EObjects that were initialized with the creators in this file rather than generated + * by the parser, since serialization requires EObjects to be contained in a resource. + */ +fun createSdsDummyResource( + fileName: String, + fileExtension: SdsFileExtension, + compilationUnit: SdsCompilationUnit +): Resource { + val uri = URI.createURI("dummy:/$fileName.${fileExtension.extension}") + return XtextResource(uri).apply { + this.contents += compilationUnit + } +} + +/** + * Returns a new [Resource]. + * + * This can be useful to serialize EObjects that were initialized with the creators in this file rather than generated + * by the parser, since serialization requires EObjects to be contained in a resource. + */ +fun createSdsDummyResource( + fileName: String, + fileExtension: SdsFileExtension, + packageName: String, + init: SdsCompilationUnit.() -> Unit = {} +): Resource { + val uri = URI.createURI("dummy:/$fileName.${fileExtension.extension}") + return XtextResource(uri).apply { + this.contents += createSdsCompilationUnit( + packageName = packageName, + init = init + ) + } +} + +/** + * Returns a new object of class [SdsAnnotation]. + */ +fun createSdsAnnotation( + name: String, + annotationCalls: List = emptyList(), + parameters: List = emptyList() +): SdsAnnotation { + return factory.createSdsAnnotation().apply { + this.name = name + this.annotationCallList = createSdsAnnotationCallList(annotationCalls) + this.parameterList = parameters.nullIfEmptyElse(::createSdsParameterList) + } +} + +/** + * Adds a new object of class [SdsAnnotation] to the receiver. + */ +fun SdsCompilationUnit.sdsAnnotation( + name: String, + annotationCalls: List = emptyList(), + parameters: List = emptyList() +) { + this.addMember(createSdsAnnotation(name, annotationCalls, parameters)) +} + +/** + * Returns a new object of class [SdsAnnotationCall]. + */ +fun createSdsAnnotationCall( + annotation: SdsAnnotation, + arguments: List = emptyList() +): SdsAnnotationCall { + return factory.createSdsAnnotationCall().apply { + this.annotation = annotation + this.argumentList = arguments.nullIfEmptyElse(::createSdsArgumentList) + } +} + +/** + * Returns a new object of class [SdsAnnotationCall] that points to an annotation with the given name. + */ +fun createSdsAnnotationCall( + annotationName: String, + arguments: List = emptyList() +): SdsAnnotationCall { + return createSdsAnnotationCall( + createSdsAnnotation(annotationName), + arguments + ) +} + +/** + * Returns a new object of class [SdsAnnotationCallList]. + */ +private fun createSdsAnnotationCallList(annotationCalls: List): SdsAnnotationCallList { + return factory.createSdsAnnotationCallList().apply { + this.annotationCalls += annotationCalls + } +} + +/** + * Returns a new object of class [SdsArgument]. + */ +fun createSdsArgument(value: SdsAbstractExpression, parameter: SdsParameter? = null): SdsArgument { + return factory.createSdsArgument().apply { + this.value = value + this.parameter = parameter + } +} + +/** + * Returns a new object of class [SdsArgument] that points to a parameter with the given name. + */ +fun createSdsArgument(value: SdsAbstractExpression, parameterName: String): SdsArgument { + return createSdsArgument( + value, + createSdsParameter(parameterName) + ) +} + +/** + * Returns a new object of class [SdsArgumentList]. + */ +fun createSdsArgumentList(arguments: List): SdsArgumentList { + return factory.createSdsArgumentList().apply { + this.arguments += arguments + } +} + +/** + * Returns a new object of class [SdsAssigneeList]. + */ +fun createSdsAssigneeList(assignees: List): SdsAssigneeList { + return factory.createSdsAssigneeList().apply { + this.assignees += assignees + } +} + +/** + * Returns a new object of class [SdsAssignment]. + * + * @throws IllegalArgumentException If no assignees are passed. + */ +fun createSdsAssignment(assignees: List, expression: SdsAbstractExpression): SdsAssignment { + if (assignees.isEmpty()) { + throw IllegalArgumentException("Must have at least one assignee.") + } + + return factory.createSdsAssignment().apply { + this.assigneeList = createSdsAssigneeList(assignees) + this.expression = expression + } +} + +/** + * Adds a new object of class [SdsAssignment] to the receiver. + */ +fun SdsBlockLambda.sdsAssignment(assignees: List, expression: SdsAbstractExpression) { + this.addStatement(createSdsAssignment(assignees, expression)) +} + +/** + * Adds a new object of class [SdsAssignment] to the receiver. + */ +fun SdsWorkflow.sdsAssignment(assignees: List, expression: SdsAbstractExpression) { + this.addStatement(createSdsAssignment(assignees, expression)) +} + +/** + * Adds a new object of class [SdsAssignment] to the receiver. + */ +fun SdsStep.sdsAssignment(assignees: List, expression: SdsAbstractExpression) { + this.addStatement(createSdsAssignment(assignees, expression)) +} + +/** + * Returns a new object of class [SdsAssignmentGoal]. + */ +fun createSdsAssignmentGoal(placeholderName: String, expression: SdsAbstractGoalExpression): SdsAssignmentGoal { + return factory.createSdsAssignmentGoal().apply { + this.placeholder = factory.createSdsGoalPlaceholder().apply { + this.name = placeholderName + } + this.expression = expression + } +} + +/** + * Adds a new object of class [SdsAssignmentGoal] to the receiver. + */ +fun SdsPredicate.sdsAssignmentGoal(placeholderName: String, expression: SdsAbstractGoalExpression) { + this.addGoal(createSdsAssignmentGoal(placeholderName, expression)) +} + +/** + * Returns a new object of class [SdsAttribute]. + */ +fun createSdsAttribute( + name: String, + annotationCalls: List = emptyList(), + isStatic: Boolean = false, + type: SdsAbstractType? = null +): SdsAttribute { + return factory.createSdsAttribute().apply { + this.name = name + this.annotationCallList = createSdsAnnotationCallList(annotationCalls) + this.isStatic = isStatic + this.type = type + } +} + +/** + * Adds a new object of class [SdsAttribute] to the receiver. + */ +fun SdsClass.sdsAttribute( + name: String, + annotationCalls: List = emptyList(), + isStatic: Boolean = false, + type: SdsAbstractType? = null +) { + this.addMember(createSdsAttribute(name, annotationCalls, isStatic, type)) +} + +/** + * Returns a new object of class [SdsBlock]. + */ +fun createSdsBlock( + statements: List = emptyList(), + init: SdsBlock.() -> Unit = {} +): SdsBlock { + return factory.createSdsBlock().apply { + this.statements += statements + this.init() + } +} + +/** + * Returns a new object of class [SdsBlockLambda]. + */ +fun createSdsBlockLambda( + parameters: List = emptyList(), + statements: List = emptyList(), + init: SdsBlockLambda.() -> Unit = {} +): SdsBlockLambda { + return factory.createSdsBlockLambda().apply { + this.parameterList = createSdsLambdaParameterList(parameters) + this.body = factory.createSdsBlock() + statements.forEach { addStatement(it) } + this.init() + } +} + +/** + * Adds a new statement to the receiver. + */ +private fun SdsBlockLambda.addStatement(statement: SdsAbstractStatement) { + if (this.body == null) { + this.body = factory.createSdsBlock() + } + + this.body.statements += statement +} + +/** + * Returns a new object of class [SdsBlockLambdaResult]. + */ +fun createSdsBlockLambdaResult(name: String): SdsBlockLambdaResult { + return factory.createSdsBlockLambdaResult().apply { + this.name = name + } +} + +/** + * Returns a new object of class [SdsBoolean]. + */ +fun createSdsBoolean(value: Boolean): SdsBoolean { + return factory.createSdsBoolean().apply { + this.isTrue = value + } +} + +/** + * Returns a new object of class [SdsCall]. + */ +fun createSdsCall( + receiver: SdsAbstractExpression, + typeArguments: List = emptyList(), + arguments: List = emptyList() +): SdsCall { + return factory.createSdsCall().apply { + this.receiver = receiver + this.typeArgumentList = typeArguments.nullIfEmptyElse(::createSdsTypeArgumentList) + this.argumentList = createSdsArgumentList(arguments) + } +} + +/** + * Returns a new object of class [SdsCallableType]. + */ +fun createSdsCallableType(parameters: List, results: List): SdsCallableType { + return factory.createSdsCallableType().apply { + this.parameterList = createSdsParameterList(parameters) + this.resultList = createSdsResultList(results) + } +} + +/** + * Returns a new object of class [SdsClass]. + */ +fun createSdsClass( + name: String, + annotationCalls: List = emptyList(), + typeParameters: List = emptyList(), + parameters: List? = null, // null and emptyList() are semantically different + parentTypes: List = emptyList(), + constraint: SdsConstraint? = null, + protocol: SdsProtocol? = null, + members: List = emptyList(), + init: SdsClass.() -> Unit = {} +): SdsClass { + return factory.createSdsClass().apply { + this.name = name + this.annotationCallList = createSdsAnnotationCallList(annotationCalls) + this.typeParameterList = typeParameters.nullIfEmptyElse(::createSdsTypeParameterList) + this.parameterList = parameters?.let { createSdsParameterList(it) } + this.parentTypeList = parentTypes.nullIfEmptyElse(::createSdsParentTypeList) + protocol?.let { addMember(it) } + constraint?.let { addMember(it) } + members.forEach { addMember(it) } + this.init() + } +} + +/** + * Adds a new object of class [SdsClass] to the receiver. + */ +fun SdsClass.sdsClass( + name: String, + annotationCalls: List = emptyList(), + typeParameters: List = emptyList(), + parameters: List? = null, + parentTypes: List = emptyList(), + constraint: SdsConstraint? = null, + protocol: SdsProtocol? = null, + members: List = emptyList(), + init: SdsClass.() -> Unit = {} +) { + this.addMember( + createSdsClass( + name, + annotationCalls, + typeParameters, + parameters, + parentTypes, + constraint, + protocol, + members, + init + ) + ) +} + +/** + * Adds a new object of class [SdsClass] to the receiver. + */ +fun SdsCompilationUnit.sdsClass( + name: String, + annotationCalls: List = emptyList(), + typeParameters: List = emptyList(), + parameters: List? = null, + parentTypes: List = emptyList(), + constraint: SdsConstraint? = null, + protocol: SdsProtocol? = null, + members: List = emptyList(), + init: SdsClass.() -> Unit = {} +) { + this.addMember( + createSdsClass( + name, + annotationCalls, + typeParameters, + parameters, + parentTypes, + constraint, + protocol, + members, + init + ) + ) +} + +/** + * Adds a new member to the receiver. + */ +private fun SdsClass.addMember(member: SdsAbstractObject) { + if (this.body == null) { + this.body = factory.createSdsClassBody() + } + + this.body.members += member +} + +/** + * Returns a new object of class [SdsCompilationUnit]. + */ +fun createSdsCompilationUnit( + packageName: String, + annotationCalls: List = emptyList(), + imports: List = emptyList(), + members: List = emptyList(), + init: SdsCompilationUnit.() -> Unit = {} +): SdsCompilationUnit { + return factory.createSdsCompilationUnit().apply { + this.name = packageName + this.annotationCalls += annotationCalls + this.imports += imports + members.forEach { addMember(it) } + init() + } +} + +/** + * Adds a new member to the receiver. + */ +private fun SdsCompilationUnit.addMember(member: SdsAbstractCompilationUnitMember) { + this.members += member +} + +/** + * Returns a new object of class [SdsConstraint]. + */ +fun createSdsConstraint(goals: List): SdsConstraint { + return factory.createSdsConstraint().apply { + this.constraintList = createSdsGoalList(goals) + } +} + +/** + * Returns a new object of class [SdsEnum]. + */ +fun createSdsEnum( + name: String, + annotationCalls: List = emptyList(), + variants: List = emptyList(), + init: SdsEnum.() -> Unit = {} +): SdsEnum { + return factory.createSdsEnum().apply { + this.name = name + this.annotationCallList = createSdsAnnotationCallList(annotationCalls) + variants.forEach { addVariant(it) } + this.init() + } +} + +/** + * Adds a new object of class [SdsEnum] to the receiver. + */ +fun SdsClass.sdsEnum( + name: String, + annotationCalls: List = emptyList(), + variants: List = emptyList(), + init: SdsEnum.() -> Unit = {} +) { + this.addMember(createSdsEnum(name, annotationCalls, variants, init)) +} + +/** + * Adds a new object of class [SdsEnum] to the receiver. + */ +fun SdsCompilationUnit.sdsEnum( + name: String, + annotationCalls: List = emptyList(), + variants: List = emptyList(), + init: SdsEnum.() -> Unit = {} +) { + this.addMember(createSdsEnum(name, annotationCalls, variants, init)) +} + +/** + * Adds a new variant to the receiver. + */ +private fun SdsEnum.addVariant(variant: SdsEnumVariant) { + if (this.body == null) { + this.body = factory.createSdsEnumBody() + } + + this.body.variants += variant +} + +/** + * Returns a new object of class [SdsEnumVariant]. + */ +fun createSdsEnumVariant( + name: String, + annotationCalls: List = emptyList(), + typeParameters: List = emptyList(), + parameters: List = emptyList(), + constraint: SdsConstraint? = null, +): SdsEnumVariant { + return factory.createSdsEnumVariant().apply { + this.name = name + this.annotationCalls += annotationCalls + this.typeParameterList = typeParameters.nullIfEmptyElse(::createSdsTypeParameterList) + this.parameterList = parameters.nullIfEmptyElse(::createSdsParameterList) + this.constraint = constraint + } +} + +/** + * Adds a new object of class [SdsEnumVariant] to the receiver. + */ +fun SdsEnum.sdsEnumVariant( + name: String, + annotationCalls: List = emptyList(), + typeParameters: List = emptyList(), + parameters: List = emptyList(), + constraint: SdsConstraint? = null +) { + this.addVariant(createSdsEnumVariant(name, annotationCalls, typeParameters, parameters, constraint)) +} + +/** + * Returns a new object of class [SdsExpressionGoal]. + */ +fun createSdsExpressionGoal(expression: SdsAbstractGoalExpression): SdsExpressionGoal { + return factory.createSdsExpressionGoal().apply { + this.expression = expression + } +} + +/** + * Adds a new object of class [SdsExpressionGoal] to the receiver. + */ +fun SdsPredicate.sdsExpressionGoal(expression: SdsAbstractGoalExpression) { + this.addGoal(createSdsExpressionGoal(expression)) +} + +/** + * Returns a new object of class [SdsExpressionLambda]. + */ +fun createSdsExpressionLambda( + parameters: List = emptyList(), + result: SdsAbstractExpression +): SdsExpressionLambda { + return factory.createSdsExpressionLambda().apply { + this.parameterList = createSdsLambdaParameterList(parameters) + this.result = result + } +} + +/** + * Returns a new object of class [SdsExpressionStatement]. + */ +fun createSdsExpressionStatement(expression: SdsAbstractExpression): SdsExpressionStatement { + return factory.createSdsExpressionStatement().apply { + this.expression = expression + } +} + +/** + * Adds a new object of class [SdsExpressionStatement] to the receiver. + */ +fun SdsBlockLambda.sdsExpressionStatement(expression: SdsAbstractExpression) { + this.addStatement(createSdsExpressionStatement(expression)) +} + +/** + * Adds a new object of class [SdsExpressionStatement] to the receiver. + */ +fun SdsWorkflow.sdsExpressionStatement(expression: SdsAbstractExpression) { + this.addStatement(createSdsExpressionStatement(expression)) +} + +/** + * Adds a new object of class [SdsExpressionStatement] to the receiver. + */ +fun SdsStep.sdsExpressionStatement(expression: SdsAbstractExpression) { + this.addStatement(createSdsExpressionStatement(expression)) +} + +/** + * Returns a new object of class [SdsFloat] if the value is non-negative. Otherwise, the absolute value will be wrapped + * in a [SdsPrefixOperation] to negate it. + */ +fun createSdsFloat(value: Double): SdsAbstractExpression { + val float = factory.createSdsFloat().apply { + this.value = value.absoluteValue + } + + return when { + value < 0 -> createSdsPrefixOperation(SdsPrefixOperationOperator.Minus, float) + else -> float + } +} + +/** + * Returns a new object of class [SdsFunction]. + */ +fun createSdsFunction( + name: String, + annotationCalls: List = emptyList(), + isStatic: Boolean = false, + typeParameters: List = emptyList(), + parameters: List = emptyList(), + results: List = emptyList(), + constraint: SdsConstraint? = null +): SdsFunction { + return factory.createSdsFunction().apply { + this.name = name + this.annotationCallList = createSdsAnnotationCallList(annotationCalls) + this.isStatic = isStatic + this.typeParameterList = typeParameters.nullIfEmptyElse(::createSdsTypeParameterList) + this.parameterList = createSdsParameterList(parameters) + this.resultList = results.nullIfEmptyElse(::createSdsResultList) + constraint?.let { addStatement(it) } + } +} + +/** + * Adds a new statement to the receiver. + */ +private fun SdsFunction.addStatement(statement: SdsAbstractObject) { + if (this.body == null) { + this.body = factory.createSdsFunctionBody() + } + + this.body.statements += statement +} + +/** + * Adds a new object of class [SdsFunction] to the receiver. + */ +fun SdsClass.sdsFunction( + name: String, + annotationCalls: List = emptyList(), + isStatic: Boolean = false, + typeParameters: List = emptyList(), + parameters: List = emptyList(), + results: List = emptyList(), + constraint: SdsConstraint? = null +) { + this.addMember( + createSdsFunction( + name, + annotationCalls, + isStatic, + typeParameters, + parameters, + results, + constraint + ) + ) +} + +/** + * Adds a new object of class [SdsFunction] to the receiver. + */ +fun SdsCompilationUnit.sdsFunction( + name: String, + annotationCalls: List = emptyList(), + isStatic: Boolean = false, + typeParameters: List = emptyList(), + parameters: List = emptyList(), + results: List = emptyList(), + constraint: SdsConstraint? = null +) { + this.addMember( + createSdsFunction( + name, + annotationCalls, + isStatic, + typeParameters, + parameters, + results, + constraint + ) + ) +} + +/** + * Returns a new object of class [SdsGoalArgument]. + */ +fun createSdsGoalArgument(value: SdsAbstractGoalExpression, parameter: SdsParameter? = null): SdsGoalArgument { + return factory.createSdsGoalArgument().apply { + this.value = value + this.parameter = parameter + } +} + +/** + * Returns a new object of class [SdsGoalArgument] that points to a parameter with the given name. + */ +fun createSdsGoalArgument(value: SdsAbstractGoalExpression, parameterName: String): SdsGoalArgument { + return createSdsGoalArgument( + value, + createSdsParameter(parameterName) + ) +} + +/** + * Returns a new object of class [SdsGoalArgumentList]. + */ +fun createSdsGoalArgumentList(arguments: List): SdsGoalArgumentList { + return factory.createSdsGoalArgumentList().apply { + this.arguments += arguments + } +} + +/** + * Returns a new object of class [SdsGoalCall]. + */ +fun createSdsGoalCall( + receiver: SdsAbstractGoalExpression, + arguments: List +): SdsGoalCall { + return factory.createSdsGoalCall().apply { + this.receiver = receiver + this.argumentList = createSdsGoalArgumentList(arguments) + } +} + +/** + * Returns a new object of class [SdsGoalList]. + */ +fun createSdsGoalList(goals: List): SdsGoalList { + return factory.createSdsGoalList().apply { + this.goals += goals + } +} + +/** + * Returns a new object of class [SdsImport]. + */ +fun createSdsImport(importedNamespace: String, alias: String? = null): SdsImport { + return factory.createSdsImport().apply { + this.importedNamespace = importedNamespace + this.alias = createSdsImportAlias(alias) + } +} + +/** + * Returns a new object of class [SdsGoalReference]. + */ +fun createSdsGoalReference(declaration: SdsAbstractDeclaration): SdsGoalReference { + return factory.createSdsGoalReference().apply { + this.declaration = declaration + } +} + +/** + * Returns a new object of class [SdsImportAlias] or `null` if the parameter is `null`. + */ +private fun createSdsImportAlias(name: String?): SdsImportAlias? { + if (name == null) { + return null + } + + return factory.createSdsImportAlias().apply { + this.name = name + } +} + +/** + * Returns a new object of class [SdsIndexedAccess]. + */ +fun createSdsIndexedAccess( + index: SdsAbstractExpression +): SdsIndexedAccess { + return factory.createSdsIndexedAccess().apply { + this.index = index + } +} + +/** + * Returns a new object of class [SdsInfixOperation]. + */ +fun createSdsInfixOperation( + leftOperand: SdsAbstractExpression, + operator: SdsInfixOperationOperator, + rightOperand: SdsAbstractExpression +): SdsInfixOperation { + return factory.createSdsInfixOperation().apply { + this.leftOperand = leftOperand + this.operator = operator.operator + this.rightOperand = rightOperand + } +} + +/** + * Returns a new object of class [SdsInt] if the value is non-negative. Otherwise, the absolute value will be wrapped in + * a [SdsPrefixOperation] to negate it. + */ +fun createSdsInt(value: Int): SdsAbstractExpression { + val int = factory.createSdsInt().apply { + this.value = value.absoluteValue + } + + return when { + value < 0 -> createSdsPrefixOperation(SdsPrefixOperationOperator.Minus, int) + else -> int + } +} + +/** + * Returns a new object of class [SdsMemberAccess]. + */ +fun createSdsMemberAccess( + receiver: SdsAbstractExpression, + member: SdsReference, + isNullSafe: Boolean = false +): SdsMemberAccess { + return factory.createSdsMemberAccess().apply { + this.receiver = receiver + this.member = member + this.isNullSafe = isNullSafe + } +} + +/** + * Returns a new object of class [SdsMemberType]. + */ +fun createSdsMemberType(receiver: SdsAbstractType, member: SdsNamedType): SdsMemberType { + return factory.createSdsMemberType().apply { + this.receiver = receiver + this.member = member + } +} + +/** + * Returns a new object of class [SdsNamedType]. + */ +fun createSdsNamedType( + declaration: SdsAbstractNamedTypeDeclaration, + typeArguments: List = emptyList(), + isNullable: Boolean = false +): SdsNamedType { + return factory.createSdsNamedType().apply { + this.declaration = declaration + this.typeArgumentList = typeArguments.nullIfEmptyElse(::createSdsTypeArgumentList) + this.isNullable = isNullable + } +} + +/** + * Returns a new object of class [SdsNull]. + */ +fun createSdsNull(): SdsNull { + return factory.createSdsNull() +} + +/** + * Returns a new object of class [SdsParameter]. + */ +fun createSdsParameter( + name: String, + annotationCalls: List = emptyList(), + isVariadic: Boolean = false, + type: SdsAbstractType? = null, + defaultValue: SdsAbstractExpression? = null +): SdsParameter { + return factory.createSdsParameter().apply { + this.name = name + this.annotationCalls += annotationCalls + this.isVariadic = isVariadic + this.type = type + this.defaultValue = defaultValue + } +} + +/** + * Returns a new object of class [SdsParameterList]. + */ +fun createSdsParameterList(parameters: List): SdsParameterList { + return factory.createSdsParameterList().apply { + this.parameters += parameters + } +} + +/** + * Returns a new object of class [SdsLambdaParameterList]. These have to be used as parameter lists of an + * [SdsAbstractLambda] + */ +@Suppress("FunctionName") +fun createSdsLambdaParameterList(parameters: List): SdsLambdaParameterList { + return factory.createSdsLambdaParameterList().apply { + this.parameters += parameters + } +} + +/** + * Returns a new object of class [SdsParenthesizedExpression]. + */ +fun createSdsParenthesizedExpression(expression: SdsAbstractExpression): SdsParenthesizedExpression { + return factory.createSdsParenthesizedExpression().apply { + this.expression = expression + } +} + +/** + * Returns a new object of class [SdsParenthesizedGoalExpression]. + */ +fun createSdsParenthesizedGoalExpression(expressions: List): SdsParenthesizedGoalExpression { + return factory.createSdsParenthesizedGoalExpression().apply { + this.expressions += expressions + } +} + +/** + * Returns a new object of class [SdsParenthesizedType]. + */ +fun createSdsParenthesizedType(type: SdsAbstractType): SdsParenthesizedType { + return factory.createSdsParenthesizedType().apply { + this.type = type + } +} + +/** + * Returns a new object of class [SdsParentTypeList]. + */ +fun createSdsParentTypeList(parentTypes: List): SdsParentTypeList { + return factory.createSdsParentTypeList().apply { + this.parentTypes += parentTypes + } +} + +/** + * Returns a new object of class [SdsPlaceholder]. + */ +fun createSdsPlaceholder(name: String): SdsPlaceholder { + return factory.createSdsPlaceholder().apply { + this.name = name + } +} + +/** + * Returns a new object of class [SdsPredicate]. + */ +fun createSdsPredicate( + name: String, + annotationCalls: List = emptyList(), + parameters: List = emptyList(), + results: List = emptyList(), + goals: List = emptyList(), +): SdsPredicate { + return factory.createSdsPredicate().apply { + this.name = name + this.annotationCallList = createSdsAnnotationCallList(annotationCalls) + this.parameterList = createSdsParameterList(parameters) + this.resultList = results.nullIfEmptyElse(::createSdsResultList) + goals.forEach { addGoal(it) } + } +} + +/** + * Adds a new object of class [SdsPredicate] to the receiver. + */ +fun SdsCompilationUnit.sdsPredicate( + name: String, + annotationCalls: List = emptyList(), + parameters: List = emptyList(), + results: List = emptyList(), + goals: List = emptyList(), +) { + this.addMember( + createSdsPredicate( + name, + annotationCalls, + parameters, + results, + goals + ) + ) +} + +/** + * Adds a new goal to the receiver. + */ +private fun SdsPredicate.addGoal(goal: SdsAbstractGoal) { + if (this.goalList == null) { + this.goalList = factory.createSdsGoalList() + } + + this.goalList.goals += goal +} + +/** + * Returns a new object of class [SdsPrefixOperation]. + */ +fun createSdsPrefixOperation(operator: SdsPrefixOperationOperator, operand: SdsAbstractExpression): SdsPrefixOperation { + return factory.createSdsPrefixOperation().apply { + this.operator = operator.operator + this.operand = operand + } +} + +/** + * Returns a new object of class [SdsProtocol]. + */ +fun createSdsProtocol( + subterms: List = emptyList(), + term: SdsAbstractProtocolTerm? = null, + init: SdsProtocol.() -> Unit = {} +): SdsProtocol { + return factory.createSdsProtocol().apply { + this.body = factory.createSdsProtocolBody() + subterms.forEach { addSubterm(it) } + this.body.term = term + this.init() + } +} + +/** + * Adds a new object of class [SdsProtocol] to the receiver. + */ +fun SdsClass.sdsProtocol( + subterms: List = emptyList(), + term: SdsAbstractProtocolTerm? = null, + init: SdsProtocol.() -> Unit = {} +) { + this.addMember(createSdsProtocol(subterms, term, init)) +} + +/** + * Adds a new subterm to the receiver. + */ +private fun SdsProtocol.addSubterm(subterm: SdsProtocolSubterm) { + if (this.body == null) { + this.body = factory.createSdsProtocolBody() + } + + if (this.body.subtermList == null) { + this.body.subtermList = factory.createSdsProtocolSubtermList() + } + + this.body.subtermList.subterms += subterm +} + +/** + * Returns a new object of class [SdsProtocolAlternative]. + */ +fun createSdsProtocolAlternative(terms: List): SdsProtocolAlternative { + if (terms.size < 2) { + throw IllegalArgumentException("Must have at least two terms.") + } + + return factory.createSdsProtocolAlternative().apply { + this.terms += terms + } +} + +/** + * Returns a new object of class [SdsProtocolComplement]. + */ +fun createSdsProtocolComplement( + universe: SdsProtocolTokenClass? = null, + references: List = emptyList() +): SdsProtocolComplement { + return factory.createSdsProtocolComplement().apply { + this.universe = universe + this.referenceList = references.nullIfEmptyElse(::createSdsProtocolReferenceList) + } +} + +/** + * Returns a new object of class [SdsProtocolParenthesizedTerm]. + */ +fun createSdsProtocolParenthesizedTerm(term: SdsAbstractProtocolTerm): SdsProtocolParenthesizedTerm { + return factory.createSdsProtocolParenthesizedTerm().apply { + this.term = term + } +} + +/** + * Returns a new object of class [SdsProtocolQuantifiedTerm]. + */ +fun createSdsProtocolQuantifiedTerm( + term: SdsAbstractProtocolTerm, + quantifier: SdsProtocolQuantifiedTermQuantifier +): SdsProtocolQuantifiedTerm { + return factory.createSdsProtocolQuantifiedTerm().apply { + this.term = term + this.quantifier = quantifier.quantifier + } +} + +/** + * Returns a new object of class [SdsProtocolReference]. + */ +fun createSdsProtocolReference(token: SdsAbstractProtocolToken): SdsProtocolReference { + return factory.createSdsProtocolReference().apply { + this.token = token + } +} + +/** + * Returns a new object of class [SdsProtocolReferenceList]. + */ +fun createSdsProtocolReferenceList(references: List): SdsProtocolReferenceList { + return factory.createSdsProtocolReferenceList().apply { + this.references += references + } +} + +/** + * Returns a new object of class [SdsProtocolSequence]. + * + * @throws IllegalArgumentException If `terms.size < 2`. + */ +fun createSdsProtocolSequence(terms: List): SdsProtocolSequence { + if (terms.size < 2) { + throw IllegalArgumentException("Must have at least two terms.") + } + + return factory.createSdsProtocolSequence().apply { + this.terms += terms + } +} + +/** + * Returns a new object of class [SdsProtocolSubterm]. + */ +fun createSdsProtocolSubterm(name: String, term: SdsAbstractProtocolTerm): SdsProtocolSubterm { + return factory.createSdsProtocolSubterm().apply { + this.name = name + this.term = term + } +} + +/** + * Returns a new object of class [SdsProtocolSubterm]. + */ +fun SdsProtocol.sdsProtocolSubterm(name: String, term: SdsAbstractProtocolTerm) { + this.addSubterm(createSdsProtocolSubterm(name, term)) +} + +/** + * Returns a new object of class [SdsProtocolTokenClass]. + */ +fun createSdsProtocolTokenClass(value: SdsProtocolTokenClassValue): SdsProtocolTokenClass { + return factory.createSdsProtocolTokenClass().apply { + this.value = value.value + } +} + +/** + * Returns a new object of class [SdsReference]. + */ +fun createSdsReference(declaration: SdsAbstractDeclaration): SdsReference { + return factory.createSdsReference().apply { + this.declaration = declaration + } +} + +/** + * Returns a new object of class [SdsResult]. + */ +fun createSdsResult( + name: String, + annotationCalls: List = emptyList(), + type: SdsAbstractType? = null +): SdsResult { + return factory.createSdsResult().apply { + this.name = name + this.annotationCalls += annotationCalls + this.type = type + } +} + +/** + * Returns a new object of class [SdsResultList]. + */ +fun createSdsResultList(results: List): SdsResultList { + return factory.createSdsResultList().apply { + this.results += results + } +} + +/** + * Returns a new object of class [SdsStarProjection]. + */ +fun createSdsStarProjection(): SdsStarProjection { + return factory.createSdsStarProjection() +} + +/** + * Returns a new object of class [SdsStep]. + */ +fun createSdsStep( + name: String, + annotationCalls: List = emptyList(), + visibility: SdsVisibility = SdsVisibility.Public, + parameters: List = emptyList(), + results: List = emptyList(), + statements: List = emptyList(), + init: SdsStep.() -> Unit = {} +): SdsStep { + return factory.createSdsStep().apply { + this.name = name + this.annotationCallList = createSdsAnnotationCallList(annotationCalls) + this.visibility = visibility.visibility + this.parameterList = createSdsParameterList(parameters) + this.resultList = results.nullIfEmptyElse(::createSdsResultList) + this.body = factory.createSdsBlock() + statements.forEach { addStatement(it) } + this.init() + } +} + +/** + * Adds a new object of class [SdsStep] to the receiver. + */ +fun SdsCompilationUnit.sdsStep( + name: String, + annotationCalls: List = emptyList(), + visibility: SdsVisibility = SdsVisibility.Public, + parameters: List = emptyList(), + results: List = emptyList(), + statements: List = emptyList(), + init: SdsStep.() -> Unit = {} +) { + this.addMember( + createSdsStep( + name, + annotationCalls, + visibility, + parameters, + results, + statements, + init + ) + ) +} + +/** + * Adds a new statement to the receiver. + */ +private fun SdsStep.addStatement(statement: SdsAbstractStatement) { + if (this.body == null) { + this.body = factory.createSdsBlock() + } + + this.body.statements += statement +} + +/** + * Returns a new object of class [SdsString]. + */ +fun createSdsString(value: String): SdsString { + return factory.createSdsString().apply { + this.value = value + } +} + +/** + * Returns a new object of class [SdsTemplateString]. String parts should not include delimiters (`"`, `{{`, `}}`). + * Template expressions are inserted between the string parts. + * + * @throws IllegalArgumentException If `stringParts.size < 2`. + * @throws IllegalArgumentException If `templateExpressions` is empty. + * @throws IllegalArgumentException If `stringsParts.size` != `templateExpressions.size + 1`. + */ +fun createSdsTemplateString( + stringParts: List, + templateExpressions: List +): SdsTemplateString { + + // One of the first two checks is sufficient but this allows better error messages. + if (stringParts.size < 2) { + throw IllegalArgumentException("Must have at least two string parts.") + } else if (templateExpressions.isEmpty()) { + throw IllegalArgumentException("Must have at least one template expression.") + } else if (stringParts.size != templateExpressions.size + 1) { + throw IllegalArgumentException("Must have exactly one more string part than there are template expressions.") + } + + return factory.createSdsTemplateString().apply { + stringParts.forEachIndexed { index, value -> + + // Next template string part + this.expressions += when (index) { + 0 -> { + factory.createSdsTemplateStringStart().apply { + this.value = value + } + } + stringParts.size - 1 -> { + factory.createSdsTemplateStringEnd().apply { + this.value = value + } + } + else -> { + factory.createSdsTemplateStringInner().apply { + this.value = value + } + } + } + + // Next template expression + if (index < templateExpressions.size) { + this.expressions += templateExpressions[index] + } + } + + this.expressions += expressions + } +} + +/** + * Returns a new object of class [SdsTypeArgument]. + */ +fun createSdsTypeArgument( + value: SdsAbstractTypeArgumentValue, + typeParameter: SdsTypeParameter? = null +): SdsTypeArgument { + return factory.createSdsTypeArgument().apply { + this.value = value + this.typeParameter = typeParameter + } +} + +/** + * Returns a new object of class [SdsTypeArgument] that points to a type parameter with the given name. + */ +fun createSdsTypeArgument( + value: SdsAbstractTypeArgumentValue, + typeParameterName: String +): SdsTypeArgument { + return createSdsTypeArgument( + value, + createSdsTypeParameter(typeParameterName) + ) +} + +/** + * Returns a new object of class [SdsTypeArgumentList]. + */ +fun createSdsTypeArgumentList(typeArguments: List): SdsTypeArgumentList { + return factory.createSdsTypeArgumentList().apply { + this.typeArguments += typeArguments + } +} + +/** + * Returns a new object of class [SdsTypeParameter]. + */ +fun createSdsTypeParameter( + name: String, + annotationCalls: List = emptyList(), + variance: SdsVariance = SdsVariance.Invariant, + kind: SdsKind = SdsKind.NoKind +): SdsTypeParameter { + return factory.createSdsTypeParameter().apply { + this.name = name + this.annotationCalls += annotationCalls + this.variance = variance.variance + this.kind = kind.kind + } +} + +/** + * Returns a new object of class [SdsTypeParameterList]. + */ +fun createSdsTypeParameterList(typeParameters: List): SdsTypeParameterList { + return factory.createSdsTypeParameterList().apply { + this.typeParameters += typeParameters + } +} + +/** + * Returns a new object of class [SdsTypeParameterConstraintGoal]. + */ +fun createSdsTypeParameterConstraintGoal( + leftOperand: SdsTypeParameter, + operator: SdsTypeParameterConstraintOperator, + rightOperand: SdsAbstractType +): SdsTypeParameterConstraintGoal { + return factory.createSdsTypeParameterConstraintGoal().apply { + this.leftOperand = leftOperand + this.operator = operator.operator + this.rightOperand = rightOperand + } +} + +/** + * Returns a new object of class [SdsTypeParameterConstraintGoal] that points to a type parameter with the given name. + */ +fun createSdsTypeParameterConstraintGoal( + leftOperandName: String, + operator: SdsTypeParameterConstraintOperator, + rightOperand: SdsAbstractType +): SdsTypeParameterConstraintGoal { + return createSdsTypeParameterConstraintGoal( + createSdsTypeParameter(leftOperandName), + operator, + rightOperand + ) +} + +/** + * Returns a new object of class [SdsTypeProjection]. + */ +fun createSdsTypeProjection(type: SdsAbstractType, variance: SdsVariance = SdsVariance.Invariant): SdsTypeProjection { + return factory.createSdsTypeProjection().apply { + this.type = type + this.variance = variance.variance + } +} + +/** + * Returns a new object of class [SdsUnionType]. + * + * @throws IllegalArgumentException If no type arguments are passed. + */ +fun createSdsUnionType(typeArguments: List): SdsUnionType { + if (typeArguments.isEmpty()) { + throw IllegalArgumentException("Must have at least one type argument.") + } + + return factory.createSdsUnionType().apply { + this.typeArgumentList = createSdsTypeArgumentList(typeArguments) + } +} + +/** + * Returns a new object of class [SdsWildcard]. + */ +fun createSdsWildcard(): SdsWildcard { + return factory.createSdsWildcard() +} + +/** + * Returns a new object of class [SdsWorkflow]. + */ +fun createSdsWorkflow( + name: String, + annotationCalls: List = emptyList(), + statements: List = emptyList(), + init: SdsWorkflow.() -> Unit = {} +): SdsWorkflow { + return factory.createSdsWorkflow().apply { + this.name = name + this.annotationCallList = createSdsAnnotationCallList(annotationCalls) + this.body = factory.createSdsBlock() + statements.forEach { addStatement(it) } + this.init() + } +} + +/** + * Adds a new object of class [SdsWorkflow] to the receiver. + */ +fun SdsCompilationUnit.sdsWorkflow( + name: String, + annotationCalls: List = emptyList(), + statements: List = emptyList(), + init: SdsWorkflow.() -> Unit = {} +) { + this.addMember(createSdsWorkflow(name, annotationCalls, statements, init)) +} + +/** + * Adds a new statement to the receiver. + */ +private fun SdsWorkflow.addStatement(statement: SdsAbstractStatement) { + if (this.body == null) { + this.body = factory.createSdsBlock() + } + + this.body.statements += statement +} + +/** + * Returns a new object of class [SdsYield]. + */ +fun createSdsYield(result: SdsResult): SdsYield { + return factory.createSdsYield().apply { + this.result = result + } +} + +/** + * Returns a new object of class [SdsYield] that points to a result with the given name. + */ +fun createSdsYield(resultName: String): SdsYield { + return createSdsYield(createSdsResult(resultName)) +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/OriginalFilePath.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/OriginalFilePath.kt similarity index 68% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/OriginalFilePath.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/OriginalFilePath.kt index 3c969eedc..9dd8b6680 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/OriginalFilePath.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/OriginalFilePath.kt @@ -1,8 +1,8 @@ -package de.unibonn.simpleml.emf +package com.larsreimann.safeds.emf import org.eclipse.emf.common.notify.impl.AdapterImpl /** - * Stores the original file path. This is necessary since synthetic resources always have the `smlflow` extension. + * Stores the original file path. This is necessary since synthetic resources always have the `sdsflow` extension. */ class OriginalFilePath(val path: String) : AdapterImpl() diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/SimpleShortcuts.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/SimpleShortcuts.kt new file mode 100644 index 000000000..67cce8b7f --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/SimpleShortcuts.kt @@ -0,0 +1,491 @@ +@file:Suppress("unused") + +/** + * Contains shortcuts that simplify working with the EMF model. Since most of these are very straightforward, unit tests + * are usually not required. + */ + +package com.larsreimann.safeds.emf + +import com.larsreimann.safeds.safeDS.SdsAbstractAssignee +import com.larsreimann.safeds.safeDS.SdsAbstractCallable +import com.larsreimann.safeds.safeDS.SdsAbstractClassMember +import com.larsreimann.safeds.safeDS.SdsAbstractCompilationUnitMember +import com.larsreimann.safeds.safeDS.SdsAbstractConstraintGoal +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractGoal +import com.larsreimann.safeds.safeDS.SdsAbstractLambda +import com.larsreimann.safeds.safeDS.SdsAbstractLocalVariable +import com.larsreimann.safeds.safeDS.SdsAbstractObject +import com.larsreimann.safeds.safeDS.SdsAbstractProtocolTerm +import com.larsreimann.safeds.safeDS.SdsAbstractStatement +import com.larsreimann.safeds.safeDS.SdsAbstractType +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsAnnotationCallList +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCallableType +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsClassBody +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsConstraint +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionLambda +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsFunctionBody +import com.larsreimann.safeds.safeDS.SdsImport +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsPredicate +import com.larsreimann.safeds.safeDS.SdsProtocol +import com.larsreimann.safeds.safeDS.SdsProtocolBody +import com.larsreimann.safeds.safeDS.SdsProtocolComplement +import com.larsreimann.safeds.safeDS.SdsProtocolReference +import com.larsreimann.safeds.safeDS.SdsProtocolSubterm +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsTypeArgument +import com.larsreimann.safeds.safeDS.SdsTypeParameter +import com.larsreimann.safeds.safeDS.SdsUnionType +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.utils.uniqueOrNull +import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.ecore.resource.Resource +import org.eclipse.emf.ecore.resource.ResourceSet +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract + +/* ******************************************************************************************************************** + * Accessing descendants * + * ********************************************************************************************************************/ + +// EObject ----------------------------------------------------------------------------------------- + +fun EObject.resourceSetOrNull(): ResourceSet? { + return eResource()?.resourceSet +} + +// Resource ---------------------------------------------------------------------------------------- + +fun Resource.compilationUnitOrNull(): SdsCompilationUnit? { + return this.allContents + ?.asSequence() + ?.filterIsInstance() + ?.firstOrNull() +} + +// SdsAbstractCallable ----------------------------------------------------------------------------- + +fun SdsAbstractCallable?.parametersOrEmpty(): List { + return this?.parameterList?.parameters.orEmpty() +} + +/** + * Returns all calls that are actually executed immediately when this [SdsAbstractCallable] is called. + */ +fun SdsAbstractCallable.immediateCalls(): List { + return descendants { it is SdsAbstractLambda }.toList() +} + +// SdsAbstractDeclaration -------------------------------------------------------------------------- + +fun SdsAbstractDeclaration?.annotationCallsOrEmpty(): List { + return this?.annotationCallList?.annotationCalls ?: this?.annotationCalls.orEmpty() +} + +// SdsAnnotation ----------------------------------------------------------------------------------- + +fun SdsAnnotation?.constraintsOrEmpty(): List { + return this?.constraint?.constraintList?.goals.orEmpty() +} + +// SdsAnnotationCall ------------------------------------------------------------------------------- + +fun SdsAnnotationCall?.argumentsOrEmpty(): List { + return this?.argumentList?.arguments.orEmpty() +} + +// SdsAssignment ----------------------------------------------------------------------------------- + +fun SdsAssignment?.assigneesOrEmpty(): List { + return this?.assigneeList?.assignees + ?.filterIsInstance() + .orEmpty() +} + +fun SdsAssignment?.blockLambdaResultsOrEmpty(): List { + return this.assigneesOrEmpty().filterIsInstance() +} + +fun SdsAssignment?.placeholdersOrEmpty(): List { + return this.assigneesOrEmpty().filterIsInstance() +} + +fun SdsAssignment?.yieldsOrEmpty(): List { + return this.assigneesOrEmpty().filterIsInstance() +} + +// SdsBlockLambda ---------------------------------------------------------------------------------- + +fun SdsBlockLambda?.blockLambdaResultsOrEmpty(): List { + return this.statementsOrEmpty() + .filterIsInstance() + .flatMap { it.blockLambdaResultsOrEmpty() } +} + +fun SdsBlockLambda?.localVariablesOrEmpty(): List { + return this.parametersOrEmpty() + this.placeholdersOrEmpty() +} + +fun SdsBlockLambda?.placeholdersOrEmpty(): List { + return this.statementsOrEmpty() + .filterIsInstance() + .flatMap { it.placeholdersOrEmpty() } +} + +fun SdsBlockLambda?.statementsOrEmpty(): List { + return this?.body?.statements.orEmpty() +} + +// SdsCall ----------------------------------------------------------------------------------------- + +fun SdsCall?.argumentsOrEmpty(): List { + return this?.argumentList?.arguments.orEmpty() +} + +fun SdsCall?.typeArgumentsOrEmpty(): List { + return this?.typeArgumentList?.typeArguments.orEmpty() +} + +// SdsCallableType --------------------------------------------------------------------------------- + +fun SdsCallableType?.resultsOrEmpty(): List { + return this?.resultList?.results.orEmpty() +} + +// SdsClass ---------------------------------------------------------------------------------------- + +fun SdsClass?.typeParametersOrEmpty(): List { + return this?.typeParameterList?.typeParameters.orEmpty() +} + +fun SdsClass?.parentTypesOrEmpty(): List { + return this?.parentTypeList?.parentTypes.orEmpty() +} + +fun SdsClass?.constraintsOrEmpty(): List { + return this?.body?.members + ?.filterIsInstance() + .orEmpty() +} + +fun SdsClass?.objectsInBodyOrEmpty(): List { + return this?.body?.members.orEmpty() +} + +fun SdsClass?.classMembersOrEmpty(): List { + return this?.body?.members + ?.filterIsInstance() + .orEmpty() +} + +fun SdsClass?.protocolsOrEmpty(): List { + return this?.body?.members + ?.filterIsInstance() + .orEmpty() +} + +fun SdsClass.uniqueProtocolOrNull(): SdsProtocol? { + return this.protocolsOrEmpty().uniqueOrNull() +} + +// SdsCompilationUnit ------------------------------------------------------------------------------ + +fun SdsCompilationUnit?.compilationUnitMembersOrEmpty(): List { + return this?.members + ?.filterIsInstance() + .orEmpty() +} + +// SdsEnum ----------------------------------------------------------------------------------------- + +fun SdsEnum?.variantsOrEmpty(): List { + return this?.body?.variants.orEmpty() +} + +// SdsEnumVariant ---------------------------------------------------------------------------------- + +fun SdsEnumVariant?.typeParametersOrEmpty(): List { + return this?.typeParameterList?.typeParameters.orEmpty() +} + +fun SdsEnumVariant?.constraintsOrEmpty(): List { + return this?.constraint?.constraintList?.goals.orEmpty() +} + +// SdsFunction ------------------------------------------------------------------------------------- + +fun SdsFunction?.resultsOrEmpty(): List { + return this?.resultList?.results.orEmpty() +} + +fun SdsFunction?.typeParametersOrEmpty(): List { + return this?.typeParameterList?.typeParameters.orEmpty() +} + +fun SdsFunction?.constraintsOrEmpty(): List { + return this?.body?.statements + ?.filterIsInstance() + .orEmpty() +} + +// SdsImport --------------------------------------------------------------------------------------- + +fun SdsImport.aliasNameOrNull(): String? { + return this.alias?.name +} + +fun SdsImport.importedNameOrNull(): String? { + return when (alias) { + null -> when { + isQualified() -> importedNamespace.split(".").last() + else -> null + } + else -> aliasNameOrNull() + } +} + +// SdsNamedType ------------------------------------------------------------------------------------ + +fun SdsNamedType?.typeArgumentsOrEmpty(): List { + return this?.typeArgumentList?.typeArguments.orEmpty() +} + +// SdsPredicate ------------------------------------------------------------------------------------- + +fun SdsPredicate?.goalsOrEmpty(): List { + return this?.goalList?.goals.orEmpty() +} + +// SdsProtocol ------------------------------------------------------------------------------------- + +fun SdsProtocol?.subtermsOrEmpty(): List { + return this?.body.subtermsOrEmpty() +} + +fun SdsProtocol.termOrNull(): SdsAbstractProtocolTerm? { + return this.body?.term +} + +// SdsProtocolBody --------------------------------------------------------------------------------- + +fun SdsProtocolBody?.subtermsOrEmpty(): List { + return this?.subtermList?.subterms.orEmpty() +} + +// SdsProtocolComplement --------------------------------------------------------------------------- + +fun SdsProtocolComplement?.referencesOrEmpty(): List { + return this?.referenceList?.references.orEmpty() +} + +// SdsUnionType ------------------------------------------------------------------------------------ + +fun SdsUnionType?.typeArgumentsOrEmpty(): List { + return this?.typeArgumentList?.typeArguments.orEmpty() +} + +// SdsWorkflow ------------------------------------------------------------------------------------- + +fun SdsWorkflow?.placeholdersOrEmpty(): List { + return this.statementsOrEmpty() + .filterIsInstance() + .flatMap { it.placeholdersOrEmpty() } +} + +fun SdsWorkflow?.statementsOrEmpty(): List { + return this?.body?.statements.orEmpty() +} + +// SdsWorkflowStep --------------------------------------------------------------------------------- + +fun SdsStep?.localVariablesOrEmpty(): List { + return this.parametersOrEmpty() + this.placeholdersOrEmpty() +} + +fun SdsStep?.placeholdersOrEmpty(): List { + return this.statementsOrEmpty() + .filterIsInstance() + .flatMap { it.placeholdersOrEmpty() } +} + +fun SdsStep?.resultsOrEmpty(): List { + return this?.resultList?.results.orEmpty() +} + +fun SdsStep?.statementsOrEmpty(): List { + return this?.body?.statements.orEmpty() +} + +fun SdsStep?.yieldsOrEmpty(): List { + return this.statementsOrEmpty() + .filterIsInstance() + .flatMap { it.yieldsOrEmpty() } +} + +/* ******************************************************************************************************************** + * Accessing ancestors * + * ********************************************************************************************************************/ + +fun EObject.containingBlockLambdaOrNull() = this.closestAncestorOrNull() +fun EObject.containingCallableOrNull() = this.closestAncestorOrNull() +fun EObject.containingClassOrNull() = this.closestAncestorOrNull() +fun EObject.containingCompilationUnitOrNull() = this.closestAncestorOrNull() +fun EObject.containingDeclarationOrNull() = this.closestAncestorOrNull() +fun EObject.containingEnumOrNull() = this.closestAncestorOrNull() +fun EObject.containingExpressionLambdaOrNull() = this.closestAncestorOrNull() +fun EObject.containingFunctionOrNull() = this.closestAncestorOrNull() +fun EObject.containingProtocolOrNull() = this.closestAncestorOrNull() +fun EObject.containingStepOrNull() = this.closestAncestorOrNull() +fun EObject.containingWorkflowOrNull() = this.closestAncestorOrNull() + +fun SdsAnnotationCall.targetOrNull(): SdsAbstractDeclaration? { + return when (val declaration = this.containingDeclarationOrNull() ?: return null) { + is SdsAnnotationCallList -> declaration.containingDeclarationOrNull() + else -> declaration + } +} + +/* ******************************************************************************************************************** + * Accessing siblings * + * ********************************************************************************************************************/ + +fun SdsConstraint.typeParametersOrNull(): List? { + return when (val parent = this.eContainer()) { + is SdsClassBody -> { + val parentClass: EObject = parent.eContainer() + if (parentClass is SdsClass) { + parentClass.typeParametersOrEmpty() + } else { + null + } + } + is SdsEnumVariant -> return parent.typeParametersOrEmpty() + is SdsFunctionBody -> { + val parentFunction: EObject = parent.eContainer() + if (parentFunction is SdsFunction) { + parentFunction.typeParametersOrEmpty() + } else { + null + } + } + else -> null + } +} + +/* ******************************************************************************************************************** + * Checks * + * ********************************************************************************************************************/ + +// SdsAbstractClassMember -------------------------------------------------------------------------- + +/** + * Returns whether this [SdsAbstractClassMember] is truly contained in a class and static. + */ +fun SdsAbstractClassMember.isStatic(): Boolean { + return when { + !this.isClassMember() -> false + this is SdsClass || this is SdsEnum -> true + this is SdsAttribute && this.isStatic -> true + this is SdsFunction && this.isStatic -> true + else -> false + } +} + +// SdsAbstractDeclaration -------------------------------------------------------------------------- + +/** + * Returns whether this [SdsAbstractDeclaration] is contained in a class. + */ +fun SdsAbstractDeclaration.isClassMember(): Boolean { + return this is SdsAbstractClassMember && containingClassOrNull() != null +} + +/** + * Returns whether this [SdsAbstractDeclaration] is a global declaration. + */ +fun SdsAbstractDeclaration.isGlobal(): Boolean { + return !isClassMember() && this is SdsAbstractCompilationUnitMember +} + +/** + * Returns whether this [SdsAbstractDeclaration] is resolved, i.e. not a proxy. + */ +@OptIn(ExperimentalContracts::class) +fun SdsAbstractDeclaration?.isResolved(): Boolean { + contract { + returns(true) implies (this@isResolved != null) + } + + return (this != null) && !this.eIsProxy() +} + +// SdsArgument ------------------------------------------------------------------------------------- + +fun SdsArgument.isNamed() = parameter != null +fun SdsArgument.isPositional() = parameter == null + +// SdsEnum ----------------------------------------------------------------------------------------- + +/** + * Returns whether no [SdsEnumVariant]s of this [SdsEnum] have non-empty parameter list. Only those enums can be + * processed by the compiler, so non-constant [SdsEnum]s cannot be used as the type of parameters of annotations. + */ +fun SdsEnum.isConstant(): Boolean { + return variantsOrEmpty().all { it.parametersOrEmpty().isEmpty() } +} + +// SdsFunction ----------------------------------------------------------------------------------- + +fun SdsFunction.isMethod() = containingClassOrNull() != null + +// SdsImport --------------------------------------------------------------------------------------- + +fun SdsImport.isQualified() = !importedNamespace.endsWith(".*") +fun SdsImport.isWildcard() = importedNamespace.endsWith(".*") + +// SdsParameter ------------------------------------------------------------------------------------ + +fun SdsParameter.isRequired() = defaultValue == null && !isVariadic +fun SdsParameter.isOptional() = defaultValue != null + +// SdsTypeArgument --------------------------------------------------------------------------------- + +fun SdsTypeArgument.isNamed() = typeParameter != null +fun SdsTypeArgument.isPositional() = typeParameter == null + +/* ******************************************************************************************************************** + * Conversions * + * ********************************************************************************************************************/ + +// SdsAbstractDeclaration -------------------------------------------------------------------------- + +/** + * Returns this [SdsAbstractDeclaration] if it is resolved, otherwise `null`. + * + * @see isResolved + */ +fun T.asResolvedOrNull(): T? { + return when { + isResolved() -> this + else -> null + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/Traversal.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/Traversal.kt similarity index 97% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/Traversal.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/Traversal.kt index a02158cd7..52f861e78 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/Traversal.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/Traversal.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.emf +package com.larsreimann.safeds.emf import org.eclipse.emf.ecore.EObject diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/formatting2/SimpleMLFormatter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/formatting2/SafeDSFormatter.kt similarity index 78% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/formatting2/SimpleMLFormatter.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/formatting2/SafeDSFormatter.kt index 2020e3517..5843cef2a 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/formatting2/SimpleMLFormatter.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/formatting2/SafeDSFormatter.kt @@ -1,96 +1,96 @@ -package de.unibonn.simpleml.formatting2 - -import de.unibonn.simpleml.emf.annotationCallsOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_ABSTRACT_DECLARATION__NAME -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_ANNOTATION_CALL__ANNOTATION -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_ARGUMENT__PARAMETER -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_IMPORT_ALIAS__NAME -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_IMPORT__IMPORTED_NAMESPACE -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_INFIX_OPERATION__OPERATOR -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_MEMBER_ACCESS__NULL_SAFE -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_NAMED_TYPE__DECLARATION -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_NAMED_TYPE__NULLABLE -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_PREFIX_OPERATION__OPERATOR -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_PROTOCOL_QUANTIFIED_TERM__QUANTIFIER -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_STEP__VISIBILITY -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_TYPE_ARGUMENT__TYPE_PARAMETER -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_TYPE_PARAMETER_CONSTRAINT_GOAL__LEFT_OPERAND -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_TYPE_PARAMETER_CONSTRAINT_GOAL__OPERATOR -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_TYPE_PARAMETER__KIND -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_TYPE_PARAMETER__VARIANCE -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_TYPE_PROJECTION__VARIANCE -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals.SML_YIELD__RESULT -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAbstractTemplateStringPart -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlArgumentList -import de.unibonn.simpleml.simpleML.SmlAssigneeList -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlAssignmentGoal -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlBlock -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCallableType -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlClassBody -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlConstraint -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumBody -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionGoal -import de.unibonn.simpleml.simpleML.SmlExpressionLambda -import de.unibonn.simpleml.simpleML.SmlExpressionStatement -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlFunctionBody -import de.unibonn.simpleml.simpleML.SmlGoalArgument -import de.unibonn.simpleml.simpleML.SmlGoalArgumentList -import de.unibonn.simpleml.simpleML.SmlGoalCall -import de.unibonn.simpleml.simpleML.SmlGoalList -import de.unibonn.simpleml.simpleML.SmlGoalPlaceholder -import de.unibonn.simpleml.simpleML.SmlImport -import de.unibonn.simpleml.simpleML.SmlImportAlias -import de.unibonn.simpleml.simpleML.SmlIndexedAccess -import de.unibonn.simpleml.simpleML.SmlInfixOperation -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlMemberType -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlParameterList -import de.unibonn.simpleml.simpleML.SmlParentTypeList -import de.unibonn.simpleml.simpleML.SmlParenthesizedExpression -import de.unibonn.simpleml.simpleML.SmlParenthesizedGoalExpression -import de.unibonn.simpleml.simpleML.SmlParenthesizedType -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlPredicate -import de.unibonn.simpleml.simpleML.SmlPrefixOperation -import de.unibonn.simpleml.simpleML.SmlProtocol -import de.unibonn.simpleml.simpleML.SmlProtocolAlternative -import de.unibonn.simpleml.simpleML.SmlProtocolBody -import de.unibonn.simpleml.simpleML.SmlProtocolComplement -import de.unibonn.simpleml.simpleML.SmlProtocolParenthesizedTerm -import de.unibonn.simpleml.simpleML.SmlProtocolQuantifiedTerm -import de.unibonn.simpleml.simpleML.SmlProtocolReferenceList -import de.unibonn.simpleml.simpleML.SmlProtocolSequence -import de.unibonn.simpleml.simpleML.SmlProtocolSubterm -import de.unibonn.simpleml.simpleML.SmlProtocolSubtermList -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlResultList -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlTemplateString -import de.unibonn.simpleml.simpleML.SmlTypeArgument -import de.unibonn.simpleml.simpleML.SmlTypeArgumentList -import de.unibonn.simpleml.simpleML.SmlTypeParameter -import de.unibonn.simpleml.simpleML.SmlTypeParameterConstraintGoal -import de.unibonn.simpleml.simpleML.SmlTypeParameterList -import de.unibonn.simpleml.simpleML.SmlTypeProjection -import de.unibonn.simpleml.simpleML.SmlUnionType -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.simpleML.SmlYield +package com.larsreimann.safeds.formatting2 + +import com.larsreimann.safeds.emf.annotationCallsOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_ABSTRACT_DECLARATION__NAME +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_ANNOTATION_CALL__ANNOTATION +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_ARGUMENT__PARAMETER +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_IMPORT_ALIAS__NAME +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_IMPORT__IMPORTED_NAMESPACE +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_INFIX_OPERATION__OPERATOR +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_MEMBER_ACCESS__NULL_SAFE +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_NAMED_TYPE__DECLARATION +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_NAMED_TYPE__NULLABLE +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_PREFIX_OPERATION__OPERATOR +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_PROTOCOL_QUANTIFIED_TERM__QUANTIFIER +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_STEP__VISIBILITY +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_TYPE_ARGUMENT__TYPE_PARAMETER +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_TYPE_PARAMETER_CONSTRAINT_GOAL__LEFT_OPERAND +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_TYPE_PARAMETER_CONSTRAINT_GOAL__OPERATOR +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_TYPE_PARAMETER__KIND +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_TYPE_PARAMETER__VARIANCE +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_TYPE_PROJECTION__VARIANCE +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals.SDS_YIELD__RESULT +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractTemplateStringPart +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsArgumentList +import com.larsreimann.safeds.safeDS.SdsAssigneeList +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsAssignmentGoal +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsBlock +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCallableType +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsClassBody +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsConstraint +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumBody +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionGoal +import com.larsreimann.safeds.safeDS.SdsExpressionLambda +import com.larsreimann.safeds.safeDS.SdsExpressionStatement +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsFunctionBody +import com.larsreimann.safeds.safeDS.SdsGoalArgument +import com.larsreimann.safeds.safeDS.SdsGoalArgumentList +import com.larsreimann.safeds.safeDS.SdsGoalCall +import com.larsreimann.safeds.safeDS.SdsGoalList +import com.larsreimann.safeds.safeDS.SdsGoalPlaceholder +import com.larsreimann.safeds.safeDS.SdsImport +import com.larsreimann.safeds.safeDS.SdsImportAlias +import com.larsreimann.safeds.safeDS.SdsIndexedAccess +import com.larsreimann.safeds.safeDS.SdsInfixOperation +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsMemberType +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsParameterList +import com.larsreimann.safeds.safeDS.SdsParentTypeList +import com.larsreimann.safeds.safeDS.SdsParenthesizedExpression +import com.larsreimann.safeds.safeDS.SdsParenthesizedGoalExpression +import com.larsreimann.safeds.safeDS.SdsParenthesizedType +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsPredicate +import com.larsreimann.safeds.safeDS.SdsPrefixOperation +import com.larsreimann.safeds.safeDS.SdsProtocol +import com.larsreimann.safeds.safeDS.SdsProtocolAlternative +import com.larsreimann.safeds.safeDS.SdsProtocolBody +import com.larsreimann.safeds.safeDS.SdsProtocolComplement +import com.larsreimann.safeds.safeDS.SdsProtocolParenthesizedTerm +import com.larsreimann.safeds.safeDS.SdsProtocolQuantifiedTerm +import com.larsreimann.safeds.safeDS.SdsProtocolReferenceList +import com.larsreimann.safeds.safeDS.SdsProtocolSequence +import com.larsreimann.safeds.safeDS.SdsProtocolSubterm +import com.larsreimann.safeds.safeDS.SdsProtocolSubtermList +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsResultList +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsTemplateString +import com.larsreimann.safeds.safeDS.SdsTypeArgument +import com.larsreimann.safeds.safeDS.SdsTypeArgumentList +import com.larsreimann.safeds.safeDS.SdsTypeParameter +import com.larsreimann.safeds.safeDS.SdsTypeParameterConstraintGoal +import com.larsreimann.safeds.safeDS.SdsTypeParameterList +import com.larsreimann.safeds.safeDS.SdsTypeProjection +import com.larsreimann.safeds.safeDS.SdsUnionType +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.safeDS.SdsYield import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EStructuralFeature import org.eclipse.xtext.TerminalRule @@ -111,7 +111,7 @@ import org.eclipse.xtext.xbase.lib.Procedures import kotlin.reflect.KFunction1 import org.eclipse.xtext.formatting2.IHiddenRegionFormatter as Format -class SimpleMLFormatter : AbstractFormatter2() { +class SafeDSFormatter : AbstractFormatter2() { private val indent = Format::indent private val noSpace = Format::noSpace @@ -138,7 +138,7 @@ class SimpleMLFormatter : AbstractFormatter2() { _format(obj, doc) } - is SmlCompilationUnit -> { + is SdsCompilationUnit -> { // Feature "annotations" obj.annotationCallsOrEmpty().forEach { @@ -155,7 +155,7 @@ class SimpleMLFormatter : AbstractFormatter2() { doc.formatKeyword(obj, "package", noSpace, oneSpace) // Feature "name" - val name = obj.regionForFeature(SML_ABSTRACT_DECLARATION__NAME) + val name = obj.regionForFeature(SDS_ABSTRACT_DECLARATION__NAME) if (name != null) { doc.addReplacer(WhitespaceCollapser(doc, name)) @@ -197,13 +197,13 @@ class SimpleMLFormatter : AbstractFormatter2() { * Declarations **********************************************************************************************************/ - is SmlImport -> { + is SdsImport -> { // Keyword "import" doc.formatKeyword(obj, "import", noSpace, oneSpace) // Feature "importedNamespace" - val importedNamespace = obj.regionForFeature(SML_IMPORT__IMPORTED_NAMESPACE) + val importedNamespace = obj.regionForFeature(SDS_IMPORT__IMPORTED_NAMESPACE) if (importedNamespace != null) { doc.addReplacer(WhitespaceCollapser(doc, importedNamespace)) } @@ -211,15 +211,15 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "aliasDeclaration" doc.formatObject(obj.alias, oneSpace, noSpace) } - is SmlImportAlias -> { + is SdsImportAlias -> { // Keyword "as" doc.formatKeyword(obj, "as", null, oneSpace) // Feature "alias" - doc.formatFeature(obj, SML_IMPORT_ALIAS__NAME, null, noSpace) + doc.formatFeature(obj, SDS_IMPORT_ALIAS__NAME, null, noSpace) } - is SmlAnnotation -> { + is SdsAnnotation -> { // Features "annotations" doc.formatAnnotations(obj) @@ -232,7 +232,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, null) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, null) // EObject "parameterList" doc.formatObject(obj.parameterList, noSpace, null) @@ -240,18 +240,18 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "constraint" doc.formatObject(obj.constraint, oneSpace, null) } - is SmlAnnotationCall -> { + is SdsAnnotationCall -> { // Keyword "@" doc.formatKeyword(obj, "@", null, noSpace) // Feature "annotation" - doc.formatFeature(obj, SML_ANNOTATION_CALL__ANNOTATION, noSpace, null) + doc.formatFeature(obj, SDS_ANNOTATION_CALL__ANNOTATION, noSpace, null) // EObject "argumentList" doc.formatObject(obj.argumentList, noSpace, null) } - is SmlAttribute -> { + is SdsAttribute -> { // Features "annotations" doc.formatAnnotations(obj) @@ -269,7 +269,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, noSpace) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, noSpace) // Keyword ":" doc.formatKeyword(obj, ":", noSpace, oneSpace) @@ -277,7 +277,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "type" doc.formatObject(obj.type, oneSpace, null) } - is SmlClass -> { + is SdsClass -> { // Features "annotations" doc.formatAnnotations(obj) @@ -290,7 +290,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, null) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, null) // EObject "typeParameterList" doc.formatObject(obj.typeParameterList, noSpace, null) @@ -304,7 +304,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "body" doc.formatObject(obj.body, oneSpace, null) } - is SmlParentTypeList -> { + is SdsParentTypeList -> { // Keyword "sub" doc.formatKeyword(obj, "sub", null, oneSpace) @@ -317,7 +317,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keywords "," doc.formatCommas(obj) } - is SmlClassBody -> { + is SdsClassBody -> { // Keyword "{" val openingBrace = obj.regionForKeyword("{") @@ -343,7 +343,7 @@ class SimpleMLFormatter : AbstractFormatter2() { doc.interior(openingBrace, closingBrace, indent) } - is SmlEnum -> { + is SdsEnum -> { // Features "annotations" doc.formatAnnotations(obj) @@ -356,12 +356,12 @@ class SimpleMLFormatter : AbstractFormatter2() { } // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, null) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, null) // EObject "body" doc.formatObject(obj.body, oneSpace, null) } - is SmlEnumBody -> { + is SdsEnumBody -> { // Keyword "{" val openingBrace = obj.regionForKeyword("{") if (obj.variants.isEmpty()) { @@ -394,16 +394,16 @@ class SimpleMLFormatter : AbstractFormatter2() { doc.interior(openingBrace, closingBrace, indent) } - is SmlEnumVariant -> { + is SdsEnumVariant -> { // Features "annotations" doc.formatAnnotations(obj) // Feature "name" if (obj.annotationCallsOrEmpty().isEmpty()) { - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME) } else { - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, null) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, null) } // EObject "typeParameterList" @@ -415,7 +415,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "constraint" doc.formatObject(obj.constraint, oneSpace, null) } - is SmlFunction -> { + is SdsFunction -> { // Features "annotations" doc.formatAnnotations(obj) @@ -433,7 +433,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, null) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, null) // EObject "typeParameterList" doc.formatObject(obj.typeParameterList, noSpace, null) @@ -447,7 +447,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "body" doc.formatObject(obj.body, oneSpace, null) } - is SmlFunctionBody -> { + is SdsFunctionBody -> { // Keyword "{" val openingBrace = obj.regionForKeyword("{") @@ -473,7 +473,7 @@ class SimpleMLFormatter : AbstractFormatter2() { doc.interior(openingBrace, closingBrace, indent) } - is SmlWorkflow -> { + is SdsWorkflow -> { // Features "annotations" doc.formatAnnotations(obj) @@ -486,19 +486,19 @@ class SimpleMLFormatter : AbstractFormatter2() { } // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, null, oneSpace) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, null, oneSpace) // EObject "body" doc.formatObject(obj.body) } - is SmlStep -> { + is SdsStep -> { // Features "annotations" doc.formatAnnotations(obj) // Feature "visibility" if (obj.annotationCallsOrEmpty().isEmpty()) { - doc.formatFeature(obj, SML_STEP__VISIBILITY, noSpace, null) + doc.formatFeature(obj, SDS_STEP__VISIBILITY, noSpace, null) } // Keyword "step" @@ -509,7 +509,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, null, noSpace) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, null, noSpace) // EObject "parameterList" doc.formatObject(obj.parameterList) @@ -520,7 +520,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "body" doc.formatObject(obj.body, oneSpace, null) } - is SmlArgumentList -> { + is SdsArgumentList -> { // Keyword "(" doc.formatKeyword(obj, "(", null, noSpace) @@ -536,10 +536,10 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ")" doc.formatKeyword(obj, ")", noSpace, null) } - is SmlArgument -> { + is SdsArgument -> { // Feature "parameter" - doc.formatFeature(obj, SML_ARGUMENT__PARAMETER) + doc.formatFeature(obj, SDS_ARGUMENT__PARAMETER) // Keyword "=" doc.formatKeyword(obj, "=", oneSpace, oneSpace) @@ -547,7 +547,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "value" doc.formatObject(obj.value) } - is SmlParameterList -> { + is SdsParameterList -> { // Keyword "(" doc.formatKeyword(obj, "(", null, noSpace) @@ -563,7 +563,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ")" doc.formatKeyword(obj, ")", noSpace, null) } - is SmlParameter -> { + is SdsParameter -> { // Features "annotations" doc.formatAnnotations(obj, inlineAnnotations = true) @@ -574,7 +574,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } // Feature "name" - val name = obj.regionForFeature(SML_ABSTRACT_DECLARATION__NAME) + val name = obj.regionForFeature(SDS_ABSTRACT_DECLARATION__NAME) if (obj.annotationCallsOrEmpty().isNotEmpty() || obj.isVariadic) { doc.prepend(name, oneSpace) } @@ -591,7 +591,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "defaultValue" doc.formatObject(obj.defaultValue) } - is SmlResultList -> { + is SdsResultList -> { // Keyword "->" doc.formatKeyword(obj, "->", oneSpace, oneSpace) @@ -610,13 +610,13 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ")" doc.formatKeyword(obj, ")", noSpace, null) } - is SmlResult -> { + is SdsResult -> { // Features "annotations" doc.formatAnnotations(obj, inlineAnnotations = true) // Feature "name" - val name = obj.regionForFeature(SML_ABSTRACT_DECLARATION__NAME) + val name = obj.regionForFeature(SDS_ABSTRACT_DECLARATION__NAME) if (obj.annotationCallsOrEmpty().isNotEmpty()) { doc.prepend(name, oneSpace) } @@ -632,7 +632,7 @@ class SimpleMLFormatter : AbstractFormatter2() { * Predicate **********************************************************************************************************/ - is SmlPredicate -> { + is SdsPredicate -> { // Features "annotations" doc.formatAnnotations(obj) @@ -645,7 +645,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, null, noSpace) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, null, noSpace) // EObject "parameterList" doc.formatObject(obj.parameterList, noSpace, null) @@ -656,7 +656,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "goalList" doc.formatObject(obj.goalList, oneSpace, null) } - is SmlGoalList -> { + is SdsGoalList -> { // Keyword "{" val openingBrace = obj.regionForKeyword("{") @@ -683,7 +683,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } doc.interior(openingBrace, closingBrace, indent) } - is SmlAssignmentGoal -> { + is SdsAssignmentGoal -> { // EObject "placeholder" doc.formatObject(obj.placeholder, null, oneSpace) @@ -694,20 +694,20 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "expression" doc.formatObject(obj.expression) } - is SmlGoalPlaceholder -> { + is SdsGoalPlaceholder -> { // Keyword "val" doc.formatKeyword(obj, "val", null, oneSpace) // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, null) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, null) } - is SmlExpressionGoal -> { + is SdsExpressionGoal -> { // EObject "expression" doc.formatObject(obj.expression) } - is SmlGoalCall -> { + is SdsGoalCall -> { // EObject "receiver" doc.formatObject(obj.receiver, null, noSpace) @@ -715,7 +715,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "argumentList" doc.formatObject(obj.argumentList, noSpace, noSpace) } - is SmlGoalArgumentList -> { + is SdsGoalArgumentList -> { // Keyword "(" doc.formatKeyword(obj, "(", null, noSpace) @@ -731,10 +731,10 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ")" doc.formatKeyword(obj, ")", noSpace, null) } - is SmlGoalArgument -> { + is SdsGoalArgument -> { // Feature "parameter" - doc.formatFeature(obj, SML_ARGUMENT__PARAMETER) + doc.formatFeature(obj, SDS_ARGUMENT__PARAMETER) // Keyword "=" doc.formatKeyword(obj, "=", oneSpace, oneSpace) @@ -742,11 +742,11 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "value" doc.formatObject(obj.value) } - is SmlParenthesizedGoalExpression -> { + is SdsParenthesizedGoalExpression -> { // Keyword "(" val openingParentheses = obj.regionForKeyword("(") - if (obj.eContainer() !is SmlAssignmentGoal) { + if (obj.eContainer() !is SdsAssignmentGoal) { doc.prepend(openingParentheses, newLine) } doc.append(openingParentheses, newLine) @@ -770,7 +770,7 @@ class SimpleMLFormatter : AbstractFormatter2() { * Protocols **********************************************************************************************************/ - is SmlProtocol -> { + is SdsProtocol -> { // Keyword "protocol" doc.formatKeyword(obj, "protocol", null, oneSpace) @@ -778,7 +778,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "body" doc.formatObject(obj.body) } - is SmlProtocolBody -> { + is SdsProtocolBody -> { // Keyword "{" val openingBrace = obj.regionForKeyword("{") @@ -805,7 +805,7 @@ class SimpleMLFormatter : AbstractFormatter2() { doc.interior(openingBrace, closingBrace, indent) } - is SmlProtocolSubtermList -> { + is SdsProtocolSubtermList -> { obj.subterms.forEach { if (it === obj.subterms.last()) { doc.formatObject(it, null, null) @@ -814,13 +814,13 @@ class SimpleMLFormatter : AbstractFormatter2() { } } } - is SmlProtocolSubterm -> { + is SdsProtocolSubterm -> { // Keyword "subterm" doc.formatKeyword(obj, "subterm", null, oneSpace) // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, oneSpace) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, oneSpace) // Keyword "=" doc.formatKeyword(obj, "=", oneSpace, oneSpace) @@ -831,7 +831,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ";" doc.formatKeyword(obj, ";", noSpace, null) } - is SmlProtocolAlternative -> { + is SdsProtocolAlternative -> { // Keywords '|' val pipes = textRegionExtensions.allRegionsFor(obj).keywords("|") @@ -845,7 +845,7 @@ class SimpleMLFormatter : AbstractFormatter2() { doc.formatObject(it) } } - is SmlProtocolComplement -> { + is SdsProtocolComplement -> { // Keyword "[" doc.formatKeyword(obj, "[", null, noSpace) @@ -859,7 +859,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword "]" doc.formatKeyword(obj, "]", noSpace, null) } - is SmlProtocolReferenceList -> { + is SdsProtocolReferenceList -> { // EObject "terms" obj.references.forEach { @@ -870,7 +870,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } } } - is SmlProtocolParenthesizedTerm -> { + is SdsProtocolParenthesizedTerm -> { // Keyword "(" doc.formatKeyword(obj, "(", null, noSpace) @@ -881,15 +881,15 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ")" doc.formatKeyword(obj, ")", noSpace, null) } - is SmlProtocolQuantifiedTerm -> { + is SdsProtocolQuantifiedTerm -> { // EObject "term" doc.formatObject(obj.term) // Feature "quantifier" - doc.formatFeature(obj, SML_PROTOCOL_QUANTIFIED_TERM__QUANTIFIER, noSpace, null) + doc.formatFeature(obj, SDS_PROTOCOL_QUANTIFIED_TERM__QUANTIFIER, noSpace, null) } - is SmlProtocolSequence -> { + is SdsProtocolSequence -> { // EObject "terms" obj.terms.forEach { @@ -905,7 +905,7 @@ class SimpleMLFormatter : AbstractFormatter2() { * Statements **********************************************************************************************************/ - is SmlBlock -> { + is SdsBlock -> { // Keyword "{" val openingBrace = obj.regionForKeyword("{") @@ -926,7 +926,7 @@ class SimpleMLFormatter : AbstractFormatter2() { doc.interior(openingBrace, closingBrace, indent) } - is SmlAssignment -> { + is SdsAssignment -> { // EObject "assigneeList" doc.formatObject(obj.assigneeList, null, oneSpace) @@ -940,7 +940,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ";" doc.formatKeyword(obj, ";", noSpace, null) } - is SmlAssigneeList -> { + is SdsAssigneeList -> { // Feature "assignees" obj.assignees.forEach { @@ -950,31 +950,31 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keywords "," doc.formatCommas(obj) } - is SmlBlockLambdaResult -> { + is SdsBlockLambdaResult -> { // Keyword "yield" doc.formatKeyword(obj, "yield", null, oneSpace) // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, null) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, null) } - is SmlPlaceholder -> { + is SdsPlaceholder -> { // Keyword "val" doc.formatKeyword(obj, "val", null, oneSpace) // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME, oneSpace, null) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME, oneSpace, null) } - is SmlYield -> { + is SdsYield -> { // Keyword "yield" doc.formatKeyword(obj, "yield", null, oneSpace) // Feature "result" - doc.formatFeature(obj, SML_YIELD__RESULT) + doc.formatFeature(obj, SDS_YIELD__RESULT) } - is SmlExpressionStatement -> { + is SdsExpressionStatement -> { // EObject "expression" doc.formatObject(obj.expression) @@ -987,7 +987,7 @@ class SimpleMLFormatter : AbstractFormatter2() { * Expressions **********************************************************************************************************/ - is SmlBlockLambda -> { + is SdsBlockLambda -> { // EObject "parameterList" doc.formatObject(obj.parameterList, null, oneSpace) @@ -995,7 +995,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "body" doc.formatObject(obj.body, oneSpace, null) } - is SmlCall -> { + is SdsCall -> { // EObject "receiver" doc.formatObject(obj.receiver, null, noSpace) @@ -1006,7 +1006,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "argumentList" doc.formatObject(obj.argumentList) } - is SmlExpressionLambda -> { + is SdsExpressionLambda -> { // EObject "parameterList" doc.formatObject(obj.parameterList, null, oneSpace) @@ -1017,7 +1017,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "result" doc.formatObject(obj.result, oneSpace, null) } - is SmlIndexedAccess -> { + is SdsIndexedAccess -> { // EObject "receiver" doc.formatObject(obj.receiver, null, noSpace) @@ -1031,24 +1031,24 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword "]" doc.formatKeyword(obj, "]", noSpace, null) } - is SmlInfixOperation -> { + is SdsInfixOperation -> { // EObject "leftOperand" doc.formatObject(obj.leftOperand, null, oneSpace) // Feature "operator" - doc.formatFeature(obj, SML_INFIX_OPERATION__OPERATOR, oneSpace, oneSpace) + doc.formatFeature(obj, SDS_INFIX_OPERATION__OPERATOR, oneSpace, oneSpace) // EObject "rightOperand" doc.formatObject(obj.rightOperand, oneSpace, null) } - is SmlMemberAccess -> { + is SdsMemberAccess -> { // EObject "receiver" doc.formatObject(obj.receiver, null, noSpace) // Feature "nullable" - doc.formatFeature(obj, SML_MEMBER_ACCESS__NULL_SAFE, noSpace, noSpace) + doc.formatFeature(obj, SDS_MEMBER_ACCESS__NULL_SAFE, noSpace, noSpace) // Keyword "." doc.formatKeyword(obj, ".", noSpace, noSpace) @@ -1056,7 +1056,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "member" doc.formatObject(obj.member, noSpace, null) } - is SmlParenthesizedExpression -> { + is SdsParenthesizedExpression -> { // Keyword "(" doc.formatKeyword(obj, "(", null, noSpace) @@ -1067,12 +1067,12 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ")" doc.formatKeyword(obj, ")", noSpace, null) } - is SmlPrefixOperation -> { + is SdsPrefixOperation -> { // Feature "operator" doc.formatFeature( obj, - SML_PREFIX_OPERATION__OPERATOR, + SDS_PREFIX_OPERATION__OPERATOR, prepend = null, append = if (obj.operator == "not") oneSpace else noSpace ) @@ -1080,11 +1080,11 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "operand" doc.formatObject(obj.operand) } - is SmlTemplateString -> { + is SdsTemplateString -> { // Feature expressions obj.expressions.forEach { - if (it !is SmlAbstractTemplateStringPart) { + if (it !is SdsAbstractTemplateStringPart) { doc.formatObject(it, oneSpace, oneSpace) } } @@ -1094,7 +1094,7 @@ class SimpleMLFormatter : AbstractFormatter2() { * Types **********************************************************************************************************/ - is SmlCallableType -> { + is SdsCallableType -> { // Keyword "callable" doc.formatKeyword(obj, "callable", null, oneSpace) @@ -1105,7 +1105,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "resultList" doc.formatObject(obj.resultList, oneSpace, null) } - is SmlMemberType -> { + is SdsMemberType -> { // EObject "receiver" doc.formatObject(obj.receiver, null, noSpace) @@ -1116,18 +1116,18 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "member" doc.formatObject(obj.member, noSpace, null) } - is SmlNamedType -> { + is SdsNamedType -> { // Feature "declaration" - doc.formatFeature(obj, SML_NAMED_TYPE__DECLARATION) + doc.formatFeature(obj, SDS_NAMED_TYPE__DECLARATION) // EObject "typeArgumentList" doc.formatObject(obj.typeArgumentList, noSpace, noSpace) // Feature "nullable" - doc.formatFeature(obj, SML_NAMED_TYPE__NULLABLE, noSpace, null) + doc.formatFeature(obj, SDS_NAMED_TYPE__NULLABLE, noSpace, null) } - is SmlParenthesizedType -> { + is SdsParenthesizedType -> { // Keyword "(" doc.formatKeyword(obj, "(", null, noSpace) @@ -1138,7 +1138,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ")" doc.formatKeyword(obj, ")", noSpace, null) } - is SmlUnionType -> { + is SdsUnionType -> { // Keyword "union" doc.formatKeyword(obj, "union", null, noSpace) @@ -1146,7 +1146,7 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "typeArgumentList" doc.formatObject(obj.typeArgumentList, noSpace, null) } - is SmlTypeArgumentList -> { + is SdsTypeArgumentList -> { // Keyword "<" doc.formatKeyword(obj, "<", null, noSpace) @@ -1162,10 +1162,10 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ">" doc.formatKeyword(obj, ">", noSpace, null) } - is SmlTypeArgument -> { + is SdsTypeArgument -> { // Feature "typeParameter" - doc.formatFeature(obj, SML_TYPE_ARGUMENT__TYPE_PARAMETER) + doc.formatFeature(obj, SDS_TYPE_ARGUMENT__TYPE_PARAMETER) // Keyword "=" doc.formatKeyword(obj, "=", oneSpace, oneSpace) @@ -1173,15 +1173,15 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "value" doc.formatObject(obj.value) } - is SmlTypeProjection -> { + is SdsTypeProjection -> { // Feature "variance" - doc.formatFeature(obj, SML_TYPE_PROJECTION__VARIANCE, null, oneSpace) + doc.formatFeature(obj, SDS_TYPE_PROJECTION__VARIANCE, null, oneSpace) // EObject "type" doc.formatObject(obj.type) } - is SmlTypeParameterList -> { + is SdsTypeParameterList -> { // Keyword "<" doc.formatKeyword(obj, "<", null, noSpace) @@ -1197,26 +1197,26 @@ class SimpleMLFormatter : AbstractFormatter2() { // Keyword ">" doc.formatKeyword(obj, ">", noSpace, null) } - is SmlTypeParameter -> { + is SdsTypeParameter -> { // Features "annotations" doc.formatAnnotations(obj, inlineAnnotations = true) // Feature "variance" if (obj.annotationCallsOrEmpty().isEmpty()) { - doc.formatFeature(obj, SML_TYPE_PARAMETER__VARIANCE, null, oneSpace) + doc.formatFeature(obj, SDS_TYPE_PARAMETER__VARIANCE, null, oneSpace) } else { - doc.formatFeature(obj, SML_TYPE_PARAMETER__VARIANCE, oneSpace, oneSpace) + doc.formatFeature(obj, SDS_TYPE_PARAMETER__VARIANCE, oneSpace, oneSpace) } // Feature "name" - doc.formatFeature(obj, SML_ABSTRACT_DECLARATION__NAME) + doc.formatFeature(obj, SDS_ABSTRACT_DECLARATION__NAME) // Feature "kind" doc.formatKeyword(obj, "::", oneSpace, oneSpace) - doc.formatFeature(obj, SML_TYPE_PARAMETER__KIND) + doc.formatFeature(obj, SDS_TYPE_PARAMETER__KIND) } - is SmlConstraint -> { + is SdsConstraint -> { // Keyword "constraint" doc.formatKeyword(obj, "constraint", null, oneSpace) @@ -1224,13 +1224,13 @@ class SimpleMLFormatter : AbstractFormatter2() { // EObject "constraintList" doc.formatObject(obj.constraintList) } - is SmlTypeParameterConstraintGoal -> { + is SdsTypeParameterConstraintGoal -> { // Feature "leftOperand" - doc.formatFeature(obj, SML_TYPE_PARAMETER_CONSTRAINT_GOAL__LEFT_OPERAND, null, oneSpace) + doc.formatFeature(obj, SDS_TYPE_PARAMETER_CONSTRAINT_GOAL__LEFT_OPERAND, null, oneSpace) // Feature "operator" - doc.formatFeature(obj, SML_TYPE_PARAMETER_CONSTRAINT_GOAL__OPERATOR, oneSpace, oneSpace) + doc.formatFeature(obj, SDS_TYPE_PARAMETER_CONSTRAINT_GOAL__OPERATOR, oneSpace, oneSpace) // EObject "rightOperand" doc.formatObject(obj.rightOperand, oneSpace, null) @@ -1328,7 +1328,7 @@ class SimpleMLFormatter : AbstractFormatter2() { } private fun IFormattableDocument.formatAnnotations( - obj: SmlAbstractDeclaration, + obj: SdsAbstractDeclaration, inlineAnnotations: Boolean = false ) { diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/GeneratorUtils.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/GeneratorUtils.kt similarity index 64% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/GeneratorUtils.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/GeneratorUtils.kt index a03a0cbb9..f52c8eee2 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/GeneratorUtils.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/GeneratorUtils.kt @@ -1,22 +1,22 @@ -package de.unibonn.simpleml.generator +package com.larsreimann.safeds.generator -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.compilationUnitOrNull -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.stdlibAccess.pythonModuleOrNull +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.compilationUnitOrNull +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.stdlibAccess.pythonModuleOrNull import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.resource.Resource /** - * Returns the base file name of the resource, i.e. the last segment of its [URI] with any Simple-ML extension removed, + * Returns the base file name of the resource, i.e. the last segment of its [URI] with any Safe-DS extension removed, * or `null` if the resource has no [URI]. */ fun Resource.baseFileNameOrNull(): String? { return uri ?.lastSegment() - ?.removeSuffix(".${SmlFileExtension.Stub}") - ?.removeSuffix(".${SmlFileExtension.Test}") - ?.removeSuffix(".${SmlFileExtension.Flow}") + ?.removeSuffix(".${SdsFileExtension.Stub}") + ?.removeSuffix(".${SdsFileExtension.Test}") + ?.removeSuffix(".${SdsFileExtension.Flow}") ?.replace(Regex("%2520"), "_") // Twice URL encoded space ?.replace(Regex("[ .-]"), "_") ?.replace(Regex("\\W"), "") @@ -25,8 +25,8 @@ fun Resource.baseFileNameOrNull(): String? { /** * Returns the prefix of the path of all generated files, or `null` if this [Resource] does not provide enough * information to deduce this prefix. This can be caused if either - * - the [Resource] contains no [SmlCompilationUnit], - * - the [SmlCompilationUnit] has no package, + * - the [Resource] contains no [SdsCompilationUnit], + * - the [SdsCompilationUnit] has no package, * - the [Resource] has no [URI]. */ fun Resource.baseGeneratedFilePathOrNull(): String? { diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/Main.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/Main.kt similarity index 90% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/Main.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/Main.kt index 486a382cb..53ebfdad2 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/Main.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/Main.kt @@ -1,9 +1,9 @@ -package de.unibonn.simpleml.generator +package com.larsreimann.safeds.generator import com.google.inject.Inject import com.google.inject.Provider -import de.unibonn.simpleml.SimpleMLStandaloneSetup -import de.unibonn.simpleml.stdlibAccess.loadStdlib +import com.larsreimann.safeds.SafeDSStandaloneSetup +import com.larsreimann.safeds.stdlibAccess.loadStdlib import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.resource.ResourceSet import org.eclipse.xtext.diagnostics.Severity @@ -67,7 +67,7 @@ fun main(args: Array) { exitProcess(10) } - val injector = SimpleMLStandaloneSetup().createInjectorAndDoEMFRegistration() + val injector = SafeDSStandaloneSetup().createInjectorAndDoEMFRegistration() val main = injector.getInstance(Main::class.java) main.runCodeGenerator(args.toList()) } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/SimpleMLGenerator.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/SafeDSGenerator.kt similarity index 75% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/SimpleMLGenerator.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/SafeDSGenerator.kt index 5f121db92..24adc9f90 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/SimpleMLGenerator.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/SafeDSGenerator.kt @@ -1,77 +1,77 @@ -package de.unibonn.simpleml.generator - -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.And -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.Elvis -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.IdenticalTo -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.NotIdenticalTo -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.Or -import de.unibonn.simpleml.constant.SmlPrefixOperationOperator -import de.unibonn.simpleml.constant.isFlowFile -import de.unibonn.simpleml.constant.isInFlowFile -import de.unibonn.simpleml.constant.isInTestFile -import de.unibonn.simpleml.constant.isTestFile -import de.unibonn.simpleml.constant.operator -import de.unibonn.simpleml.emf.assigneesOrEmpty -import de.unibonn.simpleml.emf.blockLambdaResultsOrEmpty -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.compilationUnitOrNull -import de.unibonn.simpleml.emf.containingBlockLambdaOrNull -import de.unibonn.simpleml.emf.containingCompilationUnitOrNull -import de.unibonn.simpleml.emf.createSmlWildcard -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.isGlobal -import de.unibonn.simpleml.emf.isOptional -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.placeholdersOrEmpty -import de.unibonn.simpleml.emf.resultsOrEmpty -import de.unibonn.simpleml.emf.statementsOrEmpty -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SmlAbstractAssignee -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlAbstractStatement -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlArgumentList -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionLambda -import de.unibonn.simpleml.simpleML.SmlExpressionStatement -import de.unibonn.simpleml.simpleML.SmlIndexedAccess -import de.unibonn.simpleml.simpleML.SmlInfixOperation -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlParenthesizedExpression -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlPrefixOperation -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlResultList -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlTemplateString -import de.unibonn.simpleml.simpleML.SmlTemplateStringEnd -import de.unibonn.simpleml.simpleML.SmlTemplateStringInner -import de.unibonn.simpleml.simpleML.SmlTemplateStringStart -import de.unibonn.simpleml.simpleML.SmlWildcard -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.staticAnalysis.linking.parameterOrNull -import de.unibonn.simpleml.staticAnalysis.linking.parametersOrNull -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantBoolean -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantEnumVariant -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantFloat -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantInt -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantNull -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantString -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.toConstantExpressionOrNull -import de.unibonn.simpleml.staticAnalysis.resultsOrNull -import de.unibonn.simpleml.staticAnalysis.statementHasNoSideEffects -import de.unibonn.simpleml.stdlibAccess.pythonModuleOrNull -import de.unibonn.simpleml.stdlibAccess.pythonNameOrNull -import de.unibonn.simpleml.utils.IdManager +package com.larsreimann.safeds.generator + +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.And +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.Elvis +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.IdenticalTo +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.NotIdenticalTo +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.Or +import com.larsreimann.safeds.constant.SdsPrefixOperationOperator +import com.larsreimann.safeds.constant.isFlowFile +import com.larsreimann.safeds.constant.isInFlowFile +import com.larsreimann.safeds.constant.isInTestFile +import com.larsreimann.safeds.constant.isTestFile +import com.larsreimann.safeds.constant.operator +import com.larsreimann.safeds.emf.assigneesOrEmpty +import com.larsreimann.safeds.emf.blockLambdaResultsOrEmpty +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.compilationUnitOrNull +import com.larsreimann.safeds.emf.containingBlockLambdaOrNull +import com.larsreimann.safeds.emf.containingCompilationUnitOrNull +import com.larsreimann.safeds.emf.createSdsWildcard +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.isGlobal +import com.larsreimann.safeds.emf.isOptional +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.placeholdersOrEmpty +import com.larsreimann.safeds.emf.resultsOrEmpty +import com.larsreimann.safeds.emf.statementsOrEmpty +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SdsAbstractAssignee +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsAbstractStatement +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsArgumentList +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionLambda +import com.larsreimann.safeds.safeDS.SdsExpressionStatement +import com.larsreimann.safeds.safeDS.SdsIndexedAccess +import com.larsreimann.safeds.safeDS.SdsInfixOperation +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsParenthesizedExpression +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsPrefixOperation +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsResultList +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsTemplateString +import com.larsreimann.safeds.safeDS.SdsTemplateStringEnd +import com.larsreimann.safeds.safeDS.SdsTemplateStringInner +import com.larsreimann.safeds.safeDS.SdsTemplateStringStart +import com.larsreimann.safeds.safeDS.SdsWildcard +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.staticAnalysis.linking.parameterOrNull +import com.larsreimann.safeds.staticAnalysis.linking.parametersOrNull +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantBoolean +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantEnumVariant +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantFloat +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantInt +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantNull +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantString +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.toConstantExpressionOrNull +import com.larsreimann.safeds.staticAnalysis.resultsOrNull +import com.larsreimann.safeds.staticAnalysis.statementHasNoSideEffects +import com.larsreimann.safeds.stdlibAccess.pythonModuleOrNull +import com.larsreimann.safeds.stdlibAccess.pythonNameOrNull +import com.larsreimann.safeds.utils.IdManager import org.eclipse.emf.ecore.resource.Resource import org.eclipse.xtext.generator.AbstractGenerator import org.eclipse.xtext.generator.IFileSystemAccess2 @@ -82,14 +82,14 @@ import org.eclipse.xtext.generator.IGeneratorContext * * See [Xtext Code Generation](https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#code-generation). */ -class SimpleMLGenerator : AbstractGenerator() { +class SafeDSGenerator : AbstractGenerator() { - private val codegenPackage = "simpleml.codegen" + private val codegenPackage = "safeds.codegen" private val runtimeBridgePackage = "runtimeBridge" private val indent = " " /** - * Creates Python workflow and declaration files if the [resource] is either a Simple-ML flow or test file. + * Creates Python workflow and declaration files if the [resource] is either a Safe-DS flow or test file. */ override fun doGenerate(resource: Resource, fsa: IFileSystemAccess2, context: IGeneratorContext) { if (resource.isFlowFile() || resource.isTestFile()) { @@ -103,18 +103,18 @@ class SimpleMLGenerator : AbstractGenerator() { * workflow. This way we can run the Python interpreter with the created file to run the workflow. * * **Example:** Given the following situation - * * Simple-ML package: "com.example" - * * Simple-ML file: "test.simpleml" + * * Safe-DS package: "com.example" + * * Safe-DS file: "test.safeds" * * Workflow names: "workflow1", "workflow2" * - * we create two files in the folder "com/example" (determined by the Simple-ML package). The file for "workflow1" + * we create two files in the folder "com/example" (determined by the Safe-DS package). The file for "workflow1" * is called "test_workflow1.py" and the file for "workflow2" is called "test_workflow2.py". The names are created - * by taking the Simple-ML file name, removing the file extension, appending an underscore, and then the workflow + * by taking the Safe-DS file name, removing the file extension, appending an underscore, and then the workflow * name. */ private fun generateWorkflowFiles(resource: Resource, fsa: IFileSystemAccess2, context: IGeneratorContext) { resource.allContents.asSequence() - .filterIsInstance() + .filterIsInstance() .forEach { if (context.cancelIndicator.isCanceled) { return @@ -145,12 +145,12 @@ class SimpleMLGenerator : AbstractGenerator() { fsa.generateFile(fileName, content) } - private fun compile(compilationUnit: SmlCompilationUnit): String { + private fun compile(compilationUnit: SdsCompilationUnit): String { val imports = mutableSetOf() // Compile steps val stepString = compilationUnit - .descendants() + .descendants() .sortedBy { it.name } .joinToString("\n") { compileWorkflowSteps(it, imports) @@ -158,7 +158,7 @@ class SimpleMLGenerator : AbstractGenerator() { // Compile workflows val workflowString = compilationUnit - .descendants() + .descendants() .sortedBy { it.name } .joinToString("\n") { compileWorkflow(it, imports) @@ -220,8 +220,8 @@ class SimpleMLGenerator : AbstractGenerator() { } @OptIn(ExperimentalStdlibApi::class) - private fun compileWorkflowSteps(step: SmlStep, imports: MutableSet) = buildString { - val blockLambdaIdManager = IdManager() + private fun compileWorkflowSteps(step: SdsStep, imports: MutableSet) = buildString { + val blockLambdaIdManager = IdManager() append("def ${step.correspondingPythonName()}(") append( @@ -253,8 +253,8 @@ class SimpleMLGenerator : AbstractGenerator() { } @OptIn(ExperimentalStdlibApi::class) - private fun compileWorkflow(workflow: SmlWorkflow, imports: MutableSet) = buildString { - val blockLambdaIdManager = IdManager() + private fun compileWorkflow(workflow: SdsWorkflow, imports: MutableSet) = buildString { + val blockLambdaIdManager = IdManager() appendLine("def ${workflow.correspondingPythonName()}():") if (workflow.statementsOrEmpty().withEffect().isEmpty()) { @@ -271,9 +271,9 @@ class SimpleMLGenerator : AbstractGenerator() { } private data class CompileStatementFrame( - val stmt: SmlAbstractStatement, + val stmt: SdsAbstractStatement, val imports: MutableSet, - val blockLambdaIdManager: IdManager, + val blockLambdaIdManager: IdManager, val shouldSavePlaceholders: Boolean ) @@ -282,8 +282,8 @@ class SimpleMLGenerator : AbstractGenerator() { DeepRecursiveFunction { (stmt, imports, blockLambdaIdManager, shouldSavePlaceholders) -> val stringBuilder = StringBuilder() when (stmt) { - is SmlAssignment -> { - for (lambda in stmt.expression.descendants()) { + is SdsAssignment -> { + for (lambda in stmt.expression.descendants()) { stringBuilder.append( compileBlockLambda.callRecursive( CompileBlockLambdaFrame( @@ -295,12 +295,12 @@ class SimpleMLGenerator : AbstractGenerator() { ) } - if (stmt.assigneesOrEmpty().any { it !is SmlWildcard }) { + if (stmt.assigneesOrEmpty().any { it !is SdsWildcard }) { val assignees = stmt.paddedAssignees().joinToString { when (it) { - is SmlBlockLambdaResult -> it.name - is SmlPlaceholder -> it.name - is SmlYield -> it.result.name + is SdsBlockLambdaResult -> it.name + is SdsPlaceholder -> it.name + is SdsYield -> it.result.name else -> "_" } } @@ -319,8 +319,8 @@ class SimpleMLGenerator : AbstractGenerator() { } } } - is SmlExpressionStatement -> { - for (lambda in stmt.expression.descendants()) { + is SdsExpressionStatement -> { + for (lambda in stmt.expression.descendants()) { stringBuilder.append( compileBlockLambda.callRecursive( CompileBlockLambdaFrame( @@ -345,9 +345,9 @@ class SimpleMLGenerator : AbstractGenerator() { } private data class CompileBlockLambdaFrame( - val lambda: SmlBlockLambda, + val lambda: SdsBlockLambda, val imports: MutableSet, - val blockLambdaIdManager: IdManager + val blockLambdaIdManager: IdManager ) @OptIn(ExperimentalStdlibApi::class) @@ -400,9 +400,9 @@ class SimpleMLGenerator : AbstractGenerator() { } private data class CompileParameterFrame( - val parameter: SmlParameter, + val parameter: SdsParameter, val imports: MutableSet, - val blockLambdaIdManager: IdManager + val blockLambdaIdManager: IdManager ) @OptIn(ExperimentalStdlibApi::class) @@ -421,9 +421,9 @@ class SimpleMLGenerator : AbstractGenerator() { } private data class CompileExpressionFrame( - val expression: SmlAbstractExpression, + val expression: SdsAbstractExpression, val imports: MutableSet, - val blockLambdaIdManager: IdManager + val blockLambdaIdManager: IdManager ) @OptIn(ExperimentalStdlibApi::class) @@ -432,32 +432,32 @@ class SimpleMLGenerator : AbstractGenerator() { // Template string parts when (expr) { - is SmlTemplateStringStart -> return@DeepRecursiveFunction "${expr.value.toSingleLine()}{ " - is SmlTemplateStringInner -> return@DeepRecursiveFunction " }${expr.value.toSingleLine()}{ " - is SmlTemplateStringEnd -> return@DeepRecursiveFunction " }${expr.value.toSingleLine()}" + is SdsTemplateStringStart -> return@DeepRecursiveFunction "${expr.value.toSingleLine()}{ " + is SdsTemplateStringInner -> return@DeepRecursiveFunction " }${expr.value.toSingleLine()}{ " + is SdsTemplateStringEnd -> return@DeepRecursiveFunction " }${expr.value.toSingleLine()}" } // Constant expressions val constantExpr = expr.toConstantExpressionOrNull() if (constantExpr != null) { when (constantExpr) { - is SmlConstantBoolean -> return@DeepRecursiveFunction if (constantExpr.value) "True" else "False" - is SmlConstantEnumVariant -> { + is SdsConstantBoolean -> return@DeepRecursiveFunction if (constantExpr.value) "True" else "False" + is SdsConstantEnumVariant -> { /* let remaining code handle this */ } - is SmlConstantFloat -> return@DeepRecursiveFunction constantExpr.value.toString() - is SmlConstantInt -> return@DeepRecursiveFunction constantExpr.value.toString() - is SmlConstantNull -> return@DeepRecursiveFunction "None" - is SmlConstantString -> return@DeepRecursiveFunction "'${constantExpr.value.toSingleLine()}'" + is SdsConstantFloat -> return@DeepRecursiveFunction constantExpr.value.toString() + is SdsConstantInt -> return@DeepRecursiveFunction constantExpr.value.toString() + is SdsConstantNull -> return@DeepRecursiveFunction "None" + is SdsConstantString -> return@DeepRecursiveFunction "'${constantExpr.value.toSingleLine()}'" } } // Other return@DeepRecursiveFunction when (expr) { - is SmlBlockLambda -> { + is SdsBlockLambda -> { expr.uniqueName(blockLambdaIdManager) } - is SmlCall -> { + is SdsCall -> { val receiver = callRecursive(CompileExpressionFrame(expr.receiver, imports, blockLambdaIdManager)) val arguments = mutableListOf() for (argument in expr.argumentList.sortedByParameter()) { @@ -471,7 +471,7 @@ class SimpleMLGenerator : AbstractGenerator() { "$receiver(${arguments.joinToString()})" } - is SmlExpressionLambda -> { + is SdsExpressionLambda -> { val parameters = mutableListOf() for (parameter in expr.parametersOrEmpty()) { parameters += compileParameter.callRecursive( @@ -486,7 +486,7 @@ class SimpleMLGenerator : AbstractGenerator() { "lambda ${parameters.joinToString()}: $result" } - is SmlInfixOperation -> { + is SdsInfixOperation -> { val leftOperand = callRecursive(CompileExpressionFrame(expr.leftOperand, imports, blockLambdaIdManager)) val rightOperand = @@ -509,15 +509,15 @@ class SimpleMLGenerator : AbstractGenerator() { else -> "($leftOperand) ${expr.operator} ($rightOperand)" } } - is SmlIndexedAccess -> { + is SdsIndexedAccess -> { val receiver = callRecursive(CompileExpressionFrame(expr.receiver, imports, blockLambdaIdManager)) val index = callRecursive(CompileExpressionFrame(expr.index, imports, blockLambdaIdManager)) "$receiver[$index]" } - is SmlMemberAccess -> { + is SdsMemberAccess -> { val receiver = callRecursive(CompileExpressionFrame(expr.receiver, imports, blockLambdaIdManager)) when (val memberDeclaration = expr.member.declaration) { - is SmlBlockLambdaResult -> { + is SdsBlockLambdaResult -> { val allResults = memberDeclaration.containingBlockLambdaOrNull()!!.blockLambdaResultsOrEmpty() if (allResults.size == 1) { receiver @@ -526,12 +526,12 @@ class SimpleMLGenerator : AbstractGenerator() { "$receiver[$thisIndex]" } } - is SmlEnumVariant -> { + is SdsEnumVariant -> { val member = callRecursive(CompileExpressionFrame(expr.member, imports, blockLambdaIdManager)) val suffix = when (expr.eContainer()) { - is SmlCall -> "" + is SdsCall -> "" else -> "()" } @@ -543,8 +543,8 @@ class SimpleMLGenerator : AbstractGenerator() { else -> "$receiver.$member$suffix" } } - is SmlResult -> { - val allResults = memberDeclaration.closestAncestorOrNull()!!.results + is SdsResult -> { + val allResults = memberDeclaration.closestAncestorOrNull()!!.results if (allResults.size == 1) { receiver } else { @@ -565,17 +565,17 @@ class SimpleMLGenerator : AbstractGenerator() { } } } - is SmlParenthesizedExpression -> { + is SdsParenthesizedExpression -> { callRecursive(CompileExpressionFrame(expr.expression, imports, blockLambdaIdManager)) } - is SmlPrefixOperation -> { + is SdsPrefixOperation -> { val operand = callRecursive(CompileExpressionFrame(expr.operand, imports, blockLambdaIdManager)) when (expr.operator()) { - SmlPrefixOperationOperator.Not -> "not ($operand)" - SmlPrefixOperationOperator.Minus -> "-($operand)" + SdsPrefixOperationOperator.Not -> "not ($operand)" + SdsPrefixOperationOperator.Minus -> "-($operand)" } } - is SmlReference -> { + is SdsReference -> { val importAlias = expr.containingCompilationUnitOrNull() ?.imports ?.firstOrNull { it.importedNamespace == expr.declaration.qualifiedNameOrNull().toString() } @@ -616,7 +616,7 @@ class SimpleMLGenerator : AbstractGenerator() { importAlias ?: declaration.correspondingPythonName() } - is SmlTemplateString -> { + is SdsTemplateString -> { val substrings = mutableListOf() for (expression in expr.expressions) { substrings += callRecursive(CompileExpressionFrame(expression, imports, blockLambdaIdManager)) @@ -629,32 +629,32 @@ class SimpleMLGenerator : AbstractGenerator() { } /** - * Returns the name of the Python declaration that corresponds to this [SmlAbstractDeclaration]. + * Returns the name of the Python declaration that corresponds to this [SdsAbstractDeclaration]. */ -private fun SmlAbstractDeclaration.correspondingPythonName(): String { +private fun SdsAbstractDeclaration.correspondingPythonName(): String { return pythonNameOrNull() ?: name } /** - * Returns the name of the Python module that corresponds to this [SmlCompilationUnit]. + * Returns the name of the Python module that corresponds to this [SdsCompilationUnit]. */ -private fun SmlCompilationUnit.correspondingPythonModule(): String { +private fun SdsCompilationUnit.correspondingPythonModule(): String { return pythonModuleOrNull() ?: name } /** * Adds wildcards at the end of the assignee list until every value of the right-hand side is captured. */ -private fun SmlAssignment.paddedAssignees(): List { +private fun SdsAssignment.paddedAssignees(): List { val desiredNumberOfAssignees = when (val expression = this.expression) { - is SmlCall -> expression.resultsOrNull()?.size ?: 0 + is SdsCall -> expression.resultsOrNull()?.size ?: 0 else -> 1 } return buildList { addAll(assigneesOrEmpty()) while (size < desiredNumberOfAssignees) { - add(createSmlWildcard()) + add(createSdsWildcard()) } } } @@ -662,22 +662,22 @@ private fun SmlAssignment.paddedAssignees(): List { /** * Returns a unique but consistent name for this lambda. */ -private fun SmlBlockLambda.uniqueName(blockLambdaIdManager: IdManager): String { +private fun SdsBlockLambda.uniqueName(blockLambdaIdManager: IdManager): String { val id = blockLambdaIdManager.assignIdIfAbsent(this).value return "__block_lambda_$id" } /** - * Returns a new list that only contains the [SmlAbstractStatement] that have some effect. + * Returns a new list that only contains the [SdsAbstractStatement] that have some effect. */ -private fun List.withEffect(): List { +private fun List.withEffect(): List { return this.filter { !it.statementHasNoSideEffects() } } /** * Returns a new list with the arguments in the same order as the corresponding parameters. */ -private fun SmlArgumentList?.sortedByParameter(): List { +private fun SdsArgumentList?.sortedByParameter(): List { val parameters = this?.parametersOrNull() ?: return emptyList() val arguments = this.arguments diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/LspPosition.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/LspPosition.kt similarity index 98% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/LspPosition.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/LspPosition.kt index 3aa4225e7..0060ca31e 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/LspPosition.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/LspPosition.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.location +package com.larsreimann.safeds.location /** * A specific position in a program using the zero-based indexing of LSP. diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/LspRange.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/LspRange.kt similarity index 95% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/LspRange.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/LspRange.kt index 9da205d6e..08466e340 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/LspRange.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/LspRange.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.location +package com.larsreimann.safeds.location /** * A range in a program from a start to an end position with some length using the zero-based indexing of LSP. diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/ProgramRangeLength.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/ProgramRangeLength.kt similarity index 92% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/ProgramRangeLength.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/ProgramRangeLength.kt index cf06d3c7e..3847635a3 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/ProgramRangeLength.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/ProgramRangeLength.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.location +package com.larsreimann.safeds.location /** * The number of characters in a program range (Xtext/LSP). This value must be non-negative. diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/XtextPosition.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/XtextPosition.kt similarity index 98% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/XtextPosition.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/XtextPosition.kt index aadad529f..13ff2cbdc 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/XtextPosition.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/XtextPosition.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.location +package com.larsreimann.safeds.location /** * A specific position in a program using the one-based indexing of Xtext. diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/XtextRange.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/XtextRange.kt similarity index 95% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/XtextRange.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/XtextRange.kt index b85e46ddc..e07b38b50 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/location/XtextRange.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/location/XtextRange.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.location +package com.larsreimann.safeds.location /** * A range in a program from a start to an end position with some length using the one-based indexing of Xtext. diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/naming/QualifiedNameProvider.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/naming/QualifiedNameProvider.kt similarity index 82% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/naming/QualifiedNameProvider.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/naming/QualifiedNameProvider.kt index e32d94b09..f99d1c2b3 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/naming/QualifiedNameProvider.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/naming/QualifiedNameProvider.kt @@ -1,7 +1,7 @@ -package de.unibonn.simpleml.naming +package com.larsreimann.safeds.naming import com.google.inject.Inject -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration import org.eclipse.xtext.naming.IQualifiedNameConverter import org.eclipse.xtext.naming.IQualifiedNameProvider import org.eclipse.xtext.naming.QualifiedName @@ -18,7 +18,7 @@ internal object QualifiedNameProviderInjectionTarget { /** * Returns the qualified name of the declaration. */ -fun SmlAbstractDeclaration.qualifiedNameOrNull(): QualifiedName? { +fun SdsAbstractDeclaration.qualifiedNameOrNull(): QualifiedName? { return QualifiedNameProviderInjectionTarget.qualifiedNameProvider.getFullyQualifiedName(this) } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/IndexExtensions.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/IndexExtensions.kt similarity index 88% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/IndexExtensions.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/IndexExtensions.kt index 37a5a22ba..3ba3ad441 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/IndexExtensions.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/IndexExtensions.kt @@ -1,9 +1,9 @@ -package de.unibonn.simpleml.scoping +package com.larsreimann.safeds.scoping import com.google.inject.Inject -import de.unibonn.simpleml.scoping.IndexExtensionsInjectionTarget.containerManager -import de.unibonn.simpleml.scoping.IndexExtensionsInjectionTarget.resourceDescriptionsProvider -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.scoping.IndexExtensionsInjectionTarget.containerManager +import com.larsreimann.safeds.scoping.IndexExtensionsInjectionTarget.resourceDescriptionsProvider import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.resource.Resource import org.eclipse.emf.ecore.resource.ResourceSet @@ -92,10 +92,10 @@ private fun ResourceSet.resourceDescriptions(): IResourceDescriptions { */ private fun IEObjectDescription.isGlobalDeclaration(): Boolean { return this.eClass in setOf( - Literals.SML_ANNOTATION, - Literals.SML_CLASS, - Literals.SML_ENUM, - Literals.SML_FUNCTION, - Literals.SML_STEP + Literals.SDS_ANNOTATION, + Literals.SDS_CLASS, + Literals.SDS_ENUM, + Literals.SDS_FUNCTION, + Literals.SDS_STEP ) } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLImportedNamespaceAwareLocalScopeProvider.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSImportedNamespaceAwareLocalScopeProvider.kt similarity index 89% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLImportedNamespaceAwareLocalScopeProvider.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSImportedNamespaceAwareLocalScopeProvider.kt index 2ff2a4f76..3bf8dd634 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLImportedNamespaceAwareLocalScopeProvider.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSImportedNamespaceAwareLocalScopeProvider.kt @@ -1,21 +1,21 @@ -package de.unibonn.simpleml.scoping +package com.larsreimann.safeds.scoping -import de.unibonn.simpleml.emf.aliasNameOrNull -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SmlCompilationUnit +import com.larsreimann.safeds.emf.aliasNameOrNull +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SdsCompilationUnit import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.naming.QualifiedName import org.eclipse.xtext.scoping.impl.ImportNormalizer import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider -class SimpleMLImportedNamespaceAwareLocalScopeProvider : ImportedNamespaceAwareLocalScopeProvider() { +class SafeDSImportedNamespaceAwareLocalScopeProvider : ImportedNamespaceAwareLocalScopeProvider() { /** - * Import all declarations from the listed packages implicitly, such as "simpleml.lang". + * Import all declarations from the listed packages implicitly, such as "safeds.lang". */ override fun getImplicitImports(ignoreCase: Boolean): List { return listOf( - ImportNormalizer(QualifiedName.create("simpleml", "lang"), true, ignoreCase) + ImportNormalizer(QualifiedName.create("safeds", "lang"), true, ignoreCase) ) } @@ -29,7 +29,7 @@ class SimpleMLImportedNamespaceAwareLocalScopeProvider : ImportedNamespaceAwareL ignoreCase: Boolean ): List { - if (context !is SmlCompilationUnit) { + if (context !is SdsCompilationUnit) { return emptyList() } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLResourceDescriptionStrategy.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSResourceDescriptionStrategy.kt similarity index 56% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLResourceDescriptionStrategy.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSResourceDescriptionStrategy.kt index f05da5b19..370ed7189 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLResourceDescriptionStrategy.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSResourceDescriptionStrategy.kt @@ -1,18 +1,18 @@ -package de.unibonn.simpleml.scoping +package com.larsreimann.safeds.scoping -import de.unibonn.simpleml.constant.SmlVisibility -import de.unibonn.simpleml.constant.visibility -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlPredicate -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlTypeParameter +import com.larsreimann.safeds.constant.SdsVisibility +import com.larsreimann.safeds.constant.visibility +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsPredicate +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsTypeParameter import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.resource.IEObjectDescription import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy @@ -21,44 +21,44 @@ import org.eclipse.xtext.util.IAcceptor /** * Describes which objects are exported to other resources. */ -class SimpleMLResourceDescriptionStrategy : DefaultResourceDescriptionStrategy() { +class SafeDSResourceDescriptionStrategy : DefaultResourceDescriptionStrategy() { override fun createEObjectDescriptions(eObject: EObject, acceptor: IAcceptor): Boolean { return when (eObject) { - is SmlCompilationUnit -> { + is SdsCompilationUnit -> { super.createEObjectDescriptions(eObject, acceptor) } - is SmlAnnotation -> { + is SdsAnnotation -> { super.createEObjectDescriptions(eObject, acceptor) } - is SmlAttribute -> { + is SdsAttribute -> { super.createEObjectDescriptions(eObject, acceptor) false } - is SmlClass -> { + is SdsClass -> { super.createEObjectDescriptions(eObject, acceptor) } - is SmlEnum -> { + is SdsEnum -> { super.createEObjectDescriptions(eObject, acceptor) } - is SmlEnumVariant -> { + is SdsEnumVariant -> { super.createEObjectDescriptions(eObject, acceptor) } - is SmlFunction -> { + is SdsFunction -> { super.createEObjectDescriptions(eObject, acceptor) } - is SmlPredicate -> { + is SdsPredicate -> { super.createEObjectDescriptions(eObject, acceptor) } - is SmlParameter -> { + is SdsParameter -> { super.createEObjectDescriptions(eObject, acceptor) false } - is SmlTypeParameter -> { + is SdsTypeParameter -> { super.createEObjectDescriptions(eObject, acceptor) false } - is SmlStep -> { - if (eObject.visibility() != SmlVisibility.Private) { + is SdsStep -> { + if (eObject.visibility() != SdsVisibility.Private) { super.createEObjectDescriptions(eObject, acceptor) } else { false diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLScopeProvider.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSScopeProvider.kt similarity index 56% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLScopeProvider.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSScopeProvider.kt index 9c6a000ab..d9ef9d7ac 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLScopeProvider.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSScopeProvider.kt @@ -1,61 +1,61 @@ -package de.unibonn.simpleml.scoping - -import de.unibonn.simpleml.constant.SmlVisibility -import de.unibonn.simpleml.constant.visibility -import de.unibonn.simpleml.emf.classMembersOrEmpty -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.compilationUnitOrNull -import de.unibonn.simpleml.emf.containingCallableOrNull -import de.unibonn.simpleml.emf.containingClassOrNull -import de.unibonn.simpleml.emf.containingCompilationUnitOrNull -import de.unibonn.simpleml.emf.containingProtocolOrNull -import de.unibonn.simpleml.emf.isStatic -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.placeholdersOrEmpty -import de.unibonn.simpleml.emf.subtermsOrEmpty -import de.unibonn.simpleml.emf.typeParametersOrNull -import de.unibonn.simpleml.emf.variantsOrEmpty -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SimpleMLPackage -import de.unibonn.simpleml.simpleML.SmlAbstractLambda -import de.unibonn.simpleml.simpleML.SmlAbstractNamedTypeDeclaration -import de.unibonn.simpleml.simpleML.SmlAbstractProtocolToken -import de.unibonn.simpleml.simpleML.SmlAbstractStatement -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlArgumentList -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlBlock -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlConstraint -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlGoalReference -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlMemberType -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlProtocol -import de.unibonn.simpleml.simpleML.SmlProtocolReference -import de.unibonn.simpleml.simpleML.SmlProtocolSubterm -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlTypeArgument -import de.unibonn.simpleml.simpleML.SmlTypeArgumentList -import de.unibonn.simpleml.simpleML.SmlTypeParameterConstraintGoal -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.staticAnalysis.classHierarchy.superClassMembers -import de.unibonn.simpleml.staticAnalysis.linking.parametersOrNull -import de.unibonn.simpleml.staticAnalysis.linking.typeParametersOrNull -import de.unibonn.simpleml.staticAnalysis.resultsOrNull -import de.unibonn.simpleml.staticAnalysis.typing.ClassType -import de.unibonn.simpleml.staticAnalysis.typing.EnumType -import de.unibonn.simpleml.staticAnalysis.typing.EnumVariantType -import de.unibonn.simpleml.staticAnalysis.typing.NamedType -import de.unibonn.simpleml.staticAnalysis.typing.type +package com.larsreimann.safeds.scoping + +import com.larsreimann.safeds.constant.SdsVisibility +import com.larsreimann.safeds.constant.visibility +import com.larsreimann.safeds.emf.classMembersOrEmpty +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.compilationUnitOrNull +import com.larsreimann.safeds.emf.containingCallableOrNull +import com.larsreimann.safeds.emf.containingClassOrNull +import com.larsreimann.safeds.emf.containingCompilationUnitOrNull +import com.larsreimann.safeds.emf.containingProtocolOrNull +import com.larsreimann.safeds.emf.isStatic +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.placeholdersOrEmpty +import com.larsreimann.safeds.emf.subtermsOrEmpty +import com.larsreimann.safeds.emf.typeParametersOrNull +import com.larsreimann.safeds.emf.variantsOrEmpty +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SafeDSPackage +import com.larsreimann.safeds.safeDS.SdsAbstractLambda +import com.larsreimann.safeds.safeDS.SdsAbstractNamedTypeDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractProtocolToken +import com.larsreimann.safeds.safeDS.SdsAbstractStatement +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsArgumentList +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsBlock +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsConstraint +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsGoalReference +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsMemberType +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsProtocol +import com.larsreimann.safeds.safeDS.SdsProtocolReference +import com.larsreimann.safeds.safeDS.SdsProtocolSubterm +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsTypeArgument +import com.larsreimann.safeds.safeDS.SdsTypeArgumentList +import com.larsreimann.safeds.safeDS.SdsTypeParameterConstraintGoal +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.staticAnalysis.classHierarchy.superClassMembers +import com.larsreimann.safeds.staticAnalysis.linking.parametersOrNull +import com.larsreimann.safeds.staticAnalysis.linking.typeParametersOrNull +import com.larsreimann.safeds.staticAnalysis.resultsOrNull +import com.larsreimann.safeds.staticAnalysis.typing.ClassType +import com.larsreimann.safeds.staticAnalysis.typing.EnumType +import com.larsreimann.safeds.staticAnalysis.typing.EnumVariantType +import com.larsreimann.safeds.staticAnalysis.typing.NamedType +import com.larsreimann.safeds.staticAnalysis.typing.type import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EReference import org.eclipse.emf.ecore.resource.Resource @@ -71,39 +71,39 @@ import org.eclipse.xtext.scoping.impl.FilteringScope * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping * on how and when to use it. */ -class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { +class SafeDSScopeProvider : AbstractSafeDSScopeProvider() { override fun getScope(context: EObject, reference: EReference): IScope { return when (context) { - is SmlArgument -> scopeForArgumentParameter(context) - is SmlGoalReference -> scopeForGoalReferenceDeclaration(context) - is SmlNamedType -> scopeForNamedTypeDeclaration(context) - is SmlProtocolReference -> scopeForProtocolReferenceToken(context) - is SmlReference -> scopeForReferenceDeclaration(context) - is SmlTypeArgument -> scopeForTypeArgumentTypeParameter(context) - is SmlTypeParameterConstraintGoal -> scopeForTypeParameterConstraintLeftOperand(context) - is SmlAnnotationCall, is SmlYield -> { + is SdsArgument -> scopeForArgumentParameter(context) + is SdsGoalReference -> scopeForGoalReferenceDeclaration(context) + is SdsNamedType -> scopeForNamedTypeDeclaration(context) + is SdsProtocolReference -> scopeForProtocolReferenceToken(context) + is SdsReference -> scopeForReferenceDeclaration(context) + is SdsTypeArgument -> scopeForTypeArgumentTypeParameter(context) + is SdsTypeParameterConstraintGoal -> scopeForTypeParameterConstraintLeftOperand(context) + is SdsAnnotationCall, is SdsYield -> { super.getScope(context, reference) } else -> IScope.NULLSCOPE } } - private fun scopeForArgumentParameter(smlArgument: SmlArgument): IScope { - val parameters = smlArgument - .closestAncestorOrNull() + private fun scopeForArgumentParameter(sdsArgument: SdsArgument): IScope { + val parameters = sdsArgument + .closestAncestorOrNull() ?.parametersOrNull() ?: emptyList() return Scopes.scopeFor(parameters) } - private fun scopeForGoalReferenceDeclaration(context: SmlGoalReference): IScope { + private fun scopeForGoalReferenceDeclaration(context: SdsGoalReference): IScope { val resource = context.eResource() val packageName = context.containingCompilationUnitOrNull()?.qualifiedNameOrNull() // Declarations in other files var result: IScope = FilteringScope( - super.delegateGetScope(context, SimpleMLPackage.Literals.SML_GOAL_REFERENCE__DECLARATION) + super.delegateGetScope(context, SafeDSPackage.Literals.SDS_GOAL_REFERENCE__DECLARATION) ) { it.isReferencableExternalDeclaration(resource, packageName) } @@ -115,17 +115,17 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { return declarationsInSamePackageDeclaration(resource, result) } - private fun scopeForReferenceDeclaration(context: SmlReference): IScope { + private fun scopeForReferenceDeclaration(context: SdsReference): IScope { val container = context.eContainer() return when { - container is SmlMemberAccess && container.member == context -> scopeForMemberAccessDeclaration(container) + container is SdsMemberAccess && container.member == context -> scopeForMemberAccessDeclaration(container) else -> { val resource = context.eResource() val packageName = context.containingCompilationUnitOrNull()?.qualifiedNameOrNull() // Declarations in other files var result: IScope = FilteringScope( - super.delegateGetScope(context, SimpleMLPackage.Literals.SML_REFERENCE__DECLARATION) + super.delegateGetScope(context, SafeDSPackage.Literals.SDS_REFERENCE__DECLARATION) ) { it.isReferencableExternalDeclaration(resource, packageName) } @@ -148,8 +148,8 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { } /** - * Removes declarations in this [Resource], [SmlAnnotation]s, and internal [SmlStep]s located in other - * [SmlCompilationUnit]s. + * Removes declarations in this [Resource], [SdsAnnotation]s, and internal [SdsStep]s located in other + * [SdsCompilationUnit]s. */ private fun IEObjectDescription?.isReferencableExternalDeclaration( fromResource: Resource, @@ -165,28 +165,28 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { if (obj.eResource() == fromResource) return false // Annotations cannot be referenced - if (obj is SmlAnnotation) return false + if (obj is SdsAnnotation) return false // Internal steps in another package cannot be referenced return !( - obj is SmlStep && - obj.visibility() == SmlVisibility.Internal && + obj is SdsStep && + obj.visibility() == SdsVisibility.Internal && obj.containingCompilationUnitOrNull()?.qualifiedNameOrNull() != fromPackageWithQualifiedName ) } - private fun scopeForMemberAccessDeclaration(context: SmlMemberAccess): IScope { + private fun scopeForMemberAccessDeclaration(context: SdsMemberAccess): IScope { val receiver = context.receiver // Static access val receiverDeclaration = when (receiver) { - is SmlReference -> receiver.declaration - is SmlMemberAccess -> receiver.member.declaration + is SdsReference -> receiver.declaration + is SdsMemberAccess -> receiver.member.declaration else -> null } if (receiverDeclaration != null) { when (receiverDeclaration) { - is SmlClass -> { + is SdsClass -> { val members = receiverDeclaration.classMembersOrEmpty().filter { it.isStatic() } val superTypeMembers = receiverDeclaration.superClassMembers() .filter { it.isStatic() } @@ -194,7 +194,7 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { return Scopes.scopeFor(members, Scopes.scopeFor(superTypeMembers)) } - is SmlEnum -> { + is SdsEnum -> { return Scopes.scopeFor(receiverDeclaration.variantsOrEmpty()) } } @@ -202,7 +202,7 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { // Call results var resultScope = IScope.NULLSCOPE - if (receiver is SmlCall) { + if (receiver is SdsCall) { val results = receiver.resultsOrNull() when { results == null -> return IScope.NULLSCOPE @@ -217,14 +217,14 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { return when { type.isNullable && !context.isNullSafe -> resultScope type is ClassType -> { - val members = type.smlClass.classMembersOrEmpty().filter { !it.isStatic() } - val superTypeMembers = type.smlClass.superClassMembers() + val members = type.sdsClass.classMembersOrEmpty().filter { !it.isStatic() } + val superTypeMembers = type.sdsClass.superClassMembers() .filter { !it.isStatic() } .toList() Scopes.scopeFor(members, Scopes.scopeFor(superTypeMembers, resultScope)) } - type is EnumVariantType -> Scopes.scopeFor(type.smlEnumVariant.parametersOrEmpty()) + type is EnumVariantType -> Scopes.scopeFor(type.sdsEnumVariant.parametersOrEmpty()) else -> resultScope } } @@ -239,7 +239,7 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { val members = resource.compilationUnitOrNull() ?.members - ?.filter { it !is SmlAnnotation && it !is SmlWorkflow } + ?.filter { it !is SdsAnnotation && it !is SdsWorkflow } ?: emptyList() return Scopes.scopeFor( @@ -251,7 +251,7 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { private fun declarationsInSamePackageDeclaration(resource: Resource, parentScope: IScope): IScope { val members = resource.compilationUnitOrNull() ?.members - ?.filter { it !is SmlAnnotation && it !is SmlWorkflow } + ?.filter { it !is SdsAnnotation && it !is SdsWorkflow } ?: emptyList() return Scopes.scopeFor( @@ -260,9 +260,9 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { ) } - private fun classMembers(context: SmlClass, parentScope: IScope): IScope { + private fun classMembers(context: SdsClass, parentScope: IScope): IScope { return when (val containingClassOrNull = context.containingClassOrNull()) { - is SmlClass -> Scopes.scopeFor( + is SdsClass -> Scopes.scopeFor( context.classMembersOrEmpty(), classMembers(containingClassOrNull, parentScope) ) @@ -273,11 +273,11 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { private fun localDeclarations(context: EObject, parentScope: IScope): IScope { // Placeholders - val placeholders = when (val containingStatement = context.closestAncestorOrNull()) { + val placeholders = when (val containingStatement = context.closestAncestorOrNull()) { null -> emptyList() else -> containingStatement - .closestAncestorOrNull() + .closestAncestorOrNull() ?.placeholdersUpTo(containingStatement) .orEmpty() } @@ -292,7 +292,7 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { return when (containingCallable) { // Lambdas can be nested - is SmlAbstractLambda -> Scopes.scopeFor( + is SdsAbstractLambda -> Scopes.scopeFor( localDeclarations, localDeclarations(containingCallable, parentScope) ) @@ -300,51 +300,51 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { } } - private fun SmlBlock.placeholdersUpTo(containingStatement: SmlAbstractStatement): List { + private fun SdsBlock.placeholdersUpTo(containingStatement: SdsAbstractStatement): List { return this.statements .takeWhile { it !== containingStatement } - .filterIsInstance() + .filterIsInstance() .flatMap { it.placeholdersOrEmpty() } } - private fun scopeForNamedTypeDeclaration(context: SmlNamedType): IScope { + private fun scopeForNamedTypeDeclaration(context: SdsNamedType): IScope { val container = context.eContainer() return when { - container is SmlMemberType && container.member == context -> scopeForMemberTypeDeclaration(container) + container is SdsMemberType && container.member == context -> scopeForMemberTypeDeclaration(container) else -> { - super.getScope(context, SimpleMLPackage.Literals.SML_NAMED_TYPE__DECLARATION) + super.getScope(context, SafeDSPackage.Literals.SDS_NAMED_TYPE__DECLARATION) } } } - private fun scopeForMemberTypeDeclaration(context: SmlMemberType): IScope { + private fun scopeForMemberTypeDeclaration(context: SdsMemberType): IScope { val type = (context.receiver.type() as? NamedType) ?: return IScope.NULLSCOPE return when { type.isNullable -> IScope.NULLSCOPE type is ClassType -> { val members = - type.smlClass.classMembersOrEmpty().filterIsInstance() - val superTypeMembers = type.smlClass.superClassMembers() - .filterIsInstance() + type.sdsClass.classMembersOrEmpty().filterIsInstance() + val superTypeMembers = type.sdsClass.superClassMembers() + .filterIsInstance() .toList() Scopes.scopeFor(members, Scopes.scopeFor(superTypeMembers)) } - type is EnumType -> Scopes.scopeFor(type.smlEnum.variantsOrEmpty()) + type is EnumType -> Scopes.scopeFor(type.sdsEnum.variantsOrEmpty()) else -> IScope.NULLSCOPE } } - private fun scopeForProtocolReferenceToken(context: SmlProtocolReference): IScope { + private fun scopeForProtocolReferenceToken(context: SdsProtocolReference): IScope { val containingClass = context.containingClassOrNull() ?: return IScope.NULLSCOPE val containingProtocol = context.containingProtocolOrNull() ?: return IScope.NULLSCOPE - val containingSubtermOrNull = context.closestAncestorOrNull() + val containingSubtermOrNull = context.closestAncestorOrNull() // Own & inherited class members - val members = containingClass.classMembersOrEmpty().filterIsInstance() + val members = containingClass.classMembersOrEmpty().filterIsInstance() val superTypeMembers = containingClass.superClassMembers() - .filterIsInstance() + .filterIsInstance() .toList() val resultScope = Scopes.scopeFor(members, Scopes.scopeFor(superTypeMembers)) @@ -353,7 +353,7 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { return Scopes.scopeFor(containingProtocol.subtermsUpTo(containingSubtermOrNull), resultScope) } - private fun SmlProtocol.subtermsUpTo(containingSubtermOrNull: SmlProtocolSubterm?): List { + private fun SdsProtocol.subtermsUpTo(containingSubtermOrNull: SdsProtocolSubterm?): List { if (containingSubtermOrNull == null) { return this.subtermsOrEmpty() } @@ -361,18 +361,18 @@ class SimpleMLScopeProvider : AbstractSimpleMLScopeProvider() { return this.subtermsOrEmpty().takeWhile { it !== containingSubtermOrNull } } - private fun scopeForTypeArgumentTypeParameter(smlTypeArgument: SmlTypeArgument): IScope { - val typeParameters = smlTypeArgument - .closestAncestorOrNull() + private fun scopeForTypeArgumentTypeParameter(sdsTypeArgument: SdsTypeArgument): IScope { + val typeParameters = sdsTypeArgument + .closestAncestorOrNull() ?.typeParametersOrNull() ?: emptyList() return Scopes.scopeFor(typeParameters) } - private fun scopeForTypeParameterConstraintLeftOperand(smlTypeParameterConstraintGoal: SmlTypeParameterConstraintGoal): IScope { - val typeParameters = smlTypeParameterConstraintGoal - .closestAncestorOrNull() + private fun scopeForTypeParameterConstraintLeftOperand(sdsTypeParameterConstraintGoal: SdsTypeParameterConstraintGoal): IScope { + val typeParameters = sdsTypeParameterConstraintGoal + .closestAncestorOrNull() ?.typeParametersOrNull() ?: emptyList() diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/CommentAdapters.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/CommentAdapters.kt similarity index 95% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/CommentAdapters.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/CommentAdapters.kt index 821aea393..1bc45400d 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/CommentAdapters.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/CommentAdapters.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.serializer +package com.larsreimann.safeds.serializer import org.eclipse.emf.common.notify.impl.AdapterImpl import org.eclipse.emf.ecore.EObject diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLCrossReferenceSerializer.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSCrossReferenceSerializer.kt similarity index 76% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLCrossReferenceSerializer.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSCrossReferenceSerializer.kt index 5176a55fc..137357985 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLCrossReferenceSerializer.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSCrossReferenceSerializer.kt @@ -1,6 +1,6 @@ -package de.unibonn.simpleml.serializer +package com.larsreimann.safeds.serializer -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.CrossReference import org.eclipse.xtext.nodemodel.INode @@ -8,7 +8,7 @@ import org.eclipse.xtext.scoping.IScope import org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic import org.eclipse.xtext.serializer.tokens.CrossReferenceSerializer -class SimpleMLCrossReferenceSerializer : CrossReferenceSerializer() { +class SafeDSCrossReferenceSerializer : CrossReferenceSerializer() { override fun getCrossReferenceNameFromScope( semanticObject: EObject, @@ -18,7 +18,7 @@ class SimpleMLCrossReferenceSerializer : CrossReferenceSerializer() { errors: ISerializationDiagnostic.Acceptor? ): String { return when (target) { - is SmlAbstractDeclaration -> target.name + is SdsAbstractDeclaration -> target.name else -> super.getCrossReferenceNameFromScope(semanticObject, crossref, target, scope, errors) } } @@ -30,6 +30,6 @@ class SimpleMLCrossReferenceSerializer : CrossReferenceSerializer() { node: INode, errors: ISerializationDiagnostic.Acceptor? ): Boolean { - return target is SmlAbstractDeclaration + return target is SdsAbstractDeclaration } } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSHiddenTokenSequencer.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSHiddenTokenSequencer.kt new file mode 100644 index 000000000..bca0326f5 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSHiddenTokenSequencer.kt @@ -0,0 +1,27 @@ +package com.larsreimann.safeds.serializer + +import com.google.inject.Inject +import com.larsreimann.safeds.services.SafeDSGrammarAccess +import org.eclipse.emf.ecore.EObject +import org.eclipse.xtext.RuleCall +import org.eclipse.xtext.nodemodel.ICompositeNode +import org.eclipse.xtext.serializer.sequencer.HiddenTokenSequencer + +@Suppress("unused") +class SafeDSHiddenTokenSequencer @Inject constructor( + private val grammarAccess: SafeDSGrammarAccess +) : HiddenTokenSequencer() { + + override fun enterAssignedParserRuleCall(rc: RuleCall, semanticChild: EObject, node: ICompositeNode?): Boolean { + semanticChild.eAdapters() + .filterIsInstance() + .forEach { + val rule = when (it) { + is SingleLineCommentAdapter -> grammarAccess.sL_COMMENTRule + is MultiLineCommentAdapter -> grammarAccess.mL_COMMENTRule + } + delegate.acceptComment(rule, it.toString(), null) + } + return super.enterAssignedParserRuleCall(rc, semanticChild, node) + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSSemanticSequencer.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSSemanticSequencer.kt new file mode 100644 index 000000000..1cf33c9ce --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSSemanticSequencer.kt @@ -0,0 +1,3 @@ +package com.larsreimann.safeds.serializer + +internal class SafeDSSemanticSequencer : AbstractSafeDSSemanticSequencer() diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSSyntacticSequencer.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSSyntacticSequencer.kt new file mode 100644 index 000000000..f7c9a290a --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SafeDSSyntacticSequencer.kt @@ -0,0 +1,3 @@ +package com.larsreimann.safeds.serializer + +class SafeDSSyntacticSequencer : AbstractSafeDSSyntacticSequencer() diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SerializerExtensions.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SerializerExtensions.kt similarity index 98% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SerializerExtensions.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SerializerExtensions.kt index 424875030..5653b20bd 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SerializerExtensions.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/serializer/SerializerExtensions.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.serializer +package com.larsreimann.safeds.serializer import com.google.inject.Inject import org.eclipse.emf.ecore.EObject diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/AssigneeToValue.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/AssigneeToValue.kt similarity index 53% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/AssigneeToValue.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/AssigneeToValue.kt index 4557bfcc5..26330d018 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/AssigneeToValue.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/AssigneeToValue.kt @@ -1,14 +1,14 @@ -package de.unibonn.simpleml.staticAnalysis +package com.larsreimann.safeds.staticAnalysis -import de.unibonn.simpleml.emf.assigneesOrEmpty -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.simpleML.SmlAbstractAssignee -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlAbstractObject -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlCall +import com.larsreimann.safeds.emf.assigneesOrEmpty +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.safeDS.SdsAbstractAssignee +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsAbstractObject +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsCall -fun SmlAbstractAssignee.assignedOrNull(): SmlAbstractObject? { +fun SdsAbstractAssignee.assignedOrNull(): SdsAbstractObject? { return when (val maybeAssigned = this.maybeAssigned()) { is AssignedResult.Assigned -> maybeAssigned.assigned else -> null @@ -19,20 +19,20 @@ sealed interface AssignedResult { object Unresolved : AssignedResult object NotAssigned : AssignedResult sealed class Assigned : AssignedResult { - abstract val assigned: SmlAbstractObject + abstract val assigned: SdsAbstractObject } - class AssignedExpression(override val assigned: SmlAbstractExpression) : Assigned() - class AssignedDeclaration(override val assigned: SmlAbstractObject) : Assigned() + class AssignedExpression(override val assigned: SdsAbstractExpression) : Assigned() + class AssignedDeclaration(override val assigned: SdsAbstractObject) : Assigned() } -fun SmlAbstractAssignee.maybeAssigned(): AssignedResult { - val assignment = this.closestAncestorOrNull() ?: return AssignedResult.Unresolved +fun SdsAbstractAssignee.maybeAssigned(): AssignedResult { + val assignment = this.closestAncestorOrNull() ?: return AssignedResult.Unresolved val expression = assignment.expression ?: return AssignedResult.NotAssigned val thisIndex = assignment.assigneeList.assignees.indexOf(this) return when (expression) { - is SmlCall -> { + is SdsCall -> { val results = expression.resultsOrNull() ?: return AssignedResult.Unresolved val result = results.getOrNull(thisIndex) ?: return AssignedResult.NotAssigned AssignedResult.AssignedDeclaration(result) @@ -44,7 +44,7 @@ fun SmlAbstractAssignee.maybeAssigned(): AssignedResult { } } -fun SmlAbstractAssignee.indexOrNull(): Int? { - val assignment = closestAncestorOrNull() ?: return null +fun SdsAbstractAssignee.indexOrNull(): Int? { + val assignment = closestAncestorOrNull() ?: return null return assignment.assigneesOrEmpty().indexOf(this) } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/CallToCallable.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/CallToCallable.kt new file mode 100644 index 000000000..1ab153f5c --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/CallToCallable.kt @@ -0,0 +1,111 @@ +package com.larsreimann.safeds.staticAnalysis + +import com.larsreimann.safeds.emf.blockLambdaResultsOrEmpty +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.resultsOrEmpty +import com.larsreimann.safeds.safeDS.SdsAbstractAssignee +import com.larsreimann.safeds.safeDS.SdsAbstractCallable +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsAbstractObject +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCallableType +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionLambda +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsParenthesizedExpression +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsStep +import org.eclipse.emf.ecore.EObject + +fun SdsCall.callableOrNull(): SdsAbstractCallable? { + return when (val maybeCallable = this.maybeCallable()) { + is CallableResult.Callable -> maybeCallable.callable + else -> null + } +} + +sealed interface CallableResult { + object Unresolvable : CallableResult + object NotCallable : CallableResult + class Callable(val callable: SdsAbstractCallable) : CallableResult +} + +fun SdsCall.maybeCallable(): CallableResult { + val visited = mutableSetOf() + var current: EObject? = this.receiver + while (current != null && current !in visited) { + visited += current + + current = when { + current.eIsProxy() -> return CallableResult.Unresolvable + current is SdsAbstractCallable -> return CallableResult.Callable(current) + current is SdsCall -> { + val results = current.resultsOrNull() + if (results == null || results.size != 1) { + return CallableResult.Unresolvable + } + + results.first() + } + current is SdsAbstractAssignee -> current.assignedOrNull() + current is SdsMemberAccess -> current.member.declaration + current is SdsParameter -> return when (val typeOrNull = current.type) { + null -> CallableResult.Unresolvable + is SdsCallableType -> CallableResult.Callable(typeOrNull) + else -> CallableResult.NotCallable + } + current is SdsParenthesizedExpression -> current.expression + current is SdsReference -> current.declaration + current is SdsResult -> return when (val typeOrNull = current.type) { + null -> CallableResult.Unresolvable + is SdsCallableType -> CallableResult.Callable(typeOrNull) + else -> CallableResult.NotCallable + } + else -> return CallableResult.NotCallable + } + } + + return CallableResult.Unresolvable +} + +/** + * Returns the list of [SdsParameter]s of the called callable or `null` if it cannot be resolved. + */ +fun SdsCall.parametersOrNull(): List? { + return callableOrNull()?.parametersOrEmpty() +} + +/** + * Returns the list of [SdsAbstractObject]s that are returned by the called callable or `null` if it cannot be resolved. + * Possible types depend on the called callable: + * - [SdsBlockLambda] -> [SdsBlockLambdaResult] + * - [SdsCallableType] -> [SdsResult] + * - [SdsClass] -> [SdsClass] + * - [SdsEnumVariant] -> [SdsEnumVariant] + * - [SdsExpressionLambda] -> [SdsAbstractExpression] + * - [SdsFunction] -> [SdsResult] + * - [SdsStep] -> [SdsResult] + */ +fun SdsCall.resultsOrNull(): List? { + return when (val callable = this.callableOrNull()) { + is SdsBlockLambda -> callable.blockLambdaResultsOrEmpty() + is SdsCallableType -> callable.resultsOrEmpty() + is SdsClass -> listOf(callable) + is SdsEnumVariant -> listOf(callable) + is SdsExpressionLambda -> listOf(callable.result) + is SdsFunction -> callable.resultsOrEmpty() + is SdsStep -> callable.resultsOrEmpty() + else -> null + } +} + +sealed interface ResultsResult { + object Unresolved : ResultsResult + object NotCallable : ResultsResult +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/LocalDeclarationToReferences.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/LocalDeclarationToReferences.kt new file mode 100644 index 000000000..8713268d8 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/LocalDeclarationToReferences.kt @@ -0,0 +1,25 @@ +package com.larsreimann.safeds.staticAnalysis + +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.placeholdersOrEmpty +import com.larsreimann.safeds.safeDS.SdsAbstractObject +import com.larsreimann.safeds.safeDS.SdsAbstractStatement +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsReference + +fun SdsParameter.usesIn(obj: SdsAbstractObject): Sequence { + return obj + .descendants() + .filter { it.declaration == this } +} + +fun SdsPlaceholder.usesIn(obj: SdsAbstractObject): Sequence { + return obj + .descendants() + .dropWhile { it !is SdsAssignment || this !in it.placeholdersOrEmpty() } + .drop(1) + .flatMap { it.descendants() } + .filter { it.declaration == this } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/Recursion.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/Recursion.kt similarity index 59% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/Recursion.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/Recursion.kt index 799ae257a..20d8400f4 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/Recursion.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/Recursion.kt @@ -1,14 +1,14 @@ -package de.unibonn.simpleml.staticAnalysis +package com.larsreimann.safeds.staticAnalysis -import de.unibonn.simpleml.emf.containingCallableOrNull -import de.unibonn.simpleml.emf.immediateCalls -import de.unibonn.simpleml.simpleML.SmlAbstractCallable -import de.unibonn.simpleml.simpleML.SmlCall +import com.larsreimann.safeds.emf.containingCallableOrNull +import com.larsreimann.safeds.emf.immediateCalls +import com.larsreimann.safeds.safeDS.SdsAbstractCallable +import com.larsreimann.safeds.safeDS.SdsCall /** * Returns whether this call might lead to recursion. */ -fun SmlCall.isRecursive(): Boolean { +fun SdsCall.isRecursive(): Boolean { val visited = buildSet { val containingCallable = containingCallableOrNull() if (containingCallable != null) { @@ -22,9 +22,9 @@ fun SmlCall.isRecursive(): Boolean { /** * Returns whether this call might lead to recursion. */ -private fun SmlCall.isRecursive(visited: Set): Boolean { +private fun SdsCall.isRecursive(visited: Set): Boolean { return when (val callable = this.callableOrNull()) { - is SmlAbstractCallable -> { + is SdsAbstractCallable -> { callable in visited || callable.immediateCalls().any { it.isRecursive(visited + callable) } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/SideEffects.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/SideEffects.kt new file mode 100644 index 000000000..559bf2543 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/SideEffects.kt @@ -0,0 +1,73 @@ +package com.larsreimann.safeds.staticAnalysis + +import com.larsreimann.safeds.emf.assigneesOrEmpty +import com.larsreimann.safeds.emf.immediateCalls +import com.larsreimann.safeds.safeDS.SdsAbstractCallable +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsAbstractLambda +import com.larsreimann.safeds.safeDS.SdsAbstractStatement +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCallableType +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionStatement +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsWildcard +import com.larsreimann.safeds.stdlibAccess.hasNoSideEffects + +/** + * Whether this [SdsAbstractStatement] has no side effects and, thus, can be removed. + * + * @param resultIfUnknown What to return if neither purity nor impurity can be proven. Note that external functions are + * still always assumed to have side effects unless they are marked with `@Pure` or `@NoSideEffects. + */ +fun SdsAbstractStatement.statementHasNoSideEffects(resultIfUnknown: Boolean = false): Boolean { + return when (this) { + is SdsAssignment -> { + assigneesOrEmpty().all { it is SdsWildcard } && expression.expressionHasNoSideEffects(resultIfUnknown) + } + is SdsExpressionStatement -> { + expression.expressionHasNoSideEffects(resultIfUnknown) + } + else -> { + throw IllegalArgumentException("Missing case to handle statement $this.") + } + } +} + +/** + * Whether this [SdsAbstractExpression] has no side effects and, thus, can be removed. + * + * @param resultIfUnknown What to return if neither purity nor impurity can be proven. Note that external functions are + * still always assumed to have side effects unless they are marked with `@Pure` or `@NoSideEffects. + */ +fun SdsAbstractExpression.expressionHasNoSideEffects(resultIfUnknown: Boolean = false): Boolean { + return when (this) { + is SdsCall -> !isRecursive() && callableOrNull().callableHasNoSideEffects(resultIfUnknown) + else -> true + } +} + +/** + * Whether this [SdsAbstractCallable] has no side effects, so calls to this can be removed. + * + * @param resultIfUnknown What to return if neither purity nor impurity can be proven. Note that external functions are + * still always assumed to have side effects unless they are marked with `@Pure` or `@NoSideEffects. + */ +fun SdsAbstractCallable?.callableHasNoSideEffects(resultIfUnknown: Boolean = false): Boolean { + return when (this) { + null -> resultIfUnknown + + is SdsAbstractLambda -> immediateCalls().all { it.expressionHasNoSideEffects(resultIfUnknown) } + is SdsStep -> immediateCalls().all { it.expressionHasNoSideEffects(resultIfUnknown) } + + is SdsCallableType -> resultIfUnknown + is SdsClass -> true + is SdsEnumVariant -> true + is SdsFunction -> hasNoSideEffects() + + else -> throw IllegalArgumentException("Cannot handle callable of type '${this::class.simpleName}'.") + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/classHierarchy/ClassHierarchy.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/classHierarchy/ClassHierarchy.kt new file mode 100644 index 000000000..fabc2b23d --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/classHierarchy/ClassHierarchy.kt @@ -0,0 +1,64 @@ +package com.larsreimann.safeds.staticAnalysis.classHierarchy + +import com.larsreimann.safeds.emf.classMembersOrEmpty +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.parentTypesOrEmpty +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.staticAnalysis.typing.ClassType +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.stdlibAccess.StdlibClasses +import com.larsreimann.safeds.stdlibAccess.getStdlibClassOrNull +import com.larsreimann.safeds.utils.uniqueOrNull + +fun SdsClass.isSubtypeOf(other: SdsClass) = + this == this.getStdlibClassOrNull(StdlibClasses.Nothing) || + this == other || other in superClasses() + +fun SdsClass.superClasses() = sequence { + val visited = mutableSetOf() + + // TODO: multiple parent classes + var current = parentClassOrNull() + while (current != null && current !in visited) { + yield(current) + visited += current + current = current.parentClassOrNull() + } + + val anyClass = this@superClasses.getStdlibClassOrNull(StdlibClasses.Any) + if (anyClass != null && this@superClasses != anyClass && visited.lastOrNull() != anyClass) { + yield(anyClass) + } +} + +fun SdsClass.superClassMembers() = + this.superClasses().flatMap { it.classMembersOrEmpty().asSequence() } + +// TODO only static methods can be hidden +fun SdsFunction.hiddenFunction(): SdsFunction? { + val containingClassOrInterface = closestAncestorOrNull() ?: return null + return containingClassOrInterface.superClassMembers() + .filterIsInstance() + .firstOrNull { it.name == name } +} + +fun SdsClass?.inheritedNonStaticMembersOrEmpty(): Set { + return this?.parentClassesOrEmpty() + ?.flatMap { it.classMembersOrEmpty() } + ?.filter { it is SdsAttribute && !it.isStatic || it is SdsFunction && !it.isStatic } + ?.toSet() + .orEmpty() +} + +fun SdsClass?.parentClassesOrEmpty(): List { + return this.parentTypesOrEmpty().mapNotNull { + (it.type() as? ClassType)?.sdsClass + } +} + +fun SdsClass?.parentClassOrNull(): SdsClass? { + return this.parentClassesOrEmpty().uniqueOrNull() +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ArgumentToParameter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ArgumentToParameter.kt new file mode 100644 index 000000000..ece70bf3d --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ArgumentToParameter.kt @@ -0,0 +1,47 @@ +package com.larsreimann.safeds.staticAnalysis.linking + +import com.larsreimann.safeds.emf.asResolvedOrNull +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.isNamed +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsArgumentList +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.staticAnalysis.parametersOrNull + +/** + * Returns the [SdsParameter] that corresponds to this [SdsArgument] or `null` if it cannot be resolved. + */ +fun SdsArgument.parameterOrNull(): SdsParameter? { + return when { + isNamed() -> parameter.asResolvedOrNull() + else -> { + val argumentList = closestAncestorOrNull() ?: return null + val parameters = argumentList.parametersOrNull() ?: return null + val lastParameter = parameters.lastOrNull() + + val firstNamedArgumentIndex = argumentList.arguments.indexOfFirst { it.isNamed() } + val thisIndex = argumentList.arguments.indexOf(this) + + return when { + lastParameter?.isVariadic == true && thisIndex >= parameters.size - 1 -> lastParameter + firstNamedArgumentIndex != -1 && thisIndex > firstNamedArgumentIndex -> null + else -> parameters.getOrNull(thisIndex) + } + } + } +} + +/** + * Returns the list of [SdsParameter]s that corresponds to this list of [SdsArgument]s or `null` if it cannot be + * resolved. + */ +fun SdsArgumentList.parametersOrNull(): List? { + return when (val parent = this.eContainer()) { + is SdsAnnotationCall -> parent.annotation.asResolvedOrNull()?.parametersOrEmpty() + is SdsCall -> parent.parametersOrNull() + else -> null + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ResultToYield.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ResultToYield.kt new file mode 100644 index 000000000..fc8eb0292 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ResultToYield.kt @@ -0,0 +1,29 @@ +package com.larsreimann.safeds.staticAnalysis.linking + +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.yieldsOrEmpty +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsResultList +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.utils.uniqueOrNull + +/** + * Returns the unique [SdsYield] that corresponds to this [SdsResult] or `null` if no or multiple [SdsYield]s exist. + * Note that an [SdsYield] can only be used inside an [SdsStep], so this will always return `null` for [SdsResult]s that + * are not inside an [SdsStep]. + */ +fun SdsResult.uniqueYieldOrNull(): SdsYield? { + return yieldsOrEmpty().uniqueOrNull() +} + +/** + * Returns all [SdsYield]s that corresponds to this [SdsResult]. Note that an [SdsYield] can only be used inside an + * [SdsStep], so this will always return an empty list for [SdsResult]s that are not inside an [SdsStep]. + */ +fun SdsResult.yieldsOrEmpty(): List { + val resultList = closestAncestorOrNull() ?: return emptyList() + val step = resultList.eContainer() as? SdsStep ?: return emptyList() + + return step.yieldsOrEmpty().filter { it.result == this } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/TypeArgumentToTypeParameter.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/TypeArgumentToTypeParameter.kt new file mode 100644 index 000000000..cc8023537 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/linking/TypeArgumentToTypeParameter.kt @@ -0,0 +1,63 @@ +package com.larsreimann.safeds.staticAnalysis.linking + +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.isNamed +import com.larsreimann.safeds.emf.isResolved +import com.larsreimann.safeds.emf.typeParametersOrEmpty +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsTypeArgument +import com.larsreimann.safeds.safeDS.SdsTypeArgumentList +import com.larsreimann.safeds.safeDS.SdsTypeParameter +import com.larsreimann.safeds.staticAnalysis.callableOrNull + +/** + * Returns the [SdsTypeParameter] that corresponds to this [SdsTypeArgument] or `null` if it cannot be resolved. + */ +fun SdsTypeArgument.typeParameterOrNull(): SdsTypeParameter? { + return when { + this.isNamed() -> typeParameter + else -> { + val typeArgumentList = closestAncestorOrNull() ?: return null + + // Cannot match positional type argument if it is preceded by named type arguments + val firstNamedTypeArgumentIndex = typeArgumentList.typeArguments.indexOfFirst { it.isNamed() } + val thisIndex = typeArgumentList.typeArguments.indexOf(this) + if (firstNamedTypeArgumentIndex != -1 && thisIndex > firstNamedTypeArgumentIndex) { + return null + } + + typeArgumentList.typeParametersOrNull()?.getOrNull(thisIndex) + } + } +} + +/** + * Returns the list of [SdsTypeParameter]s that corresponds to this list of [SdsTypeArgument]s or `null` if it cannot + * not be resolved. + */ +fun SdsTypeArgumentList.typeParametersOrNull(): List? { + return when (val parent = eContainer()) { + is SdsCall -> { + when (val callable = parent.callableOrNull()) { + is SdsClass -> callable.typeParametersOrEmpty() + is SdsEnumVariant -> callable.typeParametersOrEmpty() + is SdsFunction -> callable.typeParametersOrEmpty() + else -> null + } + } + is SdsNamedType -> { + val declaration = parent.declaration + when { + !declaration.isResolved() -> null + declaration is SdsClass -> declaration.typeParametersOrEmpty() + declaration is SdsEnumVariant -> declaration.typeParametersOrEmpty() + else -> null + } + } + else -> null + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/SdsSimplifiedExpression.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/SdsSimplifiedExpression.kt new file mode 100644 index 000000000..54425d8db --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/SdsSimplifiedExpression.kt @@ -0,0 +1,111 @@ +package com.larsreimann.safeds.staticAnalysis.partialEvaluation + +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsAbstractResult +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsResult + +typealias ParameterSubstitutions = Map + +sealed interface SdsSimplifiedExpression + +internal sealed interface SdsIntermediateExpression : SdsSimplifiedExpression + +internal sealed interface SdsIntermediateCallable : SdsIntermediateExpression { + val parameters: List +} + +internal data class SdsIntermediateBlockLambda( + override val parameters: List, + val results: List, + val substitutionsOnCreation: ParameterSubstitutions +) : SdsIntermediateCallable + +internal data class SdsIntermediateExpressionLambda( + override val parameters: List, + val result: SdsAbstractExpression, + val substitutionsOnCreation: ParameterSubstitutions +) : SdsIntermediateCallable + +internal data class SdsIntermediateStep( + override val parameters: List, + val results: List +) : SdsIntermediateCallable + +internal class SdsIntermediateRecord( + resultSubstitutions: List> +) : SdsIntermediateExpression { + private val resultSubstitutions = resultSubstitutions.toMap() + + fun getSubstitutionByReferenceOrNull(reference: SdsReference): SdsSimplifiedExpression? { + val result = reference.declaration as? SdsAbstractResult ?: return null + return resultSubstitutions[result] + } + + fun getSubstitutionByIndexOrNull(index: Int?): SdsSimplifiedExpression? { + if (index == null) { + return null + } + return resultSubstitutions.values.toList().getOrNull(index) + } + + /** + * If the record contains exactly one substitution its value is returned. Otherwise, it returns `this`. + */ + fun unwrap(): SdsSimplifiedExpression? { + return when (resultSubstitutions.size) { + 1 -> resultSubstitutions.values.first() + else -> this + } + } + + override fun toString(): String { + return resultSubstitutions.entries.joinToString(prefix = "{", postfix = "}") { (result, value) -> + "${result.name}=$value" + } + } +} + +data class SdsIntermediateVariadicArguments( + private val arguments: List +) : SdsSimplifiedExpression { + fun getArgumentByIndexOrNull(index: Int?): SdsSimplifiedExpression? { + if (index == null) { + return null + } + return arguments.getOrNull(index) + } +} + +sealed interface SdsConstantExpression : SdsSimplifiedExpression + +data class SdsConstantBoolean(val value: Boolean) : SdsConstantExpression { + override fun toString(): String = value.toString() +} + +data class SdsConstantEnumVariant(val value: SdsEnumVariant) : SdsConstantExpression { + override fun toString(): String = value.name +} + +sealed class SdsConstantNumber : SdsConstantExpression { + abstract val value: Number +} + +data class SdsConstantFloat(override val value: Double) : SdsConstantNumber() { + override fun toString(): String = value.toString() +} + +data class SdsConstantInt(override val value: Int) : SdsConstantNumber() { + override fun toString(): String = value.toString() +} + +object SdsConstantNull : SdsConstantExpression { + override fun toString(): String = "null" +} + +data class SdsConstantString(val value: String) : SdsConstantExpression { + override fun toString(): String = value +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/ToConstantExpression.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/ToConstantExpression.kt new file mode 100644 index 000000000..12993cb14 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/ToConstantExpression.kt @@ -0,0 +1,409 @@ +package com.larsreimann.safeds.staticAnalysis.partialEvaluation + +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.And +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.By +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.Elvis +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.Equals +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.GreaterThan +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.GreaterThanOrEquals +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.IdenticalTo +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.LessThan +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.LessThanOrEquals +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.NotEquals +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.NotIdenticalTo +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.Or +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.Plus +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.Times +import com.larsreimann.safeds.constant.SdsPrefixOperationOperator.Not +import com.larsreimann.safeds.constant.operator +import com.larsreimann.safeds.emf.argumentsOrEmpty +import com.larsreimann.safeds.emf.blockLambdaResultsOrEmpty +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.isOptional +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.resultsOrEmpty +import com.larsreimann.safeds.safeDS.SdsAbstractAssignee +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsBoolean +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionLambda +import com.larsreimann.safeds.safeDS.SdsFloat +import com.larsreimann.safeds.safeDS.SdsIndexedAccess +import com.larsreimann.safeds.safeDS.SdsInfixOperation +import com.larsreimann.safeds.safeDS.SdsInt +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsNull +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsParenthesizedExpression +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsPrefixOperation +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsString +import com.larsreimann.safeds.safeDS.SdsTemplateString +import com.larsreimann.safeds.safeDS.SdsTemplateStringEnd +import com.larsreimann.safeds.safeDS.SdsTemplateStringInner +import com.larsreimann.safeds.safeDS.SdsTemplateStringStart +import com.larsreimann.safeds.staticAnalysis.callableHasNoSideEffects +import com.larsreimann.safeds.staticAnalysis.indexOrNull +import com.larsreimann.safeds.staticAnalysis.linking.parameterOrNull +import com.larsreimann.safeds.staticAnalysis.linking.uniqueYieldOrNull +import com.larsreimann.safeds.utils.uniqueOrNull +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.Minus as InfixMinus +import com.larsreimann.safeds.constant.SdsPrefixOperationOperator.Minus as PrefixMinus + +/** + * Tries to evaluate this expression. On success a [SdsConstantExpression] is returned, otherwise `null`. + */ +fun SdsAbstractExpression.toConstantExpressionOrNull(): SdsConstantExpression? { + return toConstantExpressionOrNull(emptyMap()) +} + +internal fun SdsAbstractExpression.toConstantExpressionOrNull(substitutions: ParameterSubstitutions): SdsConstantExpression? { + return when (val simplifiedExpression = simplify(substitutions)) { + is SdsConstantExpression? -> simplifiedExpression + is SdsIntermediateRecord -> simplifiedExpression.unwrap() as? SdsConstantExpression + else -> null + } +} + +internal fun SdsAbstractExpression.simplify(substitutions: ParameterSubstitutions): SdsSimplifiedExpression? { + return when (this) { + + // Base cases + is SdsBoolean -> SdsConstantBoolean(isTrue) + is SdsFloat -> SdsConstantFloat(value) + is SdsInt -> SdsConstantInt(value) + is SdsNull -> SdsConstantNull + is SdsString -> SdsConstantString(value) + is SdsTemplateStringStart -> SdsConstantString(value) + is SdsTemplateStringInner -> SdsConstantString(value) + is SdsTemplateStringEnd -> SdsConstantString(value) + is SdsBlockLambda -> simplifyBlockLambda(substitutions) + is SdsExpressionLambda -> simplifyExpressionLambda(substitutions) + + // Simple recursive cases + is SdsArgument -> value.simplify(substitutions) + is SdsInfixOperation -> simplifyInfixOp(substitutions) + is SdsParenthesizedExpression -> expression.simplify(substitutions) + is SdsPrefixOperation -> simplifyPrefixOp(substitutions) + is SdsTemplateString -> simplifyTemplateString(substitutions) + + // Complex recursive cases + is SdsCall -> simplifyCall(substitutions) + is SdsIndexedAccess -> simplifyIndexedAccess(substitutions) + is SdsMemberAccess -> simplifyMemberAccess(substitutions) + is SdsReference -> simplifyReference(substitutions) + + // Warn if case is missing + else -> throw IllegalArgumentException("Missing case to handle $this.") + } +} + +private fun SdsBlockLambda.simplifyBlockLambda(substitutions: ParameterSubstitutions): SdsIntermediateBlockLambda? { + return when { + callableHasNoSideEffects(resultIfUnknown = true) -> SdsIntermediateBlockLambda( + parameters = parametersOrEmpty(), + results = blockLambdaResultsOrEmpty(), + substitutionsOnCreation = substitutions + ) + else -> null + } +} + +private fun SdsExpressionLambda.simplifyExpressionLambda( + substitutions: ParameterSubstitutions +): SdsIntermediateExpressionLambda? { + return when { + callableHasNoSideEffects(resultIfUnknown = true) -> SdsIntermediateExpressionLambda( + parameters = parametersOrEmpty(), + result = result, + substitutionsOnCreation = substitutions + ) + else -> null + } +} + +private fun SdsInfixOperation.simplifyInfixOp(substitutions: ParameterSubstitutions): SdsConstantExpression? { + + // By design none of the operators are short-circuited + val constantLeft = leftOperand.toConstantExpressionOrNull(substitutions) ?: return null + val constantRight = rightOperand.toConstantExpressionOrNull(substitutions) ?: return null + + return when (operator()) { + Or -> simplifyLogicalOp(constantLeft, Boolean::or, constantRight) + And -> simplifyLogicalOp(constantLeft, Boolean::and, constantRight) + Equals -> SdsConstantBoolean(constantLeft == constantRight) + NotEquals -> SdsConstantBoolean(constantLeft != constantRight) + IdenticalTo -> SdsConstantBoolean(constantLeft == constantRight) + NotIdenticalTo -> SdsConstantBoolean(constantLeft != constantRight) + LessThan -> simplifyComparisonOp( + constantLeft, + { a, b -> a < b }, + { a, b -> a < b }, + constantRight + ) + LessThanOrEquals -> simplifyComparisonOp( + constantLeft, + { a, b -> a <= b }, + { a, b -> a <= b }, + constantRight + ) + GreaterThanOrEquals -> simplifyComparisonOp( + constantLeft, + { a, b -> a >= b }, + { a, b -> a >= b }, + constantRight + ) + GreaterThan -> simplifyComparisonOp( + constantLeft, + { a, b -> a > b }, + { a, b -> a > b }, + constantRight + ) + Plus -> simplifyArithmeticOp( + constantLeft, + { a, b -> a + b }, + { a, b -> a + b }, + constantRight + ) + InfixMinus -> simplifyArithmeticOp( + constantLeft, + { a, b -> a - b }, + { a, b -> a - b }, + constantRight + ) + Times -> simplifyArithmeticOp( + constantLeft, + { a, b -> a * b }, + { a, b -> a * b }, + constantRight + ) + By -> { + if (constantRight == SdsConstantFloat(0.0) || constantRight == SdsConstantInt(0)) { + return null + } + + simplifyArithmeticOp( + constantLeft, + { a, b -> a / b }, + { a, b -> a / b }, + constantRight + ) + } + Elvis -> when (constantLeft) { + SdsConstantNull -> constantRight + else -> constantLeft + } + } +} + +private fun simplifyLogicalOp( + leftOperand: SdsConstantExpression, + operation: (Boolean, Boolean) -> Boolean, + rightOperand: SdsConstantExpression, +): SdsConstantExpression? { + + return when { + leftOperand is SdsConstantBoolean && rightOperand is SdsConstantBoolean -> { + SdsConstantBoolean(operation(leftOperand.value, rightOperand.value)) + } + else -> null + } +} + +private fun simplifyComparisonOp( + leftOperand: SdsConstantExpression, + doubleOperation: (Double, Double) -> Boolean, + intOperation: (Int, Int) -> Boolean, + rightOperand: SdsConstantExpression, +): SdsConstantExpression? { + + return when { + leftOperand is SdsConstantInt && rightOperand is SdsConstantInt -> { + SdsConstantBoolean(intOperation(leftOperand.value, rightOperand.value)) + } + leftOperand is SdsConstantNumber && rightOperand is SdsConstantNumber -> { + SdsConstantBoolean(doubleOperation(leftOperand.value.toDouble(), rightOperand.value.toDouble())) + } + else -> null + } +} + +private fun simplifyArithmeticOp( + leftOperand: SdsConstantExpression, + doubleOperation: (Double, Double) -> Double, + intOperation: (Int, Int) -> Int, + rightOperand: SdsConstantExpression, +): SdsConstantExpression? { + + return when { + leftOperand is SdsConstantInt && rightOperand is SdsConstantInt -> { + SdsConstantInt(intOperation(leftOperand.value, rightOperand.value)) + } + leftOperand is SdsConstantNumber && rightOperand is SdsConstantNumber -> { + SdsConstantFloat(doubleOperation(leftOperand.value.toDouble(), rightOperand.value.toDouble())) + } + else -> null + } +} + +private fun SdsPrefixOperation.simplifyPrefixOp(substitutions: ParameterSubstitutions): SdsConstantExpression? { + val constantOperand = operand.toConstantExpressionOrNull(substitutions) ?: return null + + return when (operator()) { + Not -> when (constantOperand) { + is SdsConstantBoolean -> SdsConstantBoolean(!constantOperand.value) + else -> null + } + PrefixMinus -> when (constantOperand) { + is SdsConstantFloat -> SdsConstantFloat(-constantOperand.value) + is SdsConstantInt -> SdsConstantInt(-constantOperand.value) + else -> null + } + } +} + +private fun SdsTemplateString.simplifyTemplateString(substitutions: ParameterSubstitutions): SdsConstantExpression? { + val constExpressions = expressions.map { + it.toConstantExpressionOrNull(substitutions) ?: return null + } + + return SdsConstantString(constExpressions.joinToString("")) +} + +private fun SdsCall.simplifyCall(substitutions: ParameterSubstitutions): SdsSimplifiedExpression? { + val simpleReceiver = simplifyReceiver(substitutions) ?: return null + val newSubstitutions = buildNewSubstitutions(simpleReceiver, substitutions) + + return when (simpleReceiver) { + is SdsIntermediateBlockLambda -> { + SdsIntermediateRecord( + simpleReceiver.results.map { + it to it.simplifyAssignee(newSubstitutions) + } + ) + } + is SdsIntermediateExpressionLambda -> simpleReceiver.result.simplify(newSubstitutions) + is SdsIntermediateStep -> { + SdsIntermediateRecord( + simpleReceiver.results.map { + it to it.uniqueYieldOrNull()?.simplifyAssignee(newSubstitutions) + } + ) + } + } +} + +private fun SdsCall.simplifyReceiver(substitutions: ParameterSubstitutions): SdsIntermediateCallable? { + return when (val simpleReceiver = receiver.simplify(substitutions)) { + is SdsIntermediateRecord -> simpleReceiver.unwrap() as? SdsIntermediateCallable + is SdsIntermediateCallable -> simpleReceiver + else -> return null + } +} + +private fun SdsCall.buildNewSubstitutions( + simpleReceiver: SdsIntermediateCallable, + oldSubstitutions: ParameterSubstitutions +): ParameterSubstitutions { + + val substitutionsOnCreation = when (simpleReceiver) { + is SdsIntermediateBlockLambda -> simpleReceiver.substitutionsOnCreation + is SdsIntermediateExpressionLambda -> simpleReceiver.substitutionsOnCreation + else -> emptyMap() + } + + val substitutionsOnCall = argumentsOrEmpty() + .groupBy { it.parameterOrNull() } + .mapValues { (parameter, arguments) -> + when { + parameter == null -> null + parameter.isVariadic -> SdsIntermediateVariadicArguments( + arguments.map { it.simplify(oldSubstitutions) } + ) + else -> arguments.uniqueOrNull()?.simplify(oldSubstitutions) + } + } + + return buildMap { + putAll(substitutionsOnCreation) + substitutionsOnCall.entries.forEach { (parameter, argument) -> + if (parameter != null) { + put(parameter, argument) + } + } + } +} + +private fun SdsIndexedAccess.simplifyIndexedAccess(substitutions: ParameterSubstitutions): SdsSimplifiedExpression? { + val simpleReceiver = receiver.simplify(substitutions) as? SdsIntermediateVariadicArguments ?: return null + val simpleIndex = index.simplify(substitutions) as? SdsConstantInt ?: return null + + return simpleReceiver.getArgumentByIndexOrNull(simpleIndex.value) +} + +private fun SdsMemberAccess.simplifyMemberAccess(substitutions: ParameterSubstitutions): SdsSimplifiedExpression? { + if (member.declaration is SdsEnumVariant) { + return member.simplifyReference(substitutions) + } + + return when (val simpleReceiver = receiver.simplify(substitutions)) { + SdsConstantNull -> when { + isNullSafe -> SdsConstantNull + else -> null + } + is SdsIntermediateRecord -> simpleReceiver.getSubstitutionByReferenceOrNull(member) + else -> null + } +} + +private fun SdsReference.simplifyReference(substitutions: ParameterSubstitutions): SdsSimplifiedExpression? { + return when (val declaration = this.declaration) { + is SdsEnumVariant -> when { + declaration.parametersOrEmpty().isEmpty() -> SdsConstantEnumVariant(declaration) + else -> null + } + is SdsPlaceholder -> declaration.simplifyAssignee(substitutions) + is SdsParameter -> declaration.simplifyParameter(substitutions) + is SdsStep -> declaration.simplifyStep() + else -> null + } +} + +private fun SdsAbstractAssignee.simplifyAssignee(substitutions: ParameterSubstitutions): SdsSimplifiedExpression? { + val simpleFullAssignedExpression = closestAncestorOrNull() + ?.expression + ?.simplify(substitutions) + ?: return null + + return when (simpleFullAssignedExpression) { + is SdsIntermediateRecord -> simpleFullAssignedExpression.getSubstitutionByIndexOrNull(indexOrNull()) + else -> when { + indexOrNull() == 0 -> simpleFullAssignedExpression + else -> null + } + } +} + +private fun SdsParameter.simplifyParameter(substitutions: ParameterSubstitutions): SdsSimplifiedExpression? { + return when { + this in substitutions -> substitutions[this] + isOptional() -> defaultValue?.simplify(substitutions) + else -> null + } +} + +private fun SdsStep.simplifyStep(): SdsIntermediateStep? { + return when { + callableHasNoSideEffects(resultIfUnknown = true) -> SdsIntermediateStep( + parameters = parametersOrEmpty(), + results = resultsOrEmpty() + ) + else -> null + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/typing/TypeComputer.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/typing/TypeComputer.kt similarity index 59% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/typing/TypeComputer.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/typing/TypeComputer.kt index adae3618b..31d9d9cac 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/typing/TypeComputer.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/typing/TypeComputer.kt @@ -1,77 +1,77 @@ @file:Suppress("FunctionName") -package de.unibonn.simpleml.staticAnalysis.typing +package com.larsreimann.safeds.staticAnalysis.typing -import de.unibonn.simpleml.emf.blockLambdaResultsOrEmpty -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.containingEnumOrNull -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.resultsOrEmpty -import de.unibonn.simpleml.emf.typeArgumentsOrEmpty -import de.unibonn.simpleml.emf.yieldsOrEmpty -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SmlAbstractAssignee -import de.unibonn.simpleml.simpleML.SmlAbstractCallable -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlAbstractLambda -import de.unibonn.simpleml.simpleML.SmlAbstractObject -import de.unibonn.simpleml.simpleML.SmlAbstractType -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlBoolean -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCallableType -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionLambda -import de.unibonn.simpleml.simpleML.SmlFloat -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlIndexedAccess -import de.unibonn.simpleml.simpleML.SmlInfixOperation -import de.unibonn.simpleml.simpleML.SmlInt -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlMemberType -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlNull -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlParenthesizedExpression -import de.unibonn.simpleml.simpleML.SmlParenthesizedType -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlPrefixOperation -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlString -import de.unibonn.simpleml.simpleML.SmlTemplateString -import de.unibonn.simpleml.simpleML.SmlTypeArgument -import de.unibonn.simpleml.simpleML.SmlTypeProjection -import de.unibonn.simpleml.simpleML.SmlUnionType -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.staticAnalysis.assignedOrNull -import de.unibonn.simpleml.staticAnalysis.callableOrNull -import de.unibonn.simpleml.staticAnalysis.classHierarchy.superClasses -import de.unibonn.simpleml.staticAnalysis.linking.parameterOrNull -import de.unibonn.simpleml.stdlibAccess.StdlibClasses -import de.unibonn.simpleml.stdlibAccess.getStdlibClassOrNull +import com.larsreimann.safeds.emf.blockLambdaResultsOrEmpty +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.containingEnumOrNull +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.resultsOrEmpty +import com.larsreimann.safeds.emf.typeArgumentsOrEmpty +import com.larsreimann.safeds.emf.yieldsOrEmpty +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SdsAbstractAssignee +import com.larsreimann.safeds.safeDS.SdsAbstractCallable +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsAbstractLambda +import com.larsreimann.safeds.safeDS.SdsAbstractObject +import com.larsreimann.safeds.safeDS.SdsAbstractType +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsBoolean +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCallableType +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionLambda +import com.larsreimann.safeds.safeDS.SdsFloat +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsIndexedAccess +import com.larsreimann.safeds.safeDS.SdsInfixOperation +import com.larsreimann.safeds.safeDS.SdsInt +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsMemberType +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsNull +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsParenthesizedExpression +import com.larsreimann.safeds.safeDS.SdsParenthesizedType +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsPrefixOperation +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsString +import com.larsreimann.safeds.safeDS.SdsTemplateString +import com.larsreimann.safeds.safeDS.SdsTypeArgument +import com.larsreimann.safeds.safeDS.SdsTypeProjection +import com.larsreimann.safeds.safeDS.SdsUnionType +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.staticAnalysis.assignedOrNull +import com.larsreimann.safeds.staticAnalysis.callableOrNull +import com.larsreimann.safeds.staticAnalysis.classHierarchy.superClasses +import com.larsreimann.safeds.staticAnalysis.linking.parameterOrNull +import com.larsreimann.safeds.stdlibAccess.StdlibClasses +import com.larsreimann.safeds.stdlibAccess.getStdlibClassOrNull import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.naming.QualifiedName -fun SmlAbstractObject.type(): Type { +fun SdsAbstractObject.type(): Type { return inferType(this) } -fun SmlAbstractObject.hasPrimitiveType(): Boolean { +fun SdsAbstractObject.hasPrimitiveType(): Boolean { val type = type() if (type !is ClassType) { return false } - val qualifiedName = type.smlClass.qualifiedNameOrNull() + val qualifiedName = type.sdsClass.qualifiedNameOrNull() return qualifiedName in setOf( StdlibClasses.Boolean, StdlibClasses.Float, @@ -83,20 +83,20 @@ fun SmlAbstractObject.hasPrimitiveType(): Boolean { private fun EObject.inferType(context: EObject): Type { return when { this.eIsProxy() -> UnresolvedType - this is SmlAbstractAssignee -> this.inferTypeForAssignee(context) - this is SmlAbstractDeclaration -> this.inferTypeForDeclaration(context) - this is SmlAbstractExpression -> this.inferTypeExpression(context) - this is SmlAbstractType -> this.inferTypeForType(context) - this is SmlTypeArgument -> this.value.inferType(context) - this is SmlTypeProjection -> this.type.inferTypeForType(context) + this is SdsAbstractAssignee -> this.inferTypeForAssignee(context) + this is SdsAbstractDeclaration -> this.inferTypeForDeclaration(context) + this is SdsAbstractExpression -> this.inferTypeExpression(context) + this is SdsAbstractType -> this.inferTypeForType(context) + this is SdsTypeArgument -> this.value.inferType(context) + this is SdsTypeProjection -> this.type.inferTypeForType(context) else -> Any(context) } } -private fun SmlAbstractAssignee.inferTypeForAssignee(context: EObject): Type { +private fun SdsAbstractAssignee.inferTypeForAssignee(context: EObject): Type { return when { this.eIsProxy() -> UnresolvedType - this is SmlBlockLambdaResult || this is SmlPlaceholder || this is SmlYield -> { + this is SdsBlockLambdaResult || this is SdsPlaceholder || this is SdsYield -> { val assigned = assignedOrNull() ?: return Nothing(context) assigned.inferType(context) } @@ -104,18 +104,18 @@ private fun SmlAbstractAssignee.inferTypeForAssignee(context: EObject): Type { } } -private fun SmlAbstractDeclaration.inferTypeForDeclaration(context: EObject): Type { +private fun SdsAbstractDeclaration.inferTypeForDeclaration(context: EObject): Type { return when { this.eIsProxy() -> UnresolvedType - this is SmlAttribute -> type.inferTypeForType(context) - this is SmlClass -> ClassType(this, isNullable = false) - this is SmlEnum -> EnumType(this, isNullable = false) - this is SmlEnumVariant -> EnumVariantType(this, isNullable = false) - this is SmlFunction -> CallableType( + this is SdsAttribute -> type.inferTypeForType(context) + this is SdsClass -> ClassType(this, isNullable = false) + this is SdsEnum -> EnumType(this, isNullable = false) + this is SdsEnumVariant -> EnumVariantType(this, isNullable = false) + this is SdsFunction -> CallableType( parametersOrEmpty().map { it.inferTypeForDeclaration(context) }, resultsOrEmpty().map { it.inferTypeForDeclaration(context) } ) - this is SmlParameter -> { + this is SdsParameter -> { // Declared parameter type if (this.type != null) { @@ -127,12 +127,12 @@ private fun SmlAbstractDeclaration.inferTypeForDeclaration(context: EObject): Ty } // Inferred lambda parameter type - val callable = this.closestAncestorOrNull() + val callable = this.closestAncestorOrNull() val thisIndex = callable.parametersOrEmpty().indexOf(this) - if (callable is SmlAbstractLambda) { + if (callable is SdsAbstractLambda) { val containerType = when (val container = callable.eContainer()) { - is SmlArgument -> container.parameterOrNull()?.inferType(context) - is SmlAssignment -> + is SdsArgument -> container.parameterOrNull()?.inferType(context) + is SdsAssignment -> container .yieldsOrEmpty() .find { it.assignedOrNull() == callable } @@ -150,8 +150,8 @@ private fun SmlAbstractDeclaration.inferTypeForDeclaration(context: EObject): Ty // We don't know better return Any(context) } - this is SmlResult -> type.inferTypeForType(context) - this is SmlStep -> CallableType( + this is SdsResult -> type.inferTypeForType(context) + this is SdsStep -> CallableType( parametersOrEmpty().map { it.inferTypeForDeclaration(context) }, resultsOrEmpty().map { it.inferTypeForDeclaration(context) } ) @@ -159,54 +159,54 @@ private fun SmlAbstractDeclaration.inferTypeForDeclaration(context: EObject): Ty } } -private fun SmlAbstractExpression.inferTypeExpression(context: EObject): Type { +private fun SdsAbstractExpression.inferTypeExpression(context: EObject): Type { return when { // Terminal cases this.eIsProxy() -> UnresolvedType - this is SmlBoolean -> Boolean(context) - this is SmlFloat -> Float(context) - this is SmlInt -> Int(context) - this is SmlNull -> Nothing(context, isNullable = true) - this is SmlString -> String(context) - this is SmlTemplateString -> String(context) + this is SdsBoolean -> Boolean(context) + this is SdsFloat -> Float(context) + this is SdsInt -> Int(context) + this is SdsNull -> Nothing(context, isNullable = true) + this is SdsString -> String(context) + this is SdsTemplateString -> String(context) // Recursive cases - this is SmlArgument -> this.value.inferTypeExpression(context) - this is SmlBlockLambda -> CallableType( + this is SdsArgument -> this.value.inferTypeExpression(context) + this is SdsBlockLambda -> CallableType( this.parametersOrEmpty().map { it.inferTypeForDeclaration(context) }, blockLambdaResultsOrEmpty().map { it.inferTypeForAssignee(context) } ) - this is SmlCall -> when (val callable = callableOrNull()) { - is SmlClass -> ClassType(callable, isNullable = false) - is SmlCallableType -> { + this is SdsCall -> when (val callable = callableOrNull()) { + is SdsClass -> ClassType(callable, isNullable = false) + is SdsCallableType -> { val results = callable.resultsOrEmpty() when (results.size) { 1 -> results.first().inferTypeForDeclaration(context) else -> RecordType(results.map { it.name to it.inferTypeForDeclaration(context) }) } } - is SmlFunction -> { + is SdsFunction -> { val results = callable.resultsOrEmpty() when (results.size) { 1 -> results.first().inferTypeForDeclaration(context) else -> RecordType(results.map { it.name to it.inferTypeForDeclaration(context) }) } } - is SmlBlockLambda -> { + is SdsBlockLambda -> { val results = callable.blockLambdaResultsOrEmpty() when (results.size) { 1 -> results.first().inferTypeForAssignee(context) else -> RecordType(results.map { it.name to it.inferTypeForAssignee(context) }) } } - is SmlEnumVariant -> { + is SdsEnumVariant -> { EnumVariantType(callable, isNullable = false) } - is SmlExpressionLambda -> { + is SdsExpressionLambda -> { callable.result.inferTypeExpression(context) } - is SmlStep -> { + is SdsStep -> { val results = callable.resultsOrEmpty() when (results.size) { 1 -> results.first().inferTypeForDeclaration(context) @@ -215,18 +215,18 @@ private fun SmlAbstractExpression.inferTypeExpression(context: EObject): Type { } else -> Any(context) } - this is SmlExpressionLambda -> CallableType( + this is SdsExpressionLambda -> CallableType( this.parametersOrEmpty().map { it.inferTypeForDeclaration(context) }, listOf(result.inferTypeExpression(context)) ) - this is SmlIndexedAccess -> { + this is SdsIndexedAccess -> { when (val receiverType = this.receiver.inferTypeExpression(context)) { is UnresolvedType -> UnresolvedType is VariadicType -> receiverType.elementType else -> Nothing(context) } } - this is SmlInfixOperation -> when (operator) { + this is SdsInfixOperation -> when (operator) { "<", "<=", ">=", ">" -> Boolean(context) "==", "!=" -> Boolean(context) "===", "!==" -> Boolean(context) @@ -252,12 +252,12 @@ private fun SmlAbstractExpression.inferTypeExpression(context: EObject): Type { } else -> Nothing(context) } - this is SmlMemberAccess -> { + this is SdsMemberAccess -> { val memberType = this.member.inferTypeExpression(context) memberType.setIsNullableOnCopy(this.isNullSafe || memberType.isNullable) } - this is SmlParenthesizedExpression -> this.expression.inferTypeExpression(context) - this is SmlPrefixOperation -> when (operator) { + this is SdsParenthesizedExpression -> this.expression.inferTypeExpression(context) + this is SdsPrefixOperation -> when (operator) { "not" -> Boolean(context) "-" -> when (this.operand.inferTypeExpression(context)) { Int(context) -> Int(context) @@ -265,28 +265,28 @@ private fun SmlAbstractExpression.inferTypeExpression(context: EObject): Type { } else -> Nothing(context) } - this is SmlReference -> this.declaration.inferType(context) + this is SdsReference -> this.declaration.inferType(context) else -> Any(context) } } -private fun SmlAbstractType.inferTypeForType(context: EObject): Type { +private fun SdsAbstractType.inferTypeForType(context: EObject): Type { return when { this.eIsProxy() -> UnresolvedType - this is SmlCallableType -> CallableType( + this is SdsCallableType -> CallableType( this.parametersOrEmpty().map { it.inferTypeForDeclaration(context) }, this.resultsOrEmpty().map { it.inferTypeForDeclaration(context) } ) - this is SmlMemberType -> { + this is SdsMemberType -> { this.member.inferTypeForType(context) } - this is SmlNamedType -> { + this is SdsNamedType -> { this.declaration.inferTypeForDeclaration(context).setIsNullableOnCopy(this.isNullable) } - this is SmlParenthesizedType -> { + this is SdsParenthesizedType -> { this.type.inferTypeForType(context) } - this is SmlUnionType -> { + this is SdsUnionType -> { UnionType(this.typeArgumentsOrEmpty().map { it.value.inferType(context) }.toSet()) } else -> Any(context) @@ -306,13 +306,13 @@ private fun lowestCommonSupertype(context: EObject, types: List): Type { candidate = when (candidate) { is CallableType -> Any(context, candidate.isNullable) is ClassType -> { - val superClass = candidate.smlClass.superClasses().firstOrNull() + val superClass = candidate.sdsClass.superClasses().firstOrNull() ?: return Any(context, candidate.isNullable) ClassType(superClass, candidate.isNullable) } is EnumType -> Any(context, candidate.isNullable) is EnumVariantType -> { - val containingEnum = candidate.smlEnumVariant.containingEnumOrNull() + val containingEnum = candidate.sdsEnumVariant.containingEnumOrNull() ?: return Any(context, candidate.isNullable) EnumType(containingEnum, candidate.isNullable) } @@ -336,7 +336,7 @@ private fun unwrapUnionTypes(types: List): List { } private fun isLowestCommonSupertype(candidate: Type, otherTypes: List): Boolean { - if (candidate is ClassType && candidate.smlClass.qualifiedNameOrNull() == StdlibClasses.Any) { + if (candidate is ClassType && candidate.sdsClass.qualifiedNameOrNull() == StdlibClasses.Any) { return true } @@ -361,8 +361,8 @@ private fun Nothing(context: EObject, isNullable: Boolean = false) = stdlibType( private fun String(context: EObject) = stdlibType(context, StdlibClasses.String) internal fun stdlibType(context: EObject, qualifiedName: QualifiedName, isNullable: Boolean = false): Type { - return when (val smlClass = context.getStdlibClassOrNull(qualifiedName)) { + return when (val sdsClass = context.getStdlibClassOrNull(qualifiedName)) { null -> UnresolvedType - else -> ClassType(smlClass, isNullable) + else -> ClassType(sdsClass, isNullable) } } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/typing/TypeConformance.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/typing/TypeConformance.kt similarity index 83% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/typing/TypeConformance.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/typing/TypeConformance.kt index eb6505a98..79f595b4f 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/typing/TypeConformance.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/typing/TypeConformance.kt @@ -1,9 +1,9 @@ -package de.unibonn.simpleml.staticAnalysis.typing +package com.larsreimann.safeds.staticAnalysis.typing -import de.unibonn.simpleml.emf.variantsOrEmpty -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.staticAnalysis.classHierarchy.isSubtypeOf -import de.unibonn.simpleml.stdlibAccess.StdlibClasses +import com.larsreimann.safeds.emf.variantsOrEmpty +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.staticAnalysis.classHierarchy.isSubtypeOf +import com.larsreimann.safeds.stdlibAccess.StdlibClasses fun Type.isSubstitutableFor(other: Type, resultIfUnresolved: Boolean = false): Boolean { if (other == UnresolvedType) { @@ -49,7 +49,7 @@ private fun CallableType.isSubstitutableFor(other: Type): Boolean { true } is ClassType -> { - unwrappedOther.smlClass.qualifiedNameOrNull() == StdlibClasses.Any + unwrappedOther.sdsClass.qualifiedNameOrNull() == StdlibClasses.Any } is UnionType -> { unwrappedOther.possibleTypes.any { this.isSubstitutableFor(it) } @@ -61,7 +61,7 @@ private fun CallableType.isSubstitutableFor(other: Type): Boolean { private fun ClassType.isSubstitutableFor(other: Type): Boolean { return when (val unwrappedOther = unwrapVariadicType(other)) { is ClassType -> { - (!this.isNullable || unwrappedOther.isNullable) && this.smlClass.isSubtypeOf(unwrappedOther.smlClass) + (!this.isNullable || unwrappedOther.isNullable) && this.sdsClass.isSubtypeOf(unwrappedOther.sdsClass) } is UnionType -> { unwrappedOther.possibleTypes.any { this.isSubstitutableFor(it) } @@ -74,10 +74,10 @@ private fun EnumType.isSubstitutableFor(other: Type): Boolean { return when (val unwrappedOther = unwrapVariadicType(other)) { is ClassType -> { (!this.isNullable || unwrappedOther.isNullable) && - unwrappedOther.smlClass.qualifiedNameOrNull() == StdlibClasses.Any + unwrappedOther.sdsClass.qualifiedNameOrNull() == StdlibClasses.Any } is EnumType -> { - (!this.isNullable || unwrappedOther.isNullable) && this.smlEnum == unwrappedOther.smlEnum + (!this.isNullable || unwrappedOther.isNullable) && this.sdsEnum == unwrappedOther.sdsEnum } is UnionType -> { unwrappedOther.possibleTypes.any { this.isSubstitutableFor(it) } @@ -90,14 +90,14 @@ private fun EnumVariantType.isSubstitutableFor(other: Type): Boolean { return when (val unwrappedOther = unwrapVariadicType(other)) { is ClassType -> { (!this.isNullable || unwrappedOther.isNullable) && - unwrappedOther.smlClass.qualifiedNameOrNull() == StdlibClasses.Any + unwrappedOther.sdsClass.qualifiedNameOrNull() == StdlibClasses.Any } is EnumType -> { (!this.isNullable || unwrappedOther.isNullable) && - this.smlEnumVariant in unwrappedOther.smlEnum.variantsOrEmpty() + this.sdsEnumVariant in unwrappedOther.sdsEnum.variantsOrEmpty() } is EnumVariantType -> { - (!this.isNullable || unwrappedOther.isNullable) && this.smlEnumVariant == unwrappedOther.smlEnumVariant + (!this.isNullable || unwrappedOther.isNullable) && this.sdsEnumVariant == unwrappedOther.sdsEnumVariant } is UnionType -> unwrappedOther.possibleTypes.any { this.isSubstitutableFor(it) } else -> false @@ -113,7 +113,7 @@ private fun UnionType.isSubstitutableFor(other: Type): Boolean { private fun VariadicType.isSubstitutableFor(other: Type): Boolean { return when (other) { - is ClassType -> other.smlClass.qualifiedNameOrNull() == StdlibClasses.Any + is ClassType -> other.sdsClass.qualifiedNameOrNull() == StdlibClasses.Any is VariadicType -> this.elementType.isSubstitutableFor(other) else -> false } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/typing/Types.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/typing/Types.kt similarity index 82% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/typing/Types.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/typing/Types.kt index a2c4c4154..8468040d2 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/typing/Types.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis/typing/Types.kt @@ -1,11 +1,11 @@ -package de.unibonn.simpleml.staticAnalysis.typing - -import de.unibonn.simpleml.emf.containingEnumOrNull -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant +package com.larsreimann.safeds.staticAnalysis.typing + +import com.larsreimann.safeds.emf.containingEnumOrNull +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant import org.eclipse.xtext.naming.QualifiedName sealed class Type { @@ -68,9 +68,9 @@ data class CallableType(val parameters: List, val results: List) : T } } -sealed class NamedType(smlDeclaration: SmlAbstractDeclaration) : Type() { - val simpleName: String = smlDeclaration.name - val qualifiedName: QualifiedName = smlDeclaration.qualifiedNameOrNull()!! +sealed class NamedType(sdsDeclaration: SdsAbstractDeclaration) : Type() { + val simpleName: String = sdsDeclaration.name + val qualifiedName: QualifiedName = sdsDeclaration.qualifiedNameOrNull()!! override fun toString() = buildString { append(qualifiedName) @@ -88,34 +88,34 @@ sealed class NamedType(smlDeclaration: SmlAbstractDeclaration) : Type() { } data class ClassType( - val smlClass: SmlClass, + val sdsClass: SdsClass, override val isNullable: Boolean -) : NamedType(smlClass) { +) : NamedType(sdsClass) { override fun setIsNullableOnCopy(isNullable: Boolean) = this.copy(isNullable = isNullable) override fun toString() = super.toString() } data class EnumType( - val smlEnum: SmlEnum, + val sdsEnum: SdsEnum, override val isNullable: Boolean -) : NamedType(smlEnum) { +) : NamedType(sdsEnum) { override fun setIsNullableOnCopy(isNullable: Boolean) = this.copy(isNullable = isNullable) override fun toString() = super.toString() } data class EnumVariantType( - val smlEnumVariant: SmlEnumVariant, + val sdsEnumVariant: SdsEnumVariant, override val isNullable: Boolean -) : NamedType(smlEnumVariant) { +) : NamedType(sdsEnumVariant) { override fun setIsNullableOnCopy(isNullable: Boolean) = this.copy(isNullable = isNullable) override fun toString() = super.toString() override fun toSimpleString() = buildString { - smlEnumVariant.containingEnumOrNull()?.let { append("${it.name}.") } - append(smlEnumVariant.name) + sdsEnumVariant.containingEnumOrNull()?.let { append("${it.name}.") } + append(sdsEnumVariant.name) } } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibAnnotations.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibAnnotations.kt similarity index 62% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibAnnotations.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibAnnotations.kt index ad01aecbe..37c3a31f1 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibAnnotations.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibAnnotations.kt @@ -1,23 +1,23 @@ @file:Suppress("MemberVisibilityCanBePrivate") -package de.unibonn.simpleml.stdlibAccess - -import de.unibonn.simpleml.emf.annotationCallsOrEmpty -import de.unibonn.simpleml.emf.argumentsOrEmpty -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.staticAnalysis.linking.parameterOrNull -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantEnumVariant -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantExpression -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantString -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.toConstantExpressionOrNull -import de.unibonn.simpleml.stdlibAccess.StdlibEnums.AnnotationTarget -import de.unibonn.simpleml.utils.uniqueOrNull +package com.larsreimann.safeds.stdlibAccess + +import com.larsreimann.safeds.emf.annotationCallsOrEmpty +import com.larsreimann.safeds.emf.argumentsOrEmpty +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.staticAnalysis.linking.parameterOrNull +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantEnumVariant +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantExpression +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantString +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.toConstantExpressionOrNull +import com.larsreimann.safeds.stdlibAccess.StdlibEnums.AnnotationTarget +import com.larsreimann.safeds.utils.uniqueOrNull import org.eclipse.xtext.naming.QualifiedName /** @@ -106,7 +106,7 @@ object StdlibAnnotations { /** * Returns all calls of the annotation with the given qualified name. */ -fun SmlAbstractDeclaration.annotationCallsOrEmpty(qualifiedName: QualifiedName): List { +fun SdsAbstractDeclaration.annotationCallsOrEmpty(qualifiedName: QualifiedName): List { return this.annotationCallsOrEmpty().filter { it.annotation.qualifiedNameOrNull() == qualifiedName } @@ -115,95 +115,95 @@ fun SmlAbstractDeclaration.annotationCallsOrEmpty(qualifiedName: QualifiedName): /** * Returns the unique use of the annotation with the given qualified name or `null` if none or multiple exist. */ -fun SmlAbstractDeclaration.uniqueAnnotationCallOrNull(qualifiedName: QualifiedName): SmlAnnotationCall? { +fun SdsAbstractDeclaration.uniqueAnnotationCallOrNull(qualifiedName: QualifiedName): SdsAnnotationCall? { return this.annotationCallsOrEmpty(qualifiedName).uniqueOrNull() } /** - * Returns the description attached to the declaration with a `simpleml.lang.Description` annotation. + * Returns the description attached to the declaration with a `safeds.lang.Description` annotation. */ -fun SmlAbstractDeclaration.descriptionOrNull(): String? { +fun SdsAbstractDeclaration.descriptionOrNull(): String? { val value = annotationCallArgumentValueOrNull(StdlibAnnotations.Description, "description") - return (value as? SmlConstantString)?.value + return (value as? SdsConstantString)?.value } /** - * Checks if the parameter is annotated with the `simpleml.lang.Constant` annotation. + * Checks if the parameter is annotated with the `safeds.lang.Constant` annotation. */ -fun SmlParameter.isConstant(): Boolean { +fun SdsParameter.isConstant(): Boolean { return hasAnnotationCallTo(StdlibAnnotations.Constant) } /** - * Checks if the declaration is annotated with the `simpleml.lang.Deprecated` annotation. + * Checks if the declaration is annotated with the `safeds.lang.Deprecated` annotation. */ -fun SmlAbstractDeclaration.isDeprecated(): Boolean { +fun SdsAbstractDeclaration.isDeprecated(): Boolean { return hasAnnotationCallTo(StdlibAnnotations.Deprecated) } /** - * Checks if the parameter is annotated with the `simpleml.lang.Expert` annotation. + * Checks if the parameter is annotated with the `safeds.lang.Expert` annotation. */ -fun SmlParameter.isExpert(): Boolean { +fun SdsParameter.isExpert(): Boolean { return hasAnnotationCallTo(StdlibAnnotations.Expert) } /** - * Checks if the function is annotated with the `simpleml.lang.Pure` annotation. + * Checks if the function is annotated with the `safeds.lang.Pure` annotation. */ -fun SmlFunction.isPure(): Boolean { +fun SdsFunction.isPure(): Boolean { return hasAnnotationCallTo(StdlibAnnotations.Pure) } /** - * Checks if the annotation is annotated with the `simpleml.lang.Repeatable` annotation. + * Checks if the annotation is annotated with the `safeds.lang.Repeatable` annotation. */ -fun SmlAnnotation.isRepeatable(): Boolean { +fun SdsAnnotation.isRepeatable(): Boolean { return hasAnnotationCallTo(StdlibAnnotations.Repeatable) } /** - * Checks if the function is annotated with the `simpleml.lang.Pure` or the `simpleml.lang.NoSideEffects` + * Checks if the function is annotated with the `safeds.lang.Pure` or the `safeds.lang.NoSideEffects` * annotation. */ -fun SmlFunction.hasNoSideEffects(): Boolean { +fun SdsFunction.hasNoSideEffects(): Boolean { return isPure() || hasAnnotationCallTo(StdlibAnnotations.NoSideEffects) } /** * Returns the qualified name of the Python module that corresponds to this compilation unit. It is attached to the - * compilation unit with a `simpleml.lang.PythonModule` annotation. + * compilation unit with a `safeds.lang.PythonModule` annotation. */ -fun SmlCompilationUnit.pythonModuleOrNull(): String? { +fun SdsCompilationUnit.pythonModuleOrNull(): String? { val value = annotationCallArgumentValueOrNull( StdlibAnnotations.PythonModule, "qualifiedName" ) - return (value as? SmlConstantString)?.value + return (value as? SdsConstantString)?.value } /** * Returns the name of the Python API element that corresponds to this declaration. It is attached to the declaration - * with a `simpleml.lang.PythonName` annotation. + * with a `safeds.lang.PythonName` annotation. */ -fun SmlAbstractDeclaration.pythonNameOrNull(): String? { +fun SdsAbstractDeclaration.pythonNameOrNull(): String? { val value = annotationCallArgumentValueOrNull(StdlibAnnotations.PythonName, "name") - return (value as? SmlConstantString)?.value + return (value as? SdsConstantString)?.value } /** - * Returns the version when the declaration was added. This is attached to the declaration with a `simpleml.lang.Since` + * Returns the version when the declaration was added. This is attached to the declaration with a `safeds.lang.Since` * annotation. */ -fun SmlAbstractDeclaration.sinceVersionOrNull(): String? { +fun SdsAbstractDeclaration.sinceVersionOrNull(): String? { val value = annotationCallArgumentValueOrNull(StdlibAnnotations.Since, "version") - return (value as? SmlConstantString)?.value + return (value as? SdsConstantString)?.value } /** * Returns the possible targets of this annotation. */ -fun SmlAnnotation.validTargets(): List { +fun SdsAnnotation.validTargets(): List { val targetAnnotationCall = uniqueAnnotationCallOrNull(StdlibAnnotations.Target) ?: return AnnotationTarget.values().toList() @@ -211,7 +211,7 @@ fun SmlAnnotation.validTargets(): List { .argumentsOrEmpty() .asSequence() .mapNotNull { it.value.toConstantExpressionOrNull() } - .filterIsInstance() + .filterIsInstance() .mapNotNull { it.value.qualifiedNameOrNull() } .filter { it.segmentCount == 4 && it.skipLast(1) == AnnotationTarget.enum } .mapNotNull { AnnotationTarget.valueOfOrNull(it.lastSegment) } @@ -219,10 +219,10 @@ fun SmlAnnotation.validTargets(): List { } /** - * Returns whether this [SmlAbstractDeclaration] has at least one annotation call to the annotation with the given + * Returns whether this [SdsAbstractDeclaration] has at least one annotation call to the annotation with the given * qualified name. */ -private fun SmlAbstractDeclaration.hasAnnotationCallTo(qualifiedName: QualifiedName): Boolean { +private fun SdsAbstractDeclaration.hasAnnotationCallTo(qualifiedName: QualifiedName): Boolean { return annotationCallsOrEmpty().any { it.annotation.qualifiedNameOrNull() == qualifiedName } @@ -232,10 +232,10 @@ private fun SmlAbstractDeclaration.hasAnnotationCallTo(qualifiedName: QualifiedN * Finds the unique call to a declaration with the given qualified name and looks up the value assigned to the parameter * with the given name. */ -private fun SmlAbstractDeclaration.annotationCallArgumentValueOrNull( +private fun SdsAbstractDeclaration.annotationCallArgumentValueOrNull( qualifiedName: QualifiedName, parameterName: String -): SmlConstantExpression? { +): SdsConstantExpression? { return uniqueAnnotationCallOrNull(qualifiedName) .argumentsOrEmpty() .uniqueOrNull { it.parameterOrNull()?.name == parameterName } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibClasses.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibClasses.kt similarity index 93% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibClasses.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibClasses.kt index 33ab5f736..79b51789e 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibClasses.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibClasses.kt @@ -1,6 +1,6 @@ @file:Suppress("MemberVisibilityCanBePrivate") -package de.unibonn.simpleml.stdlibAccess +package com.larsreimann.safeds.stdlibAccess import org.eclipse.xtext.naming.QualifiedName diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibEnums.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibEnums.kt similarity index 83% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibEnums.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibEnums.kt index cda7fc9f5..bbdfebdf1 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibEnums.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibEnums.kt @@ -1,6 +1,6 @@ @file:Suppress("MemberVisibilityCanBePrivate") -package de.unibonn.simpleml.stdlibAccess +package com.larsreimann.safeds.stdlibAccess import org.eclipse.xtext.naming.QualifiedName @@ -27,7 +27,7 @@ object StdlibEnums { Workflow; companion object { - val enum: QualifiedName = QualifiedName.create("simpleml", "lang", "AnnotationTarget") + val enum: QualifiedName = QualifiedName.create("safeds", "lang", "AnnotationTarget") fun valueOfOrNull(name: String): AnnotationTarget? { return values().firstOrNull { it.name == name } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibLoader.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibLoader.kt similarity index 87% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibLoader.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibLoader.kt index cd2846387..d98790578 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibLoader.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibLoader.kt @@ -1,10 +1,10 @@ -package de.unibonn.simpleml.stdlibAccess +package com.larsreimann.safeds.stdlibAccess -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.resourceSetOrNull -import de.unibonn.simpleml.scoping.allGlobalDeclarations -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlClass +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.resourceSetOrNull +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.scoping.allGlobalDeclarations import org.eclipse.core.runtime.FileLocator import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.EObject @@ -53,7 +53,7 @@ fun listStdlibFiles(): Sequence> { } val stdlibFiles = Files.walk(stdlibBase) - .filter { it.toString().endsWith(".${SmlFileExtension.Stub}") } + .filter { it.toString().endsWith(".${SdsFileExtension.Stub}") } for (path in stdlibFiles) { val relativePath = path.toString().replace("stdlib/", "") @@ -66,12 +66,12 @@ fun listStdlibFiles(): Sequence> { } /** - * Returns the [SmlClass] with the given [QualifiedName] within this context. If the declaration cannot be found, `null` + * Returns the [SdsClass] with the given [QualifiedName] within this context. If the declaration cannot be found, `null` * is returned. * * @receiver The context for the search. */ -fun EObject.getStdlibClassOrNull(qualifiedName: QualifiedName): SmlClass? { +fun EObject.getStdlibClassOrNull(qualifiedName: QualifiedName): SdsClass? { return getStdlibDeclarationOrNull(qualifiedName) } @@ -81,7 +81,7 @@ fun EObject.getStdlibClassOrNull(qualifiedName: QualifiedName): SmlClass? { * * @receiver The context for the search. */ -private inline fun EObject.getStdlibDeclarationOrNull( +private inline fun EObject.getStdlibDeclarationOrNull( qualifiedName: QualifiedName ): T? { return try { @@ -100,7 +100,7 @@ private inline fun EObject.getStdlibDeclara * @throws IllegalStateException If no declaration with the qualified name exists in the resource set. * @throws IllegalStateException If the declaration with the qualified name does not have the desired type. */ -private inline fun EObject.getStdlibDeclaration(qualifiedName: QualifiedName): T { +private inline fun EObject.getStdlibDeclaration(qualifiedName: QualifiedName): T { val resourceSet = resourceSetOrNull() ?: throw IllegalStateException("This context is not in a resource set.") val cacheForResourceSet = cache.getOrPut(resourceSet) { WeakHashMap() } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibPackages.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibPackages.kt similarity index 50% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibPackages.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibPackages.kt index 200c1731f..637a93ac8 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibPackages.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibPackages.kt @@ -1,6 +1,6 @@ @file:Suppress("MemberVisibilityCanBePrivate") -package de.unibonn.simpleml.stdlibAccess +package com.larsreimann.safeds.stdlibAccess import org.eclipse.xtext.naming.QualifiedName @@ -10,7 +10,7 @@ import org.eclipse.xtext.naming.QualifiedName object StdlibPackages { /** - * Core package that is implicitly imported into all Simple-ML programs. + * Core package that is implicitly imported into all Safe-DS programs. */ - val lang: QualifiedName = QualifiedName.create("simpleml", "lang") + val lang: QualifiedName = QualifiedName.create("safeds", "lang") } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibDocumentation/DocumentationGenerator.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibDocumentation/DocumentationGenerator.kt similarity index 82% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibDocumentation/DocumentationGenerator.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibDocumentation/DocumentationGenerator.kt index 945d9fdb8..a224c7f25 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibDocumentation/DocumentationGenerator.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibDocumentation/DocumentationGenerator.kt @@ -1,27 +1,27 @@ // The duplication gives us the flexibility to change parts of the generated Markdown individually @file:Suppress("DuplicatedCode") -package de.unibonn.simpleml.stdlibDocumentation - -import de.unibonn.simpleml.emf.classMembersOrEmpty -import de.unibonn.simpleml.emf.containingCompilationUnitOrNull -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.resultsOrEmpty -import de.unibonn.simpleml.emf.variantsOrEmpty -import de.unibonn.simpleml.scoping.allGlobalDeclarations -import de.unibonn.simpleml.serializer.SerializationResult -import de.unibonn.simpleml.serializer.serializeToFormattedString -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.stdlibAccess.descriptionOrNull -import de.unibonn.simpleml.stdlibAccess.validTargets +package com.larsreimann.safeds.stdlibDocumentation + +import com.larsreimann.safeds.emf.classMembersOrEmpty +import com.larsreimann.safeds.emf.containingCompilationUnitOrNull +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.resultsOrEmpty +import com.larsreimann.safeds.emf.variantsOrEmpty +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.scoping.allGlobalDeclarations +import com.larsreimann.safeds.serializer.SerializationResult +import com.larsreimann.safeds.serializer.serializeToFormattedString +import com.larsreimann.safeds.stdlibAccess.descriptionOrNull +import com.larsreimann.safeds.stdlibAccess.validTargets import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.EcoreUtil2 import java.nio.file.Path @@ -64,7 +64,7 @@ private fun createReadme(outputDirectory: Path, packagesToDeclarations: Map ) = buildString { - val classes = globalDeclarations.filterIsInstance().sortedBy { it.name } - val globalFunctions = globalDeclarations.filterIsInstance().sortedBy { it.name } - val enums = globalDeclarations.filterIsInstance().sortedBy { it.name } - val annotations = globalDeclarations.filterIsInstance().sortedBy { it.name } + val classes = globalDeclarations.filterIsInstance().sortedBy { it.name } + val globalFunctions = globalDeclarations.filterIsInstance().sortedBy { it.name } + val enums = globalDeclarations.filterIsInstance().sortedBy { it.name } + val annotations = globalDeclarations.filterIsInstance().sortedBy { it.name } appendLine("# Package `$packageName`") @@ -163,7 +163,7 @@ private fun createPackageDocumentation( appendLine(autogenWarning) } -private fun createAnnotationDocumentation(annotation: SmlAnnotation) = buildString { +private fun createAnnotationDocumentation(annotation: SdsAnnotation) = buildString { // Heading appendLine("## Annotation `${annotation.name}`") @@ -187,7 +187,7 @@ private fun createAnnotationDocumentation(annotation: SmlAnnotation) = buildStri appendLine(validTargets) } -private fun createAttributeDocumentation(attribute: SmlAttribute) = buildString { +private fun createAttributeDocumentation(attribute: SdsAttribute) = buildString { // Remember description before annotation calls are removed val description = attribute.descriptionOrAltText() @@ -212,11 +212,11 @@ private fun createAttributeDocumentation(attribute: SmlAttribute) = buildString appendLine(" - $description") } -private fun createClassDocumentation(`class`: SmlClass, nestingLevel: Int): String = buildString { - val attributes = `class`.classMembersOrEmpty().filterIsInstance().sortedBy { it.name } - val methods = `class`.classMembersOrEmpty().filterIsInstance().sortedBy { it.name } - val classes = `class`.classMembersOrEmpty().filterIsInstance().sortedBy { it.name } - val enums = `class`.classMembersOrEmpty().filterIsInstance().sortedBy { it.name } +private fun createClassDocumentation(`class`: SdsClass, nestingLevel: Int): String = buildString { + val attributes = `class`.classMembersOrEmpty().filterIsInstance().sortedBy { it.name } + val methods = `class`.classMembersOrEmpty().filterIsInstance().sortedBy { it.name } + val classes = `class`.classMembersOrEmpty().filterIsInstance().sortedBy { it.name } + val enums = `class`.classMembersOrEmpty().filterIsInstance().sortedBy { it.name } // Heading if (isGlobal(nestingLevel)) { @@ -256,7 +256,7 @@ private fun createClassDocumentation(`class`: SmlClass, nestingLevel: Int): Stri } } -private fun createConstructorDocumentation(`class`: SmlClass) = buildString { +private fun createConstructorDocumentation(`class`: SdsClass) = buildString { if (`class`.parameterList == null) { appendLine("**Constructor:** _Class has no constructor._") } else if (`class`.parametersOrEmpty().isEmpty()) { @@ -269,7 +269,7 @@ private fun createConstructorDocumentation(`class`: SmlClass) = buildString { } } -private fun createEnumDocumentation(enum: SmlEnum, nestingLevel: Int) = buildString { +private fun createEnumDocumentation(enum: SdsEnum, nestingLevel: Int) = buildString { val variants = enum.variantsOrEmpty().sortedBy { it.name } // Heading @@ -288,7 +288,7 @@ private fun createEnumDocumentation(enum: SmlEnum, nestingLevel: Int) = buildStr } } -private fun createEnumVariantDocumentation(enumVariant: SmlEnumVariant, nestingLevel: Int) = buildString { +private fun createEnumVariantDocumentation(enumVariant: SdsEnumVariant, nestingLevel: Int) = buildString { // Heading appendLine("${heading(nestingLevel)} Enum Variant `${enumVariant.name}`") @@ -300,11 +300,11 @@ private fun createEnumVariantDocumentation(enumVariant: SmlEnumVariant, nestingL appendLine("\n" + createParametersDocumentation(enumVariant.parametersOrEmpty())) } -private fun SmlAbstractDeclaration.descriptionOrAltText(): String { +private fun SdsAbstractDeclaration.descriptionOrAltText(): String { return descriptionOrNull() ?: "_No description available._" } -private fun createFunctionDocumentation(function: SmlFunction, nestingLevel: Int, isGlobalFunction: Boolean) = buildString { +private fun createFunctionDocumentation(function: SdsFunction, nestingLevel: Int, isGlobalFunction: Boolean) = buildString { // Heading if (isGlobalFunction) { @@ -325,7 +325,7 @@ private fun createFunctionDocumentation(function: SmlFunction, nestingLevel: Int append(createResultsDocumentation(function.resultsOrEmpty())) } -private fun createParametersDocumentation(parameters: List) = buildString { +private fun createParametersDocumentation(parameters: List) = buildString { if (parameters.isEmpty()) { appendLine("**Parameters:** _None expected._") } else { @@ -336,7 +336,7 @@ private fun createParametersDocumentation(parameters: List) = buil } } -private fun createParameterDocumentation(parameter: SmlParameter) = buildString { +private fun createParameterDocumentation(parameter: SdsParameter) = buildString { // Remember description before annotation calls are removed val description = parameter.descriptionOrAltText() @@ -361,7 +361,7 @@ private fun createParameterDocumentation(parameter: SmlParameter) = buildString append(" - $description") } -private fun createResultsDocumentation(result: List) = buildString { +private fun createResultsDocumentation(result: List) = buildString { if (result.isEmpty()) { appendLine("**Results:** _None returned._") } else { @@ -372,7 +372,7 @@ private fun createResultsDocumentation(result: List) = buildString { } } -private fun createResultDocumentation(result: SmlResult) = buildString { +private fun createResultDocumentation(result: SdsResult) = buildString { // Remember description before annotation calls are removed val description = result.descriptionOrAltText() diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibDocumentation/Main.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibDocumentation/Main.kt similarity index 86% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibDocumentation/Main.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibDocumentation/Main.kt index 7f24b164d..0bbee0236 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/stdlibDocumentation/Main.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/stdlibDocumentation/Main.kt @@ -1,10 +1,10 @@ -package de.unibonn.simpleml.stdlibDocumentation +package com.larsreimann.safeds.stdlibDocumentation import com.google.inject.Inject import com.google.inject.Provider -import de.unibonn.simpleml.SimpleMLStandaloneSetup -import de.unibonn.simpleml.emf.compilationUnitOrNull -import de.unibonn.simpleml.stdlibAccess.loadStdlib +import com.larsreimann.safeds.SafeDSStandaloneSetup +import com.larsreimann.safeds.emf.compilationUnitOrNull +import com.larsreimann.safeds.stdlibAccess.loadStdlib import org.eclipse.emf.ecore.resource.ResourceSet import org.eclipse.xtext.diagnostics.Severity import org.eclipse.xtext.util.CancelIndicator @@ -57,7 +57,7 @@ fun main(args: Array) { exitProcess(10) } - val injector = SimpleMLStandaloneSetup().createInjectorAndDoEMFRegistration() + val injector = SafeDSStandaloneSetup().createInjectorAndDoEMFRegistration() val main = injector.getInstance(Main::class.java) main.runStdlibDocumentationGenerator(Path.of(args[0])) } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/utils/CollectionExtensions.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/utils/CollectionExtensions.kt similarity index 98% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/utils/CollectionExtensions.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/utils/CollectionExtensions.kt index d42af9f3e..66b74f82b 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/utils/CollectionExtensions.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/utils/CollectionExtensions.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.utils +package com.larsreimann.safeds.utils import kotlin.math.max diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/utils/IdManager.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/utils/IdManager.kt similarity index 89% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/utils/IdManager.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/utils/IdManager.kt index e91e2ae44..649c23ffe 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/utils/IdManager.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/utils/IdManager.kt @@ -1,6 +1,6 @@ -package de.unibonn.simpleml.utils +package com.larsreimann.safeds.utils -import de.unibonn.simpleml.simpleML.SmlAbstractObject +import com.larsreimann.safeds.safeDS.SdsAbstractObject import java.util.WeakHashMap /** @@ -11,7 +11,7 @@ import java.util.WeakHashMap value class Id(val value: Int) /** - * Handles the mapping of objects, usually [SmlAbstractObject]s in the Simple-ML AST, to their IDs. + * Handles the mapping of objects, usually [SdsAbstractObject]s in the Safe-DS AST, to their IDs. */ class IdManager { diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/AbstractSimpleMLChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/AbstractSafeDSChecker.kt similarity index 83% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/AbstractSimpleMLChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/AbstractSafeDSChecker.kt index 562bcfa2d..cbc54055c 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/AbstractSimpleMLChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/AbstractSafeDSChecker.kt @@ -1,27 +1,27 @@ -package de.unibonn.simpleml.validation +package com.larsreimann.safeds.validation -import de.unibonn.simpleml.simpleML.SimpleMLPackage -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.utils.duplicatesBy -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode -import de.unibonn.simpleml.validation.codes.WarningCode +import com.larsreimann.safeds.safeDS.SafeDSPackage +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.utils.duplicatesBy +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode +import com.larsreimann.safeds.validation.codes.WarningCode import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EStructuralFeature import org.eclipse.xtext.validation.EValidatorRegistrar -abstract class AbstractSimpleMLChecker : AbstractSimpleMLValidator() { +abstract class AbstractSafeDSChecker : AbstractSafeDSValidator() { override fun register(registrar: EValidatorRegistrar) { // This is overridden to prevent duplicate validation errors. } - protected fun List.reportDuplicateNames(message: (SmlAbstractDeclaration) -> String) { + protected fun List.reportDuplicateNames(message: (SdsAbstractDeclaration) -> String) { this.duplicatesBy { it.name } .forEach { error( message(it), it, - SimpleMLPackage.Literals.SML_ABSTRACT_DECLARATION__NAME, + SafeDSPackage.Literals.SDS_ABSTRACT_DECLARATION__NAME, ErrorCode.REDECLARATION ) } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/SafeDSValidator.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/SafeDSValidator.kt new file mode 100644 index 000000000..c91f4f644 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/SafeDSValidator.kt @@ -0,0 +1,107 @@ +package com.larsreimann.safeds.validation + +import com.larsreimann.safeds.validation.declarations.AnnotationChecker +import com.larsreimann.safeds.validation.declarations.AttributeChecker +import com.larsreimann.safeds.validation.declarations.ClassChecker +import com.larsreimann.safeds.validation.declarations.CompilationUnitChecker +import com.larsreimann.safeds.validation.declarations.DeclarationChecker +import com.larsreimann.safeds.validation.declarations.EnumChecker +import com.larsreimann.safeds.validation.declarations.EnumVariantChecker +import com.larsreimann.safeds.validation.declarations.FunctionChecker +import com.larsreimann.safeds.validation.declarations.ImportChecker +import com.larsreimann.safeds.validation.declarations.NameConventionChecker +import com.larsreimann.safeds.validation.declarations.ParameterChecker +import com.larsreimann.safeds.validation.declarations.ParameterListChecker +import com.larsreimann.safeds.validation.declarations.PlaceholderChecker +import com.larsreimann.safeds.validation.declarations.ResultChecker +import com.larsreimann.safeds.validation.declarations.StepChecker +import com.larsreimann.safeds.validation.declarations.TypeParameterChecker +import com.larsreimann.safeds.validation.declarations.WorkflowChecker +import com.larsreimann.safeds.validation.expressions.ArgumentChecker +import com.larsreimann.safeds.validation.expressions.CallChecker +import com.larsreimann.safeds.validation.expressions.InfixOperationChecker +import com.larsreimann.safeds.validation.expressions.LambdaChecker +import com.larsreimann.safeds.validation.expressions.MemberAccessChecker +import com.larsreimann.safeds.validation.expressions.ReferenceChecker +import com.larsreimann.safeds.validation.expressions.TemplateStringChecker +import com.larsreimann.safeds.validation.other.AnnotationCallChecker +import com.larsreimann.safeds.validation.other.ArgumentListChecker +import com.larsreimann.safeds.validation.other.DeprecationChecker +import com.larsreimann.safeds.validation.other.ProtocolChecker +import com.larsreimann.safeds.validation.other.TypeArgumentListChecker +import com.larsreimann.safeds.validation.statements.AssignmentChecker +import com.larsreimann.safeds.validation.statements.ExpressionsStatementChecker +import com.larsreimann.safeds.validation.typeChecking.ArgumentTypeChecker +import com.larsreimann.safeds.validation.typeChecking.DefaultValueTypeChecker +import com.larsreimann.safeds.validation.typeChecking.IndexedAccessTypeChecker +import com.larsreimann.safeds.validation.typeChecking.InfixOperationTypeChecker +import com.larsreimann.safeds.validation.typeChecking.PrefixOperationTypeChecker +import com.larsreimann.safeds.validation.typeChecking.YieldTypeChecker +import com.larsreimann.safeds.validation.types.CallableTypeChecker +import com.larsreimann.safeds.validation.types.NamedTypeChecker +import com.larsreimann.safeds.validation.types.UnionTypeChecker +import org.eclipse.xtext.validation.ComposedChecks + +/** + * This class contains custom validation rules. + * + * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation + */ +@ComposedChecks( + validators = [ + + // Declarations + AnnotationChecker::class, + AttributeChecker::class, + ClassChecker::class, + CompilationUnitChecker::class, + DeclarationChecker::class, + EnumChecker::class, + EnumVariantChecker::class, + FunctionChecker::class, + ImportChecker::class, + ParameterChecker::class, + ParameterListChecker::class, + PlaceholderChecker::class, + ResultChecker::class, + WorkflowChecker::class, + StepChecker::class, + TypeParameterChecker::class, + + NameConventionChecker::class, + + // Expressions + ArgumentChecker::class, + CallChecker::class, + InfixOperationChecker::class, + LambdaChecker::class, + MemberAccessChecker::class, + ReferenceChecker::class, + TemplateStringChecker::class, + + // Statements + AssignmentChecker::class, + ExpressionsStatementChecker::class, + + // Type Checking + ArgumentTypeChecker::class, + DefaultValueTypeChecker::class, + IndexedAccessTypeChecker::class, + InfixOperationTypeChecker::class, + PrefixOperationTypeChecker::class, + YieldTypeChecker::class, + + // Types + CallableTypeChecker::class, + NamedTypeChecker::class, + UnionTypeChecker::class, + + // Other + AnnotationCallChecker::class, + ArgumentListChecker::class, + DeprecationChecker::class, + ProtocolChecker::class, + TypeArgumentListChecker::class, + ] +) +class SafeDSValidator : AbstractSafeDSValidator() diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/codes/ErrorCode.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/codes/ErrorCode.kt similarity index 97% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/codes/ErrorCode.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/codes/ErrorCode.kt index df36e1a22..2330137a8 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/codes/ErrorCode.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/codes/ErrorCode.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.validation.codes +package com.larsreimann.safeds.validation.codes enum class ErrorCode { AttributeMustHaveType, diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/codes/InfoCode.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/codes/InfoCode.kt similarity index 90% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/codes/InfoCode.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/codes/InfoCode.kt index 30f809ce5..3d3e17cd6 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/codes/InfoCode.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/codes/InfoCode.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.validation.codes +package com.larsreimann.safeds.validation.codes enum class InfoCode { diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/codes/WarningCode.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/codes/WarningCode.kt similarity index 91% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/codes/WarningCode.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/codes/WarningCode.kt index a31b31caa..14b344d54 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/codes/WarningCode.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/codes/WarningCode.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.validation.codes +package com.larsreimann.safeds.validation.codes enum class WarningCode { diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/AnnotationChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/AnnotationChecker.kt new file mode 100644 index 000000000..1df8d2220 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/AnnotationChecker.kt @@ -0,0 +1,68 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.emf.isConstant +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.staticAnalysis.typing.ClassType +import com.larsreimann.safeds.staticAnalysis.typing.EnumType +import com.larsreimann.safeds.staticAnalysis.typing.VariadicType +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.stdlibAccess.StdlibClasses +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode +import org.eclipse.xtext.validation.Check + +class AnnotationChecker : AbstractSafeDSChecker() { + + @Check + fun uniqueNames(sdsAnnotation: SdsAnnotation) { + sdsAnnotation.parametersOrEmpty().reportDuplicateNames { + "A parameter with name '${it.name}' exists already in this annotation." + } + } + + @Check + fun unnecessaryParameterList(sdsAnnotation: SdsAnnotation) { + if (sdsAnnotation.parameterList != null && sdsAnnotation.parametersOrEmpty().isEmpty()) { + info( + "Unnecessary parameter list.", + Literals.SDS_ABSTRACT_CALLABLE__PARAMETER_LIST, + InfoCode.UnnecessaryParameterList + ) + } + } + + private val validParameterTypes = setOf( + StdlibClasses.Boolean, + StdlibClasses.Float, + StdlibClasses.Int, + StdlibClasses.String, + ) + + @Check + fun parameterTypes(sdsAnnotation: SdsAnnotation) { + sdsAnnotation.parametersOrEmpty().forEach { + val unwrappedParameterType = when (val parameterType = it.type()) { + is VariadicType -> parameterType.elementType + else -> parameterType + } + + val isValid = when (unwrappedParameterType) { + is ClassType -> unwrappedParameterType.qualifiedName in validParameterTypes + is EnumType -> unwrappedParameterType.sdsEnum.isConstant() + else -> false + } + + if (!isValid) { + error( + "Parameters of annotations must have type Boolean, Float, Int, String, or a constant enum.", + it, + Literals.SDS_PARAMETER__TYPE, + ErrorCode.UnsupportedAnnotationParameterType + ) + } + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/AttributeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/AttributeChecker.kt new file mode 100644 index 000000000..b11dd959b --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/AttributeChecker.kt @@ -0,0 +1,21 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check + +class AttributeChecker : AbstractSafeDSChecker() { + + @Check + fun type(sdsAttribute: SdsAttribute) { + if (sdsAttribute.type == null) { + error( + "An attribute must have a type.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.AttributeMustHaveType + ) + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ClassChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ClassChecker.kt similarity index 53% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ClassChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ClassChecker.kt index 413edba39..1d44dd9be 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ClassChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ClassChecker.kt @@ -1,32 +1,32 @@ -package de.unibonn.simpleml.validation.declarations +package com.larsreimann.safeds.validation.declarations -import de.unibonn.simpleml.emf.classMembersOrEmpty -import de.unibonn.simpleml.emf.objectsInBodyOrEmpty -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.parentTypesOrEmpty -import de.unibonn.simpleml.emf.protocolsOrEmpty -import de.unibonn.simpleml.emf.typeParametersOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.staticAnalysis.classHierarchy.inheritedNonStaticMembersOrEmpty -import de.unibonn.simpleml.staticAnalysis.classHierarchy.isSubtypeOf -import de.unibonn.simpleml.staticAnalysis.typing.ClassType -import de.unibonn.simpleml.staticAnalysis.typing.UnresolvedType -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.utils.duplicatesBy -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode +import com.larsreimann.safeds.emf.classMembersOrEmpty +import com.larsreimann.safeds.emf.objectsInBodyOrEmpty +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.parentTypesOrEmpty +import com.larsreimann.safeds.emf.protocolsOrEmpty +import com.larsreimann.safeds.emf.typeParametersOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.staticAnalysis.classHierarchy.inheritedNonStaticMembersOrEmpty +import com.larsreimann.safeds.staticAnalysis.classHierarchy.isSubtypeOf +import com.larsreimann.safeds.staticAnalysis.typing.ClassType +import com.larsreimann.safeds.staticAnalysis.typing.UnresolvedType +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.utils.duplicatesBy +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode import org.eclipse.xtext.validation.Check -class ClassChecker : AbstractSimpleMLChecker() { +class ClassChecker : AbstractSafeDSChecker() { @Check - fun acyclicSuperTypes(smlClass: SmlClass) { - smlClass.parentTypesOrEmpty() + fun acyclicSuperTypes(sdsClass: SdsClass) { + sdsClass.parentTypesOrEmpty() .filter { - val resolvedClass = (it.type() as? ClassType)?.smlClass - resolvedClass != null && resolvedClass.isSubtypeOf(smlClass) + val resolvedClass = (it.type() as? ClassType)?.sdsClass + resolvedClass != null && resolvedClass.isSubtypeOf(sdsClass) } .forEach { error( @@ -39,19 +39,19 @@ class ClassChecker : AbstractSimpleMLChecker() { } @Check - fun body(smlClass: SmlClass) { - if (smlClass.body != null && smlClass.objectsInBodyOrEmpty().isEmpty()) { + fun body(sdsClass: SdsClass) { + if (sdsClass.body != null && sdsClass.objectsInBodyOrEmpty().isEmpty()) { info( "Unnecessary class body.", - Literals.SML_CLASS__BODY, + Literals.SDS_CLASS__BODY, InfoCode.UnnecessaryBody ) } } @Check - fun mustInheritOnlyClasses(smlClass: SmlClass) { - smlClass.parentTypesOrEmpty() + fun mustInheritOnlyClasses(sdsClass: SdsClass) { + sdsClass.parentTypesOrEmpty() .filterNot { val type = it.type() type is ClassType || type is UnresolvedType @@ -67,14 +67,14 @@ class ClassChecker : AbstractSimpleMLChecker() { } @Check - fun mustHaveUniqueInheritedMembers(smlClass: SmlClass) { - smlClass.inheritedNonStaticMembersOrEmpty() + fun mustHaveUniqueInheritedMembers(sdsClass: SdsClass) { + sdsClass.inheritedNonStaticMembersOrEmpty() .groupBy { it.name } .forEach { (name, declarationsWithName) -> if (declarationsWithName.size > 1) { error( "Inherits multiple members called '$name'.", - Literals.SML_ABSTRACT_DECLARATION__NAME, + Literals.SDS_ABSTRACT_DECLARATION__NAME, ErrorCode.CLASS_MUST_HAVE_UNIQUE_INHERITED_MEMBERS ) } @@ -82,18 +82,18 @@ class ClassChecker : AbstractSimpleMLChecker() { } @Check - fun uniqueNames(smlClass: SmlClass) { - smlClass.parametersOrEmpty() + fun uniqueNames(sdsClass: SdsClass) { + sdsClass.parametersOrEmpty() .reportDuplicateNames { "A parameter with name '${it.name}' exists already in this class." } - smlClass.classMembersOrEmpty() + sdsClass.classMembersOrEmpty() .reportDuplicateNames { "A declaration with name '${it.name}' exists already in this class." } } @Check - fun uniqueParentTypes(smlClass: SmlClass) { - smlClass.parentTypesOrEmpty() - .duplicatesBy { (it.type() as? ClassType)?.smlClass } + fun uniqueParentTypes(sdsClass: SdsClass) { + sdsClass.parentTypesOrEmpty() + .duplicatesBy { (it.type() as? ClassType)?.sdsClass } .forEach { error( "Parent types must be unique.", @@ -105,19 +105,19 @@ class ClassChecker : AbstractSimpleMLChecker() { } @Check - fun unnecessaryTypeParameterList(smlClass: SmlClass) { - if (smlClass.typeParameterList != null && smlClass.typeParametersOrEmpty().isEmpty()) { + fun unnecessaryTypeParameterList(sdsClass: SdsClass) { + if (sdsClass.typeParameterList != null && sdsClass.typeParametersOrEmpty().isEmpty()) { info( "Unnecessary type parameter list.", - Literals.SML_CLASS__TYPE_PARAMETER_LIST, + Literals.SDS_CLASS__TYPE_PARAMETER_LIST, InfoCode.UnnecessaryTypeParameterList ) } } @Check - fun multipleProtocols(smlClass: SmlClass) { - val protocols = smlClass.protocolsOrEmpty() + fun multipleProtocols(sdsClass: SdsClass) { + val protocols = sdsClass.protocolsOrEmpty() if (protocols.size > 1) { protocols.forEach { error( diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/CompilationUnitChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/CompilationUnitChecker.kt new file mode 100644 index 000000000..636424655 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/CompilationUnitChecker.kt @@ -0,0 +1,131 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.constant.isInStubFile +import com.larsreimann.safeds.constant.isInTestFile +import com.larsreimann.safeds.emf.compilationUnitMembersOrEmpty +import com.larsreimann.safeds.emf.importedNameOrNull +import com.larsreimann.safeds.emf.isQualified +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsImport +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.scoping.externalGlobalDeclarations +import com.larsreimann.safeds.utils.duplicatesBy +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check +import org.eclipse.xtext.validation.CheckType + +class CompilationUnitChecker : AbstractSafeDSChecker() { + + @Check + fun members(sdsCompilationUnit: SdsCompilationUnit) { + if (sdsCompilationUnit.isInStubFile()) { + sdsCompilationUnit.compilationUnitMembersOrEmpty() + .filter { it is SdsWorkflow || it is SdsStep } + .forEach { + error( + "A stub file must not declare workflows or steps.", + it, + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.StubFileMustNotDeclareWorkflowsOrSteps + ) + } + } else if (!sdsCompilationUnit.isInTestFile()) { + sdsCompilationUnit.compilationUnitMembersOrEmpty() + .filter { it !is SdsWorkflow && it !is SdsStep } + .forEach { + error( + "A workflow file must only declare workflows and steps.", + it, + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.WorkflowFileMustOnlyDeclareWorkflowsAndSteps + ) + } + } + } + + @Check + fun uniquePackageDeclaration(sdsCompilationUnit: SdsCompilationUnit) { + if (sdsCompilationUnit.isInTestFile()) { + return + } + + if (sdsCompilationUnit.name == null) { + sdsCompilationUnit.compilationUnitMembersOrEmpty().firstOrNull()?.let { + error( + "A file with declarations must declare its package.", + it, + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.FileMustDeclarePackage + ) + } + } + } + + @Check + fun uniqueNames(sdsCompilationUnit: SdsCompilationUnit) { + val namedEObjects = sdsCompilationUnit.imports.filter { it.isQualified() } + sdsCompilationUnit.members + + namedEObjects.duplicatesBy { + when (it) { + is SdsImport -> it.importedNameOrNull() + is SdsAbstractDeclaration -> it.name + else -> null + } + }.forEach { + when { + it is SdsImport && it.alias == null -> { + error( + "A declaration with name '${it.importedNameOrNull()}' exists already in this file.", + it, + Literals.SDS_IMPORT__IMPORTED_NAMESPACE, + ErrorCode.REDECLARATION + ) + } + it is SdsImport && it.alias != null -> { + error( + "A declaration with name '${it.importedNameOrNull()}' exists already in this file.", + it.alias, + Literals.SDS_IMPORT_ALIAS__NAME, + ErrorCode.REDECLARATION + ) + } + it is SdsAbstractDeclaration -> { + error( + "A declaration with name '${it.name}' exists already in this file.", + it, + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.REDECLARATION + ) + } + } + } + } + + @Check(CheckType.NORMAL) + fun uniqueNamesAcrossFiles(sdsCompilationUnit: SdsCompilationUnit) { + + // Since the stdlib is automatically loaded into a workspace, every declaration would be marked as a duplicate + // when editing the stdlib + if (sdsCompilationUnit.isInStubFile() && sdsCompilationUnit.name.startsWith("safeds")) { + return + } + + val externalGlobalDeclarations = sdsCompilationUnit.externalGlobalDeclarations() + sdsCompilationUnit.compilationUnitMembersOrEmpty().forEach { member -> + val qualifiedName = member.qualifiedNameOrNull() + if (externalGlobalDeclarations.any { it.qualifiedName == qualifiedName }) { + error( + "A declaration with qualified name '$qualifiedName' exists already.", + member, + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.REDECLARATION_IN_OTHER_FILE + ) + } + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/DeclarationChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/DeclarationChecker.kt similarity index 50% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/DeclarationChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/DeclarationChecker.kt index ea962a4b2..201f57b66 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/DeclarationChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/DeclarationChecker.kt @@ -1,22 +1,22 @@ -package de.unibonn.simpleml.validation.declarations +package com.larsreimann.safeds.validation.declarations -import de.unibonn.simpleml.emf.annotationCallsOrEmpty -import de.unibonn.simpleml.emf.isRequired -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.stdlibAccess.StdlibAnnotations -import de.unibonn.simpleml.stdlibAccess.isRepeatable -import de.unibonn.simpleml.utils.duplicatesBy -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode +import com.larsreimann.safeds.emf.annotationCallsOrEmpty +import com.larsreimann.safeds.emf.isRequired +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.stdlibAccess.StdlibAnnotations +import com.larsreimann.safeds.stdlibAccess.isRepeatable +import com.larsreimann.safeds.utils.duplicatesBy +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode import org.eclipse.xtext.validation.Check -class DeclarationChecker : AbstractSimpleMLChecker() { +class DeclarationChecker : AbstractSafeDSChecker() { @Check - fun annotationCardinality(smlDeclaration: SmlAbstractDeclaration) { - smlDeclaration.annotationCallsOrEmpty() + fun annotationCardinality(sdsDeclaration: SdsAbstractDeclaration) { + sdsDeclaration.annotationCallsOrEmpty() .filter { it.annotation != null && !it.annotation.eIsProxy() && !it.annotation.isRepeatable() } .duplicatesBy { it.annotation.qualifiedNameOrNull() } .forEach { @@ -30,9 +30,9 @@ class DeclarationChecker : AbstractSimpleMLChecker() { } @Check - fun mustNotDeprecateRequiredParameter(smlParameter: SmlParameter) { - if (smlParameter.isRequired()) { - val deprecatedAnnotationOrNull = smlParameter.annotationCallsOrEmpty().firstOrNull { + fun mustNotDeprecateRequiredParameter(sdsParameter: SdsParameter) { + if (sdsParameter.isRequired()) { + val deprecatedAnnotationOrNull = sdsParameter.annotationCallsOrEmpty().firstOrNull { it.annotation.qualifiedNameOrNull() == StdlibAnnotations.Deprecated } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/EnumChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/EnumChecker.kt new file mode 100644 index 000000000..a5ee4365d --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/EnumChecker.kt @@ -0,0 +1,28 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.emf.variantsOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.InfoCode +import org.eclipse.xtext.validation.Check + +class EnumChecker : AbstractSafeDSChecker() { + + @Check + fun body(sdsEnum: SdsEnum) { + if (sdsEnum.body != null && sdsEnum.variantsOrEmpty().isEmpty()) { + info( + "Unnecessary enum body.", + Literals.SDS_ENUM__BODY, + InfoCode.UnnecessaryBody + ) + } + } + + @Check + fun uniqueNames(sdsEnum: SdsEnum) { + sdsEnum.variantsOrEmpty() + .reportDuplicateNames { "A declaration with name '${it.name}' exists already in this enum." } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/EnumVariantChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/EnumVariantChecker.kt new file mode 100644 index 000000000..43d053b88 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/EnumVariantChecker.kt @@ -0,0 +1,40 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.typeParametersOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.InfoCode +import org.eclipse.xtext.validation.Check + +class EnumVariantChecker : AbstractSafeDSChecker() { + + @Check + fun typeParameterList(sdsEnumVariant: SdsEnumVariant) { + if (sdsEnumVariant.typeParameterList != null && sdsEnumVariant.typeParametersOrEmpty().isEmpty()) { + info( + "Unnecessary type parameter list.", + Literals.SDS_ENUM_VARIANT__TYPE_PARAMETER_LIST, + InfoCode.UnnecessaryTypeParameterList + ) + } + } + + @Check + fun parameterList(sdsEnumVariant: SdsEnumVariant) { + if (sdsEnumVariant.parameterList != null && sdsEnumVariant.parametersOrEmpty().isEmpty()) { + info( + "Unnecessary parameter list.", + Literals.SDS_ABSTRACT_CALLABLE__PARAMETER_LIST, + InfoCode.UnnecessaryParameterList + ) + } + } + + @Check + fun uniqueNames(sdsEnumVariant: SdsEnumVariant) { + sdsEnumVariant.parametersOrEmpty() + .reportDuplicateNames { "A parameter with name '${it.name}' exists already in this enum variant." } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/FunctionChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/FunctionChecker.kt new file mode 100644 index 000000000..04cd79625 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/FunctionChecker.kt @@ -0,0 +1,88 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.resultsOrEmpty +import com.larsreimann.safeds.emf.typeParametersOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.staticAnalysis.classHierarchy.hiddenFunction +import com.larsreimann.safeds.stdlibAccess.isPure +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode +import org.eclipse.xtext.validation.Check + +class FunctionChecker : AbstractSafeDSChecker() { + + @Check + fun nonStaticPropagates(sdsFunction: SdsFunction) { + if (sdsFunction.isStatic) { + val hiddenFunction = sdsFunction.hiddenFunction() + if (hiddenFunction != null && !hiddenFunction.isStatic) { + error( + "One of the supertypes of this class declares a non-static function with this name, so this must be non-static as well.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.NON_STATIC_PROPAGATES + ) + } + } + } + + @Check + fun purePropagates(sdsFunction: SdsFunction) { + if (!sdsFunction.isPure()) { + val hiddenFunction = sdsFunction.hiddenFunction() + if (hiddenFunction != null && hiddenFunction.isPure()) { + error( + "One of the supertypes of this class declares a pure function with this name, so this must be pure as well.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.PURE_PROPAGATES + ) + } + } + } + + @Check + fun staticPropagates(sdsFunction: SdsFunction) { + if (!sdsFunction.isStatic) { + val hiddenFunction = sdsFunction.hiddenFunction() + if (hiddenFunction != null && hiddenFunction.isStatic) { + error( + "One of the supertypes of this class declares a static function with this name, so this must be static as well.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.STATIC_PROPAGATES + ) + } + } + } + + @Check + fun uniqueNames(sdsFunction: SdsFunction) { + val declarations = sdsFunction.parametersOrEmpty() + sdsFunction.resultsOrEmpty() + declarations.reportDuplicateNames { + "A parameter or result with name '${it.name}' exists already in this function." + } + } + + @Check + fun unnecessaryResultList(sdsFunction: SdsFunction) { + if (sdsFunction.resultList != null && sdsFunction.resultsOrEmpty().isEmpty()) { + info( + "Unnecessary result list.", + Literals.SDS_FUNCTION__RESULT_LIST, + InfoCode.UnnecessaryResultList + ) + } + } + + @Check + fun unnecessaryTypeParameterList(sdsFunction: SdsFunction) { + if (sdsFunction.typeParameterList != null && sdsFunction.typeParametersOrEmpty().isEmpty()) { + info( + "Unnecessary type parameter list.", + Literals.SDS_FUNCTION__TYPE_PARAMETER_LIST, + InfoCode.UnnecessaryTypeParameterList + ) + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ImportChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ImportChecker.kt similarity index 52% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ImportChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ImportChecker.kt index 643ff6663..4f8fd3f2a 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ImportChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ImportChecker.kt @@ -1,50 +1,50 @@ -package de.unibonn.simpleml.validation.declarations +package com.larsreimann.safeds.validation.declarations -import de.unibonn.simpleml.emf.aliasNameOrNull -import de.unibonn.simpleml.emf.isQualified -import de.unibonn.simpleml.emf.isWildcard -import de.unibonn.simpleml.scoping.allGlobalDeclarations -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlImport -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode +import com.larsreimann.safeds.emf.aliasNameOrNull +import com.larsreimann.safeds.emf.isQualified +import com.larsreimann.safeds.emf.isWildcard +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsImport +import com.larsreimann.safeds.scoping.allGlobalDeclarations +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode import org.eclipse.xtext.naming.QualifiedName import org.eclipse.xtext.validation.Check import org.eclipse.xtext.validation.CheckType -class ImportChecker : AbstractSimpleMLChecker() { +class ImportChecker : AbstractSafeDSChecker() { @Check(CheckType.NORMAL) - fun unresolvedNamespace(smlImport: SmlImport) { - if (smlImport.isQualified()) { + fun unresolvedNamespace(sdsImport: SdsImport) { + if (sdsImport.isQualified()) { val importedNamespace = QualifiedName.create( - smlImport.importedNamespace.split(".") + sdsImport.importedNamespace.split(".") ) - val isUnresolved = smlImport + val isUnresolved = sdsImport .allGlobalDeclarations() .none { it.qualifiedName == importedNamespace } if (isUnresolved) { error( "No declaration with qualified name '$importedNamespace' exists.", - Literals.SML_IMPORT__IMPORTED_NAMESPACE, + Literals.SDS_IMPORT__IMPORTED_NAMESPACE, ErrorCode.UNRESOLVED_IMPORTED_NAMESPACE ) } } else { val importedNamespace = QualifiedName.create( - smlImport.importedNamespace.removeSuffix(".*").split(".") + sdsImport.importedNamespace.removeSuffix(".*").split(".") ) - val isUnresolved = smlImport + val isUnresolved = sdsImport .allGlobalDeclarations() .none { it.qualifiedName.startsWith(importedNamespace) } if (isUnresolved) { error( "No package with qualified name '$importedNamespace' exists.", - Literals.SML_IMPORT__IMPORTED_NAMESPACE, + Literals.SDS_IMPORT__IMPORTED_NAMESPACE, ErrorCode.UNRESOLVED_IMPORTED_NAMESPACE ) } @@ -52,11 +52,11 @@ class ImportChecker : AbstractSimpleMLChecker() { } @Check - fun wildcardImportWithAlias(smlImport: SmlImport) { - if (smlImport.isWildcard() && smlImport.aliasNameOrNull() != null) { + fun wildcardImportWithAlias(sdsImport: SdsImport) { + if (sdsImport.isWildcard() && sdsImport.aliasNameOrNull() != null) { error( "A wildcard import must not have an alias.", - Literals.SML_IMPORT__ALIAS, + Literals.SDS_IMPORT__ALIAS, ErrorCode.WILDCARD_IMPORT_WITH_ALIAS ) } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/NameConventionChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/NameConventionChecker.kt new file mode 100644 index 000000000..80cbf573c --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/NameConventionChecker.kt @@ -0,0 +1,150 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsProtocolSubterm +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsTypeParameter +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.WarningCode +import org.eclipse.xtext.validation.Check + +class NameConventionChecker : AbstractSafeDSChecker() { + + @Check + fun segmentsShouldBeLowercase(sdsCompilationUnit: SdsCompilationUnit) { + val hasInvalidSegments = sdsCompilationUnit.name + .split('.') + .any { !it.isLowerCamelCase() } + + if (hasInvalidSegments) { + warning( + "All segments of the qualified name of a package should be lowerCamelCase.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + WarningCode.SegmentsShouldBeLowerCamelCase + ) + } + } + + @Check + fun blockLambdaPrefix(sdsDeclaration: SdsAbstractDeclaration) { + if (sdsDeclaration.name.startsWith("__block_lambda_")) { + error( + "Names of declarations must not start with '__block_lambda_'. This is reserved for code generation of block lambdas.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.BlockLambdaPrefix + ) + } + } + + @Check + fun annotationNamesShouldBeUpperCamelCase(sdsAnnotation: SdsAnnotation) { + sdsAnnotation.nameShouldBeUpperCamelCase("annotations") + } + + @Check + fun attributeNamesShouldBeLowerCamelCase(sdsAttribute: SdsAttribute) { + sdsAttribute.nameShouldBeLowerCamelCase("attributes") + } + + @Check + fun classNamesShouldBeUpperCamelCase(sdsClass: SdsClass) { + sdsClass.nameShouldBeUpperCamelCase("classes") + } + + @Check + fun enumNamesShouldBeUpperCamelCase(sdsEnum: SdsEnum) { + sdsEnum.nameShouldBeUpperCamelCase("enums") + } + + @Check + fun enumVariantNamesShouldBeUpperCamelCase(sdsEnumVariant: SdsEnumVariant) { + sdsEnumVariant.nameShouldBeUpperCamelCase("enum variants") + } + + @Check + fun functionNamesShouldBeLowerCamelCase(sdsFunction: SdsFunction) { + sdsFunction.nameShouldBeLowerCamelCase("functions") + } + + @Check + fun lambdaResultNamesShouldBeLowerCamelCase(sdsBlockLambdaResult: SdsBlockLambdaResult) { + sdsBlockLambdaResult.nameShouldBeLowerCamelCase("lambda results") + } + + @Check + fun parameterNamesShouldBeLowerCamelCase(sdsParameter: SdsParameter) { + sdsParameter.nameShouldBeLowerCamelCase("parameters") + } + + @Check + fun placeholderNamesShouldBeLowerCamelCase(sdsPlaceholder: SdsPlaceholder) { + sdsPlaceholder.nameShouldBeLowerCamelCase("placeholders") + } + + @Check + fun protocolSubtermNamesShouldBeLowerCamelCase(sdsProtocolSubterm: SdsProtocolSubterm) { + sdsProtocolSubterm.nameShouldBeLowerCamelCase("protocol subterms") + } + + @Check + fun resultNamesShouldBeLowerCamelCase(sdsResult: SdsResult) { + sdsResult.nameShouldBeLowerCamelCase("results") + } + + @Check + fun stepNamesShouldBeLowerCamelCase(sdsStep: SdsStep) { + sdsStep.nameShouldBeLowerCamelCase("steps") + } + + @Check + fun typeParameterNamesShouldBeUpperCamelCase(sdsTypeParameter: SdsTypeParameter) { + sdsTypeParameter.nameShouldBeUpperCamelCase("type parameters") + } + + @Check + fun workflowNamesShouldBeLowerCamelCase(sdsWorkflow: SdsWorkflow) { + sdsWorkflow.nameShouldBeLowerCamelCase("workflows") + } + + private fun SdsAbstractDeclaration.nameShouldBeUpperCamelCase(declarationType: String) { + if (this.name != null && !this.name.isUpperCamelCase()) { + warning( + "Names of $declarationType should be UpperCamelCase.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + WarningCode.NameShouldBeUpperCamelCase + ) + } + } + + private fun SdsAbstractDeclaration.nameShouldBeLowerCamelCase(declarationType: String) { + if (this.name != null && !this.name.isLowerCamelCase()) { + warning( + "Names of $declarationType should be lowerCamelCase.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + WarningCode.NameShouldBeLowerCamelCase + ) + } + } + + private fun String.isUpperCamelCase(): Boolean { + return Regex("^[A-Z][a-zA-Z0-9]*$").matches(this) + } + + private fun String.isLowerCamelCase(): Boolean { + return Regex("^[a-z][a-zA-Z0-9]*$").matches(this) + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ParameterChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ParameterChecker.kt new file mode 100644 index 000000000..3900e961a --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ParameterChecker.kt @@ -0,0 +1,69 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.isOptional +import com.larsreimann.safeds.emf.isRequired +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAbstractLambda +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsParameterList +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.toConstantExpressionOrNull +import com.larsreimann.safeds.stdlibAccess.StdlibAnnotations +import com.larsreimann.safeds.stdlibAccess.annotationCallsOrEmpty +import com.larsreimann.safeds.stdlibAccess.isExpert +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check +import org.eclipse.xtext.validation.CheckType + +class ParameterChecker : AbstractSafeDSChecker() { + + @Check + fun type(sdsParameter: SdsParameter) { + val parameterList = sdsParameter.closestAncestorOrNull() ?: return + if (sdsParameter.type == null && parameterList.eContainer() !is SdsAbstractLambda) { + error( + "A parameter must have a type.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.ParameterMustHaveType + ) + } + } + + @Check(CheckType.NORMAL) + fun defaultValueMustBeConstant(sdsParameter: SdsParameter) { + val defaultValue = sdsParameter.defaultValue ?: return + if (defaultValue.toConstantExpressionOrNull() == null) { + error( + "Default values of parameters must be constant.", + Literals.SDS_PARAMETER__DEFAULT_VALUE, + ErrorCode.MustBeConstant + ) + } + } + + @Check + fun variadicParametersMustHaveNoDefaultValue(sdsParameter: SdsParameter) { + if (sdsParameter.isVariadic && sdsParameter.isOptional()) { + error( + "Variadic parameters must not have default values.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.VariadicParametersMustNotHaveDefaultValue + ) + } + } + + @Check + fun expertMustBeOptional(sdsParameter: SdsParameter) { + if (sdsParameter.isRequired() && sdsParameter.isExpert()) { + sdsParameter.annotationCallsOrEmpty(StdlibAnnotations.Expert).forEach { + error( + "An expert parameter must be optional.", + it, + null, + ErrorCode.MustBeConstant + ) + } + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ParameterListChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ParameterListChecker.kt similarity index 60% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ParameterListChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ParameterListChecker.kt index badbbad6c..b0adc1f9b 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ParameterListChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ParameterListChecker.kt @@ -1,37 +1,37 @@ -package de.unibonn.simpleml.validation.declarations +package com.larsreimann.safeds.validation.declarations -import de.unibonn.simpleml.emf.isOptional -import de.unibonn.simpleml.emf.isRequired -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlParameterList -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode +import com.larsreimann.safeds.emf.isOptional +import com.larsreimann.safeds.emf.isRequired +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsParameterList +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode import org.eclipse.xtext.validation.Check -class ParameterListChecker : AbstractSimpleMLChecker() { +class ParameterListChecker : AbstractSafeDSChecker() { @Check - fun noRequiredOrVariadicParametersAfterFirstOptionalParameter(smlParameterList: SmlParameterList) { - val firstOptionalParameterIndex = smlParameterList.parameters.indexOfFirst { it.isOptional() } + fun noRequiredOrVariadicParametersAfterFirstOptionalParameter(sdsParameterList: SdsParameterList) { + val firstOptionalParameterIndex = sdsParameterList.parameters.indexOfFirst { it.isOptional() } if (firstOptionalParameterIndex == -1) { return } - smlParameterList.parameters + sdsParameterList.parameters .drop(firstOptionalParameterIndex + 1) .forEach { if (it.isRequired()) { error( "After the first optional parameter all parameters must be optional.", it, - Literals.SML_ABSTRACT_DECLARATION__NAME, + Literals.SDS_ABSTRACT_DECLARATION__NAME, ErrorCode.NoRequiredParametersAfterFirstOptionalParameter ) } else if (it.isVariadic) { error( "A callable with optional parameters must not have a variadic parameter.", it, - Literals.SML_ABSTRACT_DECLARATION__NAME, + Literals.SDS_ABSTRACT_DECLARATION__NAME, ErrorCode.NoVariadicParameterAfterOptionalParameter ) } @@ -39,19 +39,19 @@ class ParameterListChecker : AbstractSimpleMLChecker() { } @Check - fun noMoreParametersAfterVariadic(smlParameterList: SmlParameterList) { - val firstVariadicParameterIndex = smlParameterList.parameters.indexOfFirst { it.isVariadic } + fun noMoreParametersAfterVariadic(sdsParameterList: SdsParameterList) { + val firstVariadicParameterIndex = sdsParameterList.parameters.indexOfFirst { it.isVariadic } if (firstVariadicParameterIndex == -1) { return } - smlParameterList.parameters + sdsParameterList.parameters .drop(firstVariadicParameterIndex + 1) .forEach { error( "After a variadic parameter no more parameters must be specified.", it, - Literals.SML_ABSTRACT_DECLARATION__NAME, + Literals.SDS_ABSTRACT_DECLARATION__NAME, ErrorCode.NoMoreParametersAfterVariadicParameter ) } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/PlaceholderChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/PlaceholderChecker.kt new file mode 100644 index 000000000..6949997ca --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/PlaceholderChecker.kt @@ -0,0 +1,47 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsBlock +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.staticAnalysis.assignedOrNull +import com.larsreimann.safeds.staticAnalysis.usesIn +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.WarningCode +import org.eclipse.xtext.validation.Check + +class PlaceholderChecker : AbstractSafeDSChecker() { + + @Check + fun renamingOfDeclaration(sdsPlaceholder: SdsPlaceholder) { + val assigned = sdsPlaceholder.assignedOrNull() + if (assigned is SdsReference) { + val declaration = assigned.declaration + if (declaration is SdsClass || declaration is SdsEnum || declaration is SdsFunction || declaration is SdsParameter || declaration is SdsPlaceholder) + warning( + "This placeholder only provides another name for a declaration.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + WarningCode.PlaceholderIsRenamingOfDeclaration + ) + } + } + + @Check + fun unused(sdsPlaceholder: SdsPlaceholder) { + val block = sdsPlaceholder.closestAncestorOrNull() ?: return + val assignment = sdsPlaceholder.closestAncestorOrNull() ?: return + if (assignment != block.statements.lastOrNull() && sdsPlaceholder.usesIn(block).none()) { + warning( + "This placeholder is unused.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + WarningCode.UnusedPlaceholder + ) + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ResultChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ResultChecker.kt new file mode 100644 index 000000000..46f17fbb9 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/ResultChecker.kt @@ -0,0 +1,21 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check + +class ResultChecker : AbstractSafeDSChecker() { + + @Check + fun type(sdsResult: SdsResult) { + if (sdsResult.type == null) { + error( + "A result must have a type.", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.ResultMustHaveType + ) + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/StepChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/StepChecker.kt new file mode 100644 index 000000000..07fc2bad3 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/StepChecker.kt @@ -0,0 +1,82 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.emf.asResolvedOrNull +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.placeholdersOrEmpty +import com.larsreimann.safeds.emf.resultsOrEmpty +import com.larsreimann.safeds.emf.yieldsOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.staticAnalysis.linking.yieldsOrEmpty +import com.larsreimann.safeds.staticAnalysis.usesIn +import com.larsreimann.safeds.utils.duplicatesBy +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode +import com.larsreimann.safeds.validation.codes.WarningCode +import org.eclipse.xtext.validation.Check + +class StepChecker : AbstractSafeDSChecker() { + + @Check + fun parameterIsUnused(sdsStep: SdsStep) { + sdsStep.parametersOrEmpty() + .filter { it.usesIn(sdsStep).none() } + .forEach { + warning( + "This parameter is unused.", + it, + Literals.SDS_ABSTRACT_DECLARATION__NAME, + WarningCode.UnusedParameter + ) + } + } + + @Check + fun uniqueNames(sdsStep: SdsStep) { + val declarations = + sdsStep.parametersOrEmpty() + sdsStep.resultsOrEmpty() + sdsStep.placeholdersOrEmpty() + declarations.reportDuplicateNames { + "A parameter, result or placeholder with name '${it.name}' exists already in this step." + } + } + + @Check + fun unnecessaryResultList(sdsStep: SdsStep) { + if (sdsStep.resultList != null && sdsStep.resultsOrEmpty().isEmpty()) { + info( + "Unnecessary result list.", + Literals.SDS_STEP__RESULT_LIST, + InfoCode.UnnecessaryResultList + ) + } + } + + @Check + fun unassignedResult(sdsStep: SdsStep) { + sdsStep.resultsOrEmpty().forEach { + if (it.yieldsOrEmpty().isEmpty()) { + error( + "No value is assigned to this result.", + it, + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.UnassignedResult + ) + } + } + } + + @Check + fun duplicateResultAssignment(sdsStep: SdsStep) { + sdsStep.yieldsOrEmpty() + .duplicatesBy { it.result.asResolvedOrNull() } + .forEach { + error( + "This result is assigned multiple times.", + it, + Literals.SDS_YIELD__RESULT, + ErrorCode.DuplicateResultAssignment + ) + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/TypeParameterChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/TypeParameterChecker.kt new file mode 100644 index 000000000..ee2120d0d --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/TypeParameterChecker.kt @@ -0,0 +1,25 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.constant.SdsKind +import com.larsreimann.safeds.constant.SdsVariance +import com.larsreimann.safeds.constant.kind +import com.larsreimann.safeds.constant.variance +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsTypeParameter +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check + +class TypeParameterChecker : AbstractSafeDSChecker() { + + @Check + fun mustNotHaveVarianceAndKind(sdsTypeParameter: SdsTypeParameter) { + if (sdsTypeParameter.variance() != SdsVariance.Invariant && sdsTypeParameter.kind() != SdsKind.NoKind) { + error( + "Can not use variance and kind together", + Literals.SDS_ABSTRACT_DECLARATION__NAME, + ErrorCode.VarianceAndKind + ) + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/WorkflowChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/WorkflowChecker.kt new file mode 100644 index 000000000..85c691533 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/declarations/WorkflowChecker.kt @@ -0,0 +1,34 @@ +package com.larsreimann.safeds.validation.declarations + +import com.larsreimann.safeds.emf.placeholdersOrEmpty +import com.larsreimann.safeds.emf.statementsOrEmpty +import com.larsreimann.safeds.emf.yieldsOrEmpty +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check + +class WorkflowChecker : AbstractSafeDSChecker() { + + @Check + fun noYield(sdsWorkflow: SdsWorkflow) { + sdsWorkflow.statementsOrEmpty() + .filterIsInstance() + .flatMap { it.yieldsOrEmpty() } + .forEach { + error( + "Yield must not be used in a workflow.", + it, + null, + ErrorCode.NO_YIELD_IN_WORKFLOW + ) + } + } + + @Check + fun uniqueNames(sdsWorkflow: SdsWorkflow) { + sdsWorkflow.placeholdersOrEmpty() + .reportDuplicateNames { "A declaration with name '${it.name}' exists already in this workflow." } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/ArgumentChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/ArgumentChecker.kt new file mode 100644 index 000000000..fae5ef03f --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/ArgumentChecker.kt @@ -0,0 +1,39 @@ +package com.larsreimann.safeds.validation.expressions + +import com.larsreimann.safeds.emf.isNamed +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.staticAnalysis.linking.parameterOrNull +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.toConstantExpressionOrNull +import com.larsreimann.safeds.stdlibAccess.isConstant +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check +import org.eclipse.xtext.validation.CheckType + +class ArgumentChecker : AbstractSafeDSChecker() { + + @Check(CheckType.NORMAL) + fun argumentMustBeConstant(sdsArgument: SdsArgument) { + val parameterIsConstant = sdsArgument.parameterOrNull()?.isConstant() ?: false + + if (parameterIsConstant && sdsArgument.value?.toConstantExpressionOrNull() == null) { + error( + "Arguments assigned to constant parameters must be constant.", + Literals.SDS_ARGUMENT__VALUE, + ErrorCode.MustBeConstant + ) + } + } + + @Check + fun variadicParameterMustNotBeAssignedByName(sdsArgument: SdsArgument) { + if (sdsArgument.isNamed() && (sdsArgument.parameterOrNull()?.isVariadic == true)) { + error( + "A variadic parameter must not be assigned by name.", + Literals.SDS_ARGUMENT__PARAMETER, + ErrorCode.VariadicParameterMustNotBeAssignedByName + ) + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/CallChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/CallChecker.kt new file mode 100644 index 000000000..1fb9391d4 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/CallChecker.kt @@ -0,0 +1,153 @@ +package com.larsreimann.safeds.validation.expressions + +import com.larsreimann.safeds.emf.argumentsOrEmpty +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.typeArgumentsOrEmpty +import com.larsreimann.safeds.emf.typeParametersOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionStatement +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.staticAnalysis.CallableResult +import com.larsreimann.safeds.staticAnalysis.callableOrNull +import com.larsreimann.safeds.staticAnalysis.isRecursive +import com.larsreimann.safeds.staticAnalysis.maybeCallable +import com.larsreimann.safeds.staticAnalysis.resultsOrNull +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode +import org.eclipse.xtext.validation.Check + +class CallChecker : AbstractSafeDSChecker() { + + @Check + fun missingTypeArgumentList(sdsCall: SdsCall) { + if (sdsCall.typeArgumentList != null) { + return + } + + val typeParameters = when (val callable = sdsCall.callableOrNull()) { + is SdsClass -> callable.typeParametersOrEmpty() + is SdsEnumVariant -> callable.typeParametersOrEmpty() + is SdsFunction -> callable.typeParametersOrEmpty() + else -> return + } + + if (typeParameters.isNotEmpty()) { + error( + "Missing type argument list.", + Literals.SDS_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, + ErrorCode.MISSING_TYPE_ARGUMENT_LIST + ) + } + } + + @Check + fun context(sdsCall: SdsCall) { + val results = sdsCall.resultsOrNull() ?: return + val source = when (sdsCall.receiver) { + is SdsMemberAccess -> sdsCall.receiver + else -> sdsCall + } + val feature = when (sdsCall.receiver) { + is SdsMemberAccess -> Literals.SDS_MEMBER_ACCESS__MEMBER + else -> Literals.SDS_ABSTRACT_CHAINED_EXPRESSION__RECEIVER + } + + if (results.isEmpty() && !sdsCall.hasValidContextForCallWithoutResults()) { + error( + "A call that produces no results is not allowed in this context.", + source, + feature, + ErrorCode.CONTEXT_OF_CALL_WITHOUT_RESULTS + ) + } else if (results.size > 1 && !sdsCall.hasValidContextForCallWithMultipleResults()) { + error( + "A call that produces multiple results is not allowed in this context.", + source, + feature, + ErrorCode.CONTEXT_OF_CALL_WITH_MANY_RESULTS + ) + } + } + + private fun SdsCall.hasValidContextForCallWithoutResults(): Boolean { + val context = this.eContainer() + return context is SdsExpressionStatement + } + + private fun SdsCall.hasValidContextForCallWithMultipleResults(): Boolean { + val context = this.eContainer() + return context is SdsAssignment || context is SdsExpressionStatement || context is SdsMemberAccess + } + + @Check + fun recursion(sdsCall: SdsCall) { + if (sdsCall.isRecursive()) { + error( + "Recursive calls are not allowed.", + Literals.SDS_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, + ErrorCode.NO_RECURSION + ) + } + } + + @Check + fun receiver(sdsCall: SdsCall) { + when (val maybeCallable = sdsCall.maybeCallable()) { + CallableResult.NotCallable -> { + error( + "This expression must not be called.", + Literals.SDS_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, + ErrorCode.RECEIVER_MUST_BE_CALLABLE + ) + } + is CallableResult.Callable -> { + val callable = maybeCallable.callable + if (callable is SdsClass && callable.parameterList == null) { + error( + "Cannot create an instance of a class that has no constructor.", + Literals.SDS_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, + ErrorCode.CALLED_CLASS_MUST_HAVE_CONSTRUCTOR + ) + } + } + else -> {} + } + } + + @Check + fun unnecessaryArgumentList(sdsCall: SdsCall) { + + // Call has no argument list anyway + if (sdsCall.argumentList == null) { + return + } + + // Call is used to pass type arguments or arguments + if (sdsCall.typeArgumentsOrEmpty().isNotEmpty() || sdsCall.argumentsOrEmpty().isNotEmpty()) { + return + } + + // Receiver is not callable or cannot be resolved + val callable = sdsCall.callableOrNull() ?: return + + // Only calls to enum variants can sometimes be omitted without changing the meaning of the program + if (callable !is SdsEnumVariant) { + return + } + + // This enum variant does not need to be called + if (callable.typeParametersOrEmpty().isEmpty() && callable.parametersOrEmpty().isEmpty()) { + info( + "Unnecessary argument list.", + Literals.SDS_ABSTRACT_CALL__ARGUMENT_LIST, + InfoCode.UnnecessaryArgumentList + ) + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/InfixOperationChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/InfixOperationChecker.kt new file mode 100644 index 000000000..621c4d2d0 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/InfixOperationChecker.kt @@ -0,0 +1,77 @@ +package com.larsreimann.safeds.validation.expressions + +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.By +import com.larsreimann.safeds.constant.SdsInfixOperationOperator.Elvis +import com.larsreimann.safeds.safeDS.SdsInfixOperation +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantFloat +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantInt +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.SdsConstantNull +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.toConstantExpressionOrNull +import com.larsreimann.safeds.staticAnalysis.typing.NamedType +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.stdlibAccess.StdlibClasses +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode +import org.eclipse.xtext.validation.Check + +class InfixOperationChecker : AbstractSafeDSChecker() { + + @Check + fun dispatchCheckInfixOperation(sdsInfixOperation: SdsInfixOperation) { + when (sdsInfixOperation.operator) { + By.operator -> checkByOperator(sdsInfixOperation) + Elvis.operator -> checkElvisOperator(sdsInfixOperation) + } + } + + private fun checkByOperator(sdsInfixOperation: SdsInfixOperation) { + val leftType = sdsInfixOperation.leftOperand.type() + if (!(leftType is NamedType && leftType.qualifiedName in setOf(StdlibClasses.Float, StdlibClasses.Int))) { + return + } + + val rightValue = sdsInfixOperation.rightOperand.toConstantExpressionOrNull() + if (rightValue in setOf(SdsConstantFloat(0.0), SdsConstantFloat(-0.0), SdsConstantInt(0))) { + error( + "Division by zero.", + null, + ErrorCode.DivisionByZero + ) + } + } + + private fun checkElvisOperator(sdsInfixOperation: SdsInfixOperation) { + val leftType = sdsInfixOperation.leftOperand.type() + if (!(leftType is NamedType && leftType.isNullable)) { + info( + "The left operand is never null so the elvis operator is unnecessary (keep left operand).", + null, + InfoCode.UnnecessaryElvisOperator + ) + return + } + + val leftValue = sdsInfixOperation.leftOperand.toConstantExpressionOrNull() + val rightValue = sdsInfixOperation.rightOperand.toConstantExpressionOrNull() + if (leftValue is SdsConstantNull && rightValue is SdsConstantNull) { + info( + "Both operands are always null so the elvis operator is unnecessary (replace with null).", + null, + InfoCode.UnnecessaryElvisOperator + ) + } else if (leftValue is SdsConstantNull) { + info( + "The left operand is always null so the elvis operator is unnecessary (keep right operand).", + null, + InfoCode.UnnecessaryElvisOperator + ) + } else if (rightValue is SdsConstantNull) { + info( + "The right operand is always null so the elvis operator is unnecessary (keep left operand).", + null, + InfoCode.UnnecessaryElvisOperator + ) + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/LambdaChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/LambdaChecker.kt new file mode 100644 index 000000000..b40ad34d6 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/LambdaChecker.kt @@ -0,0 +1,53 @@ +package com.larsreimann.safeds.validation.expressions + +import com.larsreimann.safeds.emf.assigneesOrEmpty +import com.larsreimann.safeds.emf.blockLambdaResultsOrEmpty +import com.larsreimann.safeds.emf.closestAncestorOrNull +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.placeholdersOrEmpty +import com.larsreimann.safeds.safeDS.SdsAbstractLambda +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsParenthesizedExpression +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.staticAnalysis.linking.parameterOrNull +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check + +class LambdaChecker : AbstractSafeDSChecker() { + + @Check + fun uniqueNames(sdsBlockLambda: SdsBlockLambda) { + val declarations = + sdsBlockLambda.parametersOrEmpty() + sdsBlockLambda.placeholdersOrEmpty() + sdsBlockLambda.blockLambdaResultsOrEmpty() + declarations.reportDuplicateNames { + "A parameter, result or placeholder with name '${it.name}' exists already in this lambda." + } + } + + @Check + fun context(sdsLambda: SdsAbstractLambda) { + val context = sdsLambda.closestAncestorOrNull { it !is SdsParenthesizedExpression } ?: return + + val contextIsValid = when (context) { + is SdsArgument -> { + when (val parameter = context.parameterOrNull()) { + null -> true // Resolution of parameter failed, so this already shows another error + else -> parameter.type != null + } + } + is SdsAssignment -> context.assigneesOrEmpty().firstOrNull() is SdsYield + else -> false + } + + if (!contextIsValid) { + error( + "A lambda must either be yielded in a step or assigned to a typed parameter.", + null, + ErrorCode.LambdaMustBeTypedArgumentOrYielded + ) + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/MemberAccessChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/MemberAccessChecker.kt new file mode 100644 index 000000000..b5afd1991 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/MemberAccessChecker.kt @@ -0,0 +1,67 @@ +package com.larsreimann.safeds.validation.expressions + +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.typeParametersOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.staticAnalysis.typing.NamedType +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode +import org.eclipse.xtext.validation.Check + +class MemberAccessChecker : AbstractSafeDSChecker() { + + @Check + fun mustBeCalled(sdsMemberAccess: SdsMemberAccess) { + when (val member = sdsMemberAccess.member.declaration) { + is SdsFunction -> { + if (!member.isStatic && sdsMemberAccess.eContainer() !is SdsCall) { + error( + "An instance method must be called.", + Literals.SDS_MEMBER_ACCESS__MEMBER, + ErrorCode.INSTANCE_METHOD_MUST_BE_CALLED + ) + } + } + is SdsEnumVariant -> { + val mustBeInstantiated = + member.typeParametersOrEmpty().isNotEmpty() || member.parametersOrEmpty().isNotEmpty() + if (mustBeInstantiated && sdsMemberAccess.eContainer() !is SdsCall) { + error( + "An enum variant with parameters or type parameters must be instantiated.", + Literals.SDS_MEMBER_ACCESS__MEMBER, + ErrorCode.ENUM_VARIANT_MUST_BE_INSTANTIATED + ) + } + } + } + } + + @Check + fun unnecessarySafeAccess(sdsMemberAccess: SdsMemberAccess) { + val type = sdsMemberAccess.receiver.type() + + if (sdsMemberAccess.isNullSafe) { + if (!(type is NamedType && type.isNullable)) { + info( + "The receiver is never null so the safe access is unnecessary.", + null, + InfoCode.UnnecessarySafeAccess + ) + } + } else { + if (type is NamedType && type.isNullable) { + error( + "The receiver can be null so a safe access must be used.", + null, + ErrorCode.MissingSafeAccess + ) + } + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/ReferenceChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/ReferenceChecker.kt new file mode 100644 index 000000000..d6f6844d8 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/ReferenceChecker.kt @@ -0,0 +1,64 @@ +package com.larsreimann.safeds.validation.expressions + +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAbstractChainedExpression +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.emf.ecore.EObject +import org.eclipse.xtext.validation.Check + +class ReferenceChecker : AbstractSafeDSChecker() { + + @Check + fun mustNotStaticallyReferenceClass(sdsReference: SdsReference) { + val declaration = sdsReference.declaration + if (declaration !is SdsClass || declaration.parameterList != null) { + return + } + + // Reference must eventually be the receiver of a chained expression + var previous: EObject = sdsReference + var current: EObject = previous.eContainer() + while (current is SdsAbstractChainedExpression) { + if (current.receiver == previous) { + return + } + previous = current + current = current.eContainer() + } + + error( + "Must not statically reference class.", + Literals.SDS_REFERENCE__DECLARATION, + ErrorCode.MustNotStaticallyReferenceClass + ) + } + + @Check + fun mustNotStaticallyReferenceEnum(sdsReference: SdsReference) { + if (sdsReference.declaration !is SdsEnum) { + return + } + + // Reference must eventually be the receiver of a member access + var previous: EObject = sdsReference + var current: EObject = previous.eContainer() + while (current is SdsMemberAccess) { + if (current.receiver == previous) { + return + } + previous = current + current = current.eContainer() + } + + error( + "Must not statically reference enum.", + Literals.SDS_REFERENCE__DECLARATION, + ErrorCode.MustNotStaticallyReferenceEnum + ) + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/TemplateStringChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/TemplateStringChecker.kt new file mode 100644 index 000000000..524a6630a --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/expressions/TemplateStringChecker.kt @@ -0,0 +1,26 @@ +package com.larsreimann.safeds.validation.expressions + +import com.larsreimann.safeds.safeDS.SdsAbstractTemplateStringPart +import com.larsreimann.safeds.safeDS.SdsTemplateString +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check + +class TemplateStringChecker : AbstractSafeDSChecker() { + + @Check + fun missingTemplateExpression(sdsTemplateString: SdsTemplateString) { + sdsTemplateString.expressions + .windowed(size = 2, step = 1) + .forEach { (first, second) -> + if (first is SdsAbstractTemplateStringPart && second is SdsAbstractTemplateStringPart) { + error( + "There must be a template expression between two template string parts.", + second, + null, + ErrorCode.MissingTemplateExpression + ) + } + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/AnnotationCallChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/AnnotationCallChecker.kt new file mode 100644 index 000000000..1e9871846 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/AnnotationCallChecker.kt @@ -0,0 +1,227 @@ +package com.larsreimann.safeds.validation.other + +import com.larsreimann.safeds.emf.argumentsOrEmpty +import com.larsreimann.safeds.emf.isRequired +import com.larsreimann.safeds.emf.isResolved +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.targetOrNull +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsTypeParameter +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.staticAnalysis.linking.parametersOrNull +import com.larsreimann.safeds.staticAnalysis.partialEvaluation.toConstantExpressionOrNull +import com.larsreimann.safeds.stdlibAccess.StdlibAnnotations +import com.larsreimann.safeds.stdlibAccess.StdlibEnums.AnnotationTarget +import com.larsreimann.safeds.stdlibAccess.isPure +import com.larsreimann.safeds.stdlibAccess.pythonModuleOrNull +import com.larsreimann.safeds.stdlibAccess.pythonNameOrNull +import com.larsreimann.safeds.stdlibAccess.validTargets +import com.larsreimann.safeds.utils.duplicatesBy +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode +import com.larsreimann.safeds.validation.codes.WarningCode +import org.eclipse.xtext.validation.Check +import org.eclipse.xtext.validation.CheckType + +class AnnotationCallChecker : AbstractSafeDSChecker() { + + @Check + fun duplicateTargetInTargetAnnotation(sdsAnnotationCall: SdsAnnotationCall) { + val annotation = sdsAnnotationCall.annotation + if (!annotation.isResolved() || annotation.qualifiedNameOrNull() != StdlibAnnotations.Target) { + return + } + + sdsAnnotationCall + .argumentsOrEmpty() + .map { it.value } + .filterIsInstance() + .duplicatesBy { it.member.declaration.qualifiedNameOrNull() } + .forEach { + warning( + "This annotation target is used multiple times.", + it, + null, + WarningCode.DuplicateTarget + ) + } + } + + @Check + fun missingArgumentList(sdsAnnotationCall: SdsAnnotationCall) { + if (sdsAnnotationCall.argumentList != null) { + return + } + + val annotation = sdsAnnotationCall.annotation + if (!annotation.isResolved()) { + return + } + + val parameters = sdsAnnotationCall.annotation.parametersOrEmpty() + if (parameters.any { it.isRequired() }) { + error( + "Missing argument list.", + Literals.SDS_ANNOTATION_CALL__ANNOTATION, + ErrorCode.MISSING_ARGUMENT_LIST + ) + } + } + + @Check + fun target(sdsAnnotationCall: SdsAnnotationCall) { + + // Get target of annotation use + val actualTarget = sdsAnnotationCall.targetOrNull() ?: return + + // Get legal targets of used annotation + val annotation = sdsAnnotationCall.annotation + if (!annotation.isResolved()) { + return + } + + val legalTargets = annotation.validTargets() + + // Compare actual and legal targets + val wrongTarget: String? = when { + actualTarget is SdsAnnotation && AnnotationTarget.Annotation !in legalTargets -> { + "an annotation" + } + actualTarget is SdsAttribute && AnnotationTarget.Attribute !in legalTargets -> { + "an attribute" + } + actualTarget is SdsClass && AnnotationTarget.Class !in legalTargets -> { + "a class" + } + actualTarget is SdsCompilationUnit && AnnotationTarget.CompilationUnit !in legalTargets -> { + "a compilation unit" + } + actualTarget is SdsEnum && AnnotationTarget.Enum !in legalTargets -> { + "an enum" + } + actualTarget is SdsEnumVariant && AnnotationTarget.EnumVariant !in legalTargets -> { + "an enum variant" + } + actualTarget is SdsFunction && AnnotationTarget.Function !in legalTargets -> { + "a function" + } + actualTarget is SdsParameter && AnnotationTarget.Parameter !in legalTargets -> { + "a parameter" + } + actualTarget is SdsResult && AnnotationTarget.Result !in legalTargets -> { + "a result" + } + actualTarget is SdsTypeParameter && AnnotationTarget.TypeParameter !in legalTargets -> { + "a type parameter" + } + actualTarget is SdsWorkflow && AnnotationTarget.Workflow !in legalTargets -> { + "a workflow" + } + actualTarget is SdsStep && AnnotationTarget.Step !in legalTargets -> { + "a step" + } + else -> null + } + + // Show error + if (wrongTarget != null) { + error( + "This annotation cannot be applied to $wrongTarget.", + null, + ErrorCode.WRONG_TARGET + ) + } + } + + @Check + fun unnecessaryArgumentList(sdsAnnotationCall: SdsAnnotationCall) { + if (sdsAnnotationCall.argumentList == null || sdsAnnotationCall.argumentsOrEmpty().isNotEmpty()) { + return + } + + val parametersOrNull = sdsAnnotationCall.argumentList.parametersOrNull() + if (parametersOrNull != null && parametersOrNull.none { it.isRequired() }) { + info( + "Unnecessary argument list.", + Literals.SDS_ABSTRACT_CALL__ARGUMENT_LIST, + InfoCode.UnnecessaryArgumentList + ) + } + } + + @Check(CheckType.NORMAL) + fun argumentsMustBeConstant(sdsAnnotationCall: SdsAnnotationCall) { + sdsAnnotationCall.argumentsOrEmpty().forEach { + if (it.value?.toConstantExpressionOrNull() == null) { + error( + "Arguments in annotation call must be constant.", + it, + Literals.SDS_ARGUMENT__VALUE, + ErrorCode.MustBeConstant + ) + } + } + } + + @Check + fun pureImpliesNoSideEffects(sdsAnnotationCall: SdsAnnotationCall) { + if (sdsAnnotationCall.annotation.qualifiedNameOrNull() != StdlibAnnotations.NoSideEffects) { + return + } + + val target = sdsAnnotationCall.targetOrNull() ?: return + if (target is SdsFunction && target.isPure()) { + info( + "Purity implies absence of side effects (remove this annotation call).", + null, + InfoCode.PureImpliesNoSideEffects + ) + } + } + + @Check + fun identicalPythonModule(sdsAnnotationCall: SdsAnnotationCall) { + if (sdsAnnotationCall.annotation.qualifiedNameOrNull() != StdlibAnnotations.PythonModule) { + return + } + + val target = sdsAnnotationCall.targetOrNull() as? SdsCompilationUnit ?: return + if (target.name == target.pythonModuleOrNull()) { + info( + "Python module is identical to Safe-DS package (can remove annotation call).", + null, + InfoCode.IdenticalPythonModule + ) + } + } + + @Check + fun identicalPythonName(sdsAnnotationCall: SdsAnnotationCall) { + if (sdsAnnotationCall.annotation.qualifiedNameOrNull() != StdlibAnnotations.PythonName) { + return + } + + val target = sdsAnnotationCall.targetOrNull() ?: return + if (target.name == target.pythonNameOrNull()) { + info( + "Python name is identical to Safe-DS name (can remove annotation call).", + null, + InfoCode.IdenticalPythonName + ) + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/ArgumentListChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/ArgumentListChecker.kt similarity index 67% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/ArgumentListChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/ArgumentListChecker.kt index b07eb34b2..c3c172092 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/ArgumentListChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/ArgumentListChecker.kt @@ -1,23 +1,23 @@ -package de.unibonn.simpleml.validation.other +package com.larsreimann.safeds.validation.other -import de.unibonn.simpleml.emf.isNamed -import de.unibonn.simpleml.emf.isPositional -import de.unibonn.simpleml.emf.isRequired -import de.unibonn.simpleml.simpleML.SmlArgumentList -import de.unibonn.simpleml.staticAnalysis.linking.parameterOrNull -import de.unibonn.simpleml.staticAnalysis.linking.parametersOrNull -import de.unibonn.simpleml.utils.duplicatesBy -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode +import com.larsreimann.safeds.emf.isNamed +import com.larsreimann.safeds.emf.isPositional +import com.larsreimann.safeds.emf.isRequired +import com.larsreimann.safeds.safeDS.SdsArgumentList +import com.larsreimann.safeds.staticAnalysis.linking.parameterOrNull +import com.larsreimann.safeds.staticAnalysis.linking.parametersOrNull +import com.larsreimann.safeds.utils.duplicatesBy +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode import org.eclipse.xtext.validation.Check -class ArgumentListChecker : AbstractSimpleMLChecker() { +class ArgumentListChecker : AbstractSafeDSChecker() { @Check - fun missingRequiredParameter(smlArgumentList: SmlArgumentList) { - val parameters = smlArgumentList.parametersOrNull() ?: return + fun missingRequiredParameter(sdsArgumentList: SdsArgumentList) { + val parameters = sdsArgumentList.parametersOrNull() ?: return val requiredParameters = parameters.filter { it.isRequired() } - val givenParameters = smlArgumentList.arguments.mapNotNull { it.parameterOrNull() } + val givenParameters = sdsArgumentList.arguments.mapNotNull { it.parameterOrNull() } val missingRequiredParameters = requiredParameters - givenParameters.toSet() missingRequiredParameters.forEach { @@ -30,13 +30,13 @@ class ArgumentListChecker : AbstractSimpleMLChecker() { } @Check - fun noPositionalArgumentsAfterFirstNamedArgument(smlArgumentList: SmlArgumentList) { - val firstNamedArgumentIndex = smlArgumentList.arguments.indexOfFirst { it.isNamed() } + fun noPositionalArgumentsAfterFirstNamedArgument(sdsArgumentList: SdsArgumentList) { + val firstNamedArgumentIndex = sdsArgumentList.arguments.indexOfFirst { it.isNamed() } if (firstNamedArgumentIndex == -1) { return } - smlArgumentList.arguments + sdsArgumentList.arguments .drop(firstNamedArgumentIndex + 1) .filter { it.isPositional() } .forEach { @@ -50,14 +50,14 @@ class ArgumentListChecker : AbstractSimpleMLChecker() { } @Check - fun tooManyArguments(smlArgumentList: SmlArgumentList) { - val parameters = smlArgumentList.parametersOrNull() + fun tooManyArguments(sdsArgumentList: SdsArgumentList) { + val parameters = sdsArgumentList.parametersOrNull() if (parameters == null || parameters.any { it.isVariadic }) { return } val maximumExpectedNumberOfArguments = parameters.size - val actualNumberOfArguments = smlArgumentList.arguments.size + val actualNumberOfArguments = sdsArgumentList.arguments.size if (actualNumberOfArguments > maximumExpectedNumberOfArguments) { val minimumExpectedNumberOfArguments = parameters.filter { it.isRequired() }.size @@ -84,8 +84,8 @@ class ArgumentListChecker : AbstractSimpleMLChecker() { } @Check - fun uniqueParameters(smlArgumentList: SmlArgumentList) { - smlArgumentList.arguments + fun uniqueParameters(sdsArgumentList: SdsArgumentList) { + sdsArgumentList.arguments .duplicatesBy { val parameter = it.parameterOrNull() ?: return@duplicatesBy null when { diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/DeprecationChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/DeprecationChecker.kt new file mode 100644 index 000000000..4000aa961 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/DeprecationChecker.kt @@ -0,0 +1,98 @@ +package com.larsreimann.safeds.validation.other + +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAbstractAssignee +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsTypeArgument +import com.larsreimann.safeds.safeDS.SdsWildcard +import com.larsreimann.safeds.staticAnalysis.assignedOrNull +import com.larsreimann.safeds.staticAnalysis.linking.parameterOrNull +import com.larsreimann.safeds.staticAnalysis.linking.typeParameterOrNull +import com.larsreimann.safeds.stdlibAccess.isDeprecated +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.WarningCode +import org.eclipse.xtext.validation.Check + +class DeprecationChecker : AbstractSafeDSChecker() { + + @Check + fun annotationUseReferenceDeprecatedAnnotation(sdsAnnotationCall: SdsAnnotationCall) { + val annotation = sdsAnnotationCall.annotation ?: return + if (annotation.isDeprecated()) { + warning( + "The used annotation is deprecated.", + Literals.SDS_ANNOTATION_CALL__ANNOTATION, + WarningCode.ReferencedDeclarationIsDeprecated + ) + } + } + + @Check + fun assigneeAssignedToDeprecatedValue(sdsAssignee: SdsAbstractAssignee) { + if (sdsAssignee is SdsWildcard) { + return + } + + val assigned = sdsAssignee.assignedOrNull() ?: return + if (assigned is SdsAbstractDeclaration && assigned.isDeprecated()) { + warning( + "The assigned declaration is deprecated.", + null, + WarningCode.AssignedDeclarationIsDeprecated + ) + } + } + + @Check + fun argumentReferencesDeprecatedParameter(sdsArgument: SdsArgument) { + val parameter = sdsArgument.parameterOrNull() ?: return + if (parameter.isDeprecated()) { + warning( + "The corresponding parameter is deprecated.", + null, + WarningCode.CorrespondingParameterIsDeprecated + ) + } + } + + @Check + fun namedTypeReferencesDeprecatedDeclaration(sdsNamedType: SdsNamedType) { + val declaration = sdsNamedType.declaration ?: return + if (declaration.isDeprecated()) { + warning( + "The referenced declaration is deprecated.", + Literals.SDS_NAMED_TYPE__DECLARATION, + WarningCode.ReferencedDeclarationIsDeprecated + ) + } + } + + @Check + fun referenceReferencesDeprecatedDeclaration(sdsReference: SdsReference) { + val declaration = sdsReference.declaration ?: return + if (declaration !is SdsParameter && declaration.isDeprecated()) { + warning( + "The referenced declaration is deprecated.", + Literals.SDS_REFERENCE__DECLARATION, + WarningCode.ReferencedDeclarationIsDeprecated + ) + } + } + + @Check + fun typeArgumentReferencesDeprecatedTypeParameter(sdsTypeArgument: SdsTypeArgument) { + val typeParameter = sdsTypeArgument.typeParameterOrNull() ?: return + if (typeParameter.isDeprecated()) { + warning( + "The corresponding type parameter is deprecated.", + null, + WarningCode.CorrespondingTypeParameterIsDeprecated + ) + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/ProtocolChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/ProtocolChecker.kt new file mode 100644 index 000000000..8dfe14451 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/ProtocolChecker.kt @@ -0,0 +1,34 @@ +package com.larsreimann.safeds.validation.other + +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsProtocolReference +import com.larsreimann.safeds.safeDS.SdsProtocolSubtermList +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check + +class ProtocolChecker : AbstractSafeDSChecker() { + + @Check + fun mustOnlyReferToInstanceMembers(sdsProtocolReference: SdsProtocolReference) { + val token = sdsProtocolReference.token + val isStaticAttribute = token is SdsAttribute && token.isStatic + val isStaticFunction = token is SdsFunction && token.isStatic + + if (isStaticAttribute || isStaticFunction) { + error( + "Must only reference instance members.", + null, + ErrorCode.OnlyReferenceInstanceMembers + ) + } + } + + @Check + fun uniqueNames(sdsProtocolSubtermList: SdsProtocolSubtermList) { + sdsProtocolSubtermList.subterms.reportDuplicateNames { + "A subterm with name '${it.name}' exists already in this protocol." + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/TypeArgumentListChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/TypeArgumentListChecker.kt similarity index 62% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/TypeArgumentListChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/TypeArgumentListChecker.kt index de679e6fe..7994dcd8f 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/TypeArgumentListChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/other/TypeArgumentListChecker.kt @@ -1,22 +1,22 @@ -package de.unibonn.simpleml.validation.other +package com.larsreimann.safeds.validation.other -import de.unibonn.simpleml.emf.isNamed -import de.unibonn.simpleml.emf.isPositional -import de.unibonn.simpleml.simpleML.SmlTypeArgumentList -import de.unibonn.simpleml.staticAnalysis.linking.typeParameterOrNull -import de.unibonn.simpleml.staticAnalysis.linking.typeParametersOrNull -import de.unibonn.simpleml.utils.duplicatesBy -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode +import com.larsreimann.safeds.emf.isNamed +import com.larsreimann.safeds.emf.isPositional +import com.larsreimann.safeds.safeDS.SdsTypeArgumentList +import com.larsreimann.safeds.staticAnalysis.linking.typeParameterOrNull +import com.larsreimann.safeds.staticAnalysis.linking.typeParametersOrNull +import com.larsreimann.safeds.utils.duplicatesBy +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode import org.eclipse.xtext.validation.Check -class TypeArgumentListChecker : AbstractSimpleMLChecker() { +class TypeArgumentListChecker : AbstractSafeDSChecker() { @Check - fun missingRequiredTypeParameter(smlTypeArgumentList: SmlTypeArgumentList) { - val requiredTypeParameters = smlTypeArgumentList.typeParametersOrNull() ?: return - val givenTypeParameters = smlTypeArgumentList.typeArguments.mapNotNull { it.typeParameterOrNull() } + fun missingRequiredTypeParameter(sdsTypeArgumentList: SdsTypeArgumentList) { + val requiredTypeParameters = sdsTypeArgumentList.typeParametersOrNull() ?: return + val givenTypeParameters = sdsTypeArgumentList.typeArguments.mapNotNull { it.typeParameterOrNull() } val missingRequiredTypeParameters = requiredTypeParameters - givenTypeParameters.toSet() missingRequiredTypeParameters.forEach { @@ -29,13 +29,13 @@ class TypeArgumentListChecker : AbstractSimpleMLChecker() { } @Check - fun noPositionalArgumentsAfterFirstNamedArgument(smlTypeArgumentList: SmlTypeArgumentList) { - val firstNamedTypeArgumentIndex = smlTypeArgumentList.typeArguments.indexOfFirst { it.isNamed() } + fun noPositionalArgumentsAfterFirstNamedArgument(sdsTypeArgumentList: SdsTypeArgumentList) { + val firstNamedTypeArgumentIndex = sdsTypeArgumentList.typeArguments.indexOfFirst { it.isNamed() } if (firstNamedTypeArgumentIndex == -1) { return } - smlTypeArgumentList.typeArguments + sdsTypeArgumentList.typeArguments .drop(firstNamedTypeArgumentIndex + 1) .filter { it.isPositional() } .forEach { @@ -49,11 +49,11 @@ class TypeArgumentListChecker : AbstractSimpleMLChecker() { } @Check - fun tooManyTypeArguments(smlTypeArgumentList: SmlTypeArgumentList) { - val typeParameter = smlTypeArgumentList.typeParametersOrNull() ?: return + fun tooManyTypeArguments(sdsTypeArgumentList: SdsTypeArgumentList) { + val typeParameter = sdsTypeArgumentList.typeParametersOrNull() ?: return val maximumExpectedNumberOfArguments = typeParameter.size - val actualNumberOfArguments = smlTypeArgumentList.typeArguments.size + val actualNumberOfArguments = sdsTypeArgumentList.typeArguments.size if (actualNumberOfArguments > maximumExpectedNumberOfArguments) { val message = buildString { @@ -76,8 +76,8 @@ class TypeArgumentListChecker : AbstractSimpleMLChecker() { } @Check - fun uniqueTypeParameters(smlTypeArgumentList: SmlTypeArgumentList) { - smlTypeArgumentList.typeArguments + fun uniqueTypeParameters(sdsTypeArgumentList: SdsTypeArgumentList) { + sdsTypeArgumentList.typeArguments .duplicatesBy { it.typeParameterOrNull()?.name } .forEach { error( @@ -90,8 +90,8 @@ class TypeArgumentListChecker : AbstractSimpleMLChecker() { } @Check - fun unnecessaryTypeArgumentList(smlTypeArgumentList: SmlTypeArgumentList) { - val typeParametersOrNull = smlTypeArgumentList.typeParametersOrNull() + fun unnecessaryTypeArgumentList(sdsTypeArgumentList: SdsTypeArgumentList) { + val typeParametersOrNull = sdsTypeArgumentList.typeParametersOrNull() if (typeParametersOrNull != null && typeParametersOrNull.isEmpty()) { info( "Unnecessary type argument list.", diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/statements/AssignmentChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/statements/AssignmentChecker.kt new file mode 100644 index 000000000..0fba57a2a --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/statements/AssignmentChecker.kt @@ -0,0 +1,84 @@ +package com.larsreimann.safeds.validation.statements + +import com.larsreimann.safeds.emf.assigneesOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsWildcard +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.staticAnalysis.AssignedResult +import com.larsreimann.safeds.staticAnalysis.expressionHasNoSideEffects +import com.larsreimann.safeds.staticAnalysis.maybeAssigned +import com.larsreimann.safeds.staticAnalysis.resultsOrNull +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode +import com.larsreimann.safeds.validation.codes.WarningCode +import org.eclipse.xtext.validation.Check + +class AssignmentChecker : AbstractSafeDSChecker() { + + @Check + fun unnecessaryAssigneeList(sdsAssignment: SdsAssignment) { + if (sdsAssignment.assigneesOrEmpty().all { it is SdsWildcard }) { + info( + "This assignment can be converted to an expression statement.", + null, + InfoCode.UnnecessaryAssignment + ) + } + } + + @Check + fun assigneeWithoutValue(sdsAssignment: SdsAssignment) { + sdsAssignment.assigneesOrEmpty() + .filter { it.maybeAssigned() == AssignedResult.NotAssigned } + .forEach { + error( + "No value is assigned to this assignee.", + it, + null, + ErrorCode.ASSIGNEE_WITHOUT_VALUE + ) + } + } + + @Check + fun hasNoEffect(sdsAssignment: SdsAssignment) { + if (sdsAssignment.assigneesOrEmpty() + .any { it is SdsPlaceholder || it is SdsYield || it is SdsBlockLambdaResult } + ) { + return + } + + if (sdsAssignment.expression.expressionHasNoSideEffects()) { + warning( + "This statement does nothing.", + null, + WarningCode.StatementDoesNothing + ) + } + } + + @Check + fun ignoredResultOfCall(sdsAssignment: SdsAssignment) { + val expression = sdsAssignment.expression + if (expression is SdsCall) { + val results = (expression.resultsOrNull() ?: listOf()) + val unassignedResults = results.drop(sdsAssignment.assigneesOrEmpty().size) + + unassignedResults + .filterIsInstance() + .forEach { + warning( + "The result '${it.name}' is implicitly ignored.", + Literals.SDS_ASSIGNMENT__ASSIGNEE_LIST, + WarningCode.ImplicitlyIgnoredResultOfCall + ) + } + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/statements/ExpressionsStatementChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/statements/ExpressionsStatementChecker.kt new file mode 100644 index 000000000..fdbb0dd25 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/statements/ExpressionsStatementChecker.kt @@ -0,0 +1,21 @@ +package com.larsreimann.safeds.validation.statements + +import com.larsreimann.safeds.safeDS.SdsExpressionStatement +import com.larsreimann.safeds.staticAnalysis.expressionHasNoSideEffects +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.WarningCode +import org.eclipse.xtext.validation.Check + +class ExpressionsStatementChecker : AbstractSafeDSChecker() { + + @Check + fun hasNoEffect(sdsExpressionStatement: SdsExpressionStatement) { + if (sdsExpressionStatement.expression.expressionHasNoSideEffects()) { + warning( + "This statement does nothing.", + null, + WarningCode.StatementDoesNothing + ) + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/ArgumentTypeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/ArgumentTypeChecker.kt similarity index 51% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/ArgumentTypeChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/ArgumentTypeChecker.kt index 97b882607..c70e59761 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/ArgumentTypeChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/ArgumentTypeChecker.kt @@ -1,26 +1,26 @@ -package de.unibonn.simpleml.validation.typeChecking +package com.larsreimann.safeds.validation.typeChecking -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.staticAnalysis.linking.parameterOrNull -import de.unibonn.simpleml.staticAnalysis.typing.UnresolvedType -import de.unibonn.simpleml.staticAnalysis.typing.isSubstitutableFor -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.staticAnalysis.linking.parameterOrNull +import com.larsreimann.safeds.staticAnalysis.typing.UnresolvedType +import com.larsreimann.safeds.staticAnalysis.typing.isSubstitutableFor +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode import org.eclipse.xtext.validation.Check import org.eclipse.xtext.validation.CheckType -class ArgumentTypeChecker : AbstractSimpleMLChecker() { +class ArgumentTypeChecker : AbstractSafeDSChecker() { @Check(CheckType.NORMAL) - fun value(smlArgument: SmlArgument) { - val argumentType = smlArgument.type() + fun value(sdsArgument: SdsArgument) { + val argumentType = sdsArgument.type() if (argumentType is UnresolvedType) { return // Scoping error already shown } - val parameterType = (smlArgument.parameterOrNull() ?: return).type() + val parameterType = (sdsArgument.parameterOrNull() ?: return).type() if (!argumentType.isSubstitutableFor(parameterType)) { var argumentTypeString = argumentType.toSimpleString() @@ -33,7 +33,7 @@ class ArgumentTypeChecker : AbstractSimpleMLChecker() { error( "An argument of type '$argumentTypeString' cannot be assigned to a parameter of type '$parameterTypeString'.", - Literals.SML_ARGUMENT__VALUE, + Literals.SDS_ARGUMENT__VALUE, ErrorCode.WrongType ) } diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/DefaultValueTypeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/DefaultValueTypeChecker.kt similarity index 55% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/DefaultValueTypeChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/DefaultValueTypeChecker.kt index 453dbdc64..694205e6b 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/DefaultValueTypeChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/DefaultValueTypeChecker.kt @@ -1,26 +1,26 @@ -package de.unibonn.simpleml.validation.typeChecking +package com.larsreimann.safeds.validation.typeChecking -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.staticAnalysis.typing.UnresolvedType -import de.unibonn.simpleml.staticAnalysis.typing.isSubstitutableFor -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.staticAnalysis.typing.UnresolvedType +import com.larsreimann.safeds.staticAnalysis.typing.isSubstitutableFor +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode import org.eclipse.xtext.validation.Check import org.eclipse.xtext.validation.CheckType -class DefaultValueTypeChecker : AbstractSimpleMLChecker() { +class DefaultValueTypeChecker : AbstractSafeDSChecker() { @Check(CheckType.NORMAL) - fun defaultValue(smlParameter: SmlParameter) { - val defaultValue = smlParameter.defaultValue ?: return + fun defaultValue(sdsParameter: SdsParameter) { + val defaultValue = sdsParameter.defaultValue ?: return val defaultValueType = defaultValue.type() if (defaultValueType is UnresolvedType) { return // Scoping error already shown } - val parameterType = smlParameter.type() + val parameterType = sdsParameter.type() if (!defaultValueType.isSubstitutableFor(parameterType)) { var defaultValueTypeString = defaultValueType.toSimpleString() @@ -33,7 +33,7 @@ class DefaultValueTypeChecker : AbstractSimpleMLChecker() { error( "A default value of type '$defaultValueTypeString' cannot be assigned to a parameter of type '$parameterTypeString'.", - Literals.SML_PARAMETER__DEFAULT_VALUE, + Literals.SDS_PARAMETER__DEFAULT_VALUE, ErrorCode.WrongType ) } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/IndexedAccessTypeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/IndexedAccessTypeChecker.kt new file mode 100644 index 000000000..2c6406e73 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/IndexedAccessTypeChecker.kt @@ -0,0 +1,53 @@ +package com.larsreimann.safeds.validation.typeChecking + +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SafeDSPackage +import com.larsreimann.safeds.safeDS.SdsIndexedAccess +import com.larsreimann.safeds.staticAnalysis.typing.ClassType +import com.larsreimann.safeds.staticAnalysis.typing.UnresolvedType +import com.larsreimann.safeds.staticAnalysis.typing.VariadicType +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.stdlibAccess.StdlibClasses +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check +import org.eclipse.xtext.validation.CheckType + +class IndexedAccessTypeChecker : AbstractSafeDSChecker() { + + @Check(CheckType.NORMAL) + fun receiverMustBeVariadic(sdsIndexedAccess: SdsIndexedAccess) { + val receiverType = sdsIndexedAccess.receiver.type() + if (receiverType is UnresolvedType) { + return // Scoping error already shown + } + + if (receiverType !is VariadicType) { + error( + "The receiver of an indexed access must refer to a variadic parameter.", + SafeDSPackage.Literals.SDS_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, + ErrorCode.WrongType + ) + } + } + + @Check + fun indexMustBeInt(sdsIndexedAccess: SdsIndexedAccess) { + val indexType = sdsIndexedAccess.index.type() + if (indexType is UnresolvedType) { + return + } + + val hasWrongType = indexType !is ClassType || + indexType.isNullable || + indexType.sdsClass.qualifiedNameOrNull() != StdlibClasses.Int + + if (hasWrongType) { + error( + "The index of an indexed access must be an instance of the class 'Int'.", + SafeDSPackage.Literals.SDS_INDEXED_ACCESS__INDEX, + ErrorCode.WrongType + ) + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/InfixOperationTypeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/InfixOperationTypeChecker.kt similarity index 50% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/InfixOperationTypeChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/InfixOperationTypeChecker.kt index 88a11abc0..0d8525466 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/InfixOperationTypeChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/InfixOperationTypeChecker.kt @@ -1,45 +1,45 @@ -package de.unibonn.simpleml.validation.typeChecking +package com.larsreimann.safeds.validation.typeChecking -import de.unibonn.simpleml.constant.SmlInfixOperationOperator -import de.unibonn.simpleml.constant.operator -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlInfixOperation -import de.unibonn.simpleml.staticAnalysis.typing.ClassType -import de.unibonn.simpleml.staticAnalysis.typing.UnresolvedType -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.stdlibAccess.StdlibClasses -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode +import com.larsreimann.safeds.constant.SdsInfixOperationOperator +import com.larsreimann.safeds.constant.operator +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsInfixOperation +import com.larsreimann.safeds.staticAnalysis.typing.ClassType +import com.larsreimann.safeds.staticAnalysis.typing.UnresolvedType +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.stdlibAccess.StdlibClasses +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode import org.eclipse.emf.ecore.EReference import org.eclipse.xtext.validation.Check import org.eclipse.xtext.validation.CheckType -class InfixOperationTypeChecker : AbstractSimpleMLChecker() { +class InfixOperationTypeChecker : AbstractSafeDSChecker() { @Check(CheckType.NORMAL) - fun leftOperand(smlInfixOperation: SmlInfixOperation) { - checkOperand(smlInfixOperation, Literals.SML_INFIX_OPERATION__LEFT_OPERAND) + fun leftOperand(sdsInfixOperation: SdsInfixOperation) { + checkOperand(sdsInfixOperation, Literals.SDS_INFIX_OPERATION__LEFT_OPERAND) } @Check(CheckType.NORMAL) - fun rightOperand(smlInfixOperation: SmlInfixOperation) { - checkOperand(smlInfixOperation, Literals.SML_INFIX_OPERATION__RIGHT_OPERAND) + fun rightOperand(sdsInfixOperation: SdsInfixOperation) { + checkOperand(sdsInfixOperation, Literals.SDS_INFIX_OPERATION__RIGHT_OPERAND) } - private fun checkOperand(smlInfixOperation: SmlInfixOperation, feature: EReference) { - val operandType = operand(smlInfixOperation, feature).type() + private fun checkOperand(sdsInfixOperation: SdsInfixOperation, feature: EReference) { + val operandType = operand(sdsInfixOperation, feature).type() if (operandType is UnresolvedType) { return // Scoping error already shown } - when (smlInfixOperation.operator()) { - SmlInfixOperationOperator.Or, - SmlInfixOperationOperator.And -> { + when (sdsInfixOperation.operator()) { + SdsInfixOperationOperator.Or, + SdsInfixOperationOperator.And -> { val hasWrongType = operandType !is ClassType || operandType.isNullable || - operandType.smlClass.qualifiedNameOrNull() != StdlibClasses.Boolean + operandType.sdsClass.qualifiedNameOrNull() != StdlibClasses.Boolean if (hasWrongType) { error( @@ -50,13 +50,13 @@ class InfixOperationTypeChecker : AbstractSimpleMLChecker() { } } - SmlInfixOperationOperator.Plus, - SmlInfixOperationOperator.Minus, - SmlInfixOperationOperator.Times, - SmlInfixOperationOperator.By -> { + SdsInfixOperationOperator.Plus, + SdsInfixOperationOperator.Minus, + SdsInfixOperationOperator.Times, + SdsInfixOperationOperator.By -> { val hasWrongType = operandType !is ClassType || operandType.isNullable || - operandType.smlClass.qualifiedNameOrNull() !in setOf(StdlibClasses.Float, StdlibClasses.Int) + operandType.sdsClass.qualifiedNameOrNull() !in setOf(StdlibClasses.Float, StdlibClasses.Int) if (hasWrongType) { error( @@ -67,13 +67,13 @@ class InfixOperationTypeChecker : AbstractSimpleMLChecker() { } } - SmlInfixOperationOperator.LessThan, - SmlInfixOperationOperator.LessThanOrEquals, - SmlInfixOperationOperator.GreaterThanOrEquals, - SmlInfixOperationOperator.GreaterThan -> { + SdsInfixOperationOperator.LessThan, + SdsInfixOperationOperator.LessThanOrEquals, + SdsInfixOperationOperator.GreaterThanOrEquals, + SdsInfixOperationOperator.GreaterThan -> { val hasWrongType = operandType !is ClassType || operandType.isNullable || - operandType.smlClass.qualifiedNameOrNull() !in setOf(StdlibClasses.Float, StdlibClasses.Int) + operandType.sdsClass.qualifiedNameOrNull() !in setOf(StdlibClasses.Float, StdlibClasses.Int) if (hasWrongType) { error( @@ -88,18 +88,18 @@ class InfixOperationTypeChecker : AbstractSimpleMLChecker() { } } - private fun operand(smlInfixOperation: SmlInfixOperation, feature: EReference): SmlAbstractExpression { + private fun operand(sdsInfixOperation: SdsInfixOperation, feature: EReference): SdsAbstractExpression { return when (feature) { - Literals.SML_INFIX_OPERATION__LEFT_OPERAND -> smlInfixOperation.leftOperand - Literals.SML_INFIX_OPERATION__RIGHT_OPERAND -> smlInfixOperation.rightOperand + Literals.SDS_INFIX_OPERATION__LEFT_OPERAND -> sdsInfixOperation.leftOperand + Literals.SDS_INFIX_OPERATION__RIGHT_OPERAND -> sdsInfixOperation.rightOperand else -> throw IllegalArgumentException("Cannot handle feature '$feature'.") } } private fun operandPositionToString(feature: EReference): String { return when (feature) { - Literals.SML_INFIX_OPERATION__LEFT_OPERAND -> "left" - Literals.SML_INFIX_OPERATION__RIGHT_OPERAND -> "right" + Literals.SDS_INFIX_OPERATION__LEFT_OPERAND -> "left" + Literals.SDS_INFIX_OPERATION__RIGHT_OPERAND -> "right" else -> throw IllegalArgumentException("Cannot handle feature '$feature'.") } } diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/PrefixOperationTypeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/PrefixOperationTypeChecker.kt new file mode 100644 index 000000000..007fef376 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/PrefixOperationTypeChecker.kt @@ -0,0 +1,55 @@ +package com.larsreimann.safeds.validation.typeChecking + +import com.larsreimann.safeds.constant.SdsPrefixOperationOperator +import com.larsreimann.safeds.constant.operator +import com.larsreimann.safeds.naming.qualifiedNameOrNull +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsPrefixOperation +import com.larsreimann.safeds.staticAnalysis.typing.ClassType +import com.larsreimann.safeds.staticAnalysis.typing.UnresolvedType +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.stdlibAccess.StdlibClasses +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check +import org.eclipse.xtext.validation.CheckType + +class PrefixOperationTypeChecker : AbstractSafeDSChecker() { + + @Check(CheckType.NORMAL) + fun operand(sdsPrefixOperation: SdsPrefixOperation) { + val operandType = sdsPrefixOperation.operand.type() + if (operandType is UnresolvedType) { + return // Scoping error already shown + } + + when (sdsPrefixOperation.operator()) { + SdsPrefixOperationOperator.Not -> { + val hasWrongType = operandType !is ClassType || + operandType.isNullable || + operandType.sdsClass.qualifiedNameOrNull() != StdlibClasses.Boolean + + if (hasWrongType) { + error( + "The operand of a logical negation must be an instance of the class 'Boolean'.", + Literals.SDS_PREFIX_OPERATION__OPERAND, + ErrorCode.WrongType + ) + } + } + SdsPrefixOperationOperator.Minus -> { + val hasWrongType = operandType !is ClassType || + operandType.isNullable || + operandType.sdsClass.qualifiedNameOrNull() !in setOf(StdlibClasses.Float, StdlibClasses.Int) + + if (hasWrongType) { + error( + "The operand of an arithmetic negation must be an instance of the class 'Float' or the class 'Int'.", + Literals.SDS_PREFIX_OPERATION__OPERAND, + ErrorCode.WrongType + ) + } + } + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/YieldTypeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/YieldTypeChecker.kt similarity index 58% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/YieldTypeChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/YieldTypeChecker.kt index e74eb2fe9..a64ec6181 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/YieldTypeChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/typeChecking/YieldTypeChecker.kt @@ -1,26 +1,26 @@ -package de.unibonn.simpleml.validation.typeChecking +package com.larsreimann.safeds.validation.typeChecking -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.staticAnalysis.assignedOrNull -import de.unibonn.simpleml.staticAnalysis.typing.UnresolvedType -import de.unibonn.simpleml.staticAnalysis.typing.isSubstitutableFor -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.staticAnalysis.assignedOrNull +import com.larsreimann.safeds.staticAnalysis.typing.UnresolvedType +import com.larsreimann.safeds.staticAnalysis.typing.isSubstitutableFor +import com.larsreimann.safeds.staticAnalysis.typing.type +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode import org.eclipse.xtext.validation.Check import org.eclipse.xtext.validation.CheckType -class YieldTypeChecker : AbstractSimpleMLChecker() { +class YieldTypeChecker : AbstractSafeDSChecker() { @Check(CheckType.NORMAL) - fun value(smlYield: SmlYield) { - val yieldedValue = smlYield.assignedOrNull() ?: return + fun value(sdsYield: SdsYield) { + val yieldedValue = sdsYield.assignedOrNull() ?: return val yieldedValueType = yieldedValue.type() if (yieldedValueType is UnresolvedType) { return // Scoping error already shown } - val resultType = (smlYield.result ?: return).type() + val resultType = (sdsYield.result ?: return).type() if (!yieldedValueType.isSubstitutableFor(resultType)) { var yieldedValueTypeString = yieldedValueType.toSimpleString() diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/CallableTypeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/CallableTypeChecker.kt new file mode 100644 index 000000000..a8a14867c --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/CallableTypeChecker.kt @@ -0,0 +1,35 @@ +package com.larsreimann.safeds.validation.types + +import com.larsreimann.safeds.emf.isOptional +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.resultsOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage.Literals +import com.larsreimann.safeds.safeDS.SdsCallableType +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check + +class CallableTypeChecker : AbstractSafeDSChecker() { + + @Check + fun uniqueNames(sdsCallableType: SdsCallableType) { + val declarations = sdsCallableType.parametersOrEmpty() + sdsCallableType.resultsOrEmpty() + declarations.reportDuplicateNames { + "A parameter or result with name '${it.name}' exists already in this callable type." + } + } + + @Check + fun noOptionalParameters(sdsCallableType: SdsCallableType) { + sdsCallableType.parametersOrEmpty().forEach { + if (it.isOptional()) { + error( + "Parameters in callable types must not be optional.", + it, + Literals.SDS_PARAMETER__DEFAULT_VALUE, + ErrorCode.NoOptionalParametersInCallableType + ) + } + } + } +} diff --git a/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/NamedTypeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/NamedTypeChecker.kt new file mode 100644 index 000000000..387797c8a --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/NamedTypeChecker.kt @@ -0,0 +1,38 @@ +package com.larsreimann.safeds.validation.types + +import com.larsreimann.safeds.emf.typeParametersOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSPackage +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import org.eclipse.xtext.validation.Check + +class NamedTypeChecker : AbstractSafeDSChecker() { + + @Check + fun missingTypeArgumentList(sdsNamedType: SdsNamedType) { + if (sdsNamedType.typeArgumentList != null) { + return + } + + val declaration = sdsNamedType.declaration + val typeParameters = when { + declaration.eIsProxy() -> return + declaration is SdsClass -> declaration.typeParametersOrEmpty() + declaration is SdsEnumVariant -> declaration.typeParametersOrEmpty() + declaration is SdsFunction -> declaration.typeParametersOrEmpty() + else -> return + } + + if (typeParameters.isNotEmpty()) { + error( + "Missing type argument list.", + SafeDSPackage.Literals.SDS_NAMED_TYPE__DECLARATION, + ErrorCode.MISSING_TYPE_ARGUMENT_LIST + ) + } + } +} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/UnionTypeChecker.kt b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/UnionTypeChecker.kt similarity index 53% rename from DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/UnionTypeChecker.kt rename to DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/UnionTypeChecker.kt index a226a83db..fd88178f1 100644 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/UnionTypeChecker.kt +++ b/DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation/types/UnionTypeChecker.kt @@ -1,17 +1,17 @@ -package de.unibonn.simpleml.validation.types +package com.larsreimann.safeds.validation.types -import de.unibonn.simpleml.emf.typeArgumentsOrEmpty -import de.unibonn.simpleml.simpleML.SmlUnionType -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode +import com.larsreimann.safeds.emf.typeArgumentsOrEmpty +import com.larsreimann.safeds.safeDS.SdsUnionType +import com.larsreimann.safeds.validation.AbstractSafeDSChecker +import com.larsreimann.safeds.validation.codes.ErrorCode +import com.larsreimann.safeds.validation.codes.InfoCode import org.eclipse.xtext.validation.Check -class UnionTypeChecker : AbstractSimpleMLChecker() { +class UnionTypeChecker : AbstractSafeDSChecker() { @Check - fun numberOfTypeArguments(smlUnionType: SmlUnionType) { - when (smlUnionType.typeArgumentsOrEmpty().size) { + fun numberOfTypeArguments(sdsUnionType: SdsUnionType) { + when (sdsUnionType.typeArgumentsOrEmpty().size) { 0 -> { error( "A union type must have least one type argument.", diff --git a/DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/codeGeneration.smlstub b/DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/codeGeneration.sdsstub similarity index 97% rename from DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/codeGeneration.smlstub rename to DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/codeGeneration.sdsstub index e669ba390..536c796d4 100644 --- a/DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/codeGeneration.smlstub +++ b/DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/codeGeneration.sdsstub @@ -1,4 +1,4 @@ -package simpleml.lang +package safeds.lang @Description("The qualified name of the corresponding Python module (default is the qualified name of the package).") @Target(AnnotationTarget.CompilationUnit) diff --git a/DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/coreAnnotations.smlstub b/DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/coreAnnotations.sdsstub similarity index 99% rename from DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/coreAnnotations.smlstub rename to DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/coreAnnotations.sdsstub index a7ed91762..28b58dbbb 100644 --- a/DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/coreAnnotations.smlstub +++ b/DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/coreAnnotations.sdsstub @@ -1,4 +1,4 @@ -package simpleml.lang +package safeds.lang @Description("The annotation can target these declaration types. If the @Target annotation is not used any declaration type can be targeted.") @Target(AnnotationTarget.Annotation) diff --git a/DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/coreClasses.smlstub b/DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/coreClasses.sdsstub similarity index 94% rename from DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/coreClasses.smlstub rename to DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/coreClasses.sdsstub index a46e0a1e6..857657ea9 100644 --- a/DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/coreClasses.smlstub +++ b/DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/coreClasses.sdsstub @@ -1,4 +1,4 @@ -package simpleml.lang +package safeds.lang @Description("The common superclass of all classes.") class Any diff --git a/DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/documentation.smlstub b/DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/documentation.sdsstub similarity index 95% rename from DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/documentation.smlstub rename to DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/documentation.sdsstub index 08a965e3c..92e887873 100644 --- a/DSL/de.unibonn.simpleml/src/main/resources/stdlib/simpleml/lang/documentation.smlstub +++ b/DSL/com.larsreimann.safeds/src/main/resources/stdlib/safeds/lang/documentation.sdsstub @@ -1,4 +1,4 @@ -package simpleml.lang +package safeds.lang @Description("The purpose of a declaration.") annotation Description( diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/IssueFinderTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/IssueFinderTest.kt similarity index 82% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/IssueFinderTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/IssueFinderTest.kt index dc33a1b85..7bea21d61 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/IssueFinderTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/IssueFinderTest.kt @@ -1,27 +1,27 @@ -package de.unibonn.simpleml +package com.larsreimann.safeds import com.google.inject.Inject -import de.unibonn.simpleml.emf.OriginalFilePath -import de.unibonn.simpleml.testing.CategorizedTest -import de.unibonn.simpleml.testing.FindTestRangesResult -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.ExpectedIssue -import de.unibonn.simpleml.testing.assertions.shouldHaveNoIssue -import de.unibonn.simpleml.testing.assertions.shouldHaveNoSemanticError -import de.unibonn.simpleml.testing.assertions.shouldHaveNoSemanticInfo -import de.unibonn.simpleml.testing.assertions.shouldHaveNoSemanticWarning -import de.unibonn.simpleml.testing.assertions.shouldHaveNoSyntaxError -import de.unibonn.simpleml.testing.assertions.shouldHaveSemanticError -import de.unibonn.simpleml.testing.assertions.shouldHaveSemanticInfo -import de.unibonn.simpleml.testing.assertions.shouldHaveSemanticWarning -import de.unibonn.simpleml.testing.assertions.shouldHaveSyntaxError -import de.unibonn.simpleml.testing.assertions.stringify -import de.unibonn.simpleml.testing.createDynamicTestsFromResourceFolder -import de.unibonn.simpleml.testing.findTestRanges -import de.unibonn.simpleml.testing.getResourcePath -import de.unibonn.simpleml.testing.testDisplayName -import de.unibonn.simpleml.utils.outerZipBy +import com.larsreimann.safeds.emf.OriginalFilePath +import com.larsreimann.safeds.testing.CategorizedTest +import com.larsreimann.safeds.testing.FindTestRangesResult +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.ExpectedIssue +import com.larsreimann.safeds.testing.assertions.shouldHaveNoIssue +import com.larsreimann.safeds.testing.assertions.shouldHaveNoSemanticError +import com.larsreimann.safeds.testing.assertions.shouldHaveNoSemanticInfo +import com.larsreimann.safeds.testing.assertions.shouldHaveNoSemanticWarning +import com.larsreimann.safeds.testing.assertions.shouldHaveNoSyntaxError +import com.larsreimann.safeds.testing.assertions.shouldHaveSemanticError +import com.larsreimann.safeds.testing.assertions.shouldHaveSemanticInfo +import com.larsreimann.safeds.testing.assertions.shouldHaveSemanticWarning +import com.larsreimann.safeds.testing.assertions.shouldHaveSyntaxError +import com.larsreimann.safeds.testing.assertions.stringify +import com.larsreimann.safeds.testing.createDynamicTestsFromResourceFolder +import com.larsreimann.safeds.testing.findTestRanges +import com.larsreimann.safeds.testing.getResourcePath +import com.larsreimann.safeds.testing.testDisplayName +import com.larsreimann.safeds.utils.outerZipBy import org.eclipse.xtext.testing.InjectWith import org.eclipse.xtext.testing.extensions.InjectionExtension import org.eclipse.xtext.testing.validation.ValidationTestHelper @@ -63,7 +63,7 @@ private val semanticSeverities = setOf( ) @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class IssueFinderTest { @Inject @@ -92,7 +92,11 @@ class IssueFinderTest { * Checks if the given program is a valid test. If there are issues a description of the issue is returned, * otherwise this returns `null`. */ - private fun validateTestFile(resourcePath: Path, filePath: Path, program: String): String? { + private fun validateTestFile( + @Suppress("UNUSED_PARAMETER") resourcePath: Path, + filePath: Path, + program: String + ): String? { val severities = severities(program) // Must contain at least one severity diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/StdlibTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/StdlibTest.kt similarity index 82% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/StdlibTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/StdlibTest.kt index 6cbcfb8b4..39b6c1571 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/StdlibTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/StdlibTest.kt @@ -1,11 +1,11 @@ -package de.unibonn.simpleml +package com.larsreimann.safeds import com.google.inject.Inject -import de.unibonn.simpleml.emf.OriginalFilePath -import de.unibonn.simpleml.stdlibAccess.listStdlibFiles -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.shouldHaveNoErrorsOrWarnings +import com.larsreimann.safeds.emf.OriginalFilePath +import com.larsreimann.safeds.stdlibAccess.listStdlibFiles +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.shouldHaveNoErrorsOrWarnings import io.kotest.matchers.nulls.shouldNotBeNull import org.eclipse.xtext.testing.InjectWith import org.eclipse.xtext.testing.extensions.InjectionExtension @@ -18,7 +18,7 @@ import java.nio.file.Files import java.util.stream.Stream @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class StdlibTest { @Inject diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLIDValueConverterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSIDValueConverterTest.kt similarity index 66% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLIDValueConverterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSIDValueConverterTest.kt index 2af08b5f5..91bfe9821 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLIDValueConverterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSIDValueConverterTest.kt @@ -1,18 +1,18 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.createSmlClass -import de.unibonn.simpleml.emf.createSmlCompilationUnit -import de.unibonn.simpleml.emf.createSmlDummyResource -import de.unibonn.simpleml.serializer.SerializationResult -import de.unibonn.simpleml.serializer.serializeToFormattedString -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.createSdsClass +import com.larsreimann.safeds.emf.createSdsCompilationUnit +import com.larsreimann.safeds.emf.createSdsDummyResource +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.serializer.SerializationResult +import com.larsreimann.safeds.serializer.serializeToFormattedString +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe import io.kotest.matchers.types.shouldBeInstanceOf @@ -24,8 +24,8 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) -class SimpleMLIDValueConverterTest { +@InjectWith(SafeDSInjectorProvider::class) +class SafeDSIDValueConverterTest { @Inject private lateinit var parseHelper: ParseHelper @@ -43,10 +43,10 @@ class SimpleMLIDValueConverterTest { @Test fun `should remove backticks (file)`() { val compilationUnit = - parseHelper.parseResource("conversion/idValueConverter.smltest") + parseHelper.parseResource("conversion/idValueConverter.sdstest") compilationUnit.shouldNotBeNull() - val `class` = compilationUnit.findUniqueDeclarationOrFail("class") + val `class` = compilationUnit.findUniqueDeclarationOrFail("class") `class`.shouldNotBeNull() } } @@ -60,9 +60,9 @@ class SimpleMLIDValueConverterTest { @Test fun `should escape keywords (creator)`() { - val `class` = createSmlClass("class") - val compilationUnit = createSmlCompilationUnit(packageName = "test", members = listOf(`class`)) - createSmlDummyResource("test", SmlFileExtension.Test, compilationUnit) + val `class` = createSdsClass("class") + val compilationUnit = createSdsCompilationUnit(packageName = "test", members = listOf(`class`)) + createSdsDummyResource("test", SdsFileExtension.Test, compilationUnit) val result = `class`.serializeToFormattedString() result.shouldBeInstanceOf() @@ -76,9 +76,9 @@ class SimpleMLIDValueConverterTest { @Test fun `should not escape non-keywords (creator)`() { - val `class` = createSmlClass("notAKeyword") - val compilationUnit = createSmlCompilationUnit(packageName = "notAKeyword", members = listOf(`class`)) - createSmlDummyResource("test", SmlFileExtension.Test, compilationUnit) + val `class` = createSdsClass("notAKeyword") + val compilationUnit = createSdsCompilationUnit(packageName = "notAKeyword", members = listOf(`class`)) + createSdsDummyResource("test", SdsFileExtension.Test, compilationUnit) val result = `class`.serializeToFormattedString() result.shouldBeInstanceOf() diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLINTValueConverterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSINTValueConverterTest.kt similarity index 63% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLINTValueConverterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSINTValueConverterTest.kt index b88cc2da2..c36c4e60a 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLINTValueConverterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSINTValueConverterTest.kt @@ -1,19 +1,19 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.createSmlDummyResource -import de.unibonn.simpleml.emf.createSmlInt -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.smlExpressionStatement -import de.unibonn.simpleml.emf.smlWorkflow -import de.unibonn.simpleml.serializer.SerializationResult -import de.unibonn.simpleml.serializer.serializeToFormattedString -import de.unibonn.simpleml.simpleML.SmlInt -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.createSdsDummyResource +import com.larsreimann.safeds.emf.createSdsInt +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.sdsExpressionStatement +import com.larsreimann.safeds.emf.sdsWorkflow +import com.larsreimann.safeds.safeDS.SdsInt +import com.larsreimann.safeds.serializer.SerializationResult +import com.larsreimann.safeds.serializer.serializeToFormattedString +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe @@ -26,8 +26,8 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) -class SimpleMLINTValueConverterTest { +@InjectWith(SafeDSInjectorProvider::class) +class SafeDSINTValueConverterTest { @Inject private lateinit var parseHelper: ParseHelper @@ -45,11 +45,11 @@ class SimpleMLINTValueConverterTest { @Test fun `should convert string to int (file)`() { val compilationUnit = parseHelper.parseResource( - "conversion/intValueConverter.smltest" + "conversion/intValueConverter.sdstest" ) // readProgramTextFromResource(resourceName)?.let { parseHelper.parse(it) } compilationUnit.shouldNotBeNull() - val int = compilationUnit.descendants().toList() + val int = compilationUnit.descendants().toList() int.shouldHaveSize(1) int[0].value shouldBe 1 @@ -65,11 +65,11 @@ class SimpleMLINTValueConverterTest { @Test fun `should convert int to string (creator)`() { - val int = createSmlInt(1) + val int = createSdsInt(1) - createSmlDummyResource(fileName = "test", SmlFileExtension.Test, packageName = "test") { - smlWorkflow("test") { - smlExpressionStatement(int) + createSdsDummyResource(fileName = "test", SdsFileExtension.Test, packageName = "test") { + sdsWorkflow("test") { + sdsExpressionStatement(int) } } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLQualifiedNameValueConverterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSQualifiedNameValueConverterTest.kt similarity index 57% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLQualifiedNameValueConverterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSQualifiedNameValueConverterTest.kt index 5470ccb19..04ec2ffda 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLQualifiedNameValueConverterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSQualifiedNameValueConverterTest.kt @@ -1,16 +1,16 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.createSmlCompilationUnit -import de.unibonn.simpleml.emf.createSmlDummyResource -import de.unibonn.simpleml.emf.createSmlImport -import de.unibonn.simpleml.serializer.SerializationResult -import de.unibonn.simpleml.serializer.serializeToFormattedString -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.createSdsCompilationUnit +import com.larsreimann.safeds.emf.createSdsDummyResource +import com.larsreimann.safeds.emf.createSdsImport +import com.larsreimann.safeds.serializer.SerializationResult +import com.larsreimann.safeds.serializer.serializeToFormattedString +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe @@ -23,8 +23,8 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) -class SimpleMLQualifiedNameValueConverterTest { +@InjectWith(SafeDSInjectorProvider::class) +class SafeDSQualifiedNameValueConverterTest { @Inject private lateinit var parseHelper: ParseHelper @@ -36,27 +36,27 @@ class SimpleMLQualifiedNameValueConverterTest { inner class toValue { @Test fun `should remove backticks (direct converter call, no wildcard)`() { - qualifiedNameValueConverter.toValue("simpleml.`package`", null) shouldBe "simpleml.package" + qualifiedNameValueConverter.toValue("safeds.`package`", null) shouldBe "safeds.package" } @Test fun `should remove backticks (direct converter call, with wildcard)`() { - qualifiedNameValueConverter.toValue("simpleml.`package`.*", null) shouldBe "simpleml.package.*" + qualifiedNameValueConverter.toValue("safeds.`package`.*", null) shouldBe "safeds.package.*" } @Test fun `should remove backticks (file, no wildcard)`() { val compilationUnit = - parseHelper.parseResource("conversion/qualifiedNameValueConverter.smltest") + parseHelper.parseResource("conversion/qualifiedNameValueConverter.sdstest") compilationUnit.shouldNotBeNull() - compilationUnit.name shouldBe "simpleml.package" + compilationUnit.name shouldBe "safeds.package" } @Test fun `should remove backticks (file, with wildcard)`() { val compilationUnit = - parseHelper.parseResource("conversion/qualifiedNameValueConverter.smltest") + parseHelper.parseResource("conversion/qualifiedNameValueConverter.sdstest") compilationUnit.shouldNotBeNull() compilationUnit.name.shouldNotBeNull() @@ -64,7 +64,7 @@ class SimpleMLQualifiedNameValueConverterTest { val imports = compilationUnit.imports imports.shouldHaveSize(1) - imports[0].importedNamespace shouldBe "simpleml.package.*" + imports[0].importedNamespace shouldBe "safeds.package.*" } } @@ -72,78 +72,78 @@ class SimpleMLQualifiedNameValueConverterTest { inner class toString { @Test fun `should escape keywords (direct converter call, no wildcard)`() { - qualifiedNameValueConverter.toString("simpleml.package") shouldBe "simpleml.`package`" + qualifiedNameValueConverter.toString("safeds.package") shouldBe "safeds.`package`" } @Test fun `should escape keywords (direct converter call, with wildcard)`() { - qualifiedNameValueConverter.toString("simpleml.package.*") shouldBe "simpleml.`package`.*" + qualifiedNameValueConverter.toString("safeds.package.*") shouldBe "safeds.`package`.*" } @Test fun `should escape keywords (creator, no wildcard)`() { - val compilationUnit = createSmlCompilationUnit(packageName = "simpleml.package") - createSmlDummyResource( + val compilationUnit = createSdsCompilationUnit(packageName = "safeds.package") + createSdsDummyResource( "test", - SmlFileExtension.Test, + SdsFileExtension.Test, compilationUnit ) val result = compilationUnit.serializeToFormattedString() result.shouldBeInstanceOf() - result.code shouldBe "package simpleml.`package`" + result.code shouldBe "package safeds.`package`" } @Test fun `should escape keywords (creator, with wildcard)`() { - val import = createSmlImport("simpleml.package.*") - createSmlDummyResource( + val import = createSdsImport("safeds.package.*") + createSdsDummyResource( fileName = "test", - SmlFileExtension.Test, - createSmlCompilationUnit(packageName = "test", imports = listOf(import)) + SdsFileExtension.Test, + createSdsCompilationUnit(packageName = "test", imports = listOf(import)) ) val result = import.serializeToFormattedString() result.shouldBeInstanceOf() - result.code shouldBe "import simpleml.`package`.*" + result.code shouldBe "import safeds.`package`.*" } @Test fun `should not escape non-keywords (direct converter call, no wildcard)`() { - qualifiedNameValueConverter.toString("simpleml.notAKeyword") shouldBe "simpleml.notAKeyword" + qualifiedNameValueConverter.toString("safeds.notAKeyword") shouldBe "safeds.notAKeyword" } @Test fun `should not escape non-keywords (direct converter call, with wildcard)`() { - qualifiedNameValueConverter.toString("simpleml.notAKeyword.*") shouldBe "simpleml.notAKeyword.*" + qualifiedNameValueConverter.toString("safeds.notAKeyword.*") shouldBe "safeds.notAKeyword.*" } @Test fun `should not escape non-keywords (creator, no wildcard)`() { - val compilationUnit = createSmlCompilationUnit(packageName = "simpleml.notAKeyword") - createSmlDummyResource( + val compilationUnit = createSdsCompilationUnit(packageName = "safeds.notAKeyword") + createSdsDummyResource( "test", - SmlFileExtension.Test, + SdsFileExtension.Test, compilationUnit ) val result = compilationUnit.serializeToFormattedString() result.shouldBeInstanceOf() - result.code shouldBe "package simpleml.notAKeyword" + result.code shouldBe "package safeds.notAKeyword" } @Test fun `should not escape non-keywords (creator, with wildcard)`() { - val import = createSmlImport("simpleml.notAKeyword.*") - createSmlDummyResource( + val import = createSdsImport("safeds.notAKeyword.*") + createSdsDummyResource( fileName = "test", - SmlFileExtension.Test, - createSmlCompilationUnit(packageName = "test", imports = listOf(import)) + SdsFileExtension.Test, + createSdsCompilationUnit(packageName = "test", imports = listOf(import)) ) val result = import.serializeToFormattedString() result.shouldBeInstanceOf() - result.code shouldBe "import simpleml.notAKeyword.*" + result.code shouldBe "import safeds.notAKeyword.*" } } } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLSTRINGValueConverterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSSTRINGValueConverterTest.kt similarity index 70% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLSTRINGValueConverterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSSTRINGValueConverterTest.kt index 788b81029..6741d9ada 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLSTRINGValueConverterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSSTRINGValueConverterTest.kt @@ -1,21 +1,21 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.createSmlDummyResource -import de.unibonn.simpleml.emf.createSmlString -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.smlExpressionStatement -import de.unibonn.simpleml.emf.smlWorkflow -import de.unibonn.simpleml.serializer.SerializationResult -import de.unibonn.simpleml.serializer.serializeToFormattedString -import de.unibonn.simpleml.simpleML.SmlString -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.createSdsDummyResource +import com.larsreimann.safeds.emf.createSdsString +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.sdsExpressionStatement +import com.larsreimann.safeds.emf.sdsWorkflow +import com.larsreimann.safeds.safeDS.SdsString +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.serializer.SerializationResult +import com.larsreimann.safeds.serializer.serializeToFormattedString +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe @@ -28,8 +28,8 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) -class SimpleMLSTRINGValueConverterTest { +@InjectWith(SafeDSInjectorProvider::class) +class SafeDSSTRINGValueConverterTest { @Inject private lateinit var parseHelper: ParseHelper @@ -47,12 +47,12 @@ class SimpleMLSTRINGValueConverterTest { @Test fun `should unescape opening curly brace (file)`() { val compilationUnit = - parseHelper.parseResource("conversion/stringValueConverter.smltest") + parseHelper.parseResource("conversion/stringValueConverter.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("escapedOpeningBrace") + val workflow = compilationUnit.findUniqueDeclarationOrFail("escapedOpeningBrace") - val strings = workflow.descendants().toList() + val strings = workflow.descendants().toList() strings.shouldHaveSize(1) strings[0].value shouldBe "{" } @@ -65,12 +65,12 @@ class SimpleMLSTRINGValueConverterTest { @Test fun `should unescape single quote (file)`() { val compilationUnit = - parseHelper.parseResource("conversion/stringValueConverter.smltest") + parseHelper.parseResource("conversion/stringValueConverter.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("escapedSingleQuote") + val workflow = compilationUnit.findUniqueDeclarationOrFail("escapedSingleQuote") - val strings = workflow.descendants().toList() + val strings = workflow.descendants().toList() strings.shouldHaveSize(1) strings[0].value shouldBe "'" } @@ -86,12 +86,12 @@ class SimpleMLSTRINGValueConverterTest { @Test fun `should keep escaped opening curly brace (file)`() { val compilationUnit = - parseHelper.parseResource("conversion/stringValueConverter.smltest") + parseHelper.parseResource("conversion/stringValueConverter.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("escapedOpeningBrace") + val workflow = compilationUnit.findUniqueDeclarationOrFail("escapedOpeningBrace") - val strings = workflow.descendants().toList() + val strings = workflow.descendants().toList() strings.shouldHaveSize(1) val result = strings[0].serializeToFormattedString() @@ -102,12 +102,12 @@ class SimpleMLSTRINGValueConverterTest { @Test fun `should keep unescaped opening curly brace (file)`() { val compilationUnit = - parseHelper.parseResource("conversion/stringValueConverter.smltest") + parseHelper.parseResource("conversion/stringValueConverter.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("unescapedOpeningBrace") + val workflow = compilationUnit.findUniqueDeclarationOrFail("unescapedOpeningBrace") - val strings = workflow.descendants().toList() + val strings = workflow.descendants().toList() strings.shouldHaveSize(1) val result = strings[0].serializeToFormattedString() @@ -117,11 +117,11 @@ class SimpleMLSTRINGValueConverterTest { @Test fun `should always escape opening curly brace (creator)`() { - val string = createSmlString("{") + val string = createSdsString("{") - createSmlDummyResource(fileName = "test", SmlFileExtension.Test, packageName = "test") { - smlWorkflow("test") { - smlExpressionStatement(string) + createSdsDummyResource(fileName = "test", SdsFileExtension.Test, packageName = "test") { + sdsWorkflow("test") { + sdsExpressionStatement(string) } } @@ -138,12 +138,12 @@ class SimpleMLSTRINGValueConverterTest { @Test fun `should not escape single quote (file)`() { val compilationUnit = - parseHelper.parseResource("conversion/stringValueConverter.smltest") + parseHelper.parseResource("conversion/stringValueConverter.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("unescapedSingleQuote") + val workflow = compilationUnit.findUniqueDeclarationOrFail("unescapedSingleQuote") - val strings = workflow.descendants().toList() + val strings = workflow.descendants().toList() strings.shouldHaveSize(1) val result = strings[0].serializeToFormattedString() @@ -153,11 +153,11 @@ class SimpleMLSTRINGValueConverterTest { @Test fun `should not escape single quote (creator)`() { - val string = createSmlString("'") + val string = createSdsString("'") - createSmlDummyResource(fileName = "test", SmlFileExtension.Test, packageName = "test") { - smlWorkflow("test") { - smlExpressionStatement(string) + createSdsDummyResource(fileName = "test", SdsFileExtension.Test, packageName = "test") { + sdsWorkflow("test") { + sdsExpressionStatement(string) } } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_ENDValueConverterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_ENDValueConverterTest.kt similarity index 60% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_ENDValueConverterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_ENDValueConverterTest.kt index 7450dc03e..85debb784 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_ENDValueConverterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_ENDValueConverterTest.kt @@ -1,20 +1,20 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.createSmlDummyResource -import de.unibonn.simpleml.emf.createSmlNull -import de.unibonn.simpleml.emf.createSmlTemplateString -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.smlExpressionStatement -import de.unibonn.simpleml.emf.smlWorkflow -import de.unibonn.simpleml.serializer.SerializationResult -import de.unibonn.simpleml.serializer.serializeToFormattedString -import de.unibonn.simpleml.simpleML.SmlTemplateStringEnd -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.createSdsDummyResource +import com.larsreimann.safeds.emf.createSdsNull +import com.larsreimann.safeds.emf.createSdsTemplateString +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.sdsExpressionStatement +import com.larsreimann.safeds.emf.sdsWorkflow +import com.larsreimann.safeds.safeDS.SdsTemplateStringEnd +import com.larsreimann.safeds.serializer.SerializationResult +import com.larsreimann.safeds.serializer.serializeToFormattedString +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe @@ -26,14 +26,14 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) -class SimpleMLTEMPLATE_STRING_ENDValueConverterTest { +@InjectWith(SafeDSInjectorProvider::class) +class SafeDSTEMPLATE_STRING_ENDValueConverterTest { @Inject private lateinit var parseHelper: ParseHelper @Inject - private lateinit var templateStringEndValueConverter: SimpleMLTEMPLATE_STRING_ENDValueConverter + private lateinit var templateStringEndValueConverter: SafeDSTEMPLATE_STRING_ENDValueConverter @Nested inner class toValue { @@ -45,11 +45,11 @@ class SimpleMLTEMPLATE_STRING_ENDValueConverterTest { @Test fun `should remove delimiters (file)`() { val compilationUnit = parseHelper.parseResource( - "conversion/templateStringPartValueConverter.smltest" + "conversion/templateStringPartValueConverter.sdstest" ) // readProgramTextFromResource(resourceName)?.let { parseHelper.parse(it) } compilationUnit.shouldNotBeNull() - val stringTemplateParts = compilationUnit.descendants().toList() + val stringTemplateParts = compilationUnit.descendants().toList() stringTemplateParts.shouldHaveSize(1) stringTemplateParts[0].value shouldBe "end" @@ -65,14 +65,14 @@ class SimpleMLTEMPLATE_STRING_ENDValueConverterTest { @Test fun `should add delimiters (creator)`() { - val stringTemplate = createSmlTemplateString( + val stringTemplate = createSdsTemplateString( listOf("start", "end"), - listOf(createSmlNull()) + listOf(createSdsNull()) ) - createSmlDummyResource(fileName = "test", SmlFileExtension.Test, packageName = "test") { - smlWorkflow("test") { - smlExpressionStatement(stringTemplate) + createSdsDummyResource(fileName = "test", SdsFileExtension.Test, packageName = "test") { + sdsWorkflow("test") { + sdsExpressionStatement(stringTemplate) } } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_INNERValueConverterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_INNERValueConverterTest.kt similarity index 60% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_INNERValueConverterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_INNERValueConverterTest.kt index b6a2f2fcc..6c2defdda 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_INNERValueConverterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_INNERValueConverterTest.kt @@ -1,20 +1,20 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.createSmlDummyResource -import de.unibonn.simpleml.emf.createSmlNull -import de.unibonn.simpleml.emf.createSmlTemplateString -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.smlExpressionStatement -import de.unibonn.simpleml.emf.smlWorkflow -import de.unibonn.simpleml.serializer.SerializationResult -import de.unibonn.simpleml.serializer.serializeToFormattedString -import de.unibonn.simpleml.simpleML.SmlTemplateStringInner -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.createSdsDummyResource +import com.larsreimann.safeds.emf.createSdsNull +import com.larsreimann.safeds.emf.createSdsTemplateString +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.sdsExpressionStatement +import com.larsreimann.safeds.emf.sdsWorkflow +import com.larsreimann.safeds.safeDS.SdsTemplateStringInner +import com.larsreimann.safeds.serializer.SerializationResult +import com.larsreimann.safeds.serializer.serializeToFormattedString +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe @@ -26,14 +26,14 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) -class SimpleMLTEMPLATE_STRING_INNERValueConverterTest { +@InjectWith(SafeDSInjectorProvider::class) +class SafeDSTEMPLATE_STRING_INNERValueConverterTest { @Inject private lateinit var parseHelper: ParseHelper @Inject - private lateinit var templateStringInnerValueConverter: SimpleMLTEMPLATE_STRING_INNERValueConverter + private lateinit var templateStringInnerValueConverter: SafeDSTEMPLATE_STRING_INNERValueConverter @Nested inner class toValue { @@ -45,11 +45,11 @@ class SimpleMLTEMPLATE_STRING_INNERValueConverterTest { @Test fun `should remove delimiters (file)`() { val compilationUnit = parseHelper.parseResource( - "conversion/templateStringPartValueConverter.smltest" + "conversion/templateStringPartValueConverter.sdstest" ) // readProgramTextFromResource(resourceName)?.let { parseHelper.parse(it) } compilationUnit.shouldNotBeNull() - val stringTemplateParts = compilationUnit.descendants().toList() + val stringTemplateParts = compilationUnit.descendants().toList() stringTemplateParts.shouldHaveSize(1) stringTemplateParts[0].value shouldBe "inner" @@ -65,14 +65,14 @@ class SimpleMLTEMPLATE_STRING_INNERValueConverterTest { @Test fun `should add delimiters (creator)`() { - val stringTemplate = createSmlTemplateString( + val stringTemplate = createSdsTemplateString( listOf("start", "inner", "end"), - listOf(createSmlNull(), createSmlNull()) + listOf(createSdsNull(), createSdsNull()) ) - createSmlDummyResource(fileName = "test", SmlFileExtension.Test, packageName = "test") { - smlWorkflow("test") { - smlExpressionStatement(stringTemplate) + createSdsDummyResource(fileName = "test", SdsFileExtension.Test, packageName = "test") { + sdsWorkflow("test") { + sdsExpressionStatement(stringTemplate) } } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_STARTValueConverterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_STARTValueConverterTest.kt similarity index 60% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_STARTValueConverterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_STARTValueConverterTest.kt index 33dc58300..4ebb3f65b 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion/SimpleMLTEMPLATE_STRING_STARTValueConverterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion/SafeDSTEMPLATE_STRING_STARTValueConverterTest.kt @@ -1,20 +1,20 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.conversion +package com.larsreimann.safeds.conversion import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.createSmlDummyResource -import de.unibonn.simpleml.emf.createSmlNull -import de.unibonn.simpleml.emf.createSmlTemplateString -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.smlExpressionStatement -import de.unibonn.simpleml.emf.smlWorkflow -import de.unibonn.simpleml.serializer.SerializationResult -import de.unibonn.simpleml.serializer.serializeToFormattedString -import de.unibonn.simpleml.simpleML.SmlTemplateStringStart -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.createSdsDummyResource +import com.larsreimann.safeds.emf.createSdsNull +import com.larsreimann.safeds.emf.createSdsTemplateString +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.sdsExpressionStatement +import com.larsreimann.safeds.emf.sdsWorkflow +import com.larsreimann.safeds.safeDS.SdsTemplateStringStart +import com.larsreimann.safeds.serializer.SerializationResult +import com.larsreimann.safeds.serializer.serializeToFormattedString +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe @@ -26,14 +26,14 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) -class SimpleMLTEMPLATE_STRING_STARTValueConverterTest { +@InjectWith(SafeDSInjectorProvider::class) +class SafeDSTEMPLATE_STRING_STARTValueConverterTest { @Inject private lateinit var parseHelper: ParseHelper @Inject - private lateinit var templateStringStartValueConverter: SimpleMLTEMPLATE_STRING_STARTValueConverter + private lateinit var templateStringStartValueConverter: SafeDSTEMPLATE_STRING_STARTValueConverter @Nested inner class toValue { @@ -45,11 +45,11 @@ class SimpleMLTEMPLATE_STRING_STARTValueConverterTest { @Test fun `should remove delimiters (file)`() { val compilationUnit = parseHelper.parseResource( - "conversion/templateStringPartValueConverter.smltest" + "conversion/templateStringPartValueConverter.sdstest" ) // readProgramTextFromResource(resourceName)?.let { parseHelper.parse(it) } compilationUnit.shouldNotBeNull() - val stringTemplateParts = compilationUnit.descendants().toList() + val stringTemplateParts = compilationUnit.descendants().toList() stringTemplateParts.shouldHaveSize(1) stringTemplateParts[0].value shouldBe "start" @@ -65,14 +65,14 @@ class SimpleMLTEMPLATE_STRING_STARTValueConverterTest { @Test fun `should add delimiters (creator)`() { - val stringTemplate = createSmlTemplateString( + val stringTemplate = createSdsTemplateString( listOf("start", "end"), - listOf(createSmlNull()) + listOf(createSdsNull()) ) - createSmlDummyResource(fileName = "test", SmlFileExtension.Test, packageName = "test") { - smlWorkflow("test") { - smlExpressionStatement(stringTemplate) + createSdsDummyResource(fileName = "test", SdsFileExtension.Test, packageName = "test") { + sdsWorkflow("test") { + sdsExpressionStatement(stringTemplate) } } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/emf/CreatorsTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/emf/CreatorsTest.kt similarity index 50% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/emf/CreatorsTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/emf/CreatorsTest.kt index 7ed53e2d7..65a8c5524 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/emf/CreatorsTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/emf/CreatorsTest.kt @@ -1,22 +1,22 @@ -package de.unibonn.simpleml.emf - -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.constant.SmlPrefixOperationOperator -import de.unibonn.simpleml.constant.SmlProtocolTokenClassValue -import de.unibonn.simpleml.constant.SmlTypeParameterConstraintOperator -import de.unibonn.simpleml.serializer.SerializationResult -import de.unibonn.simpleml.serializer.serializeToFormattedString -import de.unibonn.simpleml.simpleML.SmlFloat -import de.unibonn.simpleml.simpleML.SmlInt -import de.unibonn.simpleml.simpleML.SmlLambdaParameterList -import de.unibonn.simpleml.simpleML.SmlParameterList -import de.unibonn.simpleml.simpleML.SmlPrefixOperation -import de.unibonn.simpleml.simpleML.SmlProtocol -import de.unibonn.simpleml.simpleML.SmlTemplateStringEnd -import de.unibonn.simpleml.simpleML.SmlTemplateStringInner -import de.unibonn.simpleml.simpleML.SmlTemplateStringStart -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.shouldBeCloseTo +package com.larsreimann.safeds.emf + +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.constant.SdsPrefixOperationOperator +import com.larsreimann.safeds.constant.SdsProtocolTokenClassValue +import com.larsreimann.safeds.constant.SdsTypeParameterConstraintOperator +import com.larsreimann.safeds.safeDS.SdsFloat +import com.larsreimann.safeds.safeDS.SdsInt +import com.larsreimann.safeds.safeDS.SdsLambdaParameterList +import com.larsreimann.safeds.safeDS.SdsParameterList +import com.larsreimann.safeds.safeDS.SdsPrefixOperation +import com.larsreimann.safeds.safeDS.SdsProtocol +import com.larsreimann.safeds.safeDS.SdsTemplateStringEnd +import com.larsreimann.safeds.safeDS.SdsTemplateStringInner +import com.larsreimann.safeds.safeDS.SdsTemplateStringStart +import com.larsreimann.safeds.serializer.SerializationResult +import com.larsreimann.safeds.serializer.serializeToFormattedString +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.shouldBeCloseTo import io.kotest.assertions.asClue import io.kotest.assertions.throwables.shouldNotThrow import io.kotest.assertions.throwables.shouldThrow @@ -46,22 +46,22 @@ import org.junit.jupiter.api.extension.ExtendWith * - Union type requires at least one type argument */ @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class CreatorsTest { @Test - fun `createSmlDummyResource should create serializable dummy resource`() { - val result = createSmlDummyResource(fileName = "test", SmlFileExtension.Test, packageName = "test") + fun `createSdsDummyResource should create serializable dummy resource`() { + val result = createSdsDummyResource(fileName = "test", SdsFileExtension.Test, packageName = "test") result.contents.shouldHaveSize(1) result.contents[0].serializeToFormattedString().shouldBeInstanceOf() } @Test - fun `createSmlAnnotation should store annotation uses in annotationCallList`() { - val annotation = createSmlAnnotation( + fun `createSdsAnnotation should store annotation uses in annotationCallList`() { + val annotation = createSdsAnnotation( "Test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) annotation.annotationCalls.shouldHaveSize(0) @@ -72,8 +72,8 @@ class CreatorsTest { } @Test - fun `createSmlAnnotation should omit empty parameter lists`() { - val annotation = createSmlAnnotation( + fun `createSdsAnnotation should omit empty parameter lists`() { + val annotation = createSdsAnnotation( "Test", parameters = emptyList() ) @@ -82,17 +82,17 @@ class CreatorsTest { } @Test - fun `smlAnnotation should add the created annotation to the receiving compilation unit`() { - val compilationUnit = createSmlCompilationUnit(packageName = "test") { - smlAnnotation("Test") + fun `sdsAnnotation should add the created annotation to the receiving compilation unit`() { + val compilationUnit = createSdsCompilationUnit(packageName = "test") { + sdsAnnotation("Test") } compilationUnit.members.shouldHaveSize(1) } @Test - fun `createSmlAnnotationUse should omit empty argument lists`() { - val annotationUse = createSmlAnnotationCall( + fun `createSdsAnnotationUse should omit empty argument lists`() { + val annotationUse = createSdsAnnotationCall( "Test", arguments = emptyList() ) @@ -100,34 +100,34 @@ class CreatorsTest { } @Test - fun `createSmlAnnotationUse should create an SmlAnnotation when only a name is passed`() { - val annotationUse = createSmlAnnotationCall("Test") + fun `createSdsAnnotationUse should create an SdsAnnotation when only a name is passed`() { + val annotationUse = createSdsAnnotationCall("Test") val annotation = annotationUse.annotation annotation.shouldNotBeNull() annotation.name shouldBe "Test" } @Test - fun `createSmlArgument should create an SmlParameter when only a name is passed`() { - val argument = createSmlArgument(createSmlInt(1), "Test") + fun `createSdsArgument should create an SdsParameter when only a name is passed`() { + val argument = createSdsArgument(createSdsInt(1), "Test") val parameter = argument.parameter parameter.shouldNotBeNull() parameter.name shouldBe "Test" } @Test - fun `smlAssignment should throw if no type arguments are passed`() { + fun `sdsAssignment should throw if no type arguments are passed`() { shouldThrow { - createSmlAssignment(listOf(), createSmlInt(1)) + createSdsAssignment(listOf(), createSdsInt(1)) } } @Test - fun `smlAssignment should add the created assignment to the receiving lambda`() { - val lambda = createSmlBlockLambda { - smlAssignment( - listOf(createSmlWildcard()), - createSmlInt(1) + fun `sdsAssignment should add the created assignment to the receiving lambda`() { + val lambda = createSdsBlockLambda { + sdsAssignment( + listOf(createSdsWildcard()), + createSdsInt(1) ) } @@ -137,11 +137,11 @@ class CreatorsTest { } @Test - fun `smlAssignment should add the created assignment to the receiving workflow`() { - val workflow = createSmlWorkflow("Test") { - smlAssignment( - listOf(createSmlWildcard()), - createSmlInt(1) + fun `sdsAssignment should add the created assignment to the receiving workflow`() { + val workflow = createSdsWorkflow("Test") { + sdsAssignment( + listOf(createSdsWildcard()), + createSdsInt(1) ) } @@ -151,11 +151,11 @@ class CreatorsTest { } @Test - fun `smlAssignment should add the created assignment to the receiving step`() { - val step = createSmlStep("Test") { - smlAssignment( - listOf(createSmlWildcard()), - createSmlInt(1) + fun `sdsAssignment should add the created assignment to the receiving step`() { + val step = createSdsStep("Test") { + sdsAssignment( + listOf(createSdsWildcard()), + createSdsInt(1) ) } @@ -165,10 +165,10 @@ class CreatorsTest { } @Test - fun `createSmlAttribute should store annotation uses in annotationCallList`() { - val attribute = createSmlAttribute( + fun `createSdsAttribute should store annotation uses in annotationCallList`() { + val attribute = createSdsAttribute( "Test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) attribute.annotationCalls.shouldHaveSize(0) @@ -179,9 +179,9 @@ class CreatorsTest { } @Test - fun `smlAttribute should add the created attribute to the receiver`() { - val `class` = createSmlClass("Test") { - smlAttribute("Test") + fun `sdsAttribute should add the created attribute to the receiver`() { + val `class` = createSdsClass("Test") { + sdsAttribute("Test") } val body = `class`.body @@ -190,24 +190,24 @@ class CreatorsTest { } @Test - fun `createSmlBlockLambda should not omit empty parameter lists`() { - val lambda = createSmlBlockLambda(parameters = emptyList()) - lambda.parameterList.shouldBeInstanceOf() + fun `createSdsBlockLambda should not omit empty parameter lists`() { + val lambda = createSdsBlockLambda(parameters = emptyList()) + lambda.parameterList.shouldBeInstanceOf() } @Test - fun `createSmlBlockLambda should use a lambda parameter list for parameters`() { - val lambda = createSmlBlockLambda() - lambda.parameterList.shouldBeInstanceOf() + fun `createSdsBlockLambda should use a lambda parameter list for parameters`() { + val lambda = createSdsBlockLambda() + lambda.parameterList.shouldBeInstanceOf() } @Test - fun `createSmlBlockLambda should create a serializable block lambda`() { - val lambda = createSmlBlockLambda() + fun `createSdsBlockLambda should create a serializable block lambda`() { + val lambda = createSdsBlockLambda() - createSmlDummyResource(fileName = "test", SmlFileExtension.Test, packageName = "test") { - smlWorkflow(name = "test") { - smlExpressionStatement(lambda) + createSdsDummyResource(fileName = "test", SdsFileExtension.Test, packageName = "test") { + sdsWorkflow(name = "test") { + sdsExpressionStatement(lambda) } } @@ -215,19 +215,19 @@ class CreatorsTest { } @Test - fun `createSmlCall should omit empty type argument lists`() { - val call = createSmlCall( - createSmlNull(), + fun `createSdsCall should omit empty type argument lists`() { + val call = createSdsCall( + createSdsNull(), typeArguments = emptyList() ) call.typeArgumentList.shouldBeNull() } @Test - fun `createSmlClass should store annotation uses in annotationCallList`() { - val `class` = createSmlClass( + fun `createSdsClass should store annotation uses in annotationCallList`() { + val `class` = createSdsClass( "Test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) `class`.annotationCalls.shouldHaveSize(0) @@ -238,8 +238,8 @@ class CreatorsTest { } @Test - fun `createSmlClass should omit empty body`() { - val `class` = createSmlClass( + fun `createSdsClass should omit empty body`() { + val `class` = createSdsClass( "Test", members = emptyList() ) @@ -247,17 +247,17 @@ class CreatorsTest { } @Test - fun `createSmlClass should not omit empty parameter lists`() { - val `class` = createSmlClass( + fun `createSdsClass should not omit empty parameter lists`() { + val `class` = createSdsClass( "Test", parameters = emptyList() ) - `class`.parameterList.shouldBeInstanceOf() + `class`.parameterList.shouldBeInstanceOf() } @Test - fun `createSmlClass should omit empty parent type list`() { - val `class` = createSmlClass( + fun `createSdsClass should omit empty parent type list`() { + val `class` = createSdsClass( "Test", parentTypes = emptyList() ) @@ -265,8 +265,8 @@ class CreatorsTest { } @Test - fun `createSmlClass should omit empty type parameter list`() { - val `class` = createSmlClass( + fun `createSdsClass should omit empty type parameter list`() { + val `class` = createSdsClass( "Test", typeParameters = emptyList() ) @@ -276,8 +276,8 @@ class CreatorsTest { // constraints are now a member, doesn't make sense // // @Test -// fun `createSmlClass should omit empty constraint list`() { -// val `class` = createSmlClass( +// fun `createSdsClass should omit empty constraint list`() { +// val `class` = createSdsClass( // "Test", // constraints = emptyList() // ) @@ -285,9 +285,9 @@ class CreatorsTest { // } @Test - fun `smlClass should add the created class to the receiving class`() { - val `class` = createSmlClass("Test") { - smlClass("Test") + fun `sdsClass should add the created class to the receiving class`() { + val `class` = createSdsClass("Test") { + sdsClass("Test") } val body = `class`.body @@ -296,19 +296,19 @@ class CreatorsTest { } @Test - fun `smlClass should add the created class to the receiving compilation unit`() { - val compilationUnit = createSmlCompilationUnit(packageName = "test") { - smlClass("Test") + fun `sdsClass should add the created class to the receiving compilation unit`() { + val compilationUnit = createSdsCompilationUnit(packageName = "test") { + sdsClass("Test") } compilationUnit.members.shouldHaveSize(1) } @Test - fun `createSmlCompilationUnit should store annotation uses in annotationCalls`() { - val compilationUnit = createSmlCompilationUnit( + fun `createSdsCompilationUnit should store annotation uses in annotationCalls`() { + val compilationUnit = createSdsCompilationUnit( packageName = "test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) compilationUnit.annotationCalls.shouldHaveSize(1) @@ -316,10 +316,10 @@ class CreatorsTest { } @Test - fun `createSmlEnum should store annotation uses in annotationCallList`() { - val `enum` = createSmlEnum( + fun `createSdsEnum should store annotation uses in annotationCallList`() { + val `enum` = createSdsEnum( "Test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) `enum`.annotationCalls.shouldHaveSize(0) @@ -330,8 +330,8 @@ class CreatorsTest { } @Test - fun `createSmlEnum should omit empty body`() { - val enum = createSmlEnum( + fun `createSdsEnum should omit empty body`() { + val enum = createSdsEnum( "Test", variants = emptyList() ) @@ -339,9 +339,9 @@ class CreatorsTest { } @Test - fun `smlEnum should add the created enum to the receiving class`() { - val `class` = createSmlClass("Test") { - smlEnum("Test") + fun `sdsEnum should add the created enum to the receiving class`() { + val `class` = createSdsClass("Test") { + sdsEnum("Test") } val body = `class`.body @@ -350,19 +350,19 @@ class CreatorsTest { } @Test - fun `smlEnum should add the created enum to the receiving compilation unit`() { - val compilationUnit = createSmlCompilationUnit(packageName = "test") { - smlEnum("Test") + fun `sdsEnum should add the created enum to the receiving compilation unit`() { + val compilationUnit = createSdsCompilationUnit(packageName = "test") { + sdsEnum("Test") } compilationUnit.members.shouldHaveSize(1) } @Test - fun `createSmlEnumVariant should store annotation uses in annotations`() { - val variant = createSmlEnumVariant( + fun `createSdsEnumVariant should store annotation uses in annotations`() { + val variant = createSdsEnumVariant( "Test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) variant.annotationCalls.shouldHaveSize(1) @@ -370,8 +370,8 @@ class CreatorsTest { } @Test - fun `createSmlEnumVariant should omit empty type parameter list`() { - val enum = createSmlEnumVariant( + fun `createSdsEnumVariant should omit empty type parameter list`() { + val enum = createSdsEnumVariant( "Test", typeParameters = emptyList() ) @@ -379,8 +379,8 @@ class CreatorsTest { } @Test - fun `createSmlEnumVariant should omit empty parameter list`() { - val enum = createSmlEnumVariant( + fun `createSdsEnumVariant should omit empty parameter list`() { + val enum = createSdsEnumVariant( "Test", parameters = emptyList() ) @@ -388,17 +388,17 @@ class CreatorsTest { } @Test - fun `createSmlEnumVariant should omit empty constraint list`() { - val enum = createSmlEnumVariant( + fun `createSdsEnumVariant should omit empty constraint list`() { + val enum = createSdsEnumVariant( "Test" ) enum.constraint.shouldBeNull() } @Test - fun `smlEnumVariant should add the created variant to the receiver`() { - val enum = createSmlEnum("Test") { - smlEnumVariant("Test") + fun `sdsEnumVariant should add the created variant to the receiver`() { + val enum = createSdsEnum("Test") { + sdsEnumVariant("Test") } val body = enum.body @@ -407,18 +407,18 @@ class CreatorsTest { } @Test - fun `createSmlExpressionLambda should use a lambda parameter list for parameters`() { - val lambda = createSmlExpressionLambda(result = createSmlNull()) - lambda.parameterList.shouldBeInstanceOf() + fun `createSdsExpressionLambda should use a lambda parameter list for parameters`() { + val lambda = createSdsExpressionLambda(result = createSdsNull()) + lambda.parameterList.shouldBeInstanceOf() } @Test - fun `createSmlExpressionLambda should create a serializable expression lambda`() { - val lambda = createSmlExpressionLambda(result = createSmlNull()) + fun `createSdsExpressionLambda should create a serializable expression lambda`() { + val lambda = createSdsExpressionLambda(result = createSdsNull()) - createSmlDummyResource(fileName = "test", SmlFileExtension.Test, packageName = "test") { - smlWorkflow(name = "test") { - smlExpressionStatement(lambda) + createSdsDummyResource(fileName = "test", SdsFileExtension.Test, packageName = "test") { + sdsWorkflow(name = "test") { + sdsExpressionStatement(lambda) } } @@ -426,9 +426,9 @@ class CreatorsTest { } @Test - fun `smlExpressionStatement should add the created expression statement to the receiving lambda`() { - val lambda = createSmlBlockLambda { - smlExpressionStatement(createSmlInt(1)) + fun `sdsExpressionStatement should add the created expression statement to the receiving lambda`() { + val lambda = createSdsBlockLambda { + sdsExpressionStatement(createSdsInt(1)) } val body = lambda.body @@ -437,9 +437,9 @@ class CreatorsTest { } @Test - fun `smlExpressionStatement should add the created expression statement to the receiving workflow`() { - val workflow = createSmlWorkflow("Test") { - smlExpressionStatement(createSmlInt(1)) + fun `sdsExpressionStatement should add the created expression statement to the receiving workflow`() { + val workflow = createSdsWorkflow("Test") { + sdsExpressionStatement(createSdsInt(1)) } val body = workflow.body @@ -448,9 +448,9 @@ class CreatorsTest { } @Test - fun `smlExpressionStatement should add the created expression statement to the receiving step`() { - val step = createSmlStep("Test") { - smlExpressionStatement(createSmlInt(1)) + fun `sdsExpressionStatement should add the created expression statement to the receiving step`() { + val step = createSdsStep("Test") { + sdsExpressionStatement(createSdsInt(1)) } val body = step.body @@ -459,22 +459,22 @@ class CreatorsTest { } @Test - fun `createSmlFloat should wrap negative numbers in a prefix operation (-)`() { - val float = createSmlFloat(-1.0) + fun `createSdsFloat should wrap negative numbers in a prefix operation (-)`() { + val float = createSdsFloat(-1.0) - float.shouldBeInstanceOf() - float.operator shouldBe SmlPrefixOperationOperator.Minus.operator + float.shouldBeInstanceOf() + float.operator shouldBe SdsPrefixOperationOperator.Minus.operator val operand = float.operand - operand.shouldBeInstanceOf() + operand.shouldBeInstanceOf() operand.value shouldBeCloseTo 1.0 } @Test - fun `createSmlFunction should store annotation uses in annotationCallList`() { - val function = createSmlFunction( + fun `createSdsFunction should store annotation uses in annotationCallList`() { + val function = createSdsFunction( "test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) function.annotationCalls.shouldHaveSize(0) @@ -485,8 +485,8 @@ class CreatorsTest { } @Test - fun `createSmlFunction should omit empty result list`() { - val function = createSmlFunction( + fun `createSdsFunction should omit empty result list`() { + val function = createSdsFunction( "test", results = emptyList() ) @@ -494,8 +494,8 @@ class CreatorsTest { } @Test - fun `createSmlFunction should omit empty type parameter list`() { - val function = createSmlFunction( + fun `createSdsFunction should omit empty type parameter list`() { + val function = createSdsFunction( "test", typeParameters = emptyList() ) @@ -505,8 +505,8 @@ class CreatorsTest { // constraints are now a "member" statement, doesn't make sense // // @Test -// fun `createSmlFunction should omit empty constraint list`() { -// val function = createSmlFunction( +// fun `createSdsFunction should omit empty constraint list`() { +// val function = createSdsFunction( // "test", // constraints = emptyList() // ) @@ -514,9 +514,9 @@ class CreatorsTest { // } @Test - fun `smlFunction should add the created function to the receiving class`() { - val `class` = createSmlClass("Test") { - smlFunction("test") + fun `sdsFunction should add the created function to the receiving class`() { + val `class` = createSdsClass("Test") { + sdsFunction("test") } val body = `class`.body @@ -525,40 +525,40 @@ class CreatorsTest { } @Test - fun `smlFunction should add the created function to the receiving compilation unit`() { - val compilationUnit = createSmlCompilationUnit(packageName = "test") { - smlFunction("test") + fun `sdsFunction should add the created function to the receiving compilation unit`() { + val compilationUnit = createSdsCompilationUnit(packageName = "test") { + sdsFunction("test") } compilationUnit.members.shouldHaveSize(1) } @Test - fun `createSmlInt should wrap negative numbers in a prefix operation (-)`() { - val int = createSmlInt(-1) + fun `createSdsInt should wrap negative numbers in a prefix operation (-)`() { + val int = createSdsInt(-1) - int.shouldBeInstanceOf() - int.operator shouldBe SmlPrefixOperationOperator.Minus.operator + int.shouldBeInstanceOf() + int.operator shouldBe SdsPrefixOperationOperator.Minus.operator val operand = int.operand - operand.shouldBeInstanceOf() + operand.shouldBeInstanceOf() operand.value shouldBe 1 } @Test - fun `createSmlNamedType should omit empty type argument lists`() { - val namedType = createSmlNamedType( - createSmlClass("Int"), + fun `createSdsNamedType should omit empty type argument lists`() { + val namedType = createSdsNamedType( + createSdsClass("Int"), typeArguments = emptyList() ) namedType.typeArgumentList.shouldBeNull() } @Test - fun `createSmlParameter should store annotation uses in annotations`() { - val parameter = createSmlParameter( + fun `createSdsParameter should store annotation uses in annotations`() { + val parameter = createSdsParameter( "test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) parameter.annotationCalls.shouldHaveSize(1) @@ -566,80 +566,80 @@ class CreatorsTest { } @Test - fun `createSmlProtocol should omit empty subterm list`() { - val protocol = createSmlProtocol(emptyList()) + fun `createSdsProtocol should omit empty subterm list`() { + val protocol = createSdsProtocol(emptyList()) protocol.body.shouldNotBeNull() protocol.body.subtermList.shouldBeNull() } @Test - fun `smlProtocol should add the created protocol to the receiving class`() { - val `class` = createSmlClass("Test") { - smlProtocol() + fun `sdsProtocol should add the created protocol to the receiving class`() { + val `class` = createSdsClass("Test") { + sdsProtocol() } `class`.body.shouldNotBeNull() - `class`.body.members.filterIsInstance().shouldHaveSize(1) + `class`.body.members.filterIsInstance().shouldHaveSize(1) } @Test - fun `createSmlProtocolAlternative should throw if fewer than two terms are passed`() { + fun `createSdsProtocolAlternative should throw if fewer than two terms are passed`() { shouldThrow { - createSmlProtocolAlternative(listOf()) + createSdsProtocolAlternative(listOf()) } shouldThrow { - createSmlProtocolAlternative( + createSdsProtocolAlternative( listOf( - createSmlProtocolTokenClass(SmlProtocolTokenClassValue.Anything) + createSdsProtocolTokenClass(SdsProtocolTokenClassValue.Anything) ) ) } shouldNotThrow { - createSmlProtocolAlternative( + createSdsProtocolAlternative( listOf( - createSmlProtocolTokenClass(SmlProtocolTokenClassValue.Anything), - createSmlProtocolTokenClass(SmlProtocolTokenClassValue.Anything), + createSdsProtocolTokenClass(SdsProtocolTokenClassValue.Anything), + createSdsProtocolTokenClass(SdsProtocolTokenClassValue.Anything), ) ) } } @Test - fun `createSmlProtocolComplement should omit empty reference list`() { - val complement = createSmlProtocolComplement() + fun `createSdsProtocolComplement should omit empty reference list`() { + val complement = createSdsProtocolComplement() complement.referenceList.shouldBeNull() } @Test - fun `createSmlProtocolSequence should throw if fewer than two terms are passed`() { + fun `createSdsProtocolSequence should throw if fewer than two terms are passed`() { shouldThrow { - createSmlProtocolSequence(listOf()) + createSdsProtocolSequence(listOf()) } shouldThrow { - createSmlProtocolSequence( + createSdsProtocolSequence( listOf( - createSmlProtocolTokenClass(SmlProtocolTokenClassValue.Anything) + createSdsProtocolTokenClass(SdsProtocolTokenClassValue.Anything) ) ) } shouldNotThrow { - createSmlProtocolSequence( + createSdsProtocolSequence( listOf( - createSmlProtocolTokenClass(SmlProtocolTokenClassValue.Anything), - createSmlProtocolTokenClass(SmlProtocolTokenClassValue.Anything), + createSdsProtocolTokenClass(SdsProtocolTokenClassValue.Anything), + createSdsProtocolTokenClass(SdsProtocolTokenClassValue.Anything), ) ) } } @Test - fun `smlProtocolSubterm should add the created subterm to the receiving protocol`() { - val protocol = createSmlProtocol { - smlProtocolSubterm("test", createSmlProtocolTokenClass(SmlProtocolTokenClassValue.Anything)) + fun `sdsProtocolSubterm should add the created subterm to the receiving protocol`() { + val protocol = createSdsProtocol { + sdsProtocolSubterm("test", createSdsProtocolTokenClass(SdsProtocolTokenClassValue.Anything)) } protocol.body.shouldNotBeNull() @@ -648,10 +648,10 @@ class CreatorsTest { } @Test - fun `createSmlResult should store annotation uses in annotations`() { - val result = createSmlResult( + fun `createSdsResult should store annotation uses in annotations`() { + val result = createSdsResult( "Test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) result.annotationCalls.shouldHaveSize(1) @@ -659,19 +659,19 @@ class CreatorsTest { } @Test - fun `createSmlTemplate should throw if there are fewer than 2 string parts`() { + fun `createSdsTemplate should throw if there are fewer than 2 string parts`() { shouldThrow { - createSmlTemplateString( + createSdsTemplateString( listOf("Test"), - listOf(createSmlInt(1)) + listOf(createSdsInt(1)) ) } } @Test - fun `createSmlTemplate should throw if there is no template expression`() { + fun `createSdsTemplate should throw if there is no template expression`() { shouldThrow { - createSmlTemplateString( + createSdsTemplateString( listOf("Test", "Test"), listOf() ) @@ -679,38 +679,38 @@ class CreatorsTest { } @Test - fun `createSmlTemplate should throw if numbers of string parts and template expressions don't match`() { + fun `createSdsTemplate should throw if numbers of string parts and template expressions don't match`() { shouldThrow { - createSmlTemplateString( + createSdsTemplateString( listOf("Test", "Test", "Test"), - listOf(createSmlInt(1)) + listOf(createSdsInt(1)) ) } } @Test - fun `createSmlTemplate should interleave string parts and template expressions`() { - val templateString = createSmlTemplateString( + fun `createSdsTemplate should interleave string parts and template expressions`() { + val templateString = createSdsTemplateString( listOf("Start", "Inner", "Inner", "End"), - listOf(createSmlInt(1), createSmlInt(1), createSmlInt(1)) + listOf(createSdsInt(1), createSdsInt(1), createSdsInt(1)) ) templateString.expressions.asClue { it.shouldHaveSize(7) - it[0].shouldBeInstanceOf() - it[1].shouldBeInstanceOf() - it[2].shouldBeInstanceOf() - it[3].shouldBeInstanceOf() - it[4].shouldBeInstanceOf() - it[5].shouldBeInstanceOf() - it[6].shouldBeInstanceOf() + it[0].shouldBeInstanceOf() + it[1].shouldBeInstanceOf() + it[2].shouldBeInstanceOf() + it[3].shouldBeInstanceOf() + it[4].shouldBeInstanceOf() + it[5].shouldBeInstanceOf() + it[6].shouldBeInstanceOf() } } @Test - fun `createSmlTypeArgument should create an SmlTypeParameter when only a name is passed`() { - val typeArgument = createSmlTypeArgument( - createSmlStarProjection(), + fun `createSdsTypeArgument should create an SdsTypeParameter when only a name is passed`() { + val typeArgument = createSdsTypeArgument( + createSdsStarProjection(), "Test" ) val typeParameter = typeArgument.typeParameter @@ -719,10 +719,10 @@ class CreatorsTest { } @Test - fun `createSmlTypeParameter should store annotation uses in annotations`() { - val result = createSmlTypeParameter( + fun `createSdsTypeParameter should store annotation uses in annotations`() { + val result = createSdsTypeParameter( "Test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) result.annotationCalls.shouldHaveSize(1) @@ -730,11 +730,11 @@ class CreatorsTest { } @Test - fun `createTypeParameterConstraintGoal should create an SmlTypeParameter when only a name is passed`() { - val constraint = createSmlTypeParameterConstraintGoal( + fun `createTypeParameterConstraintGoal should create an SdsTypeParameter when only a name is passed`() { + val constraint = createSdsTypeParameterConstraintGoal( "Test", - SmlTypeParameterConstraintOperator.SubclassOf, - createSmlNamedType(createSmlClass("Test")) + SdsTypeParameterConstraintOperator.SubclassOf, + createSdsNamedType(createSdsClass("Test")) ) val leftOperand = constraint.leftOperand leftOperand.shouldNotBeNull() @@ -742,16 +742,16 @@ class CreatorsTest { } @Test - fun `createSmlUnionType should throw if no type arguments are passed`() { + fun `createSdsUnionType should throw if no type arguments are passed`() { shouldThrow { - createSmlUnionType(listOf()) + createSdsUnionType(listOf()) } shouldNotThrow { - createSmlUnionType( + createSdsUnionType( listOf( - createSmlTypeArgument( - createSmlStarProjection() + createSdsTypeArgument( + createSdsStarProjection() ) ) ) @@ -759,18 +759,18 @@ class CreatorsTest { } @Test - fun `createSmlYield should create an SmlResult when only a name is passed`() { - val yield = createSmlYield("test") + fun `createSdsYield should create an SdsResult when only a name is passed`() { + val yield = createSdsYield("test") val result = `yield`.result result.shouldNotBeNull() result.name shouldBe "test" } @Test - fun `createSmlStep should store annotation uses in annotationCallList`() { - val step = createSmlStep( + fun `createSdsStep should store annotation uses in annotationCallList`() { + val step = createSdsStep( "test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) step.annotationCalls.shouldHaveSize(0) @@ -781,8 +781,8 @@ class CreatorsTest { } @Test - fun `createSmlStep should omit empty result list`() { - val function = createSmlStep( + fun `createSdsStep should omit empty result list`() { + val function = createSdsStep( "test", results = emptyList() ) @@ -790,19 +790,19 @@ class CreatorsTest { } @Test - fun `smlStep should add the created step to the receiving compilation unit`() { - val compilationUnit = createSmlCompilationUnit(packageName = "test") { - smlStep("test") + fun `sdsStep should add the created step to the receiving compilation unit`() { + val compilationUnit = createSdsCompilationUnit(packageName = "test") { + sdsStep("test") } compilationUnit.members.shouldHaveSize(1) } @Test - fun `createSmlWorkflow should store annotation uses in annotationCallList`() { - val workflow = createSmlWorkflow( + fun `createSdsWorkflow should store annotation uses in annotationCallList`() { + val workflow = createSdsWorkflow( "test", - listOf(createSmlAnnotationCall("Test")) + listOf(createSdsAnnotationCall("Test")) ) workflow.annotationCalls.shouldHaveSize(0) @@ -813,9 +813,9 @@ class CreatorsTest { } @Test - fun `smlWorkflow should add the created workflow to the receiving compilation unit`() { - val compilationUnit = createSmlCompilationUnit(packageName = "test") { - smlWorkflow("test") + fun `sdsWorkflow should add the created workflow to the receiving compilation unit`() { + val compilationUnit = createSdsCompilationUnit(packageName = "test") { + sdsWorkflow("test") } compilationUnit.members.shouldHaveSize(1) diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/formatting2/FormatterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/formatting2/FormatterTest.kt similarity index 83% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/formatting2/FormatterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/formatting2/FormatterTest.kt index b0508b2ed..85264b170 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/formatting2/FormatterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/formatting2/FormatterTest.kt @@ -1,12 +1,12 @@ -package de.unibonn.simpleml.formatting2 +package com.larsreimann.safeds.formatting2 import com.google.inject.Inject -import de.unibonn.simpleml.testing.CategorizedTest -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.createDynamicTestsFromResourceFolder -import de.unibonn.simpleml.testing.getResourcePath -import de.unibonn.simpleml.testing.testDisplayName -import de.unibonn.simpleml.testing.withSystemLineBreaks +import com.larsreimann.safeds.testing.CategorizedTest +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.createDynamicTestsFromResourceFolder +import com.larsreimann.safeds.testing.getResourcePath +import com.larsreimann.safeds.testing.testDisplayName +import com.larsreimann.safeds.testing.withSystemLineBreaks import org.eclipse.xtext.testing.InjectWith import org.eclipse.xtext.testing.extensions.InjectionExtension import org.eclipse.xtext.testing.formatter.FormatterTestHelper @@ -18,7 +18,7 @@ import java.nio.file.Path import java.util.stream.Stream @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class FormatterTest { @Inject diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/generator/GeneratorUtilsTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/generator/GeneratorUtilsTest.kt similarity index 61% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/generator/GeneratorUtilsTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/generator/GeneratorUtilsTest.kt index 59513bc0f..5022c1888 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/generator/GeneratorUtilsTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/generator/GeneratorUtilsTest.kt @@ -1,12 +1,12 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.generator +package com.larsreimann.safeds.generator -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.createSmlCompilationUnit -import de.unibonn.simpleml.emf.createSmlDummyResource -import de.unibonn.simpleml.simpleML.SimpleMLFactory -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.createSdsCompilationUnit +import com.larsreimann.safeds.emf.createSdsDummyResource +import com.larsreimann.safeds.safeDS.SafeDSFactory +import com.larsreimann.safeds.testing.SafeDSInjectorProvider import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldStartWith @@ -19,7 +19,7 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class GeneratorUtilsTest { @Nested @@ -27,21 +27,21 @@ class GeneratorUtilsTest { @Test fun `should keep only last segment`() { - val resource = createSmlDummyResource( + val resource = createSdsDummyResource( "dir/file", - SmlFileExtension.Flow, - createSmlCompilationUnit(packageName = "test") + SdsFileExtension.Flow, + createSdsCompilationUnit(packageName = "test") ) resource.baseFileNameOrNull().shouldStartWith("file") } @Test - fun `should remove all characters that are not legal in Simple-ML identifiers except spaces`() { - val resource = createSmlDummyResource( + fun `should remove all characters that are not legal in Safe-DS identifiers except spaces`() { + val resource = createSdsDummyResource( "MyöáúName1", - SmlFileExtension.Flow, - createSmlCompilationUnit(packageName = "MyName1") + SdsFileExtension.Flow, + createSdsCompilationUnit(packageName = "MyName1") ) resource.baseFileNameOrNull() shouldBe "MyName1" @@ -49,10 +49,10 @@ class GeneratorUtilsTest { @Test fun `should replace spaces with underscores`() { - val resource = createSmlDummyResource( + val resource = createSdsDummyResource( "file with spaces", - SmlFileExtension.Flow, - createSmlCompilationUnit(packageName = "test") + SdsFileExtension.Flow, + createSdsCompilationUnit(packageName = "test") ) resource.baseFileNameOrNull() shouldBe "file_with_spaces" @@ -60,10 +60,10 @@ class GeneratorUtilsTest { @Test fun `should replace twice URL encoded spaces with underscores`() { - val resource = createSmlDummyResource( + val resource = createSdsDummyResource( "_skip_%2520context%2520same%2520package", - SmlFileExtension.Flow, - createSmlCompilationUnit(packageName = "test") + SdsFileExtension.Flow, + createSdsCompilationUnit(packageName = "test") ) resource.baseFileNameOrNull() shouldBe "_skip__context_same_package" @@ -71,10 +71,10 @@ class GeneratorUtilsTest { @Test fun `should replace dots with underscores`() { - val resource = createSmlDummyResource( + val resource = createSdsDummyResource( "file.with.dots", - SmlFileExtension.Flow, - createSmlCompilationUnit(packageName = "test") + SdsFileExtension.Flow, + createSdsCompilationUnit(packageName = "test") ) resource.baseFileNameOrNull() shouldBe "file_with_dots" @@ -82,43 +82,43 @@ class GeneratorUtilsTest { @Test fun `should replace dashes with underscores`() { - val resource = createSmlDummyResource( + val resource = createSdsDummyResource( "file-with-dashes", - SmlFileExtension.Flow, - createSmlCompilationUnit(packageName = "test") + SdsFileExtension.Flow, + createSdsCompilationUnit(packageName = "test") ) resource.baseFileNameOrNull() shouldBe "file_with_dashes" } @Test - fun `should remove 'smlflow' extension`() { - val resource = createSmlDummyResource( + fun `should remove 'sdsflow' extension`() { + val resource = createSdsDummyResource( "file", - SmlFileExtension.Flow, - createSmlCompilationUnit(packageName = "test") + SdsFileExtension.Flow, + createSdsCompilationUnit(packageName = "test") ) resource.baseFileNameOrNull() shouldBe "file" } @Test - fun `should remove 'smlstub' extension`() { - val resource = createSmlDummyResource( + fun `should remove 'sdsstub' extension`() { + val resource = createSdsDummyResource( "file", - SmlFileExtension.Stub, - createSmlCompilationUnit(packageName = "test") + SdsFileExtension.Stub, + createSdsCompilationUnit(packageName = "test") ) resource.baseFileNameOrNull() shouldBe "file" } @Test - fun `should remove 'smltest' extension`() { - val resource = createSmlDummyResource( + fun `should remove 'sdstest' extension`() { + val resource = createSdsDummyResource( "file", - SmlFileExtension.Test, - createSmlCompilationUnit(packageName = "test") + SdsFileExtension.Test, + createSdsCompilationUnit(packageName = "test") ) resource.baseFileNameOrNull() shouldBe "file" @@ -145,10 +145,10 @@ class GeneratorUtilsTest { @Test fun `should return the base path for generated files if possible`() { - val resource = createSmlDummyResource( + val resource = createSdsDummyResource( "file", - SmlFileExtension.Test, - createSmlCompilationUnit(packageName = "test") + SdsFileExtension.Test, + createSdsCompilationUnit(packageName = "test") ) resource.baseGeneratedFilePathOrNull() shouldBe "test/gen_file" @@ -164,10 +164,10 @@ class GeneratorUtilsTest { @Test fun `should return null if the compilation unit has no package`() { - val resource = createSmlDummyResource( + val resource = createSdsDummyResource( "file", - SmlFileExtension.Test, - SimpleMLFactory.eINSTANCE.createSmlCompilationUnit() + SdsFileExtension.Test, + SafeDSFactory.eINSTANCE.createSdsCompilationUnit() ) resource.baseGeneratedFilePathOrNull().shouldBeNull() diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/generator/SimpleMLGeneratorTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/generator/SafeDSGeneratorTest.kt similarity index 86% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/generator/SimpleMLGeneratorTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/generator/SafeDSGeneratorTest.kt index dd2ef7198..520c09152 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/generator/SimpleMLGeneratorTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/generator/SafeDSGeneratorTest.kt @@ -1,20 +1,20 @@ -package de.unibonn.simpleml.generator +package com.larsreimann.safeds.generator import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension.Flow -import de.unibonn.simpleml.constant.SmlFileExtension.Stub -import de.unibonn.simpleml.constant.SmlFileExtension.Test -import de.unibonn.simpleml.emf.OriginalFilePath -import de.unibonn.simpleml.emf.resourceSetOrNull -import de.unibonn.simpleml.testing.CategorizedTest -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.ResourceName -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.stringify -import de.unibonn.simpleml.testing.createDynamicTestsFromResourceFolder -import de.unibonn.simpleml.testing.getResourcePath -import de.unibonn.simpleml.testing.testDisplayName -import de.unibonn.simpleml.testing.withSystemLineBreaks +import com.larsreimann.safeds.constant.SdsFileExtension.Flow +import com.larsreimann.safeds.constant.SdsFileExtension.Stub +import com.larsreimann.safeds.constant.SdsFileExtension.Test +import com.larsreimann.safeds.emf.OriginalFilePath +import com.larsreimann.safeds.emf.resourceSetOrNull +import com.larsreimann.safeds.testing.CategorizedTest +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.ResourceName +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.stringify +import com.larsreimann.safeds.testing.createDynamicTestsFromResourceFolder +import com.larsreimann.safeds.testing.getResourcePath +import com.larsreimann.safeds.testing.testDisplayName +import com.larsreimann.safeds.testing.withSystemLineBreaks import io.kotest.assertions.forEachAsClue import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder import io.kotest.matchers.nulls.shouldNotBeNull @@ -39,8 +39,8 @@ import kotlin.io.path.readText import kotlin.streams.asSequence @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) -class SimpleMLGeneratorTest { +@InjectWith(SafeDSInjectorProvider::class) +class SafeDSGeneratorTest { @Inject private lateinit var compilationTestHelper: CompilationTestHelper diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/naming/QualifiedNameProviderTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/naming/QualifiedNameProviderTest.kt similarity index 70% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/naming/QualifiedNameProviderTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/naming/QualifiedNameProviderTest.kt index 8d9e8d0fa..8ff4c40b9 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/naming/QualifiedNameProviderTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/naming/QualifiedNameProviderTest.kt @@ -1,10 +1,10 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.naming +package com.larsreimann.safeds.naming -import de.unibonn.simpleml.emf.createSmlClass -import de.unibonn.simpleml.emf.createSmlCompilationUnit -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider +import com.larsreimann.safeds.emf.createSdsClass +import com.larsreimann.safeds.emf.createSdsCompilationUnit +import com.larsreimann.safeds.testing.SafeDSInjectorProvider import io.kotest.matchers.shouldBe import org.eclipse.xtext.testing.InjectWith import org.eclipse.xtext.testing.extensions.InjectionExtension @@ -13,7 +13,7 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class QualifiedNameProviderTest { @Nested @@ -21,16 +21,16 @@ class QualifiedNameProviderTest { @Test fun `should handle declarations with simple names`() { - val myClass = createSmlClass(name = "MyClass") - createSmlCompilationUnit(packageName = "tests", members = listOf(myClass)) + val myClass = createSdsClass(name = "MyClass") + createSdsCompilationUnit(packageName = "tests", members = listOf(myClass)) myClass.qualifiedNameOrNull() shouldBe "tests.MyClass".toQualifiedName() } @Test fun `should handle declarations with escaped names`() { - val myClass = createSmlClass(name = "`MyClass`") - createSmlCompilationUnit(packageName = "`tests`", members = listOf(myClass)) + val myClass = createSdsClass(name = "`MyClass`") + createSdsCompilationUnit(packageName = "`tests`", members = listOf(myClass)) myClass.qualifiedNameOrNull() shouldBe "`tests`.`MyClass`".toQualifiedName() } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/scoping/ScopingTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/scoping/ScopingTest.kt similarity index 73% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/scoping/ScopingTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/scoping/ScopingTest.kt index fbf0f578a..1f69f7639 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/scoping/ScopingTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/scoping/ScopingTest.kt @@ -1,41 +1,41 @@ -package de.unibonn.simpleml.scoping +package com.larsreimann.safeds.scoping import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.emf.annotationCallsOrEmpty -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlGoalReference -import de.unibonn.simpleml.simpleML.SmlMemberType -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlPredicate -import de.unibonn.simpleml.simpleML.SmlProtocolReference -import de.unibonn.simpleml.simpleML.SmlProtocolSubterm -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlTypeArgument -import de.unibonn.simpleml.simpleML.SmlTypeParameter -import de.unibonn.simpleml.simpleML.SmlTypeParameterConstraintGoal -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.ResourceName -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail -import de.unibonn.simpleml.testing.assertions.shouldBeResolved -import de.unibonn.simpleml.testing.assertions.shouldNotBeResolved +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.emf.annotationCallsOrEmpty +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsGoalReference +import com.larsreimann.safeds.safeDS.SdsMemberType +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsPredicate +import com.larsreimann.safeds.safeDS.SdsProtocolReference +import com.larsreimann.safeds.safeDS.SdsProtocolSubterm +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsTypeArgument +import com.larsreimann.safeds.safeDS.SdsTypeParameter +import com.larsreimann.safeds.safeDS.SdsTypeParameterConstraintGoal +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.ResourceName +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.testing.assertions.shouldBeResolved +import com.larsreimann.safeds.testing.assertions.shouldNotBeResolved import io.kotest.assertions.forEachAsClue import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldNotBeNull @@ -59,7 +59,7 @@ private const val TYPE_PARAMETER_CONSTRAINT = "typeParameterConstraint" private const val YIELD = "yield" @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class ScopingTest { @Inject @@ -70,10 +70,10 @@ class ScopingTest { @Test fun `should resolve annotations in same file`() = withResource(ANNOTATION_CALL) { - val annotationCalls = this.descendants().toList() + val annotationCalls = this.descendants().toList() annotationCalls.shouldHaveSize(6) - val annotationInSameFile = findUniqueDeclarationOrFail("AnnotationInSameFile") + val annotationInSameFile = findUniqueDeclarationOrFail("AnnotationInSameFile") val referencedAnnotation = annotationCalls[0].annotation referencedAnnotation.shouldBeResolved() @@ -82,7 +82,7 @@ class ScopingTest { @Test fun `should resolve annotations in same package`() = withResource(ANNOTATION_CALL) { - val annotationCalls = this.descendants().toList() + val annotationCalls = this.descendants().toList() annotationCalls.shouldHaveSize(6) val annotation = annotationCalls[1].annotation @@ -92,7 +92,7 @@ class ScopingTest { @Test fun `should resolve annotations in another package if imported`() = withResource(ANNOTATION_CALL) { - val annotationCalls = this.descendants().toList() + val annotationCalls = this.descendants().toList() annotationCalls.shouldHaveSize(6) val annotation = annotationCalls[2].annotation @@ -102,21 +102,21 @@ class ScopingTest { @Test fun `should not resolve annotations in another package if not imported`() = withResource(ANNOTATION_CALL) { - val annotationCalls = this.descendants().toList() + val annotationCalls = this.descendants().toList() annotationCalls.shouldHaveSize(6) annotationCalls[3].annotation.shouldNotBeResolved() } @Test fun `should not resolve unknown declaration`() = withResource(ANNOTATION_CALL) { - val annotationCalls = this.descendants().toList() + val annotationCalls = this.descendants().toList() annotationCalls.shouldHaveSize(6) annotationCalls[4].annotation.shouldNotBeResolved() } @Test fun `should not resolve something that is not an annotation`() = withResource(ANNOTATION_CALL) { - val annotationCalls = this.descendants().toList() + val annotationCalls = this.descendants().toList() annotationCalls.shouldHaveSize(6) annotationCalls[5].annotation.shouldNotBeResolved() } @@ -128,11 +128,11 @@ class ScopingTest { @Test fun `should resolve parameter in use annotation in same file`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) val parameterInAnnotationInSameFile = - findUniqueDeclarationOrFail("parameterInAnnotationInSameFile") + findUniqueDeclarationOrFail("parameterInAnnotationInSameFile") val referencedParameter = arguments[0].parameter referencedParameter.shouldBeResolved() @@ -142,11 +142,11 @@ class ScopingTest { @Test fun `should resolve parameter in called block lambda in same step`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) val parameterInLambdaInSameStep = - findUniqueDeclarationOrFail("parameterInBlockLambdaInSameStep") + findUniqueDeclarationOrFail("parameterInBlockLambdaInSameStep") val referencedParameter = arguments[1].parameter referencedParameter.shouldBeResolved() @@ -156,11 +156,11 @@ class ScopingTest { @Test fun `should resolve parameter in called callable in same step`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) val parameterInCallableInSameStep = - findUniqueDeclarationOrFail("parameterInCallableInSameStep") + findUniqueDeclarationOrFail("parameterInCallableInSameStep") val referencedParameter = arguments[2].parameter referencedParameter.shouldBeResolved() @@ -170,10 +170,10 @@ class ScopingTest { @Test fun `should resolve parameter in called class in same file`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) - val parameterInClassInSameFile = findUniqueDeclarationOrFail("parameterInClassInSameFile") + val parameterInClassInSameFile = findUniqueDeclarationOrFail("parameterInClassInSameFile") val referencedParameter = arguments[3].parameter referencedParameter.shouldBeResolved() @@ -183,11 +183,11 @@ class ScopingTest { @Test fun `should resolve parameter in called enum variant in same file`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) val parameterInEnumVariantInSameFile = - findUniqueDeclarationOrFail("parameterInEnumVariantInSameFile") + findUniqueDeclarationOrFail("parameterInEnumVariantInSameFile") val referencedParameter = arguments[4].parameter referencedParameter.shouldBeResolved() @@ -197,11 +197,11 @@ class ScopingTest { @Test fun `should resolve parameter in called expression lambda in same step`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) val parameterInLambdaInSameStep = - findUniqueDeclarationOrFail("parameterInExpressionLambdaInSameStep") + findUniqueDeclarationOrFail("parameterInExpressionLambdaInSameStep") val referencedParameter = arguments[5].parameter referencedParameter.shouldBeResolved() @@ -211,11 +211,11 @@ class ScopingTest { @Test fun `should resolve parameter in called function in same file`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) val parameterInFunctionSameFile = - findUniqueDeclarationOrFail("parameterInFunctionSameFile") + findUniqueDeclarationOrFail("parameterInFunctionSameFile") val referencedParameter = arguments[6].parameter referencedParameter.shouldBeResolved() @@ -225,10 +225,10 @@ class ScopingTest { @Test fun `should resolve parameter in called step in same file`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) - val parameterInStepInSameFile = findUniqueDeclarationOrFail("parameterInStepInSameFile") + val parameterInStepInSameFile = findUniqueDeclarationOrFail("parameterInStepInSameFile") val referencedParameter = arguments[7].parameter referencedParameter.shouldBeResolved() @@ -238,7 +238,7 @@ class ScopingTest { @Test fun `should resolve parameter in called function in same package`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) val referencedParameter = arguments[8].parameter @@ -249,7 +249,7 @@ class ScopingTest { @Test fun `should resolve parameter in called function that is imported and in another package`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) val referencedParameter = arguments[9].parameter @@ -260,7 +260,7 @@ class ScopingTest { @Test fun `should not resolve parameter in called function that is not imported and in another package`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) arguments[10].parameter.shouldNotBeResolved() } @@ -268,7 +268,7 @@ class ScopingTest { @Test fun `should not resolve parameter in function other than called one in same package`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) arguments[11].parameter.shouldNotBeResolved() } @@ -276,7 +276,7 @@ class ScopingTest { @Test fun `should not resolve parameter in function other than called one that is imported and in another package`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) arguments[12].parameter.shouldNotBeResolved() } @@ -284,21 +284,21 @@ class ScopingTest { @Test fun `should not resolve parameter in function other than called one that is not imported and in another package`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) arguments[13].parameter.shouldNotBeResolved() } @Test fun `should not resolve unknown declaration`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) arguments[14].parameter.shouldNotBeResolved() } @Test fun `should not resolve something that is not a parameter`() = withResource(ARGUMENT) { - val arguments = this.descendants().toList() + val arguments = this.descendants().toList() arguments.shouldHaveSize(16) arguments[15].parameter.shouldNotBeResolved() } @@ -309,11 +309,11 @@ class ScopingTest { @Test fun `should resolve alias name of declaration in same file`() = withResource(IMPORT_WITH_ALIAS) { - val aliasNameInSameFile = findUniqueDeclarationOrFail("aliasNameInSameFile") - val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") + val aliasNameInSameFile = findUniqueDeclarationOrFail("aliasNameInSameFile") + val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") val type = aliasNameInSameFile.type - type.shouldBeInstanceOf() + type.shouldBeInstanceOf() val declaration = type.declaration declaration.shouldBeResolved() @@ -322,10 +322,10 @@ class ScopingTest { @Test fun `should resolve original name of declaration in same file`() = withResource(IMPORT_WITH_ALIAS) { - val originalNameInSameFile = findUniqueDeclarationOrFail("originalNameInSameFile") + val originalNameInSameFile = findUniqueDeclarationOrFail("originalNameInSameFile") val type = originalNameInSameFile.type - type.shouldBeInstanceOf() + type.shouldBeInstanceOf() val declaration = type.declaration declaration.shouldBeResolved() @@ -334,10 +334,10 @@ class ScopingTest { @Test fun `should resolve alias name of declaration in same package`() = withResource(IMPORT_WITH_ALIAS) { - val aliasNameInSamePackage = findUniqueDeclarationOrFail("aliasNameInSamePackage") + val aliasNameInSamePackage = findUniqueDeclarationOrFail("aliasNameInSamePackage") val type = aliasNameInSamePackage.type - type.shouldBeInstanceOf() + type.shouldBeInstanceOf() val declaration = type.declaration declaration.shouldBeResolved() @@ -346,10 +346,10 @@ class ScopingTest { @Test fun `should resolve original name of declaration in same package`() = withResource(IMPORT_WITH_ALIAS) { - val originalNameInSamePackage = findUniqueDeclarationOrFail("originalNameInSamePackage") + val originalNameInSamePackage = findUniqueDeclarationOrFail("originalNameInSamePackage") val type = originalNameInSamePackage.type - type.shouldBeInstanceOf() + type.shouldBeInstanceOf() val declaration = type.declaration declaration.shouldBeResolved() @@ -358,10 +358,10 @@ class ScopingTest { @Test fun `should resolve alias name of declaration in other package`() = withResource(IMPORT_WITH_ALIAS) { - val aliasNameInOtherPackage = findUniqueDeclarationOrFail("aliasNameInOtherPackage") + val aliasNameInOtherPackage = findUniqueDeclarationOrFail("aliasNameInOtherPackage") val type = aliasNameInOtherPackage.type - type.shouldBeInstanceOf() + type.shouldBeInstanceOf() val declaration = type.declaration declaration.shouldBeResolved() @@ -370,10 +370,10 @@ class ScopingTest { @Test fun `should not resolve original name of declaration in other package`() = withResource(IMPORT_WITH_ALIAS) { - val originalNameInOtherPackage = findUniqueDeclarationOrFail("originalNameInOtherPackage") + val originalNameInOtherPackage = findUniqueDeclarationOrFail("originalNameInOtherPackage") val type = originalNameInOtherPackage.type - type.shouldBeInstanceOf() + type.shouldBeInstanceOf() type.declaration.shouldNotBeResolved() } } @@ -383,11 +383,11 @@ class ScopingTest { @Test fun `should resolve class in same file`() = withResource(NAMED_TYPE) { - val paramClassInSameFile = findUniqueDeclarationOrFail("paramClassInSameFile") - val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") + val paramClassInSameFile = findUniqueDeclarationOrFail("paramClassInSameFile") + val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") val parameterType = paramClassInSameFile.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedClass = parameterType.declaration referencedClass.shouldBeResolved() @@ -396,11 +396,11 @@ class ScopingTest { @Test fun `should resolve enum in same file`() = withResource(NAMED_TYPE) { - val paramEnumInSameFile = findUniqueDeclarationOrFail("paramEnumInSameFile") - val enumInSameFile = findUniqueDeclarationOrFail("EnumInSameFile") + val paramEnumInSameFile = findUniqueDeclarationOrFail("paramEnumInSameFile") + val enumInSameFile = findUniqueDeclarationOrFail("EnumInSameFile") val parameterType = paramEnumInSameFile.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedEnum = parameterType.declaration referencedEnum.shouldBeResolved() @@ -409,10 +409,10 @@ class ScopingTest { @Test fun `should resolve class in same package`() = withResource(NAMED_TYPE) { - val paramClassInSamePackage = findUniqueDeclarationOrFail("paramClassInSamePackage") + val paramClassInSamePackage = findUniqueDeclarationOrFail("paramClassInSamePackage") val parameterType = paramClassInSamePackage.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedClass = parameterType.declaration referencedClass.shouldBeResolved() @@ -421,10 +421,10 @@ class ScopingTest { @Test fun `should resolve enum in same package`() = withResource(NAMED_TYPE) { - val paramEnumInSamePackage = findUniqueDeclarationOrFail("paramEnumInSamePackage") + val paramEnumInSamePackage = findUniqueDeclarationOrFail("paramEnumInSamePackage") val parameterType = paramEnumInSamePackage.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedEnum = parameterType.declaration referencedEnum.shouldBeResolved() @@ -433,10 +433,10 @@ class ScopingTest { @Test fun `should resolve class in another package if imported`() = withResource(NAMED_TYPE) { - val paramClassInOtherPackage1 = findUniqueDeclarationOrFail("paramClassInOtherPackage1") + val paramClassInOtherPackage1 = findUniqueDeclarationOrFail("paramClassInOtherPackage1") val parameterType = paramClassInOtherPackage1.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedClass = parameterType.declaration referencedClass.shouldBeResolved() @@ -445,10 +445,10 @@ class ScopingTest { @Test fun `should resolve enum in another package if imported`() = withResource(NAMED_TYPE) { - val paramEnumInOtherPackage1 = findUniqueDeclarationOrFail("paramEnumInOtherPackage1") + val paramEnumInOtherPackage1 = findUniqueDeclarationOrFail("paramEnumInOtherPackage1") val parameterType = paramEnumInOtherPackage1.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedEnum = parameterType.declaration referencedEnum.shouldBeResolved() @@ -457,10 +457,10 @@ class ScopingTest { @Test fun `should not resolve class in another package if not imported`() = withResource(NAMED_TYPE) { - val paramClassInOtherPackage2 = findUniqueDeclarationOrFail("paramClassInOtherPackage2") + val paramClassInOtherPackage2 = findUniqueDeclarationOrFail("paramClassInOtherPackage2") val parameterType = paramClassInOtherPackage2.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedClass = parameterType.declaration referencedClass.shouldNotBeResolved() @@ -468,10 +468,10 @@ class ScopingTest { @Test fun `should not resolve enum in another package if not imported`() = withResource(NAMED_TYPE) { - val paramEnumInOtherPackage2 = findUniqueDeclarationOrFail("paramEnumInOtherPackage2") + val paramEnumInOtherPackage2 = findUniqueDeclarationOrFail("paramEnumInOtherPackage2") val parameterType = paramEnumInOtherPackage2.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedEnum = parameterType.declaration referencedEnum.shouldNotBeResolved() @@ -480,11 +480,11 @@ class ScopingTest { @Test fun `should resolve type parameters in same function`() = withResource(NAMED_TYPE) { val paramTypeParameterInSameFunction = - findUniqueDeclarationOrFail("paramTypeParameterInSameFunction") - val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_SAME_FUNCTION") + findUniqueDeclarationOrFail("paramTypeParameterInSameFunction") + val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_SAME_FUNCTION") val parameterType = paramTypeParameterInSameFunction.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedTypeParameter = parameterType.declaration referencedTypeParameter.shouldBeResolved() @@ -493,10 +493,10 @@ class ScopingTest { @Test fun `should not resolve type parameters in another declaration in same file`() = withResource(NAMED_TYPE) { - val paramTypeParameterInSameFile = findUniqueDeclarationOrFail("paramTypeParameterInSameFile") + val paramTypeParameterInSameFile = findUniqueDeclarationOrFail("paramTypeParameterInSameFile") val parameterType = paramTypeParameterInSameFile.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedInterface = parameterType.declaration referencedInterface.shouldNotBeResolved() @@ -505,10 +505,10 @@ class ScopingTest { @Test fun `should not resolve type parameters in another declaration in same package`() = withResource(NAMED_TYPE) { val paramTypeParameterInSamePackage = - findUniqueDeclarationOrFail("paramTypeParameterInSamePackage") + findUniqueDeclarationOrFail("paramTypeParameterInSamePackage") val parameterType = paramTypeParameterInSamePackage.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedInterface = parameterType.declaration referencedInterface.shouldNotBeResolved() @@ -518,10 +518,10 @@ class ScopingTest { fun `should not resolve type parameters in another declaration in another package`() = withResource(NAMED_TYPE) { val paramTypeParameterInOtherPackage = - findUniqueDeclarationOrFail("paramTypeParameterInOtherPackage") + findUniqueDeclarationOrFail("paramTypeParameterInOtherPackage") val parameterType = paramTypeParameterInOtherPackage.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedInterface = parameterType.declaration referencedInterface.shouldNotBeResolved() @@ -530,10 +530,10 @@ class ScopingTest { @Test fun `should not resolve unknown declaration`() = withResource(NAMED_TYPE) { val paramUnresolvedNamedTypeDeclaration = - findUniqueDeclarationOrFail("paramUnresolvedNamedTypeDeclaration") + findUniqueDeclarationOrFail("paramUnresolvedNamedTypeDeclaration") val parameterType = paramUnresolvedNamedTypeDeclaration.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedInterface = parameterType.declaration referencedInterface.shouldNotBeResolved() @@ -542,10 +542,10 @@ class ScopingTest { @Test fun `should not resolve something that is not a named type declaration`() = withResource(NAMED_TYPE) { val paramNotANamedTypeDeclaration = - findUniqueDeclarationOrFail("paramNotANamedTypeDeclaration") + findUniqueDeclarationOrFail("paramNotANamedTypeDeclaration") val parameterType = paramNotANamedTypeDeclaration.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedInterface = parameterType.declaration referencedInterface.shouldNotBeResolved() @@ -554,11 +554,11 @@ class ScopingTest { @Test fun `should resolve type parameters in containing class from attribute`() = withResource(NAMED_TYPE) { val attributeInClassWithTypeParameter = - findUniqueDeclarationOrFail("attributeInClassWithTypeParameter") - val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_OUTER_CLASS") + findUniqueDeclarationOrFail("attributeInClassWithTypeParameter") + val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_OUTER_CLASS") val attributeType = attributeInClassWithTypeParameter.type - attributeType.shouldBeInstanceOf() + attributeType.shouldBeInstanceOf() val referencedTypeParameter = attributeType.declaration referencedTypeParameter.shouldBeResolved() @@ -568,11 +568,11 @@ class ScopingTest { @Test fun `should resolve type parameters in containing class from nested class`() = withResource(NAMED_TYPE) { val paramClassInClassWithTypeParameter = - findUniqueDeclarationOrFail("paramClassInClassWithTypeParameter") - val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_OUTER_CLASS") + findUniqueDeclarationOrFail("paramClassInClassWithTypeParameter") + val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_OUTER_CLASS") val parameterType = paramClassInClassWithTypeParameter.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedTypeParameter = parameterType.declaration referencedTypeParameter.shouldBeResolved() @@ -582,11 +582,11 @@ class ScopingTest { @Test fun `should resolve type parameters in containing class from nested enum variant`() = withResource(NAMED_TYPE) { val paramEnumInClassWithTypeParameter = - findUniqueDeclarationOrFail("paramEnumInClassWithTypeParameter") - val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_OUTER_CLASS") + findUniqueDeclarationOrFail("paramEnumInClassWithTypeParameter") + val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_OUTER_CLASS") val parameterType = paramEnumInClassWithTypeParameter.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedTypeParameter = parameterType.declaration referencedTypeParameter.shouldBeResolved() @@ -596,11 +596,11 @@ class ScopingTest { @Test fun `should resolve type parameters in containing class from method`() = withResource(NAMED_TYPE) { val paramMethodInClassWithTypeParameter = - findUniqueDeclarationOrFail("paramMethodInClassWithTypeParameter") - val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_OUTER_CLASS") + findUniqueDeclarationOrFail("paramMethodInClassWithTypeParameter") + val typeParameter = findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_OUTER_CLASS") val parameterType = paramMethodInClassWithTypeParameter.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedTypeParameter = parameterType.declaration referencedTypeParameter.shouldBeResolved() @@ -612,11 +612,11 @@ class ScopingTest { @Test fun `should resolve class within class with qualified access`() = withResource(NAMED_TYPE) { val paramClassInClassInSameFile = - findUniqueDeclarationOrFail("paramClassInClassInSameFile") - val classInSameFile = findUniqueDeclarationOrFail("ClassInClassInSameFile") + findUniqueDeclarationOrFail("paramClassInClassInSameFile") + val classInSameFile = findUniqueDeclarationOrFail("ClassInClassInSameFile") val parameterType = paramClassInClassInSameFile.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedClass = parameterType.member.declaration referencedClass.shouldBeResolved() @@ -625,11 +625,11 @@ class ScopingTest { @Test fun `should resolve enum within class with qualified access`() = withResource(NAMED_TYPE) { - val paramEnumInClassInSameFile = findUniqueDeclarationOrFail("paramEnumInClassInSameFile") - val enumInSameFile = findUniqueDeclarationOrFail("EnumInClassInSameFile") + val paramEnumInClassInSameFile = findUniqueDeclarationOrFail("paramEnumInClassInSameFile") + val enumInSameFile = findUniqueDeclarationOrFail("EnumInClassInSameFile") val parameterType = paramEnumInClassInSameFile.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedEnum = parameterType.member.declaration referencedEnum.shouldBeResolved() @@ -638,11 +638,11 @@ class ScopingTest { @Test fun `should resolve enum variant with qualified access`() = withResource(NAMED_TYPE) { - val paramEnumVariantInSameFile = findUniqueDeclarationOrFail("paramEnumVariantInSameFile") - val enumVariantInSameFile = findUniqueDeclarationOrFail("EnumVariantInSameFile") + val paramEnumVariantInSameFile = findUniqueDeclarationOrFail("paramEnumVariantInSameFile") + val enumVariantInSameFile = findUniqueDeclarationOrFail("EnumVariantInSameFile") val parameterType = paramEnumVariantInSameFile.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedEnumVariant = parameterType.member.declaration referencedEnumVariant.shouldBeResolved() @@ -652,40 +652,40 @@ class ScopingTest { @Test fun `should not resolve class within class with unqualified access`() = withResource(NAMED_TYPE) { val paramUnqualifiedClassInClassInSameFile = - findUniqueDeclarationOrFail("paramUnqualifiedClassInClassInSameFile") + findUniqueDeclarationOrFail("paramUnqualifiedClassInClassInSameFile") val parameterType = paramUnqualifiedClassInClassInSameFile.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() parameterType.declaration.shouldNotBeResolved() } @Test fun `should not resolve enum within class with unqualified access`() = withResource(NAMED_TYPE) { val paramUnqualifiedEnumInClassInSameFile = - findUniqueDeclarationOrFail("paramUnqualifiedEnumInClassInSameFile") + findUniqueDeclarationOrFail("paramUnqualifiedEnumInClassInSameFile") val parameterType = paramUnqualifiedEnumInClassInSameFile.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() parameterType.declaration.shouldNotBeResolved() } @Test fun `should not resolve enum variant with unqualified access`() = withResource(NAMED_TYPE) { val paramUnqualifiedEnumVariantInSameFile = - findUniqueDeclarationOrFail("paramUnqualifiedEnumVariantInSameFile") + findUniqueDeclarationOrFail("paramUnqualifiedEnumVariantInSameFile") val parameterType = paramUnqualifiedEnumVariantInSameFile.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() parameterType.declaration.shouldNotBeResolved() } @Test fun `should resolve inherited class within class with qualified access`() = withResource(NAMED_TYPE) { - val paramClassInSuperClass = findUniqueDeclarationOrFail("paramClassInSuperClass") - val classInSameFile = findUniqueDeclarationOrFail("ClassInSuperClass") + val paramClassInSuperClass = findUniqueDeclarationOrFail("paramClassInSuperClass") + val classInSameFile = findUniqueDeclarationOrFail("ClassInSuperClass") val parameterType = paramClassInSuperClass.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedClass = parameterType.member.declaration referencedClass.shouldBeResolved() @@ -694,11 +694,11 @@ class ScopingTest { @Test fun `should resolve inherited enum within class with qualified access`() = withResource(NAMED_TYPE) { - val paramEnumInSuperClass = findUniqueDeclarationOrFail("paramEnumInSuperClass") - val enumInSameFile = findUniqueDeclarationOrFail("EnumInSuperClass") + val paramEnumInSuperClass = findUniqueDeclarationOrFail("paramEnumInSuperClass") + val enumInSameFile = findUniqueDeclarationOrFail("EnumInSuperClass") val parameterType = paramEnumInSuperClass.type - parameterType.shouldBeInstanceOf() + parameterType.shouldBeInstanceOf() val referencedEnum = parameterType.member.declaration referencedEnum.shouldBeResolved() @@ -713,12 +713,12 @@ class ScopingTest { @Test fun `should resolve static attribute in super class`() = withResource(PROTOCOL_REFERENCE) { val superClassStaticAttributeReference = - findUniqueDeclarationOrFail("superClassStaticAttributeReference") + findUniqueDeclarationOrFail("superClassStaticAttributeReference") - val superClassStaticAttribute = findUniqueDeclarationOrFail("superClassStaticAttribute") + val superClassStaticAttribute = findUniqueDeclarationOrFail("superClassStaticAttribute") val term = superClassStaticAttributeReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe superClassStaticAttribute } @@ -726,12 +726,12 @@ class ScopingTest { @Test fun `should resolve instance attribute in super class`() = withResource(PROTOCOL_REFERENCE) { val superClassInstanceAttributeReference = - findUniqueDeclarationOrFail("superClassInstanceAttributeReference") + findUniqueDeclarationOrFail("superClassInstanceAttributeReference") - val superClassInstanceAttribute = findUniqueDeclarationOrFail("superClassInstanceAttribute") + val superClassInstanceAttribute = findUniqueDeclarationOrFail("superClassInstanceAttribute") val term = superClassInstanceAttributeReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe superClassInstanceAttribute } @@ -739,12 +739,12 @@ class ScopingTest { @Test fun `should resolve static method in super class`() = withResource(PROTOCOL_REFERENCE) { val superClassStaticMethodReference = - findUniqueDeclarationOrFail("superClassStaticMethodReference") + findUniqueDeclarationOrFail("superClassStaticMethodReference") - val superClassStaticMethod = findUniqueDeclarationOrFail("superClassStaticMethod") + val superClassStaticMethod = findUniqueDeclarationOrFail("superClassStaticMethod") val term = superClassStaticMethodReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe superClassStaticMethod } @@ -752,12 +752,12 @@ class ScopingTest { @Test fun `should resolve instance method in super class`() = withResource(PROTOCOL_REFERENCE) { val superClassInstanceMethodReference = - findUniqueDeclarationOrFail("superClassInstanceMethodReference") + findUniqueDeclarationOrFail("superClassInstanceMethodReference") - val superClassInstanceMethod = findUniqueDeclarationOrFail("superClassInstanceMethod") + val superClassInstanceMethod = findUniqueDeclarationOrFail("superClassInstanceMethod") val term = superClassInstanceMethodReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe superClassInstanceMethod } @@ -765,52 +765,52 @@ class ScopingTest { @Test fun `should not resolve static attribute in container class`() = withResource(PROTOCOL_REFERENCE) { val containerClassStaticAttributeReference = - findUniqueDeclarationOrFail("containerClassStaticAttributeReference") + findUniqueDeclarationOrFail("containerClassStaticAttributeReference") val term = containerClassStaticAttributeReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldNotBeResolved() } @Test fun `should not resolve instance attribute in container class`() = withResource(PROTOCOL_REFERENCE) { val containerClassInstanceAttributeReference = - findUniqueDeclarationOrFail("containerClassInstanceAttributeReference") + findUniqueDeclarationOrFail("containerClassInstanceAttributeReference") val term = containerClassInstanceAttributeReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldNotBeResolved() } @Test fun `should not resolve static method in container class`() = withResource(PROTOCOL_REFERENCE) { val containerClassStaticMethodReference = - findUniqueDeclarationOrFail("containerClassStaticMethodReference") + findUniqueDeclarationOrFail("containerClassStaticMethodReference") val term = containerClassStaticMethodReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldNotBeResolved() } @Test fun `should not resolve instance method in container class`() = withResource(PROTOCOL_REFERENCE) { val containerClassInstanceMethodReference = - findUniqueDeclarationOrFail("containerClassInstanceMethodReference") + findUniqueDeclarationOrFail("containerClassInstanceMethodReference") val term = containerClassInstanceMethodReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldNotBeResolved() } @Test fun `should resolve static attribute in own class`() = withResource(PROTOCOL_REFERENCE) { val subClassStaticAttributeReference = - findUniqueDeclarationOrFail("subClassStaticAttributeReference") + findUniqueDeclarationOrFail("subClassStaticAttributeReference") - val subClassStaticAttribute = findUniqueDeclarationOrFail("subClassStaticAttribute") + val subClassStaticAttribute = findUniqueDeclarationOrFail("subClassStaticAttribute") val term = subClassStaticAttributeReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe subClassStaticAttribute } @@ -818,12 +818,12 @@ class ScopingTest { @Test fun `should resolve instance attribute in own class`() = withResource(PROTOCOL_REFERENCE) { val subClassInstanceAttributeReference = - findUniqueDeclarationOrFail("subClassInstanceAttributeReference") + findUniqueDeclarationOrFail("subClassInstanceAttributeReference") - val subClassInstanceAttribute = findUniqueDeclarationOrFail("subClassInstanceAttribute") + val subClassInstanceAttribute = findUniqueDeclarationOrFail("subClassInstanceAttribute") val term = subClassInstanceAttributeReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe subClassInstanceAttribute } @@ -831,12 +831,12 @@ class ScopingTest { @Test fun `should resolve static method in own class`() = withResource(PROTOCOL_REFERENCE) { val subClassStaticMethodReference = - findUniqueDeclarationOrFail("subClassStaticMethodReference") + findUniqueDeclarationOrFail("subClassStaticMethodReference") - val subClassStaticMethod = findUniqueDeclarationOrFail("subClassStaticMethod") + val subClassStaticMethod = findUniqueDeclarationOrFail("subClassStaticMethod") val term = subClassStaticMethodReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe subClassStaticMethod } @@ -844,76 +844,76 @@ class ScopingTest { @Test fun `should resolve instance method in own class`() = withResource(PROTOCOL_REFERENCE) { val subClassInstanceMethodReference = - findUniqueDeclarationOrFail("subClassInstanceMethodReference") + findUniqueDeclarationOrFail("subClassInstanceMethodReference") - val subClassInstanceMethod = findUniqueDeclarationOrFail("subClassInstanceMethod") + val subClassInstanceMethod = findUniqueDeclarationOrFail("subClassInstanceMethod") val term = subClassInstanceMethodReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe subClassInstanceMethod } @Test fun `should resolve overriding declaration`() = withResource(PROTOCOL_REFERENCE) { - val overriddenReference = findUniqueDeclarationOrFail("overriddenReference") + val overriddenReference = findUniqueDeclarationOrFail("overriddenReference") - val subClass = findUniqueDeclarationOrFail("SubClass") - val overridden = subClass.findUniqueDeclarationOrFail("overridden") + val subClass = findUniqueDeclarationOrFail("SubClass") + val overridden = subClass.findUniqueDeclarationOrFail("overridden") val term = overriddenReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe overridden } @Test fun `should resolve other subterms`() = withResource(PROTOCOL_REFERENCE) { - val subtermReference = findUniqueDeclarationOrFail("subtermReference") - val forwardReference = findUniqueDeclarationOrFail("forwardReference") + val subtermReference = findUniqueDeclarationOrFail("subtermReference") + val forwardReference = findUniqueDeclarationOrFail("forwardReference") val term = subtermReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe forwardReference } @Test fun `should resolve shadowing subterm`() = withResource(PROTOCOL_REFERENCE) { - val shadowedReference = findUniqueDeclarationOrFail("shadowedReference") - val shadowed = findUniqueDeclarationOrFail("shadowed") + val shadowedReference = findUniqueDeclarationOrFail("shadowedReference") + val shadowed = findUniqueDeclarationOrFail("shadowed") val term = shadowedReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldBeResolved() term.token shouldBe shadowed } @Test fun `should not resolve forward reference to subterm`() = withResource(PROTOCOL_REFERENCE) { - val forwardReference = findUniqueDeclarationOrFail("forwardReference") + val forwardReference = findUniqueDeclarationOrFail("forwardReference") val term = forwardReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldNotBeResolved() } @Test fun `should not resolve unknown declaration`() = withResource(PROTOCOL_REFERENCE) { - val unresolvedReference = findUniqueDeclarationOrFail("unresolvedReference") + val unresolvedReference = findUniqueDeclarationOrFail("unresolvedReference") val term = unresolvedReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldNotBeResolved() } @Test fun `should not resolve something that is not a protocol token`() = withResource(PROTOCOL_REFERENCE) { val notAProtocolTokenReference = - findUniqueDeclarationOrFail("notAProtocolTokenReference") + findUniqueDeclarationOrFail("notAProtocolTokenReference") val term = notAProtocolTokenReference.term - term.shouldBeInstanceOf() + term.shouldBeInstanceOf() term.token.shouldNotBeResolved() } } @@ -923,46 +923,46 @@ class ScopingTest { @Test fun `should not resolve annotation in same file`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToAnnotations") + val step = findUniqueDeclarationOrFail("directReferencesToAnnotations") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[0].declaration.shouldNotBeResolved() } @Test fun `should not resolve annotation in same package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToAnnotations") + val step = findUniqueDeclarationOrFail("directReferencesToAnnotations") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[1].declaration.shouldNotBeResolved() } @Test fun `should not resolve annotation in another package if imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToAnnotations") + val step = findUniqueDeclarationOrFail("directReferencesToAnnotations") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[2].declaration.shouldNotBeResolved() } @Test fun `should not resolve annotation in another package if not imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToAnnotations") + val step = findUniqueDeclarationOrFail("directReferencesToAnnotations") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[3].declaration.shouldNotBeResolved() } @Test fun `should resolve class in same file`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToClasses") - val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") + val step = findUniqueDeclarationOrFail("directReferencesToClasses") + val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[0].declaration @@ -972,9 +972,9 @@ class ScopingTest { @Test fun `should resolve class in same package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToClasses") + val step = findUniqueDeclarationOrFail("directReferencesToClasses") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[1].declaration @@ -984,9 +984,9 @@ class ScopingTest { @Test fun `should resolve class in another package if imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToClasses") + val step = findUniqueDeclarationOrFail("directReferencesToClasses") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[2].declaration @@ -996,19 +996,19 @@ class ScopingTest { @Test fun `should not resolve class in another package if not imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToClasses") + val step = findUniqueDeclarationOrFail("directReferencesToClasses") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[3].declaration.shouldNotBeResolved() } @Test fun `should resolve enum in same file`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToEnums") - val enumInSameFile = findUniqueDeclarationOrFail("EnumInSameFile") + val step = findUniqueDeclarationOrFail("directReferencesToEnums") + val enumInSameFile = findUniqueDeclarationOrFail("EnumInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[0].declaration @@ -1018,9 +1018,9 @@ class ScopingTest { @Test fun `should resolve enum in same package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToEnums") + val step = findUniqueDeclarationOrFail("directReferencesToEnums") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[1].declaration @@ -1030,9 +1030,9 @@ class ScopingTest { @Test fun `should resolve enum in another package if imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToEnums") + val step = findUniqueDeclarationOrFail("directReferencesToEnums") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[2].declaration @@ -1042,19 +1042,19 @@ class ScopingTest { @Test fun `should not resolve enum in another package if not imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToEnums") + val step = findUniqueDeclarationOrFail("directReferencesToEnums") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[3].declaration.shouldNotBeResolved() } @Test fun `should resolve global function in same file`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToGlobalFunctions") - val globalFunctionInSameFile = findUniqueDeclarationOrFail("globalFunctionInSameFile") + val step = findUniqueDeclarationOrFail("directReferencesToGlobalFunctions") + val globalFunctionInSameFile = findUniqueDeclarationOrFail("globalFunctionInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[0].declaration @@ -1064,9 +1064,9 @@ class ScopingTest { @Test fun `should resolve global function in same package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToGlobalFunctions") + val step = findUniqueDeclarationOrFail("directReferencesToGlobalFunctions") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[1].declaration @@ -1076,9 +1076,9 @@ class ScopingTest { @Test fun `should resolve global function in another package if imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToGlobalFunctions") + val step = findUniqueDeclarationOrFail("directReferencesToGlobalFunctions") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[2].declaration @@ -1088,19 +1088,19 @@ class ScopingTest { @Test fun `should not resolve global function in another package if not imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToGlobalFunctions") + val step = findUniqueDeclarationOrFail("directReferencesToGlobalFunctions") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[3].declaration.shouldNotBeResolved() } @Test fun `should resolve goal in same file`() = withResource(GOAL_REFERENCE) { - val predicate = findUniqueDeclarationOrFail("directReferencesToPredicates") - val predicateInSameFile = findUniqueDeclarationOrFail("PredicateInSameFile") + val predicate = findUniqueDeclarationOrFail("directReferencesToPredicates") + val predicateInSameFile = findUniqueDeclarationOrFail("PredicateInSameFile") - val references = predicate.descendants().toList() + val references = predicate.descendants().toList() references.shouldHaveSize(4) val declaration = references[0].declaration @@ -1110,9 +1110,9 @@ class ScopingTest { @Test fun `should resolve goal in same package`() = withResource(GOAL_REFERENCE) { - val predicate = findUniqueDeclarationOrFail("directReferencesToPredicates") + val predicate = findUniqueDeclarationOrFail("directReferencesToPredicates") - val references = predicate.descendants().toList() + val references = predicate.descendants().toList() references.shouldHaveSize(4) val declaration = references[1].declaration @@ -1122,9 +1122,9 @@ class ScopingTest { @Test fun `should resolve goal in another package if imported`() = withResource(GOAL_REFERENCE) { - val predicate = findUniqueDeclarationOrFail("directReferencesToPredicates") + val predicate = findUniqueDeclarationOrFail("directReferencesToPredicates") - val references = predicate.descendants().toList() + val references = predicate.descendants().toList() references.shouldHaveSize(4) val declaration = references[2].declaration @@ -1134,28 +1134,28 @@ class ScopingTest { @Test fun `should not resolve goal in another package if not imported`() = withResource(GOAL_REFERENCE) { - val predicate = findUniqueDeclarationOrFail("directReferencesToPredicates") + val predicate = findUniqueDeclarationOrFail("directReferencesToPredicates") - val references = predicate.descendants().toList() + val references = predicate.descendants().toList() references.shouldHaveSize(4) references[3].declaration.shouldNotBeResolved() } @Test fun `should not resolve lambda result`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToLambdaResults") + val step = findUniqueDeclarationOrFail("directReferencesToLambdaResults") - val reference = step.descendants().firstOrNull() + val reference = step.descendants().firstOrNull() reference.shouldNotBeNull() reference.declaration.shouldNotBeResolved() } @Test fun `should resolve parameter of step in same step`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToParameters") - val parameterInStep = step.findUniqueDeclarationOrFail("parameterInStep") + val step = findUniqueDeclarationOrFail("directReferencesToParameters") + val parameterInStep = step.findUniqueDeclarationOrFail("parameterInStep") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[0].declaration @@ -1165,10 +1165,10 @@ class ScopingTest { @Test fun `should resolve parameter of step in block lambda in same step`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToParameters") - val parameterInStep = step.findUniqueDeclarationOrFail("parameterInStep") + val step = findUniqueDeclarationOrFail("directReferencesToParameters") + val parameterInStep = step.findUniqueDeclarationOrFail("parameterInStep") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[1].declaration @@ -1179,10 +1179,10 @@ class ScopingTest { @Test fun `should resolve parameter of block lambda in same block lambda`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToParameters") - val parameterInLambda = step.findUniqueDeclarationOrFail("parameterInBlockLambda") + val step = findUniqueDeclarationOrFail("directReferencesToParameters") + val parameterInLambda = step.findUniqueDeclarationOrFail("parameterInBlockLambda") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[2].declaration @@ -1193,10 +1193,10 @@ class ScopingTest { @Test fun `should resolve parameter of step in block lambda within block lambda in same step`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToParameters") - val parameterInStep = step.findUniqueDeclarationOrFail("parameterInStep") + val step = findUniqueDeclarationOrFail("directReferencesToParameters") + val parameterInStep = step.findUniqueDeclarationOrFail("parameterInStep") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[3].declaration @@ -1207,10 +1207,10 @@ class ScopingTest { @Test fun `should resolve parameter of block lambda in nested block lambda`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToParameters") - val parameterInLambda = step.findUniqueDeclarationOrFail("parameterInBlockLambda") + val step = findUniqueDeclarationOrFail("directReferencesToParameters") + val parameterInLambda = step.findUniqueDeclarationOrFail("parameterInBlockLambda") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[4].declaration @@ -1221,10 +1221,10 @@ class ScopingTest { @Test fun `should resolve parameter of expression lambda in same expression lambda`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToParameters") - val parameterInLambda = step.findUniqueDeclarationOrFail("parameterInExpressionLambda") + val step = findUniqueDeclarationOrFail("directReferencesToParameters") + val parameterInLambda = step.findUniqueDeclarationOrFail("parameterInExpressionLambda") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[5].declaration @@ -1234,10 +1234,10 @@ class ScopingTest { @Test fun `should resolve placeholder of step in same step`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") - val placeholderInStep = step.findUniqueDeclarationOrFail("placeholderInStep") + val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") + val placeholderInStep = step.findUniqueDeclarationOrFail("placeholderInStep") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(5) val declaration = references[0].declaration @@ -1247,10 +1247,10 @@ class ScopingTest { @Test fun `should resolve placeholder of step in lambda in same step`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") - val placeholderInStep = step.findUniqueDeclarationOrFail("placeholderInStep") + val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") + val placeholderInStep = step.findUniqueDeclarationOrFail("placeholderInStep") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(5) val declaration = references[1].declaration @@ -1261,10 +1261,10 @@ class ScopingTest { @Test fun `should resolve placeholder of lambda in same lambda`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") - val placeholderInLambda = step.findUniqueDeclarationOrFail("placeholderInLambda") + val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") + val placeholderInLambda = step.findUniqueDeclarationOrFail("placeholderInLambda") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(5) val declaration = references[2].declaration @@ -1275,10 +1275,10 @@ class ScopingTest { @Test fun `should resolve placeholder of step in lambda within lambda in same step`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") - val placeholderInStep = step.findUniqueDeclarationOrFail("placeholderInStep") + val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") + val placeholderInStep = step.findUniqueDeclarationOrFail("placeholderInStep") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(5) val declaration = references[3].declaration @@ -1289,10 +1289,10 @@ class ScopingTest { @Test fun `should resolve placeholder of lambda in nested lambda`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") - val placeholderInLambda = step.findUniqueDeclarationOrFail("placeholderInLambda") + val step = findUniqueDeclarationOrFail("directReferencesToPlaceholders") + val placeholderInLambda = step.findUniqueDeclarationOrFail("placeholderInLambda") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(5) val declaration = references[4].declaration @@ -1302,19 +1302,19 @@ class ScopingTest { @Test fun `should not resolve type parameters`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToTypeParameters") + val step = findUniqueDeclarationOrFail("directReferencesToTypeParameters") - val reference = step.descendants().firstOrNull() + val reference = step.descendants().firstOrNull() reference.shouldNotBeNull() reference.declaration.shouldNotBeResolved() } @Test fun `should resolve step in same file`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val stepInSameFile = findUniqueDeclarationOrFail("stepInSameFile") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val stepInSameFile = findUniqueDeclarationOrFail("stepInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) val declaration = references[0].declaration @@ -1324,9 +1324,9 @@ class ScopingTest { @Test fun `should resolve step in same package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) val declaration = references[1].declaration @@ -1336,9 +1336,9 @@ class ScopingTest { @Test fun `should resolve step in another package if imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) val declaration = references[2].declaration @@ -1348,19 +1348,19 @@ class ScopingTest { @Test fun `should not resolve step in another package if not imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) references[3].declaration.shouldNotBeResolved() } @Test fun `should resolve internal step in same file`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val stepInSameFile = findUniqueDeclarationOrFail("internalStepInSameFile") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val stepInSameFile = findUniqueDeclarationOrFail("internalStepInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) val declaration = references[4].declaration @@ -1370,10 +1370,10 @@ class ScopingTest { @Test fun `should resolve private step in same file`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val stepInSameFile = findUniqueDeclarationOrFail("privateStepInSameFile") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val stepInSameFile = findUniqueDeclarationOrFail("privateStepInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) val declaration = references[5].declaration @@ -1383,9 +1383,9 @@ class ScopingTest { @Test fun `should resolve internal step in same package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) val declaration = references[6].declaration @@ -1395,81 +1395,81 @@ class ScopingTest { @Test fun `should not resolve private step in same package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) references[7].declaration.shouldNotBeResolved() } @Test fun `should not resolve internal step in another package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) references[8].declaration.shouldNotBeResolved() } @Test fun `should not resolve private step in another package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToSteps") + val step = findUniqueDeclarationOrFail("directReferencesToSteps") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(10) references[9].declaration.shouldNotBeResolved() } @Test fun `should not resolve workflow in same file`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToWorkflows") + val step = findUniqueDeclarationOrFail("directReferencesToWorkflows") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[0].declaration.shouldNotBeResolved() } @Test fun `should not resolve workflow in same package`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToWorkflows") + val step = findUniqueDeclarationOrFail("directReferencesToWorkflows") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[1].declaration.shouldNotBeResolved() } @Test fun `should not resolve workflow in another package if imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToWorkflows") + val step = findUniqueDeclarationOrFail("directReferencesToWorkflows") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[2].declaration.shouldNotBeResolved() } @Test fun `should not resolve workflow in another package if not imported`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("directReferencesToWorkflows") + val step = findUniqueDeclarationOrFail("directReferencesToWorkflows") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) references[3].declaration.shouldNotBeResolved() } @Test fun `should not resolve placeholder declared later in same step`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("forwardReferences") + val step = findUniqueDeclarationOrFail("forwardReferences") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(3) references[0].declaration.shouldNotBeResolved() } @Test fun `should not resolve placeholder declared later from nested lambda`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("forwardReferences") + val step = findUniqueDeclarationOrFail("forwardReferences") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(3) references[1].declaration.shouldNotBeResolved() } @@ -1477,9 +1477,9 @@ class ScopingTest { @Test fun `should not resolve placeholder that lambda is assigned to from body of lambda`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("forwardReferences") + val step = findUniqueDeclarationOrFail("forwardReferences") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(3) references[2].declaration.shouldNotBeResolved() } @@ -1487,12 +1487,12 @@ class ScopingTest { @Test fun `should resolve declaration shadowed by parameter of step`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("shadowedReferences") + val step = findUniqueDeclarationOrFail("shadowedReferences") val parameters = step.parametersOrEmpty() parameters.shouldHaveSize(1) - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[0].declaration @@ -1503,12 +1503,12 @@ class ScopingTest { @Test fun `should resolve declaration shadowed by placeholder of step`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("shadowedReferences") + val step = findUniqueDeclarationOrFail("shadowedReferences") - val placeholders = step.descendants().toList() + val placeholders = step.descendants().toList() placeholders.shouldHaveSize(3) - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[1].declaration @@ -1519,12 +1519,12 @@ class ScopingTest { @Test fun `should resolve declaration shadowed by parameter of lambda`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("shadowedReferences") + val step = findUniqueDeclarationOrFail("shadowedReferences") - val parameters = step.body.descendants().toList() + val parameters = step.body.descendants().toList() parameters.shouldHaveSize(1) - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[2].declaration @@ -1535,12 +1535,12 @@ class ScopingTest { @Test fun `should resolve declaration shadowed by placeholder of lambda`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("shadowedReferences") + val step = findUniqueDeclarationOrFail("shadowedReferences") - val placeholders = step.descendants().toList() + val placeholders = step.descendants().toList() placeholders.shouldHaveSize(3) - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(4) val declaration = references[3].declaration @@ -1550,9 +1550,9 @@ class ScopingTest { @Test fun `should not resolve function locals`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToFunctionLocals") + val step = findUniqueDeclarationOrFail("referencesToFunctionLocals") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(2) references.forEachAsClue { it.declaration.shouldNotBeResolved() @@ -1561,18 +1561,18 @@ class ScopingTest { @Test fun `should not resolve lambda locals`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToLambdaLocals") + val step = findUniqueDeclarationOrFail("referencesToLambdaLocals") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(3) references[0].declaration.shouldNotBeResolved() } @Test fun `should not resolve step locals`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToStepLocals") + val step = findUniqueDeclarationOrFail("referencesToStepLocals") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(3) references.forEachAsClue { it.declaration.shouldNotBeResolved() @@ -1581,9 +1581,9 @@ class ScopingTest { @Test fun `should not resolve unknown declaration`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("unresolvedReferences") + val step = findUniqueDeclarationOrFail("unresolvedReferences") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(1) references[0].declaration.shouldNotBeResolved() } @@ -1593,11 +1593,11 @@ class ScopingTest { @Test fun `should resolve static class attribute accessed from class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToClassMembers") + val step = findUniqueDeclarationOrFail("referencesToClassMembers") val classStaticAttributeInSameFile = - findUniqueDeclarationOrFail("classStaticAttributeInSameFile") + findUniqueDeclarationOrFail("classStaticAttributeInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[1].declaration @@ -1607,11 +1607,11 @@ class ScopingTest { @Test fun `should resolve instance class attribute accessed from class instance`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToClassMembers") + val step = findUniqueDeclarationOrFail("referencesToClassMembers") val classInstanceAttributeInSameFile = - findUniqueDeclarationOrFail("classInstanceAttributeInSameFile") + findUniqueDeclarationOrFail("classInstanceAttributeInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[3].declaration @@ -1621,11 +1621,11 @@ class ScopingTest { @Test fun `should resolve nested class accessed from class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToClassMembers") + val step = findUniqueDeclarationOrFail("referencesToClassMembers") val classInClassInSameFile = - findUniqueDeclarationOrFail("ClassInClassInSameFile") + findUniqueDeclarationOrFail("ClassInClassInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[5].declaration @@ -1635,11 +1635,11 @@ class ScopingTest { @Test fun `should resolve nested enum accessed from class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToClassMembers") + val step = findUniqueDeclarationOrFail("referencesToClassMembers") val enumInClassInSameFile = - findUniqueDeclarationOrFail("EnumInClassInSameFile") + findUniqueDeclarationOrFail("EnumInClassInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[7].declaration @@ -1649,11 +1649,11 @@ class ScopingTest { @Test fun `should resolve static class method accessed from class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToClassMembers") + val step = findUniqueDeclarationOrFail("referencesToClassMembers") val classStaticMethodInSameFile = - findUniqueDeclarationOrFail("classStaticMethodInSameFile") + findUniqueDeclarationOrFail("classStaticMethodInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[9].declaration @@ -1663,11 +1663,11 @@ class ScopingTest { @Test fun `should resolve instance class method accessed from class instance`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToClassMembers") + val step = findUniqueDeclarationOrFail("referencesToClassMembers") val classInstanceMethodInSameFile = - findUniqueDeclarationOrFail("classInstanceMethodInSameFile") + findUniqueDeclarationOrFail("classInstanceMethodInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[11].declaration @@ -1677,11 +1677,11 @@ class ScopingTest { @Test fun `should resolve enum variants`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToEnumVariants") + val step = findUniqueDeclarationOrFail("referencesToEnumVariants") val enumVariantInSameFile = - findUniqueDeclarationOrFail("EnumVariantInSameFile") + findUniqueDeclarationOrFail("EnumVariantInSameFile") - val references = step.body.descendants().toList() + val references = step.body.descendants().toList() references.shouldHaveSize(2) val declaration = references[1].declaration @@ -1691,14 +1691,14 @@ class ScopingTest { @Test fun `should resolve enum variants from step annotation`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToEnumVariants") + val step = findUniqueDeclarationOrFail("referencesToEnumVariants") val enumVariantInSameFile = - findUniqueDeclarationOrFail("EnumVariantInSameFile") + findUniqueDeclarationOrFail("EnumVariantInSameFile") val annotations = step.annotationCallsOrEmpty() annotations.shouldHaveSize(1) - val references = annotations[0].descendants().toList() + val references = annotations[0].descendants().toList() references.shouldHaveSize(2) val declaration = references[1].declaration @@ -1709,14 +1709,14 @@ class ScopingTest { @Test fun `should resolve enum variants from parameter annotation`() = withResource(REFERENCE) { val parameter = - findUniqueDeclarationOrFail("referenceToEnumVariantFromParameterAnnotation") + findUniqueDeclarationOrFail("referenceToEnumVariantFromParameterAnnotation") val enumVariantInSameFile = - findUniqueDeclarationOrFail("EnumVariantInSameFile") + findUniqueDeclarationOrFail("EnumVariantInSameFile") val annotations = parameter.annotationCallsOrEmpty() annotations.shouldHaveSize(1) - val references = annotations[0].descendants().toList() + val references = annotations[0].descendants().toList() references.shouldHaveSize(2) val declaration = references[1].declaration @@ -1726,14 +1726,14 @@ class ScopingTest { @Test fun `should resolve enum variants of nested enum from class annotation`() = withResource(REFERENCE) { - val parameter = findUniqueDeclarationOrFail("ReferencesToEnumVariantsInnerClass") + val parameter = findUniqueDeclarationOrFail("ReferencesToEnumVariantsInnerClass") val enumVariantInSameFile = - findUniqueDeclarationOrFail("EnumVariantInSameClass") + findUniqueDeclarationOrFail("EnumVariantInSameClass") val annotations = parameter.annotationCallsOrEmpty() annotations.shouldHaveSize(2) - val references = annotations[0].descendants().toList() + val references = annotations[0].descendants().toList() references.shouldHaveSize(2) val declaration = references[1].declaration @@ -1743,14 +1743,14 @@ class ScopingTest { @Test fun `should resolve enum variants of global enum from class annotation`() = withResource(REFERENCE) { - val parameter = findUniqueDeclarationOrFail("ReferencesToEnumVariantsInnerClass") + val parameter = findUniqueDeclarationOrFail("ReferencesToEnumVariantsInnerClass") val enumVariantInSameClass = - findUniqueDeclarationOrFail("EnumVariantInSameFile") + findUniqueDeclarationOrFail("EnumVariantInSameFile") val annotations = parameter.annotationCallsOrEmpty() annotations.shouldHaveSize(2) - val references = annotations[1].descendants().toList() + val references = annotations[1].descendants().toList() references.shouldHaveSize(2) val declaration = references[1].declaration @@ -1760,11 +1760,11 @@ class ScopingTest { @Test fun `should resolve parameters of enum variants`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToEnumVariantParameters") + val step = findUniqueDeclarationOrFail("referencesToEnumVariantParameters") val enumVariantParameterInSameFile = - findUniqueDeclarationOrFail("enumVariantParameterInSameFile") + findUniqueDeclarationOrFail("enumVariantParameterInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(3) val declaration = references[2].declaration @@ -1774,11 +1774,11 @@ class ScopingTest { @Test fun `should resolve inherited static class attribute accessed from class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") + val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") val superClassStaticAttribute = - findUniqueDeclarationOrFail("superClassStaticAttribute") + findUniqueDeclarationOrFail("superClassStaticAttribute") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[1].declaration @@ -1789,11 +1789,11 @@ class ScopingTest { @Test fun `should resolve inherited instance class attribute accessed from class instance`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") + val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") val superClassInstanceAttribute = - findUniqueDeclarationOrFail("superClassInstanceAttribute") + findUniqueDeclarationOrFail("superClassInstanceAttribute") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[3].declaration @@ -1803,11 +1803,11 @@ class ScopingTest { @Test fun `should resolve inherited nested class accessed from class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") + val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") val classInSuperClass = - findUniqueDeclarationOrFail("ClassInSuperClass") + findUniqueDeclarationOrFail("ClassInSuperClass") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[5].declaration @@ -1817,11 +1817,11 @@ class ScopingTest { @Test fun `should resolve inherited nested enum accessed from class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") + val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") val enumInSuperClass = - findUniqueDeclarationOrFail("EnumInSuperClass") + findUniqueDeclarationOrFail("EnumInSuperClass") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[7].declaration @@ -1831,11 +1831,11 @@ class ScopingTest { @Test fun `should resolve inherited static class method accessed from class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") + val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") val superClassStaticMethod = - findUniqueDeclarationOrFail("superClassStaticMethod") + findUniqueDeclarationOrFail("superClassStaticMethod") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[9].declaration @@ -1846,11 +1846,11 @@ class ScopingTest { @Test fun `should resolve inherited instance class method accessed from class instance`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") + val step = findUniqueDeclarationOrFail("referencesToInheritedClassMembers") val superClassInstanceMethod = - findUniqueDeclarationOrFail("superClassInstanceMethod") + findUniqueDeclarationOrFail("superClassInstanceMethod") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(12) val declaration = references[11].declaration @@ -1860,12 +1860,12 @@ class ScopingTest { @Test fun `should resolve overridden instance attribute`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToOverriddenMembers") - val subClassForOverriding = findUniqueDeclarationOrFail("SubClassForOverriding") + val step = findUniqueDeclarationOrFail("referencesToOverriddenMembers") + val subClassForOverriding = findUniqueDeclarationOrFail("SubClassForOverriding") val instanceAttributeForOverriding = - subClassForOverriding.findUniqueDeclarationOrFail("instanceAttributeForOverriding") + subClassForOverriding.findUniqueDeclarationOrFail("instanceAttributeForOverriding") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[5].declaration @@ -1875,12 +1875,12 @@ class ScopingTest { @Test fun `should resolve overridden instance method`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToOverriddenMembers") - val subClassForOverriding = findUniqueDeclarationOrFail("SubClassForOverriding") + val step = findUniqueDeclarationOrFail("referencesToOverriddenMembers") + val subClassForOverriding = findUniqueDeclarationOrFail("SubClassForOverriding") val instanceMethodForOverriding = - subClassForOverriding.findUniqueDeclarationOrFail("instanceMethodForOverriding") + subClassForOverriding.findUniqueDeclarationOrFail("instanceMethodForOverriding") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[7].declaration @@ -1890,12 +1890,12 @@ class ScopingTest { @Test fun `should resolve hidden static attribute`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToHiddenMembers") - val subClassForHiding = findUniqueDeclarationOrFail("SubClassForHiding") + val step = findUniqueDeclarationOrFail("referencesToHiddenMembers") + val subClassForHiding = findUniqueDeclarationOrFail("SubClassForHiding") val staticAttributeForHiding = - subClassForHiding.findUniqueDeclarationOrFail("staticAttributeForHiding") + subClassForHiding.findUniqueDeclarationOrFail("staticAttributeForHiding") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[1].declaration @@ -1905,12 +1905,12 @@ class ScopingTest { @Test fun `should resolve hidden nested class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToHiddenMembers") - val subClassForHiding = findUniqueDeclarationOrFail("SubClassForHiding") + val step = findUniqueDeclarationOrFail("referencesToHiddenMembers") + val subClassForHiding = findUniqueDeclarationOrFail("SubClassForHiding") val nestedClassForHiding = - subClassForHiding.findUniqueDeclarationOrFail("NestedClassForHiding") + subClassForHiding.findUniqueDeclarationOrFail("NestedClassForHiding") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[3].declaration @@ -1920,12 +1920,12 @@ class ScopingTest { @Test fun `should resolve hidden nested enum`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToHiddenMembers") - val subClassForHiding = findUniqueDeclarationOrFail("SubClassForHiding") + val step = findUniqueDeclarationOrFail("referencesToHiddenMembers") + val subClassForHiding = findUniqueDeclarationOrFail("SubClassForHiding") val nestedEnumForHiding = - subClassForHiding.findUniqueDeclarationOrFail("NestedEnumForHiding") + subClassForHiding.findUniqueDeclarationOrFail("NestedEnumForHiding") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[5].declaration @@ -1935,12 +1935,12 @@ class ScopingTest { @Test fun `should resolve hidden static method`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToHiddenMembers") - val subClassForHiding = findUniqueDeclarationOrFail("SubClassForHiding") + val step = findUniqueDeclarationOrFail("referencesToHiddenMembers") + val subClassForHiding = findUniqueDeclarationOrFail("SubClassForHiding") val staticMethodForHiding = - subClassForHiding.findUniqueDeclarationOrFail("staticMethodForHiding") + subClassForHiding.findUniqueDeclarationOrFail("staticMethodForHiding") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[7].declaration @@ -1950,10 +1950,10 @@ class ScopingTest { @Test fun `should not resolve static class members accessed from instance`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToStaticClassMembersFromInstance") - val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") + val step = findUniqueDeclarationOrFail("referencesToStaticClassMembersFromInstance") + val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") - val references = step.descendants() + val references = step.descendants() .filter { it.declaration != classInSameFile } .toList() references.shouldHaveSize(8) @@ -1964,10 +1964,10 @@ class ScopingTest { @Test fun `should not resolve instance class members accessed from class`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToInstanceClassMembersFromClass") - val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") + val step = findUniqueDeclarationOrFail("referencesToInstanceClassMembersFromClass") + val classInSameFile = findUniqueDeclarationOrFail("ClassInSameFile") - val references = step.descendants() + val references = step.descendants() .filter { it.declaration != classInSameFile } .toList() references.shouldHaveSize(4) @@ -1978,9 +1978,9 @@ class ScopingTest { @Test fun `should not resolve class members with unqualified access`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("unqualifiedReferencesToClassMembers") + val step = findUniqueDeclarationOrFail("unqualifiedReferencesToClassMembers") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) references.forEachAsClue { it.declaration.shouldNotBeResolved() @@ -1989,18 +1989,18 @@ class ScopingTest { @Test fun `should not resolve enum variants with unqualified access`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("unqualifiedReferencesToEnumVariants") + val step = findUniqueDeclarationOrFail("unqualifiedReferencesToEnumVariants") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(1) references[0].declaration.shouldNotBeResolved() } @Test fun `should not resolve parameters of enum variants with unqualified access`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("unqualifiedReferencesToEnumVariantParameters") + val step = findUniqueDeclarationOrFail("unqualifiedReferencesToEnumVariantParameters") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(1) references[0].declaration.shouldNotBeResolved() } @@ -2008,10 +2008,10 @@ class ScopingTest { @Test fun `should resolve result of callable type with one result without matching member`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToCallableTypeResults") - val singleResult = step.findUniqueDeclarationOrFail("singleResult") + val step = findUniqueDeclarationOrFail("referencesToCallableTypeResults") + val singleResult = step.findUniqueDeclarationOrFail("singleResult") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[1].declaration @@ -2022,11 +2022,11 @@ class ScopingTest { @Test fun `should resolve attribute for callable type with one result with matching class attribute`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToCallableTypeResults") - val classForResultMemberAccess = findUniqueDeclarationOrFail("ClassForResultMemberAccess") - val result = classForResultMemberAccess.findUniqueDeclarationOrFail("result") + val step = findUniqueDeclarationOrFail("referencesToCallableTypeResults") + val classForResultMemberAccess = findUniqueDeclarationOrFail("ClassForResultMemberAccess") + val result = classForResultMemberAccess.findUniqueDeclarationOrFail("result") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[3].declaration @@ -2037,13 +2037,13 @@ class ScopingTest { @Test fun `should resolve result for callable type with one result with matching enum variant`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToCallableTypeResults") + val step = findUniqueDeclarationOrFail("referencesToCallableTypeResults") val callableWithOneResultWithIdenticalEnumVariant = - step.findUniqueDeclarationOrFail("callableWithOneResultWithIdenticalEnumVariant") + step.findUniqueDeclarationOrFail("callableWithOneResultWithIdenticalEnumVariant") val result = - callableWithOneResultWithIdenticalEnumVariant.findUniqueDeclarationOrFail("result") + callableWithOneResultWithIdenticalEnumVariant.findUniqueDeclarationOrFail("result") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[5].declaration @@ -2053,10 +2053,10 @@ class ScopingTest { @Test fun `should resolve result of callable type with multiple results`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToCallableTypeResults") - val result1 = step.findUniqueDeclarationOrFail("result1") + val step = findUniqueDeclarationOrFail("referencesToCallableTypeResults") + val result1 = step.findUniqueDeclarationOrFail("result1") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(8) val declaration = references[7].declaration @@ -2067,11 +2067,11 @@ class ScopingTest { @Test fun `should resolve result of function with one result without matching member`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToFunctionResults") + val step = findUniqueDeclarationOrFail("referencesToFunctionResults") val globalFunctionResultInSameFile = - findUniqueDeclarationOrFail("globalFunctionResultInSameFile") + findUniqueDeclarationOrFail("globalFunctionResultInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[1].declaration @@ -2082,11 +2082,11 @@ class ScopingTest { @Test fun `should resolve member for function with one result with matching member`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToFunctionResults") - val classForResultMemberAccess = findUniqueDeclarationOrFail("ClassForResultMemberAccess") - val result = classForResultMemberAccess.findUniqueDeclarationOrFail("result") + val step = findUniqueDeclarationOrFail("referencesToFunctionResults") + val classForResultMemberAccess = findUniqueDeclarationOrFail("ClassForResultMemberAccess") + val result = classForResultMemberAccess.findUniqueDeclarationOrFail("result") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[3].declaration @@ -2096,12 +2096,12 @@ class ScopingTest { @Test fun `should resolve result of function with multiple results`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToFunctionResults") + val step = findUniqueDeclarationOrFail("referencesToFunctionResults") val globalFunctionWithTwoResults = - findUniqueDeclarationOrFail("globalFunctionWithTwoResults") - val result1 = globalFunctionWithTwoResults.findUniqueDeclarationOrFail("result1") + findUniqueDeclarationOrFail("globalFunctionWithTwoResults") + val result1 = globalFunctionWithTwoResults.findUniqueDeclarationOrFail("result1") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[5].declaration @@ -2111,10 +2111,10 @@ class ScopingTest { @Test fun `should resolve result of lambda with one result without matching member`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToLambdaResults") - val singleResult = step.findUniqueDeclarationOrFail("singleResult") + val step = findUniqueDeclarationOrFail("referencesToLambdaResults") + val singleResult = step.findUniqueDeclarationOrFail("singleResult") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(7) val declaration = references[2].declaration @@ -2125,11 +2125,11 @@ class ScopingTest { @Test fun `should resolve member for lambda with one result with matching member`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToLambdaResults") - val classForResultMemberAccess = findUniqueDeclarationOrFail("ClassForResultMemberAccess") - val result = classForResultMemberAccess.findUniqueDeclarationOrFail("result") + val step = findUniqueDeclarationOrFail("referencesToLambdaResults") + val classForResultMemberAccess = findUniqueDeclarationOrFail("ClassForResultMemberAccess") + val result = classForResultMemberAccess.findUniqueDeclarationOrFail("result") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(7) val declaration = references[4].declaration @@ -2139,10 +2139,10 @@ class ScopingTest { @Test fun `should resolve result of lambda with multiple results`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToLambdaResults") - val result1 = step.findUniqueDeclarationOrFail("result1") + val step = findUniqueDeclarationOrFail("referencesToLambdaResults") + val result1 = step.findUniqueDeclarationOrFail("result1") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(7) val declaration = references[6].declaration @@ -2153,10 +2153,10 @@ class ScopingTest { @Test fun `should resolve result of step with one result without matching member`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToStepResults") - val stepResultInSameFile = findUniqueDeclarationOrFail("stepResultInSameFile") + val step = findUniqueDeclarationOrFail("referencesToStepResults") + val stepResultInSameFile = findUniqueDeclarationOrFail("stepResultInSameFile") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[1].declaration @@ -2167,11 +2167,11 @@ class ScopingTest { @Test fun `should resolve member for step with one result with matching member`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToStepResults") - val classForResultMemberAccess = findUniqueDeclarationOrFail("ClassForResultMemberAccess") - val result = classForResultMemberAccess.findUniqueDeclarationOrFail("result") + val step = findUniqueDeclarationOrFail("referencesToStepResults") + val classForResultMemberAccess = findUniqueDeclarationOrFail("ClassForResultMemberAccess") + val result = classForResultMemberAccess.findUniqueDeclarationOrFail("result") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[3].declaration @@ -2181,12 +2181,12 @@ class ScopingTest { @Test fun `should resolve result of step with multiple results`() = withResource(REFERENCE) { - val step = findUniqueDeclarationOrFail("referencesToStepResults") + val step = findUniqueDeclarationOrFail("referencesToStepResults") val stepInSameFileWithTwoResults = - findUniqueDeclarationOrFail("stepWithTwoResults") - val result1 = stepInSameFileWithTwoResults.findUniqueDeclarationOrFail("result1") + findUniqueDeclarationOrFail("stepWithTwoResults") + val result1 = stepInSameFileWithTwoResults.findUniqueDeclarationOrFail("result1") - val references = step.descendants().toList() + val references = step.descendants().toList() references.shouldHaveSize(6) val declaration = references[5].declaration @@ -2202,11 +2202,11 @@ class ScopingTest { @Test fun `should resolve type parameter in used class in same file`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) val typeParameterInSameFile = - findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_CLASS_IN_SAME_FILE") + findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_CLASS_IN_SAME_FILE") val referencedTypeParameter = typeArguments[0].typeParameter referencedTypeParameter.shouldBeResolved() @@ -2216,11 +2216,11 @@ class ScopingTest { @Test fun `should resolve type parameter in used enum variant in same file`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) val typeParameterInSameFile = - findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_ENUM_VARIANT_IN_SAME_FILE") + findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_ENUM_VARIANT_IN_SAME_FILE") val referencedTypeParameter = typeArguments[1].typeParameter referencedTypeParameter.shouldBeResolved() @@ -2230,11 +2230,11 @@ class ScopingTest { @Test fun `should resolve type parameter in used function in same file`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) val typeParameterInSameFile = - findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_FUNCTION_IN_SAME_FILE") + findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_FUNCTION_IN_SAME_FILE") val referencedTypeParameter = typeArguments[2].typeParameter referencedTypeParameter.shouldBeResolved() @@ -2244,7 +2244,7 @@ class ScopingTest { @Test fun `should resolve type parameter in used declaration in same package`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) val referencedTypeParameter = typeArguments[3].typeParameter @@ -2255,7 +2255,7 @@ class ScopingTest { @Test fun `should resolve type parameter in used declaration that is imported and in another package`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) val referencedTypeParameter = typeArguments[4].typeParameter @@ -2266,7 +2266,7 @@ class ScopingTest { @Test fun `should not resolve type parameter in used declaration that is not imported and in another package`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) typeArguments[5].typeParameter.shouldNotBeResolved() } @@ -2274,7 +2274,7 @@ class ScopingTest { @Test fun `should not resolve type parameter in declaration other than used one in same package`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) typeArguments[6].typeParameter.shouldNotBeResolved() } @@ -2282,7 +2282,7 @@ class ScopingTest { @Test fun `should not resolve type parameter in declaration other than used one that is imported and in another package`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) typeArguments[7].typeParameter.shouldNotBeResolved() } @@ -2290,21 +2290,21 @@ class ScopingTest { @Test fun `should not resolve type parameter in declaration other than used one that is not imported and in another package`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) typeArguments[8].typeParameter.shouldNotBeResolved() } @Test fun `should not resolve unknown declaration`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) typeArguments[9].typeParameter.shouldNotBeResolved() } @Test fun `should not resolve something that is not a type parameter`() = withResource(TYPE_ARGUMENT) { - val typeArguments = this.descendants().toList() + val typeArguments = this.descendants().toList() typeArguments.shouldHaveSize(11) typeArguments[10].typeParameter.shouldNotBeResolved() } @@ -2315,12 +2315,12 @@ class ScopingTest { @Test fun `should resolve type parameter in same class`() = withResource(TYPE_PARAMETER_CONSTRAINT) { - val testClass = findUniqueDeclarationOrFail("TestClass") - val typeParameterConstraintsGoal = testClass.descendants().toList() + val testClass = findUniqueDeclarationOrFail("TestClass") + val typeParameterConstraintsGoal = testClass.descendants().toList() typeParameterConstraintsGoal.shouldHaveSize(1) val typeParameterInSameDeclaration = - findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_SAME_CLASS") + findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_SAME_CLASS") val referencedTypeParameter = typeParameterConstraintsGoal[0].leftOperand referencedTypeParameter.shouldBeResolved() @@ -2329,12 +2329,12 @@ class ScopingTest { @Test fun `should resolve type parameter in same enum variant`() = withResource(TYPE_PARAMETER_CONSTRAINT) { - val testEnumVariant = findUniqueDeclarationOrFail("TestEnumVariant") - val typeParameterConstraintsGoal = testEnumVariant.descendants().toList() + val testEnumVariant = findUniqueDeclarationOrFail("TestEnumVariant") + val typeParameterConstraintsGoal = testEnumVariant.descendants().toList() typeParameterConstraintsGoal.shouldHaveSize(1) val typeParameterInSameDeclaration = - findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_SAME_ENUM_VARIANT") + findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_SAME_ENUM_VARIANT") val referencedTypeParameter = typeParameterConstraintsGoal[0].leftOperand referencedTypeParameter.shouldBeResolved() @@ -2343,12 +2343,12 @@ class ScopingTest { @Test fun `should resolve type parameter in same function`() = withResource(TYPE_PARAMETER_CONSTRAINT) { - val testFunction = findUniqueDeclarationOrFail("testFunction") - val typeParameterConstraintsGoal = testFunction.descendants().toList() + val testFunction = findUniqueDeclarationOrFail("testFunction") + val typeParameterConstraintsGoal = testFunction.descendants().toList() typeParameterConstraintsGoal.shouldHaveSize(7) val typeParameterInSameDeclaration = - findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_SAME_FUNCTION") + findUniqueDeclarationOrFail("TYPE_PARAMETER_IN_SAME_FUNCTION") val referencedTypeParameter = typeParameterConstraintsGoal[0].leftOperand referencedTypeParameter.shouldBeResolved() @@ -2359,8 +2359,8 @@ class ScopingTest { fun `should not resolve type parameter in another declaration in same file`() = withResource( TYPE_PARAMETER_CONSTRAINT ) { - val testFunction = findUniqueDeclarationOrFail("testFunction") - val typeParameterConstraintsGoal = testFunction.descendants().toList() + val testFunction = findUniqueDeclarationOrFail("testFunction") + val typeParameterConstraintsGoal = testFunction.descendants().toList() typeParameterConstraintsGoal.shouldHaveSize(7) typeParameterConstraintsGoal[1].leftOperand.shouldNotBeResolved() } @@ -2368,8 +2368,8 @@ class ScopingTest { @Test fun `should not resolve type parameter in another declaration in same package`() = withResource(TYPE_PARAMETER_CONSTRAINT) { - val testFunction = findUniqueDeclarationOrFail("testFunction") - val typeParameterConstraintsGoal = testFunction.descendants().toList() + val testFunction = findUniqueDeclarationOrFail("testFunction") + val typeParameterConstraintsGoal = testFunction.descendants().toList() typeParameterConstraintsGoal.shouldHaveSize(7) typeParameterConstraintsGoal[2].leftOperand.shouldNotBeResolved() } @@ -2377,8 +2377,8 @@ class ScopingTest { @Test fun `should not resolve type parameter in another declaration that is imported and in another package`() = withResource(TYPE_PARAMETER_CONSTRAINT) { - val testFunction = findUniqueDeclarationOrFail("testFunction") - val typeParameterConstraintsGoal = testFunction.descendants().toList() + val testFunction = findUniqueDeclarationOrFail("testFunction") + val typeParameterConstraintsGoal = testFunction.descendants().toList() typeParameterConstraintsGoal.shouldHaveSize(7) typeParameterConstraintsGoal[3].leftOperand.shouldNotBeResolved() } @@ -2386,24 +2386,24 @@ class ScopingTest { @Test fun `should not resolve type parameter in another declaration that is not imported and in another package`() = withResource(TYPE_PARAMETER_CONSTRAINT) { - val testFunction = findUniqueDeclarationOrFail("testFunction") - val typeParameterConstraintsGoal = testFunction.descendants().toList() + val testFunction = findUniqueDeclarationOrFail("testFunction") + val typeParameterConstraintsGoal = testFunction.descendants().toList() typeParameterConstraintsGoal.shouldHaveSize(7) typeParameterConstraintsGoal[4].leftOperand.shouldNotBeResolved() } @Test fun `should not resolve unknown declaration`() = withResource(TYPE_PARAMETER_CONSTRAINT) { - val testFunction = findUniqueDeclarationOrFail("testFunction") - val typeParameterConstraintsGoal = testFunction.descendants().toList() + val testFunction = findUniqueDeclarationOrFail("testFunction") + val typeParameterConstraintsGoal = testFunction.descendants().toList() typeParameterConstraintsGoal.shouldHaveSize(7) typeParameterConstraintsGoal[5].leftOperand.shouldNotBeResolved() } @Test fun `should not something that is not a type parameter`() = withResource(TYPE_PARAMETER_CONSTRAINT) { - val testFunction = findUniqueDeclarationOrFail("testFunction") - val typeParameterConstraintsGoal = testFunction.descendants().toList() + val testFunction = findUniqueDeclarationOrFail("testFunction") + val typeParameterConstraintsGoal = testFunction.descendants().toList() typeParameterConstraintsGoal.shouldHaveSize(7) typeParameterConstraintsGoal[6].leftOperand.shouldNotBeResolved() } @@ -2414,10 +2414,10 @@ class ScopingTest { @Test fun `should resolve result in same step`() = withResource(YIELD) { - val yields = this.descendants().toList() + val yields = this.descendants().toList() yields.shouldHaveSize(7) - val resultsInSameFunction = findUniqueDeclarationOrFail("resultInSameStep") + val resultsInSameFunction = findUniqueDeclarationOrFail("resultInSameStep") val referencedResult = yields[0].result referencedResult.shouldBeResolved() @@ -2426,14 +2426,14 @@ class ScopingTest { @Test fun `should not resolve result in another step in same file`() = withResource(YIELD) { - val yields = this.descendants().toList() + val yields = this.descendants().toList() yields.shouldHaveSize(7) yields[1].result.shouldNotBeResolved() } @Test fun `should not resolve result in another step in same package`() = withResource(YIELD) { - val yields = this.descendants().toList() + val yields = this.descendants().toList() yields.shouldHaveSize(7) yields[2].result.shouldNotBeResolved() } @@ -2441,7 +2441,7 @@ class ScopingTest { @Test fun `should not resolve result in another step that is imported and in another package`() = withResource(YIELD) { - val yields = this.descendants().toList() + val yields = this.descendants().toList() yields.shouldHaveSize(7) yields[3].result.shouldNotBeResolved() } @@ -2449,21 +2449,21 @@ class ScopingTest { @Test fun `should not resolve result in another step that is not imported and in another package`() = withResource(YIELD) { - val yields = this.descendants().toList() + val yields = this.descendants().toList() yields.shouldHaveSize(7) yields[4].result.shouldNotBeResolved() } @Test fun `should not resolve unknown declaration`() = withResource(YIELD) { - val yields = this.descendants().toList() + val yields = this.descendants().toList() yields.shouldHaveSize(7) yields[5].result.shouldNotBeResolved() } @Test fun `should not something that is not a result`() = withResource(YIELD) { - val yields = this.descendants().toList() + val yields = this.descendants().toList() yields.shouldHaveSize(7) yields[6].result.shouldNotBeResolved() } @@ -2471,15 +2471,15 @@ class ScopingTest { private fun withResource( resourceName: ResourceName, - lambda: SmlCompilationUnit.() -> Unit + lambda: SdsCompilationUnit.() -> Unit ) { val compilationUnit = parseHelper.parseResource( - "scoping/$resourceName/main.${SmlFileExtension.Test}", + "scoping/$resourceName/main.${SdsFileExtension.Test}", listOf( - "scoping/$resourceName/externalsInOtherPackage.${SmlFileExtension.Test}", - "scoping/$resourceName/externalsInSamePackage.${SmlFileExtension.Test}", + "scoping/$resourceName/externalsInOtherPackage.${SdsFileExtension.Test}", + "scoping/$resourceName/externalsInSamePackage.${SdsFileExtension.Test}", ) ) ?: throw IllegalArgumentException("File is not a compilation unit.") diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/serializer/SerializerExtensionsTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/serializer/SerializerExtensionsTest.kt similarity index 79% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/serializer/SerializerExtensionsTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/serializer/SerializerExtensionsTest.kt index 0a3467910..3c45a6855 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/serializer/SerializerExtensionsTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/serializer/SerializerExtensionsTest.kt @@ -1,14 +1,14 @@ @file:Suppress("ClassName") -package de.unibonn.simpleml.serializer +package com.larsreimann.safeds.serializer import com.google.inject.Inject -import de.unibonn.simpleml.emf.createSmlCompilationUnit -import de.unibonn.simpleml.simpleML.SimpleMLPackage -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.emf.createSdsCompilationUnit +import com.larsreimann.safeds.safeDS.SafeDSPackage +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldNotContain @@ -21,13 +21,13 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class SerializerExtensionsTest { @Inject private lateinit var parseHelper: ParseHelper - private val factory = SimpleMLPackage.eINSTANCE.simpleMLFactory + private val factory = SafeDSPackage.eINSTANCE.safeDSFactory @Nested inner class serializeToFormattedString { @@ -35,7 +35,7 @@ class SerializerExtensionsTest { @Test fun `should serialize and format a complete EMF model created from a resource`() { val compilationUnit = - parseHelper.parseResource("serialization/extensionsTest.smltest") + parseHelper.parseResource("serialization/extensionsTest.sdstest") compilationUnit.shouldNotBeNull() val result = compilationUnit.serializeToFormattedString() @@ -54,10 +54,10 @@ class SerializerExtensionsTest { @Test fun `should serialize and format a subtree of the EMF model from a resource`() { val compilationUnit = - parseHelper.parseResource("serialization/extensionsTest.smltest") + parseHelper.parseResource("serialization/extensionsTest.sdstest") compilationUnit.shouldNotBeNull() - val `class` = compilationUnit.findUniqueDeclarationOrFail("MyClass") + val `class` = compilationUnit.findUniqueDeclarationOrFail("MyClass") val result = `class`.serializeToFormattedString() result.shouldBeInstanceOf() @@ -72,10 +72,10 @@ class SerializerExtensionsTest { @Test fun `should use line feed as line separator`() { val compilationUnit = - parseHelper.parseResource("serialization/extensionsTest.smltest") + parseHelper.parseResource("serialization/extensionsTest.sdstest") compilationUnit.shouldNotBeNull() - val `class` = compilationUnit.findUniqueDeclarationOrFail("MyClass") + val `class` = compilationUnit.findUniqueDeclarationOrFail("MyClass") val result = `class`.serializeToFormattedString() result.shouldBeInstanceOf() @@ -88,7 +88,7 @@ class SerializerExtensionsTest { @Test fun `should not serialize EObjects without Resource`() { - val compilationUnit = createSmlCompilationUnit(packageName = "test") + val compilationUnit = createSdsCompilationUnit(packageName = "test") val result = compilationUnit.serializeToFormattedString() result.shouldBeInstanceOf() @@ -96,9 +96,9 @@ class SerializerExtensionsTest { @Test fun `should not serialize wrong EMF models`() { - val compilationUnit = factory.createSmlCompilationUnit().apply { - // Missing SmlAnnotationCallHolder - members += factory.createSmlClass().apply { + val compilationUnit = factory.createSdsCompilationUnit().apply { + // Missing SdsAnnotationCallHolder + members += factory.createSdsClass().apply { name = "tests" } } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/RecursionTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/RecursionTest.kt similarity index 71% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/RecursionTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/RecursionTest.kt index 18e770478..952949cdb 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/RecursionTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/RecursionTest.kt @@ -1,14 +1,14 @@ -package de.unibonn.simpleml.staticAnalysis +package com.larsreimann.safeds.staticAnalysis import com.google.inject.Inject -import de.unibonn.simpleml.emf.annotationCallsOrEmpty -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.emf.annotationCallsOrEmpty +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail import io.kotest.assertions.asClue import io.kotest.matchers.booleans.shouldNotBeTrue import io.kotest.matchers.nulls.shouldNotBeNull @@ -25,18 +25,18 @@ import org.junit.jupiter.params.provider.MethodSource @TestInstance(TestInstance.Lifecycle.PER_CLASS) @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class RecursionTest { @Inject private lateinit var parseHelper: ParseHelper - private lateinit var compilationUnit: SmlCompilationUnit + private lateinit var compilationUnit: SdsCompilationUnit @BeforeAll fun reset() { compilationUnit = parseHelper - .parseResource("staticAnalysis/recursion.smltest") + .parseResource("staticAnalysis/recursion.sdstest") .shouldNotBeNull() } @@ -47,10 +47,10 @@ class RecursionTest { callsShouldBeRecursive: Boolean ) { val step = compilationUnit - .findUniqueDeclarationOrFail(stepName) + .findUniqueDeclarationOrFail(stepName) .shouldNotBeNull() - step.descendants().toList().forEach { call -> + step.descendants().toList().forEach { call -> NodeModelUtils.getNode(call).text.trim().asClue { call.isRecursive() shouldBe callsShouldBeRecursive } @@ -58,7 +58,7 @@ class RecursionTest { } private fun stepSource(): List { - return compilationUnit.descendants() + return compilationUnit.descendants() .mapNotNull { step -> val callsShouldBeRecursive = step.annotationCallsOrEmpty().any { it.annotation.name == "CallsShouldBeRecursive" diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/SideEffectsTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/SideEffectsTest.kt similarity index 71% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/SideEffectsTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/SideEffectsTest.kt index 2863f039b..81a3901ef 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/SideEffectsTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/SideEffectsTest.kt @@ -1,14 +1,14 @@ -package de.unibonn.simpleml.staticAnalysis +package com.larsreimann.safeds.staticAnalysis import com.google.inject.Inject -import de.unibonn.simpleml.emf.annotationCallsOrEmpty -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.emf.annotationCallsOrEmpty +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail import io.kotest.assertions.asClue import io.kotest.matchers.booleans.shouldNotBeTrue import io.kotest.matchers.nulls.shouldNotBeNull @@ -25,18 +25,18 @@ import org.junit.jupiter.params.provider.MethodSource @TestInstance(TestInstance.Lifecycle.PER_CLASS) @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class SideEffectsTest { @Inject private lateinit var parseHelper: ParseHelper - private lateinit var compilationUnit: SmlCompilationUnit + private lateinit var compilationUnit: SdsCompilationUnit @BeforeAll fun reset() { compilationUnit = parseHelper - .parseResource("staticAnalysis/sideEffects.smltest") + .parseResource("staticAnalysis/sideEffects.sdstest") .shouldNotBeNull() } @@ -47,10 +47,10 @@ class SideEffectsTest { callsShouldBePure: Boolean ) { val step = compilationUnit - .findUniqueDeclarationOrFail(stepName) + .findUniqueDeclarationOrFail(stepName) .shouldNotBeNull() - step.descendants().toList().forEach { call -> + step.descendants().toList().forEach { call -> NodeModelUtils.getNode(call).text.trim().asClue { call.expressionHasNoSideEffects() shouldBe callsShouldBePure } @@ -58,7 +58,7 @@ class SideEffectsTest { } private fun stepSource(): List { - return compilationUnit.descendants() + return compilationUnit.descendants() .mapNotNull { step -> val shouldHaveNoSideEffects = step.annotationCallsOrEmpty().any { it.annotation.name == "ShouldHaveNoSideEffects" diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ArgumentToParameterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ArgumentToParameterTest.kt similarity index 55% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ArgumentToParameterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ArgumentToParameterTest.kt index 38368fc73..54e4a2f71 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ArgumentToParameterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ArgumentToParameterTest.kt @@ -1,21 +1,21 @@ -package de.unibonn.simpleml.staticAnalysis.linking - -import de.unibonn.simpleml.emf.createSmlAnnotation -import de.unibonn.simpleml.emf.createSmlAnnotationCall -import de.unibonn.simpleml.emf.createSmlArgument -import de.unibonn.simpleml.emf.createSmlArgumentList -import de.unibonn.simpleml.emf.createSmlCall -import de.unibonn.simpleml.emf.createSmlFunction -import de.unibonn.simpleml.emf.createSmlNull -import de.unibonn.simpleml.emf.createSmlParameter -import de.unibonn.simpleml.emf.createSmlParameterList -import de.unibonn.simpleml.emf.createSmlReference -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlParameter +package com.larsreimann.safeds.staticAnalysis.linking + +import com.larsreimann.safeds.emf.createSdsAnnotation +import com.larsreimann.safeds.emf.createSdsAnnotationCall +import com.larsreimann.safeds.emf.createSdsArgument +import com.larsreimann.safeds.emf.createSdsArgumentList +import com.larsreimann.safeds.emf.createSdsCall +import com.larsreimann.safeds.emf.createSdsFunction +import com.larsreimann.safeds.emf.createSdsNull +import com.larsreimann.safeds.emf.createSdsParameter +import com.larsreimann.safeds.emf.createSdsParameterList +import com.larsreimann.safeds.emf.createSdsReference +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsAnnotationCall +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsParameter import io.kotest.matchers.collections.shouldContainExactly import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.shouldBe @@ -24,41 +24,41 @@ import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test class ArgumentToParameterTest { - private lateinit var normalParameter: SmlParameter - private lateinit var variadicParameter: SmlParameter + private lateinit var normalParameter: SdsParameter + private lateinit var variadicParameter: SdsParameter - private lateinit var positionalArgument: SmlArgument - private lateinit var namedArgument: SmlArgument + private lateinit var positionalArgument: SdsArgument + private lateinit var namedArgument: SdsArgument - private lateinit var function: SmlFunction - private lateinit var call: SmlCall + private lateinit var function: SdsFunction + private lateinit var call: SdsCall - private lateinit var annotation: SmlAnnotation - private lateinit var annotationCall: SmlAnnotationCall + private lateinit var annotation: SdsAnnotation + private lateinit var annotationCall: SdsAnnotationCall @BeforeEach fun reset() { - normalParameter = createSmlParameter(name = "normalParameter") - variadicParameter = createSmlParameter( + normalParameter = createSdsParameter(name = "normalParameter") + variadicParameter = createSdsParameter( name = "variadicParameter", isVariadic = true ) - positionalArgument = createSmlArgument( - value = createSmlNull() + positionalArgument = createSdsArgument( + value = createSdsNull() ) - namedArgument = createSmlArgument( - value = createSmlNull(), + namedArgument = createSdsArgument( + value = createSdsNull(), parameter = normalParameter, ) - function = createSmlFunction(name = "f") - call = createSmlCall( - createSmlReference(function) + function = createSdsFunction(name = "f") + call = createSdsCall( + createSdsReference(function) ) - annotation = createSmlAnnotation(name = "A") - annotationCall = createSmlAnnotationCall(annotation) + annotation = createSdsAnnotation(name = "A") + annotationCall = createSdsAnnotationCall(annotation) } @Nested @@ -66,32 +66,32 @@ class ArgumentToParameterTest { @Test fun `should resolve argument (positional, function call, valid index)`() { - function.parameterList = createSmlParameterList(listOf(normalParameter)) - call.argumentList = createSmlArgumentList(listOf(positionalArgument)) + function.parameterList = createSdsParameterList(listOf(normalParameter)) + call.argumentList = createSdsArgumentList(listOf(positionalArgument)) positionalArgument.parameterOrNull() shouldBe normalParameter } @Test fun `should resolve argument (named, function call, valid index)`() { - function.parameterList = createSmlParameterList(listOf(normalParameter)) - call.argumentList = createSmlArgumentList(listOf(namedArgument)) + function.parameterList = createSdsParameterList(listOf(normalParameter)) + call.argumentList = createSdsArgumentList(listOf(namedArgument)) namedArgument.parameterOrNull() shouldBe normalParameter } @Test fun `should resolve argument (positional, annotation call, valid index)`() { - annotation.parameterList = createSmlParameterList(listOf(normalParameter)) - annotationCall.argumentList = createSmlArgumentList(listOf(positionalArgument)) + annotation.parameterList = createSdsParameterList(listOf(normalParameter)) + annotationCall.argumentList = createSdsArgumentList(listOf(positionalArgument)) positionalArgument.parameterOrNull() shouldBe normalParameter } @Test fun `should resolve argument (named, annotation call, valid index)`() { - annotation.parameterList = createSmlParameterList(listOf(normalParameter)) - annotationCall.argumentList = createSmlArgumentList(listOf(namedArgument)) + annotation.parameterList = createSdsParameterList(listOf(normalParameter)) + annotationCall.argumentList = createSdsArgumentList(listOf(namedArgument)) namedArgument.parameterOrNull() shouldBe normalParameter } @@ -99,8 +99,8 @@ class ArgumentToParameterTest { @Test fun `should resolve arguments (function call, variadic)`() { namedArgument.parameter = variadicParameter - function.parameterList = createSmlParameterList(listOf(variadicParameter)) - call.argumentList = createSmlArgumentList(listOf(positionalArgument, namedArgument)) + function.parameterList = createSdsParameterList(listOf(variadicParameter)) + call.argumentList = createSdsArgumentList(listOf(positionalArgument, namedArgument)) namedArgument.parameterOrNull() shouldBe variadicParameter positionalArgument.parameterOrNull() shouldBe variadicParameter @@ -109,8 +109,8 @@ class ArgumentToParameterTest { @Test fun `should resolve arguments (annotation call, variadic)`() { namedArgument.parameter = variadicParameter - annotation.parameterList = createSmlParameterList(listOf(variadicParameter)) - annotationCall.argumentList = createSmlArgumentList(listOf(positionalArgument, namedArgument)) + annotation.parameterList = createSdsParameterList(listOf(variadicParameter)) + annotationCall.argumentList = createSdsArgumentList(listOf(positionalArgument, namedArgument)) namedArgument.parameterOrNull() shouldBe variadicParameter positionalArgument.parameterOrNull() shouldBe variadicParameter @@ -118,37 +118,37 @@ class ArgumentToParameterTest { @Test fun `should return null if named arguments precede positional arguments (function call)`() { - function.parameterList = createSmlParameterList(listOf(normalParameter)) - call.argumentList = createSmlArgumentList(listOf(namedArgument, positionalArgument)) + function.parameterList = createSdsParameterList(listOf(normalParameter)) + call.argumentList = createSdsArgumentList(listOf(namedArgument, positionalArgument)) positionalArgument.parameterOrNull().shouldBeNull() } @Test fun `should return null if named arguments precede positional arguments (annotation call)`() { - annotation.parameterList = createSmlParameterList(listOf(normalParameter)) - annotationCall.argumentList = createSmlArgumentList(listOf(namedArgument, positionalArgument)) + annotation.parameterList = createSdsParameterList(listOf(normalParameter)) + annotationCall.argumentList = createSdsArgumentList(listOf(namedArgument, positionalArgument)) positionalArgument.parameterOrNull().shouldBeNull() } @Test fun `should return null if no matching parameter exists (function call)`() { - call.argumentList = createSmlArgumentList(listOf(positionalArgument)) + call.argumentList = createSdsArgumentList(listOf(positionalArgument)) positionalArgument.parameterOrNull().shouldBeNull() } @Test fun `should return null if no matching parameter exists (annotation call)`() { - annotationCall.argumentList = createSmlArgumentList(listOf(positionalArgument)) + annotationCall.argumentList = createSdsArgumentList(listOf(positionalArgument)) positionalArgument.parameterOrNull().shouldBeNull() } @Test fun `should return null if argument list cannot be matched to parameter list`() { - createSmlArgumentList(listOf(positionalArgument)) + createSdsArgumentList(listOf(positionalArgument)) positionalArgument.parameterOrNull().shouldBeNull() } @@ -164,23 +164,23 @@ class ArgumentToParameterTest { @Test fun `should resolve argument list of function call`() { - function.parameterList = createSmlParameterList(listOf(normalParameter, variadicParameter)) - call.argumentList = createSmlArgumentList(emptyList()) + function.parameterList = createSdsParameterList(listOf(normalParameter, variadicParameter)) + call.argumentList = createSdsArgumentList(emptyList()) call.argumentList.parametersOrNull().shouldContainExactly(normalParameter, variadicParameter) } @Test fun `should resolve argument list of annotation call`() { - annotation.parameterList = createSmlParameterList(listOf(normalParameter, variadicParameter)) - annotationCall.argumentList = createSmlArgumentList(emptyList()) + annotation.parameterList = createSdsParameterList(listOf(normalParameter, variadicParameter)) + annotationCall.argumentList = createSdsArgumentList(emptyList()) annotationCall.argumentList.parametersOrNull().shouldContainExactly(normalParameter, variadicParameter) } @Test fun `should return null if the argument list cannot be resolved`() { - val argumentList = createSmlArgumentList(emptyList()) + val argumentList = createSdsArgumentList(emptyList()) argumentList.parametersOrNull().shouldBeNull() } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ResultToYieldTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ResultToYieldTest.kt similarity index 52% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ResultToYieldTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ResultToYieldTest.kt index 2959d7573..9ebf1be85 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ResultToYieldTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/linking/ResultToYieldTest.kt @@ -1,16 +1,16 @@ -package de.unibonn.simpleml.staticAnalysis.linking - -import de.unibonn.simpleml.emf.createSmlAssignment -import de.unibonn.simpleml.emf.createSmlNull -import de.unibonn.simpleml.emf.createSmlResult -import de.unibonn.simpleml.emf.createSmlResultList -import de.unibonn.simpleml.emf.createSmlStep -import de.unibonn.simpleml.emf.createSmlWildcard -import de.unibonn.simpleml.emf.createSmlYield -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlYield +package com.larsreimann.safeds.staticAnalysis.linking + +import com.larsreimann.safeds.emf.createSdsAssignment +import com.larsreimann.safeds.emf.createSdsNull +import com.larsreimann.safeds.emf.createSdsResult +import com.larsreimann.safeds.emf.createSdsResultList +import com.larsreimann.safeds.emf.createSdsStep +import com.larsreimann.safeds.emf.createSdsWildcard +import com.larsreimann.safeds.emf.createSdsYield +import com.larsreimann.safeds.safeDS.SdsAssignment +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsYield import io.kotest.matchers.collections.shouldBeEmpty import io.kotest.matchers.collections.shouldContainExactly import io.kotest.matchers.nulls.shouldBeNull @@ -20,30 +20,30 @@ import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test class ResultToYieldTest { - private lateinit var firstResult: SmlResult - private lateinit var secondResult: SmlResult + private lateinit var firstResult: SdsResult + private lateinit var secondResult: SdsResult - private lateinit var yieldOfFirstResult1: SmlYield - private lateinit var yieldOfFirstResult2: SmlYield - private lateinit var yieldOfSecondResult: SmlYield + private lateinit var yieldOfFirstResult1: SdsYield + private lateinit var yieldOfFirstResult2: SdsYield + private lateinit var yieldOfSecondResult: SdsYield - private lateinit var assignment: SmlAssignment - private lateinit var step: SmlStep + private lateinit var assignment: SdsAssignment + private lateinit var step: SdsStep @BeforeEach fun reset() { - firstResult = createSmlResult(name = "firstResult") - secondResult = createSmlResult(name = "secondResult") + firstResult = createSdsResult(name = "firstResult") + secondResult = createSdsResult(name = "secondResult") - yieldOfFirstResult1 = createSmlYield(firstResult) - yieldOfFirstResult2 = createSmlYield(firstResult) - yieldOfSecondResult = createSmlYield(secondResult) + yieldOfFirstResult1 = createSdsYield(firstResult) + yieldOfFirstResult2 = createSdsYield(firstResult) + yieldOfSecondResult = createSdsYield(secondResult) - assignment = createSmlAssignment( - assignees = listOf(createSmlWildcard()), - expression = createSmlNull() + assignment = createSdsAssignment( + assignees = listOf(createSdsWildcard()), + expression = createSdsNull() ) - step = createSmlStep( + step = createSdsStep( name = "s", statements = listOf(assignment) ) @@ -54,7 +54,7 @@ class ResultToYieldTest { @Test fun `should return the unique corresponding yield`() { - step.resultList = createSmlResultList(listOf(firstResult)) + step.resultList = createSdsResultList(listOf(firstResult)) assignment.assigneeList.assignees += yieldOfFirstResult1 firstResult.uniqueYieldOrNull() shouldBe yieldOfFirstResult1 @@ -62,14 +62,14 @@ class ResultToYieldTest { @Test fun `should return null if no corresponding yields exist`() { - step.resultList = createSmlResultList(listOf(firstResult)) + step.resultList = createSdsResultList(listOf(firstResult)) firstResult.uniqueYieldOrNull().shouldBeNull() } @Test fun `should return null if multiple corresponding yields exist`() { - step.resultList = createSmlResultList(listOf(firstResult)) + step.resultList = createSdsResultList(listOf(firstResult)) assignment.assigneeList.assignees += listOf(yieldOfFirstResult1, yieldOfFirstResult2) firstResult.uniqueYieldOrNull().shouldBeNull() @@ -81,7 +81,7 @@ class ResultToYieldTest { @Test fun `should return all corresponding yields in the body of the step`() { - step.resultList = createSmlResultList(listOf(firstResult, secondResult)) + step.resultList = createSdsResultList(listOf(firstResult, secondResult)) assignment.assigneeList.assignees += listOf(yieldOfFirstResult1, yieldOfFirstResult2, yieldOfSecondResult) firstResult.yieldsOrEmpty().shouldContainExactly(yieldOfFirstResult1, yieldOfFirstResult2) @@ -94,7 +94,7 @@ class ResultToYieldTest { @Test fun `should return an empty list if the result is not in a step`() { - createSmlResultList(listOf(firstResult)) + createSdsResultList(listOf(firstResult)) firstResult.yieldsOrEmpty().shouldBeEmpty() } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/linking/TypeArgumentToTypeParameterTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/linking/TypeArgumentToTypeParameterTest.kt similarity index 54% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/linking/TypeArgumentToTypeParameterTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/linking/TypeArgumentToTypeParameterTest.kt index c8bee4e96..8a105d41e 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/linking/TypeArgumentToTypeParameterTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/linking/TypeArgumentToTypeParameterTest.kt @@ -1,21 +1,21 @@ -package de.unibonn.simpleml.staticAnalysis.linking - -import de.unibonn.simpleml.emf.createSmlCall -import de.unibonn.simpleml.emf.createSmlClass -import de.unibonn.simpleml.emf.createSmlFunction -import de.unibonn.simpleml.emf.createSmlNamedType -import de.unibonn.simpleml.emf.createSmlReference -import de.unibonn.simpleml.emf.createSmlStarProjection -import de.unibonn.simpleml.emf.createSmlTypeArgument -import de.unibonn.simpleml.emf.createSmlTypeArgumentList -import de.unibonn.simpleml.emf.createSmlTypeParameter -import de.unibonn.simpleml.emf.createSmlTypeParameterList -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlTypeArgument -import de.unibonn.simpleml.simpleML.SmlTypeParameter +package com.larsreimann.safeds.staticAnalysis.linking + +import com.larsreimann.safeds.emf.createSdsCall +import com.larsreimann.safeds.emf.createSdsClass +import com.larsreimann.safeds.emf.createSdsFunction +import com.larsreimann.safeds.emf.createSdsNamedType +import com.larsreimann.safeds.emf.createSdsReference +import com.larsreimann.safeds.emf.createSdsStarProjection +import com.larsreimann.safeds.emf.createSdsTypeArgument +import com.larsreimann.safeds.emf.createSdsTypeArgumentList +import com.larsreimann.safeds.emf.createSdsTypeParameter +import com.larsreimann.safeds.emf.createSdsTypeParameterList +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsTypeArgument +import com.larsreimann.safeds.safeDS.SdsTypeParameter import io.kotest.matchers.collections.shouldContainExactly import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.shouldBe @@ -24,36 +24,36 @@ import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test class TypeArgumentToTypeParameterTest { - private lateinit var typeParameter: SmlTypeParameter + private lateinit var typeParameter: SdsTypeParameter - private lateinit var positionalTypeArgument: SmlTypeArgument - private lateinit var namedTypeArgument: SmlTypeArgument + private lateinit var positionalTypeArgument: SdsTypeArgument + private lateinit var namedTypeArgument: SdsTypeArgument - private lateinit var function: SmlFunction - private lateinit var call: SmlCall + private lateinit var function: SdsFunction + private lateinit var call: SdsCall - private lateinit var `class`: SmlClass - private lateinit var namedType: SmlNamedType + private lateinit var `class`: SdsClass + private lateinit var namedType: SdsNamedType @BeforeEach fun reset() { - typeParameter = createSmlTypeParameter(name = "T") + typeParameter = createSdsTypeParameter(name = "T") - positionalTypeArgument = createSmlTypeArgument( - value = createSmlStarProjection() + positionalTypeArgument = createSdsTypeArgument( + value = createSdsStarProjection() ) - namedTypeArgument = createSmlTypeArgument( - value = createSmlStarProjection(), + namedTypeArgument = createSdsTypeArgument( + value = createSdsStarProjection(), typeParameter = typeParameter, ) - function = createSmlFunction(name = "f") - call = createSmlCall( - createSmlReference(function) + function = createSdsFunction(name = "f") + call = createSdsCall( + createSdsReference(function) ) - `class` = createSmlClass(name = "C") - namedType = createSmlNamedType(`class`) + `class` = createSdsClass(name = "C") + namedType = createSdsNamedType(`class`) } @Nested @@ -61,69 +61,69 @@ class TypeArgumentToTypeParameterTest { @Test fun `should resolve type argument (positional, call, valid index)`() { - function.typeParameterList = createSmlTypeParameterList(listOf(typeParameter)) - call.typeArgumentList = createSmlTypeArgumentList(listOf(positionalTypeArgument)) + function.typeParameterList = createSdsTypeParameterList(listOf(typeParameter)) + call.typeArgumentList = createSdsTypeArgumentList(listOf(positionalTypeArgument)) positionalTypeArgument.typeParameterOrNull() shouldBe typeParameter } @Test fun `should resolve type argument (named, call, valid index)`() { - function.typeParameterList = createSmlTypeParameterList(listOf(typeParameter)) - call.typeArgumentList = createSmlTypeArgumentList(listOf(namedTypeArgument)) + function.typeParameterList = createSdsTypeParameterList(listOf(typeParameter)) + call.typeArgumentList = createSdsTypeArgumentList(listOf(namedTypeArgument)) namedTypeArgument.typeParameterOrNull() shouldBe typeParameter } @Test fun `should resolve argument (positional, named type, valid index)`() { - `class`.typeParameterList = createSmlTypeParameterList(listOf(typeParameter)) - namedType.typeArgumentList = createSmlTypeArgumentList(listOf(positionalTypeArgument)) + `class`.typeParameterList = createSdsTypeParameterList(listOf(typeParameter)) + namedType.typeArgumentList = createSdsTypeArgumentList(listOf(positionalTypeArgument)) positionalTypeArgument.typeParameterOrNull() shouldBe typeParameter } @Test fun `should resolve argument (named, named type, valid index)`() { - `class`.typeParameterList = createSmlTypeParameterList(listOf(typeParameter)) - namedType.typeArgumentList = createSmlTypeArgumentList(listOf(namedTypeArgument)) + `class`.typeParameterList = createSdsTypeParameterList(listOf(typeParameter)) + namedType.typeArgumentList = createSdsTypeArgumentList(listOf(namedTypeArgument)) namedTypeArgument.typeParameterOrNull() shouldBe typeParameter } @Test fun `should return null if named type arguments precede positional type argument (call)`() { - function.typeParameterList = createSmlTypeParameterList(listOf(typeParameter)) - call.typeArgumentList = createSmlTypeArgumentList(listOf(namedTypeArgument, positionalTypeArgument)) + function.typeParameterList = createSdsTypeParameterList(listOf(typeParameter)) + call.typeArgumentList = createSdsTypeArgumentList(listOf(namedTypeArgument, positionalTypeArgument)) positionalTypeArgument.typeParameterOrNull().shouldBeNull() } @Test fun `should return null if named type arguments precede positional type argument (named type)`() { - `class`.typeParameterList = createSmlTypeParameterList(listOf(typeParameter)) - namedType.typeArgumentList = createSmlTypeArgumentList(listOf(namedTypeArgument, positionalTypeArgument)) + `class`.typeParameterList = createSdsTypeParameterList(listOf(typeParameter)) + namedType.typeArgumentList = createSdsTypeArgumentList(listOf(namedTypeArgument, positionalTypeArgument)) positionalTypeArgument.typeParameterOrNull().shouldBeNull() } @Test fun `should return null if no matching type parameter exists (call)`() { - call.typeArgumentList = createSmlTypeArgumentList(listOf(positionalTypeArgument)) + call.typeArgumentList = createSdsTypeArgumentList(listOf(positionalTypeArgument)) positionalTypeArgument.typeParameterOrNull().shouldBeNull() } @Test fun `should return null if no matching type parameter exists (named type)`() { - namedType.typeArgumentList = createSmlTypeArgumentList(listOf(positionalTypeArgument)) + namedType.typeArgumentList = createSdsTypeArgumentList(listOf(positionalTypeArgument)) positionalTypeArgument.typeParameterOrNull().shouldBeNull() } @Test fun `should return null if type argument list cannot be matched to type parameter list`() { - createSmlTypeArgumentList(listOf(positionalTypeArgument)) + createSdsTypeArgumentList(listOf(positionalTypeArgument)) positionalTypeArgument.typeParameterOrNull().shouldBeNull() } @@ -139,23 +139,23 @@ class TypeArgumentToTypeParameterTest { @Test fun `should resolve type argument list of call`() { - function.typeParameterList = createSmlTypeParameterList(listOf(typeParameter)) - call.typeArgumentList = createSmlTypeArgumentList(listOf(positionalTypeArgument)) + function.typeParameterList = createSdsTypeParameterList(listOf(typeParameter)) + call.typeArgumentList = createSdsTypeArgumentList(listOf(positionalTypeArgument)) call.typeArgumentList.typeParametersOrNull().shouldContainExactly(typeParameter) } @Test fun `should resolve type argument list of annotation call`() { - `class`.typeParameterList = createSmlTypeParameterList(listOf(typeParameter)) - namedType.typeArgumentList = createSmlTypeArgumentList(listOf(positionalTypeArgument)) + `class`.typeParameterList = createSdsTypeParameterList(listOf(typeParameter)) + namedType.typeArgumentList = createSdsTypeArgumentList(listOf(positionalTypeArgument)) namedType.typeArgumentList.typeParametersOrNull().shouldContainExactly(typeParameter) } @Test fun `should return null if the type argument list cannot be resolved`() { - val typeArgumentList = createSmlTypeArgumentList(listOf(positionalTypeArgument)) + val typeArgumentList = createSdsTypeArgumentList(listOf(positionalTypeArgument)) typeArgumentList.typeParametersOrNull().shouldBeNull() } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/ToConstantExpressionTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/ToConstantExpressionTest.kt similarity index 57% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/ToConstantExpressionTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/ToConstantExpressionTest.kt index 4c7fa1eb4..98d3b0522 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/ToConstantExpressionTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/partialEvaluation/ToConstantExpressionTest.kt @@ -1,44 +1,44 @@ -package de.unibonn.simpleml.staticAnalysis.partialEvaluation +package com.larsreimann.safeds.staticAnalysis.partialEvaluation import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlInfixOperationOperator -import de.unibonn.simpleml.constant.SmlPrefixOperationOperator -import de.unibonn.simpleml.emf.createSmlAnnotation -import de.unibonn.simpleml.emf.createSmlArgument -import de.unibonn.simpleml.emf.createSmlAssignment -import de.unibonn.simpleml.emf.createSmlAttribute -import de.unibonn.simpleml.emf.createSmlBlockLambda -import de.unibonn.simpleml.emf.createSmlBoolean -import de.unibonn.simpleml.emf.createSmlCall -import de.unibonn.simpleml.emf.createSmlEnum -import de.unibonn.simpleml.emf.createSmlEnumVariant -import de.unibonn.simpleml.emf.createSmlExpressionLambda -import de.unibonn.simpleml.emf.createSmlFloat -import de.unibonn.simpleml.emf.createSmlInfixOperation -import de.unibonn.simpleml.emf.createSmlInt -import de.unibonn.simpleml.emf.createSmlMemberAccess -import de.unibonn.simpleml.emf.createSmlNull -import de.unibonn.simpleml.emf.createSmlParameter -import de.unibonn.simpleml.emf.createSmlParenthesizedExpression -import de.unibonn.simpleml.emf.createSmlPlaceholder -import de.unibonn.simpleml.emf.createSmlPrefixOperation -import de.unibonn.simpleml.emf.createSmlReference -import de.unibonn.simpleml.emf.createSmlStep -import de.unibonn.simpleml.emf.createSmlString -import de.unibonn.simpleml.emf.createSmlTemplateString -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.statementsOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLFactory -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlExpressionLambda -import de.unibonn.simpleml.simpleML.SmlExpressionStatement -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.constant.SdsInfixOperationOperator +import com.larsreimann.safeds.constant.SdsPrefixOperationOperator +import com.larsreimann.safeds.emf.createSdsAnnotation +import com.larsreimann.safeds.emf.createSdsArgument +import com.larsreimann.safeds.emf.createSdsAssignment +import com.larsreimann.safeds.emf.createSdsAttribute +import com.larsreimann.safeds.emf.createSdsBlockLambda +import com.larsreimann.safeds.emf.createSdsBoolean +import com.larsreimann.safeds.emf.createSdsCall +import com.larsreimann.safeds.emf.createSdsEnum +import com.larsreimann.safeds.emf.createSdsEnumVariant +import com.larsreimann.safeds.emf.createSdsExpressionLambda +import com.larsreimann.safeds.emf.createSdsFloat +import com.larsreimann.safeds.emf.createSdsInfixOperation +import com.larsreimann.safeds.emf.createSdsInt +import com.larsreimann.safeds.emf.createSdsMemberAccess +import com.larsreimann.safeds.emf.createSdsNull +import com.larsreimann.safeds.emf.createSdsParameter +import com.larsreimann.safeds.emf.createSdsParenthesizedExpression +import com.larsreimann.safeds.emf.createSdsPlaceholder +import com.larsreimann.safeds.emf.createSdsPrefixOperation +import com.larsreimann.safeds.emf.createSdsReference +import com.larsreimann.safeds.emf.createSdsStep +import com.larsreimann.safeds.emf.createSdsString +import com.larsreimann.safeds.emf.createSdsTemplateString +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.statementsOrEmpty +import com.larsreimann.safeds.safeDS.SafeDSFactory +import com.larsreimann.safeds.safeDS.SdsAbstractExpression +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsExpressionLambda +import com.larsreimann.safeds.safeDS.SdsExpressionStatement +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.nulls.shouldNotBeNull @@ -54,37 +54,37 @@ import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.CsvSource @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class ToConstantExpressionTest { @Inject private lateinit var parseHelper: ParseHelper - private val factory = SimpleMLFactory.eINSTANCE + private val factory = SafeDSFactory.eINSTANCE - private lateinit var impureBlockLambda: SmlBlockLambda - private lateinit var pureBlockLambda: SmlBlockLambda - private lateinit var recursiveBlockLambda: SmlBlockLambda - private lateinit var impureExpressionLambda: SmlExpressionLambda - private lateinit var pureExpressionLambda: SmlExpressionLambda - private lateinit var recursiveExpressionLambda: SmlExpressionLambda - private lateinit var impureStep: SmlStep - private lateinit var pureStep: SmlStep - private lateinit var recursiveStep: SmlStep + private lateinit var impureBlockLambda: SdsBlockLambda + private lateinit var pureBlockLambda: SdsBlockLambda + private lateinit var recursiveBlockLambda: SdsBlockLambda + private lateinit var impureExpressionLambda: SdsExpressionLambda + private lateinit var pureExpressionLambda: SdsExpressionLambda + private lateinit var recursiveExpressionLambda: SdsExpressionLambda + private lateinit var impureStep: SdsStep + private lateinit var pureStep: SdsStep + private lateinit var recursiveStep: SdsStep @BeforeEach fun reset() { - val compilationUnit = parseHelper.parseResource("partialEvaluation/callables.smltest") + val compilationUnit = parseHelper.parseResource("partialEvaluation/callables.sdstest") compilationUnit.shouldNotBeNull() - val blockLambdas = compilationUnit.descendants().toList() + val blockLambdas = compilationUnit.descendants().toList() blockLambdas.shouldHaveSize(3) impureBlockLambda = blockLambdas[0] pureBlockLambda = blockLambdas[1] recursiveBlockLambda = blockLambdas[2] - val expressionLambdas = compilationUnit.descendants().toList() + val expressionLambdas = compilationUnit.descendants().toList() expressionLambdas.shouldHaveSize(3) impureExpressionLambda = expressionLambdas[0] @@ -101,55 +101,55 @@ class ToConstantExpressionTest { @Test fun `should return value of boolean literal`() { - val testData = createSmlBoolean(true) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(true) + val testData = createSdsBoolean(true) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(true) } @Test fun `should return value of float literal`() { - val testData = createSmlFloat(1.0) - testData.toConstantExpressionOrNull() shouldBe SmlConstantFloat(1.0) + val testData = createSdsFloat(1.0) + testData.toConstantExpressionOrNull() shouldBe SdsConstantFloat(1.0) } @Test fun `should return value of int literal`() { - val testData = createSmlInt(1) - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + val testData = createSdsInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should return value of null literal`() { - val testData = createSmlNull() - testData.toConstantExpressionOrNull() shouldBe SmlConstantNull + val testData = createSdsNull() + testData.toConstantExpressionOrNull() shouldBe SdsConstantNull } @Test fun `should return value of for string literal`() { - val testData = createSmlString("test") - testData.toConstantExpressionOrNull() shouldBe SmlConstantString("test") + val testData = createSdsString("test") + testData.toConstantExpressionOrNull() shouldBe SdsConstantString("test") } @Test fun `should return value of template string start`() { - val testData = factory.createSmlTemplateStringStart().apply { value = "test" } - testData.toConstantExpressionOrNull() shouldBe SmlConstantString("test") + val testData = factory.createSdsTemplateStringStart().apply { value = "test" } + testData.toConstantExpressionOrNull() shouldBe SdsConstantString("test") } @Test fun `should return value of template string inner`() { - val testData = factory.createSmlTemplateStringInner().apply { value = "test" } - testData.toConstantExpressionOrNull() shouldBe SmlConstantString("test") + val testData = factory.createSdsTemplateStringInner().apply { value = "test" } + testData.toConstantExpressionOrNull() shouldBe SdsConstantString("test") } @Test fun `should return value of template string end`() { - val testData = factory.createSmlTemplateStringEnd().apply { value = "test" } - testData.toConstantExpressionOrNull() shouldBe SmlConstantString("test") + val testData = factory.createSdsTemplateStringEnd().apply { value = "test" } + testData.toConstantExpressionOrNull() shouldBe SdsConstantString("test") } @Test fun `toConstantExpression should return null for block lambda`() { - val testData = createSmlBlockLambda() + val testData = createSdsBlockLambda() testData.toConstantExpressionOrNull().shouldBeNull() } @@ -160,7 +160,7 @@ class ToConstantExpressionTest { @Test fun `simplify should return intermediate block lambda for pure block lambda`() { - pureBlockLambda.simplify(emptyMap()).shouldBeInstanceOf() + pureBlockLambda.simplify(emptyMap()).shouldBeInstanceOf() } @Test @@ -170,7 +170,7 @@ class ToConstantExpressionTest { @Test fun `toConstantExpression should return null for expression lambda`() { - val testData = createSmlExpressionLambda(result = createSmlNull()) + val testData = createSdsExpressionLambda(result = createSdsNull()) testData.toConstantExpressionOrNull().shouldBeNull() } @@ -181,7 +181,7 @@ class ToConstantExpressionTest { @Test fun `simplify should return intermediate expression lambda for pure expression lambda`() { - pureExpressionLambda.simplify(emptyMap()).shouldBeInstanceOf() + pureExpressionLambda.simplify(emptyMap()).shouldBeInstanceOf() } @Test @@ -195,8 +195,8 @@ class ToConstantExpressionTest { @Test fun `should return value as constant expression for arguments`() { - val testData = createSmlArgument(value = createSmlNull()) - testData.toConstantExpressionOrNull() shouldBe SmlConstantNull + val testData = createSdsArgument(value = createSdsNull()) + testData.toConstantExpressionOrNull() shouldBe SdsConstantNull } } @@ -220,21 +220,21 @@ class ToConstantExpressionTest { rightOperand: Boolean, expected: Boolean ) { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(leftOperand), - operator = SmlInfixOperationOperator.Or, - rightOperand = createSmlBoolean(rightOperand) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(leftOperand), + operator = SdsInfixOperationOperator.Or, + rightOperand = createSdsBoolean(rightOperand) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(expected) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(expected) } @Test fun `should return null if the left operand is not a constant boolean`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.Or, - rightOperand = createSmlBoolean(true) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.Or, + rightOperand = createSdsBoolean(true) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -242,10 +242,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant boolean`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.Or, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.Or, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -269,21 +269,21 @@ class ToConstantExpressionTest { rightOperand: Boolean, expected: Boolean ) { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(leftOperand), - operator = SmlInfixOperationOperator.And, - rightOperand = createSmlBoolean(rightOperand) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(leftOperand), + operator = SdsInfixOperationOperator.And, + rightOperand = createSdsBoolean(rightOperand) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(expected) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(expected) } @Test fun `should return null if the left operand is not a constant boolean`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.And, - rightOperand = createSmlBoolean(true) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.And, + rightOperand = createSdsBoolean(true) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -291,10 +291,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant boolean`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.And, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.And, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -306,34 +306,34 @@ class ToConstantExpressionTest { @Test fun `should return true boolean literal if left and right operands are equal`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.Equals, - rightOperand = createSmlBoolean(true) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.Equals, + rightOperand = createSdsBoolean(true) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(true) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(true) } @Test fun `should return false boolean literal if left and right operands are not equal`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.Equals, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.Equals, + rightOperand = createSdsInt(1) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(false) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(false) } @Test fun `should return null if the left operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsCall( + receiver = createSdsNull() ), - operator = SmlInfixOperationOperator.Equals, - rightOperand = createSmlBoolean(true) + operator = SdsInfixOperationOperator.Equals, + rightOperand = createSdsBoolean(true) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -341,11 +341,11 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.Equals, - rightOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.Equals, + rightOperand = createSdsCall( + receiver = createSdsNull() ) ) @@ -358,34 +358,34 @@ class ToConstantExpressionTest { @Test fun `should return true boolean literal if left and right operands are not equal`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.NotEquals, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.NotEquals, + rightOperand = createSdsInt(1) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(true) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(true) } @Test fun `should return false boolean literal if left and right operands are equal`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.NotEquals, - rightOperand = createSmlBoolean(true) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.NotEquals, + rightOperand = createSdsBoolean(true) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(false) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(false) } @Test fun `should return null if the left operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsCall( + receiver = createSdsNull() ), - operator = SmlInfixOperationOperator.NotEquals, - rightOperand = createSmlBoolean(true) + operator = SdsInfixOperationOperator.NotEquals, + rightOperand = createSdsBoolean(true) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -393,11 +393,11 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.NotEquals, - rightOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.NotEquals, + rightOperand = createSdsCall( + receiver = createSdsNull() ) ) @@ -410,34 +410,34 @@ class ToConstantExpressionTest { @Test fun `should return true boolean literal if left and right operands are identical`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.IdenticalTo, - rightOperand = createSmlBoolean(true) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.IdenticalTo, + rightOperand = createSdsBoolean(true) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(true) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(true) } @Test fun `should return false boolean literal if left and right operands are not identical`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.IdenticalTo, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.IdenticalTo, + rightOperand = createSdsInt(1) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(false) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(false) } @Test fun `should return null if the left operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsCall( + receiver = createSdsNull() ), - operator = SmlInfixOperationOperator.IdenticalTo, - rightOperand = createSmlBoolean(true) + operator = SdsInfixOperationOperator.IdenticalTo, + rightOperand = createSdsBoolean(true) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -445,11 +445,11 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.IdenticalTo, - rightOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.IdenticalTo, + rightOperand = createSdsCall( + receiver = createSdsNull() ) ) @@ -462,34 +462,34 @@ class ToConstantExpressionTest { @Test fun `should return true boolean literal if left and right operands are not identical`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.NotIdenticalTo, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.NotIdenticalTo, + rightOperand = createSdsInt(1) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(true) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(true) } @Test fun `should return false boolean literal if left and right operands are identical`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.NotIdenticalTo, - rightOperand = createSmlBoolean(true) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.NotIdenticalTo, + rightOperand = createSdsBoolean(true) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(false) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(false) } @Test fun `should return null if the left operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsCall( + receiver = createSdsNull() ), - operator = SmlInfixOperationOperator.NotIdenticalTo, - rightOperand = createSmlBoolean(true) + operator = SdsInfixOperationOperator.NotIdenticalTo, + rightOperand = createSdsBoolean(true) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -497,11 +497,11 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.NotIdenticalTo, - rightOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.NotIdenticalTo, + rightOperand = createSdsCall( + receiver = createSdsNull() ) ) @@ -530,21 +530,21 @@ class ToConstantExpressionTest { rightOperand: Double, expected: Boolean ) { - val testData = createSmlInfixOperation( - leftOperand = leftOperand.toSmlNumber(), - operator = SmlInfixOperationOperator.LessThan, - rightOperand = rightOperand.toSmlNumber() + val testData = createSdsInfixOperation( + leftOperand = leftOperand.toSdsNumber(), + operator = SdsInfixOperationOperator.LessThan, + rightOperand = rightOperand.toSdsNumber() ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(expected) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(expected) } @Test fun `should return null if the left operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.LessThan, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.LessThan, + rightOperand = createSdsInt(1) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -552,10 +552,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.LessThan, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.LessThan, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -583,21 +583,21 @@ class ToConstantExpressionTest { rightOperand: Double, expected: Boolean ) { - val testData = createSmlInfixOperation( - leftOperand = leftOperand.toSmlNumber(), - operator = SmlInfixOperationOperator.LessThanOrEquals, - rightOperand = rightOperand.toSmlNumber() + val testData = createSdsInfixOperation( + leftOperand = leftOperand.toSdsNumber(), + operator = SdsInfixOperationOperator.LessThanOrEquals, + rightOperand = rightOperand.toSdsNumber() ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(expected) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(expected) } @Test fun `should return null if the left operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.LessThanOrEquals, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.LessThanOrEquals, + rightOperand = createSdsInt(1) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -605,10 +605,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.LessThanOrEquals, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.LessThanOrEquals, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -636,21 +636,21 @@ class ToConstantExpressionTest { rightOperand: Double, expected: Boolean ) { - val testData = createSmlInfixOperation( - leftOperand = leftOperand.toSmlNumber(), - operator = SmlInfixOperationOperator.GreaterThanOrEquals, - rightOperand = rightOperand.toSmlNumber() + val testData = createSdsInfixOperation( + leftOperand = leftOperand.toSdsNumber(), + operator = SdsInfixOperationOperator.GreaterThanOrEquals, + rightOperand = rightOperand.toSdsNumber() ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(expected) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(expected) } @Test fun `should return null if the left operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.GreaterThanOrEquals, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.GreaterThanOrEquals, + rightOperand = createSdsInt(1) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -658,10 +658,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.GreaterThanOrEquals, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.GreaterThanOrEquals, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -689,21 +689,21 @@ class ToConstantExpressionTest { rightOperand: Double, expected: Boolean ) { - val testData = createSmlInfixOperation( - leftOperand = leftOperand.toSmlNumber(), - operator = SmlInfixOperationOperator.GreaterThan, - rightOperand = rightOperand.toSmlNumber() + val testData = createSdsInfixOperation( + leftOperand = leftOperand.toSdsNumber(), + operator = SdsInfixOperationOperator.GreaterThan, + rightOperand = rightOperand.toSdsNumber() ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(expected) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(expected) } @Test fun `should return null if the left operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.GreaterThan, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.GreaterThan, + rightOperand = createSdsInt(1) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -711,10 +711,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.GreaterThan, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.GreaterThan, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -738,21 +738,21 @@ class ToConstantExpressionTest { rightOperand: Double, expected: Double ) { - val testData = createSmlInfixOperation( - leftOperand = leftOperand.toSmlNumber(), - operator = SmlInfixOperationOperator.Plus, - rightOperand = rightOperand.toSmlNumber() + val testData = createSdsInfixOperation( + leftOperand = leftOperand.toSdsNumber(), + operator = SdsInfixOperationOperator.Plus, + rightOperand = rightOperand.toSdsNumber() ) - testData.toConstantExpressionOrNull() shouldBe expected.toSmlNumber().toConstantExpressionOrNull() + testData.toConstantExpressionOrNull() shouldBe expected.toSdsNumber().toConstantExpressionOrNull() } @Test fun `should return null if the left operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.Plus, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.Plus, + rightOperand = createSdsInt(1) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -760,10 +760,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.Plus, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.Plus, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -787,21 +787,21 @@ class ToConstantExpressionTest { rightOperand: Double, expected: Double ) { - val testData = createSmlInfixOperation( - leftOperand = leftOperand.toSmlNumber(), - operator = SmlInfixOperationOperator.Minus, - rightOperand = rightOperand.toSmlNumber() + val testData = createSdsInfixOperation( + leftOperand = leftOperand.toSdsNumber(), + operator = SdsInfixOperationOperator.Minus, + rightOperand = rightOperand.toSdsNumber() ) - testData.toConstantExpressionOrNull() shouldBe expected.toSmlNumber().toConstantExpressionOrNull() + testData.toConstantExpressionOrNull() shouldBe expected.toSdsNumber().toConstantExpressionOrNull() } @Test fun `should return null if the left operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.Minus, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.Minus, + rightOperand = createSdsInt(1) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -809,10 +809,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.Minus, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.Minus, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -836,21 +836,21 @@ class ToConstantExpressionTest { rightOperand: Double, expected: Double ) { - val testData = createSmlInfixOperation( - leftOperand = leftOperand.toSmlNumber(), - operator = SmlInfixOperationOperator.Times, - rightOperand = rightOperand.toSmlNumber() + val testData = createSdsInfixOperation( + leftOperand = leftOperand.toSdsNumber(), + operator = SdsInfixOperationOperator.Times, + rightOperand = rightOperand.toSdsNumber() ) - testData.toConstantExpressionOrNull() shouldBe expected.toSmlNumber().toConstantExpressionOrNull() + testData.toConstantExpressionOrNull() shouldBe expected.toSdsNumber().toConstantExpressionOrNull() } @Test fun `should return null if the left operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.Times, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.Times, + rightOperand = createSdsInt(1) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -858,10 +858,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.Times, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.Times, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -885,21 +885,21 @@ class ToConstantExpressionTest { rightOperand: Double, expected: Double ) { - val testData = createSmlInfixOperation( - leftOperand = leftOperand.toSmlNumber(), - operator = SmlInfixOperationOperator.By, - rightOperand = rightOperand.toSmlNumber() + val testData = createSdsInfixOperation( + leftOperand = leftOperand.toSdsNumber(), + operator = SdsInfixOperationOperator.By, + rightOperand = rightOperand.toSdsNumber() ) - testData.toConstantExpressionOrNull() shouldBe expected.toSmlNumber().toConstantExpressionOrNull() + testData.toConstantExpressionOrNull() shouldBe expected.toSdsNumber().toConstantExpressionOrNull() } @Test fun `should return null if the left operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.By, - rightOperand = createSmlInt(1) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.By, + rightOperand = createSdsInt(1) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -907,10 +907,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant number`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.By, - rightOperand = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.By, + rightOperand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -918,10 +918,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is constant integer 0`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.By, - rightOperand = createSmlInt(0) + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.By, + rightOperand = createSdsInt(0) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -929,10 +929,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is constant float 0`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.By, - rightOperand = createSmlFloat(0.0) + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.By, + rightOperand = createSdsFloat(0.0) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -940,10 +940,10 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is constant float -0`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.By, - rightOperand = createSmlFloat(-0.0) + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.By, + rightOperand = createSdsFloat(-0.0) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -955,34 +955,34 @@ class ToConstantExpressionTest { @Test fun `should return left operand if it does not evaluate to a constant null`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlBoolean(true), - operator = SmlInfixOperationOperator.Elvis, - rightOperand = createSmlBoolean(true) + val testData = createSdsInfixOperation( + leftOperand = createSdsBoolean(true), + operator = SdsInfixOperationOperator.Elvis, + rightOperand = createSdsBoolean(true) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(true) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(true) } @Test fun `should return right operand if the left operand evaluates to a constant null`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlNull(), - operator = SmlInfixOperationOperator.Elvis, - rightOperand = createSmlBoolean(true) + val testData = createSdsInfixOperation( + leftOperand = createSdsNull(), + operator = SdsInfixOperationOperator.Elvis, + rightOperand = createSdsBoolean(true) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(true) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(true) } @Test fun `should return null if the left operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsCall( + receiver = createSdsNull() ), - operator = SmlInfixOperationOperator.Elvis, - rightOperand = createSmlInt(1) + operator = SdsInfixOperationOperator.Elvis, + rightOperand = createSdsInt(1) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -990,11 +990,11 @@ class ToConstantExpressionTest { @Test fun `should return null if the right operand is not a constant expression`() { - val testData = createSmlInfixOperation( - leftOperand = createSmlInt(1), - operator = SmlInfixOperationOperator.Elvis, - rightOperand = createSmlCall( - receiver = createSmlNull() + val testData = createSdsInfixOperation( + leftOperand = createSdsInt(1), + operator = SdsInfixOperationOperator.Elvis, + rightOperand = createSdsCall( + receiver = createSdsNull() ) ) @@ -1008,8 +1008,8 @@ class ToConstantExpressionTest { @Test fun `should return expression as constant expression for parenthesized expressions`() { - val testData = createSmlParenthesizedExpression(createSmlNull()) - testData.toConstantExpressionOrNull() shouldBe SmlConstantNull + val testData = createSdsParenthesizedExpression(createSdsNull()) + testData.toConstantExpressionOrNull() shouldBe SdsConstantNull } } @@ -1021,19 +1021,19 @@ class ToConstantExpressionTest { @Test fun `should return negated operand if it is a constant boolean`() { - val testData = createSmlPrefixOperation( - operator = SmlPrefixOperationOperator.Not, - operand = createSmlBoolean(true) + val testData = createSdsPrefixOperation( + operator = SdsPrefixOperationOperator.Not, + operand = createSdsBoolean(true) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantBoolean(false) + testData.toConstantExpressionOrNull() shouldBe SdsConstantBoolean(false) } @Test fun `should return null if the operand is not a constant boolean`() { - val testData = createSmlPrefixOperation( - operator = SmlPrefixOperationOperator.Not, - operand = createSmlNull() + val testData = createSdsPrefixOperation( + operator = SdsPrefixOperationOperator.Not, + operand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -1045,29 +1045,29 @@ class ToConstantExpressionTest { @Test fun `should return negated operand if it is a constant float`() { - val testData = createSmlPrefixOperation( - operator = SmlPrefixOperationOperator.Minus, - operand = createSmlFloat(1.0) + val testData = createSdsPrefixOperation( + operator = SdsPrefixOperationOperator.Minus, + operand = createSdsFloat(1.0) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantFloat(-1.0) + testData.toConstantExpressionOrNull() shouldBe SdsConstantFloat(-1.0) } @Test fun `should return negated operand if it is a constant int`() { - val testData = createSmlPrefixOperation( - operator = SmlPrefixOperationOperator.Minus, - operand = createSmlInt(1) + val testData = createSdsPrefixOperation( + operator = SdsPrefixOperationOperator.Minus, + operand = createSdsInt(1) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(-1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(-1) } @Test fun `should return null if the operand is not a constant number`() { - val testData = createSmlPrefixOperation( - operator = SmlPrefixOperationOperator.Minus, - operand = createSmlNull() + val testData = createSdsPrefixOperation( + operator = SdsPrefixOperationOperator.Minus, + operand = createSdsNull() ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -1080,7 +1080,7 @@ class ToConstantExpressionTest { @Test fun `should return concatenated string`() { - val testData = createSmlTemplateString( + val testData = createSdsTemplateString( stringParts = listOf( "start ", " inner1 ", @@ -1091,26 +1091,26 @@ class ToConstantExpressionTest { " end" ), templateExpressions = listOf( - createSmlBoolean(true), - createSmlFloat(1.0), - createSmlInt(1), - createSmlNull(), - createSmlString("string"), - createSmlReference(createSmlEnumVariant("Variant")) + createSdsBoolean(true), + createSdsFloat(1.0), + createSdsInt(1), + createSdsNull(), + createSdsString("string"), + createSdsReference(createSdsEnumVariant("Variant")) ) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantString( + testData.toConstantExpressionOrNull() shouldBe SdsConstantString( value = "start true inner1 1.0 inner2 1 inner3 null inner4 string inner5 Variant end" ) } @Test fun `should return null if any expression is converted to null`() { - val testData = createSmlTemplateString( + val testData = createSdsTemplateString( stringParts = listOf("start ", " end"), templateExpressions = listOf( - createSmlCall(receiver = createSmlNull()) + createSdsCall(receiver = createSdsNull()) ) ) @@ -1121,40 +1121,40 @@ class ToConstantExpressionTest { @Nested inner class Call { - private lateinit var compilationUnit: SmlCompilationUnit + private lateinit var compilationUnit: SdsCompilationUnit @BeforeEach fun reset() { - compilationUnit = parseHelper.parseResource("partialEvaluation/calls.smltest")!! + compilationUnit = parseHelper.parseResource("partialEvaluation/calls.sdstest")!! } @Test fun `should evaluate calls of block lambdas`() { - val workflow = compilationUnit.findUniqueDeclarationOrFail("callToBlockLambda") + val workflow = compilationUnit.findUniqueDeclarationOrFail("callToBlockLambda") val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should evaluate calls of expression lambdas`() { - val workflow = compilationUnit.findUniqueDeclarationOrFail("callToExpressionLambda") + val workflow = compilationUnit.findUniqueDeclarationOrFail("callToExpressionLambda") val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should evaluate calls of steps`() { - val workflow = compilationUnit.findUniqueDeclarationOrFail("callToStep") + val workflow = compilationUnit.findUniqueDeclarationOrFail("callToStep") val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should evaluate calls of steps with variadic parameter`() { - val workflow = compilationUnit.findUniqueDeclarationOrFail("callToStepWithVariadicParameter") + val workflow = compilationUnit.findUniqueDeclarationOrFail("callToStepWithVariadicParameter") val testData = workflow.expectedExpression() testData.toConstantExpressionOrNull().shouldBeNull() @@ -1163,43 +1163,43 @@ class ToConstantExpressionTest { @Test fun `should evaluate calls of steps with indexed variadic parameter`() { val workflow = compilationUnit - .findUniqueDeclarationOrFail("callToStepWithIndexedVariadicParameter") + .findUniqueDeclarationOrFail("callToStepWithIndexedVariadicParameter") val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should substitute parameters that were bound at call of a lambda`() { - val workflow = compilationUnit.findUniqueDeclarationOrFail( + val workflow = compilationUnit.findUniqueDeclarationOrFail( "parameterAssignedDuringCall" ) val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(10) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(10) } @Test fun `should substitute parameters that were bound at creation of a lambda`() { - val workflow = compilationUnit.findUniqueDeclarationOrFail( + val workflow = compilationUnit.findUniqueDeclarationOrFail( "parameterAssignedDuringCreationOfLambda" ) val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should evaluate calls with lambda as parameter`() { - val workflow = compilationUnit.findUniqueDeclarationOrFail("lambdaAsParameter") + val workflow = compilationUnit.findUniqueDeclarationOrFail("lambdaAsParameter") val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should return null otherwise`() { - val testData = createSmlCall(receiver = createSmlNull()) + val testData = createSdsCall(receiver = createSdsNull()) testData.toConstantExpressionOrNull().shouldBeNull() } } @@ -1209,34 +1209,34 @@ class ToConstantExpressionTest { @Test fun `should return constant enum variant if referenced enum variant has no parameters`() { - val testEnumVariant = createSmlEnumVariant(name = "TestEnumVariant") - val testEnum = createSmlEnum( + val testEnumVariant = createSdsEnumVariant(name = "TestEnumVariant") + val testEnum = createSdsEnum( name = "TestEnum", variants = listOf(testEnumVariant) ) - val testData = createSmlMemberAccess( - receiver = createSmlReference(testEnum), - member = createSmlReference(testEnumVariant) + val testData = createSdsMemberAccess( + receiver = createSdsReference(testEnum), + member = createSdsReference(testEnumVariant) ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantEnumVariant(testEnumVariant) + testData.toConstantExpressionOrNull() shouldBe SdsConstantEnumVariant(testEnumVariant) } @Test fun `should return null if referenced enum variant has parameters`() { - val testEnumVariant = createSmlEnumVariant( + val testEnumVariant = createSdsEnumVariant( name = "TestEnumVariant", parameters = listOf( - createSmlParameter(name = "testParameter") + createSdsParameter(name = "testParameter") ) ) - val testEnum = createSmlEnum( + val testEnum = createSdsEnum( name = "TestEnum", variants = listOf(testEnumVariant) ) - val testData = createSmlMemberAccess( - receiver = createSmlReference(testEnum), - member = createSmlReference(testEnumVariant) + val testData = createSdsMemberAccess( + receiver = createSdsReference(testEnum), + member = createSdsReference(testEnumVariant) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -1244,20 +1244,20 @@ class ToConstantExpressionTest { @Test fun `should return constant null if receiver is constant null and member access is null safe`() { - val testData = createSmlMemberAccess( - receiver = createSmlNull(), - member = createSmlReference(createSmlAttribute("testAttribute")), + val testData = createSdsMemberAccess( + receiver = createSdsNull(), + member = createSdsReference(createSdsAttribute("testAttribute")), isNullSafe = true ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantNull + testData.toConstantExpressionOrNull() shouldBe SdsConstantNull } @Test fun `should return null if receiver is constant null and member access is not null safe`() { - val testData = createSmlMemberAccess( - receiver = createSmlNull(), - member = createSmlReference(createSmlAttribute("testAttribute")) + val testData = createSdsMemberAccess( + receiver = createSdsNull(), + member = createSdsReference(createSdsAttribute("testAttribute")) ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -1266,22 +1266,22 @@ class ToConstantExpressionTest { @Test fun `should access the result of a call by name if result exists`() { val compilationUnit = - parseHelper.parseResource("partialEvaluation/memberAccesses.smltest") + parseHelper.parseResource("partialEvaluation/memberAccesses.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("successfulResultAccess") + val workflow = compilationUnit.findUniqueDeclarationOrFail("successfulResultAccess") val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should return null if accessed result does not exist`() { val compilationUnit = - parseHelper.parseResource("partialEvaluation/memberAccesses.smltest") + parseHelper.parseResource("partialEvaluation/memberAccesses.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("failedResultAccess") + val workflow = compilationUnit.findUniqueDeclarationOrFail("failedResultAccess") val testData = workflow.expectedExpression() testData.toConstantExpressionOrNull().shouldBeNull() @@ -1289,13 +1289,13 @@ class ToConstantExpressionTest { @Test fun `should return null for other receivers`() { - val testData = createSmlMemberAccess( - receiver = createSmlInt(1), - member = createSmlReference( - createSmlEnumVariant( + val testData = createSdsMemberAccess( + receiver = createSdsInt(1), + member = createSdsReference( + createSdsEnumVariant( name = "TestEnumVariant", parameters = listOf( - createSmlParameter(name = "testParameter") + createSdsParameter(name = "testParameter") ) ) ) @@ -1310,23 +1310,23 @@ class ToConstantExpressionTest { @Test fun `should return constant enum variant if referenced enum variant has no parameters`() { - val testEnumVariant = createSmlEnumVariant(name = "TestEnumVariant") - val testData = createSmlReference( + val testEnumVariant = createSdsEnumVariant(name = "TestEnumVariant") + val testData = createSdsReference( declaration = testEnumVariant ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantEnumVariant(testEnumVariant) + testData.toConstantExpressionOrNull() shouldBe SdsConstantEnumVariant(testEnumVariant) } @Test fun `should return null if referenced enum variant has parameters`() { - val testEnumVariant = createSmlEnumVariant( + val testEnumVariant = createSdsEnumVariant( name = "TestEnumVariant", parameters = listOf( - createSmlParameter(name = "testParameter") + createSdsParameter(name = "testParameter") ) ) - val testData = createSmlReference( + val testData = createSdsReference( declaration = testEnumVariant ) @@ -1335,22 +1335,22 @@ class ToConstantExpressionTest { @Test fun `should convert assigned value of referenced placeholder`() { - val testPlaceholder = createSmlPlaceholder("testPlaceholder") - createSmlAssignment( + val testPlaceholder = createSdsPlaceholder("testPlaceholder") + createSdsAssignment( assignees = listOf(testPlaceholder), - createSmlNull() + createSdsNull() ) - val testData = createSmlReference( + val testData = createSdsReference( declaration = testPlaceholder ) - testData.toConstantExpressionOrNull() shouldBe SmlConstantNull + testData.toConstantExpressionOrNull() shouldBe SdsConstantNull } @Test fun `should return null if referenced placeholder has no assigned value`() { - val testData = createSmlReference( - declaration = createSmlPlaceholder("testPlaceholder") + val testData = createSdsReference( + declaration = createSdsPlaceholder("testPlaceholder") ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -1358,31 +1358,31 @@ class ToConstantExpressionTest { @Test fun `simplify should return substituted value if it exists`() { - val testParameter = createSmlParameter("testParameter") - val testData = createSmlReference( + val testParameter = createSdsParameter("testParameter") + val testData = createSdsReference( declaration = testParameter ) - testData.simplify(mapOf(testParameter to SmlConstantNull)) shouldBe SmlConstantNull + testData.simplify(mapOf(testParameter to SdsConstantNull)) shouldBe SdsConstantNull } @Test fun `simplify should return default value if referenced parameter is not substituted but optional`() { - val testParameter = createSmlParameter( + val testParameter = createSdsParameter( name = "testParameter", - defaultValue = createSmlNull() + defaultValue = createSdsNull() ) - val testData = createSmlReference( + val testData = createSdsReference( declaration = testParameter ) - testData.simplify(emptyMap()) shouldBe SmlConstantNull + testData.simplify(emptyMap()) shouldBe SdsConstantNull } @Test fun `simplify should return null if referenced parameter is required and not substituted`() { - val testParameter = createSmlParameter("testParameter") - val testData = createSmlReference( + val testParameter = createSdsParameter("testParameter") + val testData = createSdsReference( declaration = testParameter ) @@ -1391,47 +1391,47 @@ class ToConstantExpressionTest { @Test fun `toConstantExpression should return null if step is referenced`() { - val testData = createSmlReference(createSmlStep("testStep")) + val testData = createSdsReference(createSdsStep("testStep")) testData.toConstantExpressionOrNull().shouldBeNull() } @Test fun `simplify should return null if referenced step is impure`() { - val testData = createSmlReference(impureStep) + val testData = createSdsReference(impureStep) testData.simplify(emptyMap()).shouldBeNull() } @Test fun `simplify should return intermediate step if referenced step is pure`() { - val testData = createSmlReference(pureStep) - testData.simplify(emptyMap()).shouldBeInstanceOf() + val testData = createSdsReference(pureStep) + testData.simplify(emptyMap()).shouldBeInstanceOf() } @Test fun `simplify should return null if referenced step has recursive calls`() { - val testData = createSmlReference(recursiveStep) + val testData = createSdsReference(recursiveStep) testData.simplify(emptyMap()).shouldBeNull() } @Test fun `should return value of placeholders inside valid assignment with call as expression`() { val compilationUnit = - parseHelper.parseResource("partialEvaluation/references.smltest") + parseHelper.parseResource("partialEvaluation/references.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("successfulRecordAssignment") + val workflow = compilationUnit.findUniqueDeclarationOrFail("successfulRecordAssignment") val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should return null for references to placeholders inside invalid assignment with call as expression`() { val compilationUnit = - parseHelper.parseResource("partialEvaluation/references.smltest") + parseHelper.parseResource("partialEvaluation/references.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("failedRecordAssignment") + val workflow = compilationUnit.findUniqueDeclarationOrFail("failedRecordAssignment") val testData = workflow.expectedExpression() testData.toConstantExpressionOrNull().shouldBeNull() @@ -1440,47 +1440,47 @@ class ToConstantExpressionTest { @Test fun `should evaluate references to placeholders (assigned, called step has different yield order)`() { val compilationUnit = - parseHelper.parseResource("partialEvaluation/references.smltest") + parseHelper.parseResource("partialEvaluation/references.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail( + val workflow = compilationUnit.findUniqueDeclarationOrFail( "recordAssignmentWithDifferentYieldOrder" ) val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should evaluate references to placeholders (assigned, called step has missing yield)`() { val compilationUnit = - parseHelper.parseResource("partialEvaluation/references.smltest") + parseHelper.parseResource("partialEvaluation/references.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail("recordAssignmentWithMissingYield") + val workflow = compilationUnit.findUniqueDeclarationOrFail("recordAssignmentWithMissingYield") val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should evaluate references to placeholders (assigned, called step has additional yield)`() { val compilationUnit = - parseHelper.parseResource("partialEvaluation/references.smltest") + parseHelper.parseResource("partialEvaluation/references.sdstest") compilationUnit.shouldNotBeNull() - val workflow = compilationUnit.findUniqueDeclarationOrFail( + val workflow = compilationUnit.findUniqueDeclarationOrFail( "recordAssignmentWithAdditionalYield" ) val testData = workflow.expectedExpression() - testData.toConstantExpressionOrNull() shouldBe SmlConstantInt(1) + testData.toConstantExpressionOrNull() shouldBe SdsConstantInt(1) } @Test fun `should return null for other declarations`() { - val testData = createSmlReference( - declaration = createSmlAnnotation("TestAnnotation") + val testData = createSdsReference( + declaration = createSdsAnnotation("TestAnnotation") ) testData.toConstantExpressionOrNull().shouldBeNull() @@ -1488,10 +1488,10 @@ class ToConstantExpressionTest { } } -private fun Double.toSmlNumber(): SmlAbstractExpression { +private fun Double.toSdsNumber(): SdsAbstractExpression { return when { - this == this.toInt().toDouble() -> createSmlInt(this.toInt()) - else -> createSmlFloat(this) + this == this.toInt().toDouble() -> createSdsInt(this.toInt()) + else -> createSdsFloat(this) } } @@ -1499,8 +1499,8 @@ private fun Double.toSmlNumber(): SmlAbstractExpression { * Helper method for tests loaded from a resource that returns the expression of the first expression statement in the * workflow. */ -private fun SmlWorkflow.expectedExpression() = statementsOrEmpty() - .filterIsInstance() +private fun SdsWorkflow.expectedExpression() = statementsOrEmpty() + .filterIsInstance() .firstOrNull() .shouldNotBeNull() .expression diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/typing/TypeComputerTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/typing/TypeComputerTest.kt similarity index 77% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/typing/TypeComputerTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/typing/TypeComputerTest.kt index f2808a5fa..a59914c55 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/staticAnalysis/typing/TypeComputerTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/staticAnalysis/typing/TypeComputerTest.kt @@ -1,48 +1,48 @@ -package de.unibonn.simpleml.staticAnalysis.typing +package com.larsreimann.safeds.staticAnalysis.typing import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.constant.SmlInfixOperationOperator -import de.unibonn.simpleml.constant.operator -import de.unibonn.simpleml.emf.blockLambdaResultsOrEmpty -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.resultsOrEmpty -import de.unibonn.simpleml.emf.typeArgumentsOrEmpty -import de.unibonn.simpleml.simpleML.SmlAbstractObject -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCallableType -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionLambda -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlIndexedAccess -import de.unibonn.simpleml.simpleML.SmlInfixOperation -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlMemberType -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlParenthesizedExpression -import de.unibonn.simpleml.simpleML.SmlParenthesizedType -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlUnionType -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.staticAnalysis.assignedOrNull -import de.unibonn.simpleml.stdlibAccess.StdlibClasses -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail -import de.unibonn.simpleml.testing.getResourcePath +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.constant.SdsInfixOperationOperator +import com.larsreimann.safeds.constant.operator +import com.larsreimann.safeds.emf.blockLambdaResultsOrEmpty +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.emf.parametersOrEmpty +import com.larsreimann.safeds.emf.resultsOrEmpty +import com.larsreimann.safeds.emf.typeArgumentsOrEmpty +import com.larsreimann.safeds.safeDS.SdsAbstractObject +import com.larsreimann.safeds.safeDS.SdsArgument +import com.larsreimann.safeds.safeDS.SdsAttribute +import com.larsreimann.safeds.safeDS.SdsBlockLambda +import com.larsreimann.safeds.safeDS.SdsBlockLambdaResult +import com.larsreimann.safeds.safeDS.SdsCall +import com.larsreimann.safeds.safeDS.SdsCallableType +import com.larsreimann.safeds.safeDS.SdsClass +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsEnum +import com.larsreimann.safeds.safeDS.SdsEnumVariant +import com.larsreimann.safeds.safeDS.SdsExpressionLambda +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.safeDS.SdsIndexedAccess +import com.larsreimann.safeds.safeDS.SdsInfixOperation +import com.larsreimann.safeds.safeDS.SdsMemberAccess +import com.larsreimann.safeds.safeDS.SdsMemberType +import com.larsreimann.safeds.safeDS.SdsNamedType +import com.larsreimann.safeds.safeDS.SdsParameter +import com.larsreimann.safeds.safeDS.SdsParenthesizedExpression +import com.larsreimann.safeds.safeDS.SdsParenthesizedType +import com.larsreimann.safeds.safeDS.SdsPlaceholder +import com.larsreimann.safeds.safeDS.SdsReference +import com.larsreimann.safeds.safeDS.SdsResult +import com.larsreimann.safeds.safeDS.SdsStep +import com.larsreimann.safeds.safeDS.SdsUnionType +import com.larsreimann.safeds.safeDS.SdsWorkflow +import com.larsreimann.safeds.safeDS.SdsYield +import com.larsreimann.safeds.staticAnalysis.assignedOrNull +import com.larsreimann.safeds.stdlibAccess.StdlibClasses +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.testing.getResourcePath import io.kotest.assertions.forEachAsClue import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldNotBeNull @@ -61,7 +61,7 @@ import java.nio.file.Path @Suppress("PrivatePropertyName") @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class TypeComputerTest { @Inject @@ -79,7 +79,7 @@ class TypeComputerTest { @Test fun `attributes should have declared type`() { withCompilationUnitFromFile("assignees/blockLambdaResults") { - descendants().forEach { + descendants().forEach { val assigned = it.assignedOrNull() assigned.shouldNotBeNull() it shouldHaveType assigned @@ -94,7 +94,7 @@ class TypeComputerTest { @Test fun `classes should have non-nullable class type`() { withCompilationUnitFromFile("assignees/placeholders") { - descendants().forEach { + descendants().forEach { val assigned = it.assignedOrNull() assigned.shouldNotBeNull() it shouldHaveType assigned @@ -109,7 +109,7 @@ class TypeComputerTest { @Test fun `enums should have non-nullable enum type`() { withCompilationUnitFromFile("assignees/yields") { - descendants().forEach { + descendants().forEach { val assigned = it.assignedOrNull() assigned.shouldNotBeNull() it shouldHaveType assigned @@ -128,7 +128,7 @@ class TypeComputerTest { @Test fun `attributes should have declared type`() { withCompilationUnitFromFile("declarations/attributes") { - descendants().forEach { + descendants().forEach { it shouldHaveType it.type } } @@ -141,7 +141,7 @@ class TypeComputerTest { @Test fun `classes should have non-nullable class type`() { withCompilationUnitFromFile("declarations/classes") { - descendants().forEach { + descendants().forEach { it shouldHaveType ClassType(it, isNullable = false) } } @@ -154,7 +154,7 @@ class TypeComputerTest { @Test fun `enums should have non-nullable enum type`() { withCompilationUnitFromFile("declarations/enums") { - descendants().forEach { + descendants().forEach { it shouldHaveType EnumType(it, isNullable = false) } } @@ -167,7 +167,7 @@ class TypeComputerTest { @Test fun `enum variants should have non-nullable enum variant type`() { withCompilationUnitFromFile("declarations/enumVariants") { - descendants().forEach { + descendants().forEach { it shouldHaveType EnumVariantType(it, isNullable = false) } } @@ -180,7 +180,7 @@ class TypeComputerTest { @Test fun `functions should have callable type with respective parameters and results`() { withCompilationUnitFromFile("declarations/functions") { - descendants().forEach { function -> + descendants().forEach { function -> function shouldHaveType CallableType( function.parametersOrEmpty().map { it.type() }, function.resultsOrEmpty().map { it.type() } @@ -196,8 +196,8 @@ class TypeComputerTest { @Test fun `parameters should have declared type`() { withCompilationUnitFromFile("declarations/parameters") { - findUniqueDeclarationOrFail("myStepWithNormalParameter") - .descendants().forEach { + findUniqueDeclarationOrFail("myStepWithNormalParameter") + .descendants().forEach { it shouldHaveType it.type } } @@ -206,8 +206,8 @@ class TypeComputerTest { @Test fun `variadic parameters should have variadic type with declared element type`() { withCompilationUnitFromFile("declarations/parameters") { - findUniqueDeclarationOrFail("myStepWithVariadicParameter") - .descendants().forEach { + findUniqueDeclarationOrFail("myStepWithVariadicParameter") + .descendants().forEach { it shouldHaveType VariadicType(it.type.type()) } } @@ -216,8 +216,8 @@ class TypeComputerTest { @Test fun `lambda parameters should have type inferred from context`() { withCompilationUnitFromFile("declarations/parameters") { - findUniqueDeclarationOrFail("myStepWithLambdas") - .descendants() + findUniqueDeclarationOrFail("myStepWithLambdas") + .descendants() .toList() .forEachAsClue { it shouldHaveType String @@ -232,7 +232,7 @@ class TypeComputerTest { @Test fun `results should have declared type`() { withCompilationUnitFromFile("declarations/results") { - descendants().forEach { + descendants().forEach { it shouldHaveType it.type } } @@ -245,7 +245,7 @@ class TypeComputerTest { @Test fun `steps should have callable type with respective parameters and results`() { withCompilationUnitFromFile("declarations/steps") { - descendants().forEach { step -> + descendants().forEach { step -> step shouldHaveType CallableType( step.parametersOrEmpty().map { it.type() }, step.resultsOrEmpty().map { it.type() } @@ -315,7 +315,7 @@ class TypeComputerTest { @Test fun `arguments should have type of value`() { withCompilationUnitFromFile("expressions/arguments") { - descendants().forEach { + descendants().forEach { it shouldHaveType it.value } } @@ -328,8 +328,8 @@ class TypeComputerTest { @Test fun `block lambdas should have callable type (explicit parameter types)`() { withCompilationUnitFromFile("expressions/blockLambdas") { - findUniqueDeclarationOrFail("lambdasWithExplicitParameterTypes") - .descendants().forEach { lambda -> + findUniqueDeclarationOrFail("lambdasWithExplicitParameterTypes") + .descendants().forEach { lambda -> lambda shouldHaveType CallableType( lambda.parametersOrEmpty().map { it.type() }, lambda.blockLambdaResultsOrEmpty().map { it.type() } @@ -341,8 +341,8 @@ class TypeComputerTest { @Test fun `block lambdas should have callable type (explicit variadic parameter type)`() { withCompilationUnitFromFile("expressions/blockLambdas") { - findUniqueDeclarationOrFail("lambdasWithExplicitVariadicType") - .descendants().forEach { lambda -> + findUniqueDeclarationOrFail("lambdasWithExplicitVariadicType") + .descendants().forEach { lambda -> lambda shouldHaveType CallableType( lambda.parametersOrEmpty().map { it.type() }, lambda.blockLambdaResultsOrEmpty().map { it.type() } @@ -354,12 +354,12 @@ class TypeComputerTest { @Test fun `block lambdas should have callable type (yielded)`() { withCompilationUnitFromFile("expressions/blockLambdas") { - val step = findUniqueDeclarationOrFail("yieldedLambda") + val step = findUniqueDeclarationOrFail("yieldedLambda") - val result = step.findUniqueDeclarationOrFail("result") - val resultType = result.type.shouldBeInstanceOf() + val result = step.findUniqueDeclarationOrFail("result") + val resultType = result.type.shouldBeInstanceOf() - val lambdas = step.descendants() + val lambdas = step.descendants() lambdas.shouldHaveSize(1) val lambda = lambdas.first() @@ -373,11 +373,11 @@ class TypeComputerTest { @Test fun `block lambdas should have callable type (argument)`() { withCompilationUnitFromFile("expressions/blockLambdas") { - val parameter = findUniqueDeclarationOrFail("parameter") - val parameterType = parameter.type.shouldBeInstanceOf() + val parameter = findUniqueDeclarationOrFail("parameter") + val parameterType = parameter.type.shouldBeInstanceOf() - val step = findUniqueDeclarationOrFail("argumentLambda") - val lambdas = step.descendants() + val step = findUniqueDeclarationOrFail("argumentLambda") + val lambdas = step.descendants() lambdas.shouldHaveSize(1) val lambda = lambdas.first() @@ -395,9 +395,9 @@ class TypeComputerTest { @Test fun `class call should have class type of called class`() { withCompilationUnitFromFile("expressions/calls") { - val `class` = findUniqueDeclarationOrFail("C") + val `class` = findUniqueDeclarationOrFail("C") - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[0] shouldHaveType ClassType(`class`, isNullable = false) } @@ -406,11 +406,11 @@ class TypeComputerTest { @Test fun `callable type call should have type of result (one result)`() { withCompilationUnitFromFile("expressions/calls") { - val parameter = findUniqueDeclarationOrFail("p1") - val parameterType = parameter.type.shouldBeInstanceOf() + val parameter = findUniqueDeclarationOrFail("p1") + val parameterType = parameter.type.shouldBeInstanceOf() parameterType.resultsOrEmpty().shouldHaveSize(1) - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[1] shouldHaveType parameterType.resultsOrEmpty()[0] } @@ -419,10 +419,10 @@ class TypeComputerTest { @Test fun `callable type call should have record type (multiple result)`() { withCompilationUnitFromFile("expressions/calls") { - val parameter = findUniqueDeclarationOrFail("p2") - val parameterType = parameter.type.shouldBeInstanceOf() + val parameter = findUniqueDeclarationOrFail("p2") + val parameterType = parameter.type.shouldBeInstanceOf() - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[2] shouldHaveType RecordType(parameterType.resultsOrEmpty().map { it.name to it.type() }) } @@ -431,9 +431,9 @@ class TypeComputerTest { @Test fun `enum variant call should have enum variant type of called enum variant`() { withCompilationUnitFromFile("expressions/calls") { - val enumVariant = findUniqueDeclarationOrFail("V") + val enumVariant = findUniqueDeclarationOrFail("V") - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[3] shouldHaveType EnumVariantType(enumVariant, isNullable = false) } @@ -442,10 +442,10 @@ class TypeComputerTest { @Test fun `function call should have type of result (one result)`() { withCompilationUnitFromFile("expressions/calls") { - val function = findUniqueDeclarationOrFail("f1") + val function = findUniqueDeclarationOrFail("f1") function.resultsOrEmpty().shouldHaveSize(1) - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[4] shouldHaveType function.resultsOrEmpty()[0] } @@ -454,9 +454,9 @@ class TypeComputerTest { @Test fun `function call should have record type (multiple result)`() { withCompilationUnitFromFile("expressions/calls") { - val function = findUniqueDeclarationOrFail("f2") + val function = findUniqueDeclarationOrFail("f2") - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[5] shouldHaveType RecordType(function.resultsOrEmpty().map { it.name to it.type() }) } @@ -465,11 +465,11 @@ class TypeComputerTest { @Test fun `block lambda call should have type of result (one result)`() { withCompilationUnitFromFile("expressions/calls") { - val blockLambdas = descendants().toList() + val blockLambdas = descendants().toList() blockLambdas.shouldHaveSize(2) val blockLambda = blockLambdas[0] - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[6] shouldHaveType blockLambda.blockLambdaResultsOrEmpty()[0] } @@ -478,11 +478,11 @@ class TypeComputerTest { @Test fun `block lambda call should have record type (multiple result)`() { withCompilationUnitFromFile("expressions/calls") { - val blockLambdas = descendants().toList() + val blockLambdas = descendants().toList() blockLambdas.shouldHaveSize(2) val blockLambda = blockLambdas[1] - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[7] shouldHaveType RecordType(blockLambda.blockLambdaResultsOrEmpty().map { it.name to it.type() }) } @@ -491,11 +491,11 @@ class TypeComputerTest { @Test fun `expression lambda call should have type of result`() { withCompilationUnitFromFile("expressions/calls") { - val expressionLambdas = descendants().toList() + val expressionLambdas = descendants().toList() expressionLambdas.shouldHaveSize(1) val expressionLambda = expressionLambdas[0] - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[8] shouldHaveType expressionLambda.result } @@ -504,10 +504,10 @@ class TypeComputerTest { @Test fun `step call should have type of result (one result)`() { withCompilationUnitFromFile("expressions/calls") { - val step = findUniqueDeclarationOrFail("s1") + val step = findUniqueDeclarationOrFail("s1") step.resultsOrEmpty().shouldHaveSize(1) - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[9] shouldHaveType step.resultsOrEmpty()[0] } @@ -516,9 +516,9 @@ class TypeComputerTest { @Test fun `step call should have record type (multiple result)`() { withCompilationUnitFromFile("expressions/calls") { - val step = findUniqueDeclarationOrFail("s2") + val step = findUniqueDeclarationOrFail("s2") - val calls = descendants().toList() + val calls = descendants().toList() calls.shouldHaveSize(11) calls[10] shouldHaveType RecordType(step.resultsOrEmpty().map { it.name to it.type() }) } @@ -531,8 +531,8 @@ class TypeComputerTest { @Test fun `expression lambdas should have callable type (explicit parameter types)`() { withCompilationUnitFromFile("expressions/expressionLambdas") { - findUniqueDeclarationOrFail("lambdasWithExplicitParameterTypes") - .descendants().forEach { lambda -> + findUniqueDeclarationOrFail("lambdasWithExplicitParameterTypes") + .descendants().forEach { lambda -> lambda shouldHaveType CallableType( lambda.parametersOrEmpty().map { it.type() }, listOf(lambda.result.type()) @@ -544,8 +544,8 @@ class TypeComputerTest { @Test fun `expression lambdas should have callable type (explicit variadic parameter type)`() { withCompilationUnitFromFile("expressions/expressionLambdas") { - findUniqueDeclarationOrFail("lambdasWithExplicitVariadicType") - .descendants().forEach { lambda -> + findUniqueDeclarationOrFail("lambdasWithExplicitVariadicType") + .descendants().forEach { lambda -> lambda shouldHaveType CallableType( lambda.parametersOrEmpty().map { it.type() }, listOf(lambda.result.type()) @@ -557,12 +557,12 @@ class TypeComputerTest { @Test fun `expression lambdas should have callable type (yielded)`() { withCompilationUnitFromFile("expressions/expressionLambdas") { - val step = findUniqueDeclarationOrFail("yieldedLambda") + val step = findUniqueDeclarationOrFail("yieldedLambda") - val result = step.findUniqueDeclarationOrFail("result") - val resultType = result.type.shouldBeInstanceOf() + val result = step.findUniqueDeclarationOrFail("result") + val resultType = result.type.shouldBeInstanceOf() - val lambdas = step.descendants() + val lambdas = step.descendants() lambdas.shouldHaveSize(1) val lambda = lambdas.first() @@ -576,11 +576,11 @@ class TypeComputerTest { @Test fun `expression lambdas should have callable type (argument)`() { withCompilationUnitFromFile("expressions/expressionLambdas") { - val parameter = findUniqueDeclarationOrFail("parameter") - val parameterType = parameter.type.shouldBeInstanceOf() + val parameter = findUniqueDeclarationOrFail("parameter") + val parameterType = parameter.type.shouldBeInstanceOf() - val step = findUniqueDeclarationOrFail("argumentLambda") - val lambdas = step.descendants() + val step = findUniqueDeclarationOrFail("argumentLambda") + val lambdas = step.descendants() lambdas.shouldHaveSize(1) val lambda = lambdas.first() @@ -598,8 +598,8 @@ class TypeComputerTest { @Test fun `indexed accesses should return element type if receiver is variadic (myStep1)`() { withCompilationUnitFromFile("expressions/indexedAccesses") { - findUniqueDeclarationOrFail("myStep1") - .descendants() + findUniqueDeclarationOrFail("myStep1") + .descendants() .forEach { it shouldHaveType Int } @@ -609,8 +609,8 @@ class TypeComputerTest { @Test fun `indexed accesses should return element type if receiver is variadic (myStep2)`() { withCompilationUnitFromFile("expressions/indexedAccesses") { - findUniqueDeclarationOrFail("myStep2") - .descendants() + findUniqueDeclarationOrFail("myStep2") + .descendants() .forEach { it shouldHaveType String } @@ -620,8 +620,8 @@ class TypeComputerTest { @Test fun `indexed accesses should return Nothing type if receiver is not variadic`() { withCompilationUnitFromFile("expressions/indexedAccesses") { - findUniqueDeclarationOrFail("myStep3") - .descendants() + findUniqueDeclarationOrFail("myStep3") + .descendants() .forEach { it shouldHaveType Nothing } @@ -631,8 +631,8 @@ class TypeComputerTest { @Test fun `indexed accesses should return Unresolved type if receiver is unresolved`() { withCompilationUnitFromFile("expressions/indexedAccesses") { - findUniqueDeclarationOrFail("myStep4") - .descendants() + findUniqueDeclarationOrFail("myStep4") + .descendants() .forEach { it shouldHaveType UnresolvedType } @@ -646,7 +646,7 @@ class TypeComputerTest { @Test fun `non-null-safe member accesses should have type of referenced member`() { withCompilationUnitFromFile("expressions/memberAccesses") { - descendants() + descendants() .filter { !it.isNullSafe } .forEach { it shouldHaveType it.member @@ -657,7 +657,7 @@ class TypeComputerTest { @Test fun `null-safe member accesses should have type of referenced member but nullable`() { withCompilationUnitFromFile("expressions/memberAccesses") { - descendants() + descendants() .filter { it.isNullSafe } .forEach { it shouldHaveType it.member.type().setIsNullableOnCopy(isNullable = true) @@ -672,7 +672,7 @@ class TypeComputerTest { @Test fun `parenthesized expressions should have type of expressions`() { withCompilationUnitFromFile("expressions/parenthesizedExpressions") { - descendants().forEach { + descendants().forEach { it shouldHaveType it.expression } } @@ -685,7 +685,7 @@ class TypeComputerTest { @Test fun `references should have type of referenced declaration`() { withCompilationUnitFromFile("expressions/references") { - descendants().forEach { + descendants().forEach { it shouldHaveType it.declaration } } @@ -797,9 +797,9 @@ class TypeComputerTest { @Test fun `elvis operator with non-nullable left operand should have type of left operand`() { withCompilationUnitFromFile("expressions/operations/elvis") { - findUniqueDeclarationOrFail("elvisWithNonNullableLeftOperand") - .descendants() - .filter { it.operator() == SmlInfixOperationOperator.Elvis } + findUniqueDeclarationOrFail("elvisWithNonNullableLeftOperand") + .descendants() + .filter { it.operator() == SdsInfixOperationOperator.Elvis } .forEach { it shouldHaveType it.leftOperand } } } @@ -857,7 +857,7 @@ class TypeComputerTest { @Test fun `callable type should have callable type with respective parameters and results`() { withCompilationUnitFromFile("types/callableTypes") { - descendants().forEach { callableType -> + descendants().forEach { callableType -> callableType shouldHaveType CallableType( callableType.parametersOrEmpty().map { it.type() }, callableType.resultsOrEmpty().map { it.type() } @@ -873,8 +873,8 @@ class TypeComputerTest { @Test fun `non-nullable member type should have type of referenced member`() { withCompilationUnitFromFile("types/memberTypes") { - findUniqueDeclarationOrFail("nonNullableMemberTypes") - .descendants().forEach { + findUniqueDeclarationOrFail("nonNullableMemberTypes") + .descendants().forEach { it shouldHaveType it.member } } @@ -883,8 +883,8 @@ class TypeComputerTest { @Test fun `nullable member type should have nullable type of referenced member`() { withCompilationUnitFromFile("types/memberTypes") { - findUniqueDeclarationOrFail("nullableMemberTypes") - .descendants().forEach { + findUniqueDeclarationOrFail("nullableMemberTypes") + .descendants().forEach { it shouldHaveType it.member.type().setIsNullableOnCopy(isNullable = true) } } @@ -897,8 +897,8 @@ class TypeComputerTest { @Test fun `non-nullable named type should have type of referenced declaration`() { withCompilationUnitFromFile("types/namedTypes") { - findUniqueDeclarationOrFail("nonNullableNamedTypes") - .descendants().forEach { + findUniqueDeclarationOrFail("nonNullableNamedTypes") + .descendants().forEach { it shouldHaveType it.declaration } } @@ -907,8 +907,8 @@ class TypeComputerTest { @Test fun `nullable named type should have nullable type of referenced declaration`() { withCompilationUnitFromFile("types/namedTypes") { - findUniqueDeclarationOrFail("nullableNamedTypes") - .descendants().forEach { + findUniqueDeclarationOrFail("nullableNamedTypes") + .descendants().forEach { it shouldHaveType it.declaration.type().setIsNullableOnCopy(isNullable = true) } } @@ -921,7 +921,7 @@ class TypeComputerTest { @Test fun `parenthesized type should have type of type`() { withCompilationUnitFromFile("types/parenthesizedTypes") { - descendants().forEach { + descendants().forEach { it shouldHaveType it.type } } @@ -934,7 +934,7 @@ class TypeComputerTest { @Test fun `union type should have union type over its type arguments`() { withCompilationUnitFromFile("types/unionTypes") { - descendants().forEach { unionType -> + descendants().forEach { unionType -> unionType shouldHaveType UnionType( unionType.typeArgumentsOrEmpty().map { it.type() }.toSet() ) @@ -947,22 +947,22 @@ class TypeComputerTest { // Helpers // ****************************************************************************************************************/ - infix fun SmlAbstractObject.shouldHaveType(expectedType: Type) { + infix fun SdsAbstractObject.shouldHaveType(expectedType: Type) { this.type().shouldBe(expectedType) } - infix fun SmlAbstractObject.shouldHaveType(expected: SmlAbstractObject) { + infix fun SdsAbstractObject.shouldHaveType(expected: SdsAbstractObject) { this.type().shouldBe(expected.type()) } - private fun SmlPlaceholder.assignedValueOrFail(): SmlAbstractObject { + private fun SdsPlaceholder.assignedValueOrFail(): SdsAbstractObject { return this.assignedOrNull() ?: throw IllegalArgumentException("No value is assigned to placeholder with name '$name'.") } - private fun SmlCompilationUnit.placeholderWithName(name: String): SmlPlaceholder { + private fun SdsCompilationUnit.placeholderWithName(name: String): SdsPlaceholder { val candidates = this.eAllContents().asSequence() - .filterIsInstance() + .filterIsInstance() .filter { it.name == name } .toList() @@ -972,21 +972,21 @@ class TypeComputerTest { } } - private fun withCompilationUnitFromFile(file: String, lambda: SmlCompilationUnit.() -> Unit) { - val program = Files.readString(Path.of(testRoot, "$file.${SmlFileExtension.Test}")) + private fun withCompilationUnitFromFile(file: String, lambda: SdsCompilationUnit.() -> Unit) { + val program = Files.readString(Path.of(testRoot, "$file.${SdsFileExtension.Test}")) val compilationUnit = parseHelper.parseProgramText(program) ?: throw IllegalArgumentException("File is not a compilation unit.") compilationUnit.apply(lambda) } - private val SmlCompilationUnit.Any get() = stdlibType(this, StdlibClasses.Any) - private val SmlCompilationUnit.AnyOrNull get() = stdlibType(this, StdlibClasses.Any, isNullable = true) - private val SmlCompilationUnit.Boolean get() = stdlibType(this, StdlibClasses.Boolean) - private val SmlCompilationUnit.Number get() = stdlibType(this, StdlibClasses.Number) - private val SmlCompilationUnit.Float get() = stdlibType(this, StdlibClasses.Float) - private val SmlCompilationUnit.Int get() = stdlibType(this, StdlibClasses.Int) - private val SmlCompilationUnit.IntOrNull get() = stdlibType(this, StdlibClasses.Int, isNullable = true) - private val SmlCompilationUnit.Nothing get() = stdlibType(this, StdlibClasses.Nothing) - private val SmlCompilationUnit.NothingOrNull get() = stdlibType(this, StdlibClasses.Nothing, isNullable = true) - private val SmlCompilationUnit.String get() = stdlibType(this, StdlibClasses.String) + private val SdsCompilationUnit.Any get() = stdlibType(this, StdlibClasses.Any) + private val SdsCompilationUnit.AnyOrNull get() = stdlibType(this, StdlibClasses.Any, isNullable = true) + private val SdsCompilationUnit.Boolean get() = stdlibType(this, StdlibClasses.Boolean) + private val SdsCompilationUnit.Number get() = stdlibType(this, StdlibClasses.Number) + private val SdsCompilationUnit.Float get() = stdlibType(this, StdlibClasses.Float) + private val SdsCompilationUnit.Int get() = stdlibType(this, StdlibClasses.Int) + private val SdsCompilationUnit.IntOrNull get() = stdlibType(this, StdlibClasses.Int, isNullable = true) + private val SdsCompilationUnit.Nothing get() = stdlibType(this, StdlibClasses.Nothing) + private val SdsCompilationUnit.NothingOrNull get() = stdlibType(this, StdlibClasses.Nothing, isNullable = true) + private val SdsCompilationUnit.String get() = stdlibType(this, StdlibClasses.String) } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibAnnotationsTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibAnnotationsTest.kt similarity index 77% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibAnnotationsTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibAnnotationsTest.kt index 304e042d9..4f55059db 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/stdlibAccess/StdlibAnnotationsTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/stdlibAccess/StdlibAnnotationsTest.kt @@ -1,13 +1,13 @@ -package de.unibonn.simpleml.stdlibAccess +package com.larsreimann.safeds.stdlibAccess import com.google.inject.Inject -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.testing.ParseHelper -import de.unibonn.simpleml.testing.SimpleMLInjectorProvider -import de.unibonn.simpleml.testing.assertions.findUniqueDeclarationOrFail +import com.larsreimann.safeds.constant.SdsFileExtension +import com.larsreimann.safeds.safeDS.SdsAnnotation +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.safeDS.SdsFunction +import com.larsreimann.safeds.testing.ParseHelper +import com.larsreimann.safeds.testing.SafeDSInjectorProvider +import com.larsreimann.safeds.testing.assertions.findUniqueDeclarationOrFail import io.kotest.matchers.booleans.shouldBeFalse import io.kotest.matchers.booleans.shouldBeTrue import io.kotest.matchers.collections.shouldContainExactly @@ -23,7 +23,7 @@ import org.junit.jupiter.api.extension.ExtendWith private const val testRoot = "stdlibAccess/annotations" @ExtendWith(InjectionExtension::class) -@InjectWith(SimpleMLInjectorProvider::class) +@InjectWith(SafeDSInjectorProvider::class) class StdlibAnnotationsTest { @Inject @@ -34,19 +34,19 @@ class StdlibAnnotationsTest { @Test fun `should return description if it exists and is unique`() = withCompilationUnit("description") { - val testData = findUniqueDeclarationOrFail("functionWithUniqueDescription") + val testData = findUniqueDeclarationOrFail("functionWithUniqueDescription") testData.descriptionOrNull() shouldBe "Lorem ipsum" } @Test fun `should return null if description is not unique`() = withCompilationUnit("description") { - val testData = findUniqueDeclarationOrFail("functionWithMultipleDescriptions") + val testData = findUniqueDeclarationOrFail("functionWithMultipleDescriptions") testData.descriptionOrNull().shouldBeNull() } @Test fun `should return null if declaration does not have a description`() = withCompilationUnit("description") { - val testData = findUniqueDeclarationOrFail("functionWithoutDescription") + val testData = findUniqueDeclarationOrFail("functionWithoutDescription") testData.descriptionOrNull().shouldBeNull() } } @@ -56,13 +56,13 @@ class StdlibAnnotationsTest { @Test fun `should return false if the declaration is not deprecated`() = withCompilationUnit("deprecated") { - val testData = findUniqueDeclarationOrFail("nonDeprecatedFunction") + val testData = findUniqueDeclarationOrFail("nonDeprecatedFunction") testData.isDeprecated().shouldBeFalse() } @Test fun `should return true if the declaration is deprecated`() = withCompilationUnit("deprecated") { - val testData = findUniqueDeclarationOrFail("deprecatedFunction") + val testData = findUniqueDeclarationOrFail("deprecatedFunction") testData.isDeprecated().shouldBeTrue() } } @@ -72,13 +72,13 @@ class StdlibAnnotationsTest { @Test fun `should return false if the function is not pure`() = withCompilationUnit("pure") { - val testData = findUniqueDeclarationOrFail("impureFunction") + val testData = findUniqueDeclarationOrFail("impureFunction") testData.isPure().shouldBeFalse() } @Test fun `should return true if the function is pure`() = withCompilationUnit("pure") { - val testData = findUniqueDeclarationOrFail("pureFunction") + val testData = findUniqueDeclarationOrFail("pureFunction") testData.isPure().shouldBeTrue() } } @@ -88,13 +88,13 @@ class StdlibAnnotationsTest { @Test fun `should return false if the annotation is not repeatable`() = withCompilationUnit("repeatable") { - val testData = findUniqueDeclarationOrFail("UnrepeatableAnnotation") + val testData = findUniqueDeclarationOrFail("UnrepeatableAnnotation") testData.isRepeatable().shouldBeFalse() } @Test fun `should return true if the annotation is repeatable`() = withCompilationUnit("repeatable") { - val testData = findUniqueDeclarationOrFail("RepeatableAnnotation") + val testData = findUniqueDeclarationOrFail("RepeatableAnnotation") testData.isRepeatable().shouldBeTrue() } } @@ -125,19 +125,19 @@ class StdlibAnnotationsTest { @Test fun `should return Python name if it exists and is unique`() = withCompilationUnit("pythonName") { - val testData = findUniqueDeclarationOrFail("functionWithUniquePythonName") + val testData = findUniqueDeclarationOrFail("functionWithUniquePythonName") testData.pythonNameOrNull() shouldBe "function_with_python_name" } @Test fun `should return null if Python name is not unique`() = withCompilationUnit("pythonName") { - val testData = findUniqueDeclarationOrFail("functionWithMultiplePythonNames") + val testData = findUniqueDeclarationOrFail("functionWithMultiplePythonNames") testData.pythonNameOrNull().shouldBeNull() } @Test fun `should return null if compilation unit does not have a Python name`() = withCompilationUnit("pythonName") { - val testData = findUniqueDeclarationOrFail("functionWithoutPythonName") + val testData = findUniqueDeclarationOrFail("functionWithoutPythonName") testData.pythonNameOrNull().shouldBeNull() } } @@ -147,20 +147,20 @@ class StdlibAnnotationsTest { @Test fun `should return version if it exists and is unique`() = withCompilationUnit("since") { - val testData = findUniqueDeclarationOrFail("functionWithUniqueSince") + val testData = findUniqueDeclarationOrFail("functionWithUniqueSince") testData.sinceVersionOrNull() shouldBe "1.0.0" } @Test fun `should return null if version is not unique`() = withCompilationUnit("since") { - val testData = findUniqueDeclarationOrFail("functionWithoutSince") + val testData = findUniqueDeclarationOrFail("functionWithoutSince") testData.sinceVersionOrNull().shouldBeNull() } @Test fun `should return null if declaration does not specify the version it was added`() = withCompilationUnit("since") { - val testData = findUniqueDeclarationOrFail("functionWithMultipleSinces") + val testData = findUniqueDeclarationOrFail("functionWithMultipleSinces") testData.sinceVersionOrNull().shouldBeNull() } } @@ -170,27 +170,27 @@ class StdlibAnnotationsTest { @Test fun `should return targets if it exists and is unique`() = withCompilationUnit("target") { - val testData = findUniqueDeclarationOrFail("AnnotationWithUniqueTarget") + val testData = findUniqueDeclarationOrFail("AnnotationWithUniqueTarget") testData.validTargets().shouldContainExactly(StdlibEnums.AnnotationTarget.Class) } @Test fun `should return all possible targets if targets is not unique`() = withCompilationUnit("target") { - val testData = findUniqueDeclarationOrFail("AnnotationWithoutTarget") + val testData = findUniqueDeclarationOrFail("AnnotationWithoutTarget") testData.validTargets() shouldBe StdlibEnums.AnnotationTarget.values() } @Test fun `should return all possible targets if annotation does not restrict its targets`() = withCompilationUnit("target") { - val testData = findUniqueDeclarationOrFail("AnnotationWithMultipleTargets") + val testData = findUniqueDeclarationOrFail("AnnotationWithMultipleTargets") testData.validTargets() shouldBe StdlibEnums.AnnotationTarget.values() } } - private fun withCompilationUnit(resourceName: String, check: SmlCompilationUnit.() -> Unit) { + private fun withCompilationUnit(resourceName: String, check: SdsCompilationUnit.() -> Unit) { parseHelper - .parseResource("$testRoot/$resourceName.${SmlFileExtension.Test}") + .parseResource("$testRoot/$resourceName.${SdsFileExtension.Test}") .shouldNotBeNull() .check() } diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/testing/TestRangesTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/testing/TestRangesTest.kt similarity index 88% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/testing/TestRangesTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/testing/TestRangesTest.kt index 4e8a08c6f..efa311ee8 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/testing/TestRangesTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/testing/TestRangesTest.kt @@ -1,12 +1,12 @@ -package de.unibonn.simpleml.testing - -import de.unibonn.simpleml.location.XtextPosition -import de.unibonn.simpleml.location.XtextRange -import de.unibonn.simpleml.testing.FindTestRangesResult.CloseWithoutOpenFailure -import de.unibonn.simpleml.testing.FindTestRangesResult.OpenWithoutCloseFailure -import de.unibonn.simpleml.testing.FindTestRangesResult.Success -import de.unibonn.simpleml.testing.TestMarker.CLOSE -import de.unibonn.simpleml.testing.TestMarker.OPEN +package com.larsreimann.safeds.testing + +import com.larsreimann.safeds.location.XtextPosition +import com.larsreimann.safeds.location.XtextRange +import com.larsreimann.safeds.testing.FindTestRangesResult.CloseWithoutOpenFailure +import com.larsreimann.safeds.testing.FindTestRangesResult.OpenWithoutCloseFailure +import com.larsreimann.safeds.testing.FindTestRangesResult.Success +import com.larsreimann.safeds.testing.TestMarker.CLOSE +import com.larsreimann.safeds.testing.TestMarker.OPEN import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.shouldBe import io.kotest.matchers.types.shouldBeInstanceOf diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/utils/CollectionUtilsTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/utils/CollectionUtilsTest.kt similarity index 98% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/utils/CollectionUtilsTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/utils/CollectionUtilsTest.kt index 1ee260413..0eafacc80 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/utils/CollectionUtilsTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/utils/CollectionUtilsTest.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.utils +package com.larsreimann.safeds.utils import io.kotest.matchers.collections.shouldContainExactly import io.kotest.matchers.nulls.shouldBeNull diff --git a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/utils/IdManagerTest.kt b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/utils/IdManagerTest.kt similarity index 98% rename from DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/utils/IdManagerTest.kt rename to DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/utils/IdManagerTest.kt index 24ad49c1d..60bb50667 100644 --- a/DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/utils/IdManagerTest.kt +++ b/DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/utils/IdManagerTest.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.utils +package com.larsreimann.safeds.utils import io.kotest.matchers.booleans.shouldBeFalse import io.kotest.matchers.booleans.shouldBeTrue diff --git a/DSL/de.unibonn.simpleml/src/test/resources/conversion/idValueConverter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/conversion/idValueConverter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/conversion/idValueConverter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/conversion/idValueConverter.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/conversion/intValueConverter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/conversion/intValueConverter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/conversion/intValueConverter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/conversion/intValueConverter.sdstest diff --git a/DSL/com.larsreimann.safeds/src/test/resources/conversion/qualifiedNameValueConverter.sdstest b/DSL/com.larsreimann.safeds/src/test/resources/conversion/qualifiedNameValueConverter.sdstest new file mode 100644 index 000000000..b8e2c45b7 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/test/resources/conversion/qualifiedNameValueConverter.sdstest @@ -0,0 +1,3 @@ +package safeds.`package` + +import safeds.`package`.* diff --git a/DSL/de.unibonn.simpleml/src/test/resources/conversion/stringValueConverter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/conversion/stringValueConverter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/conversion/stringValueConverter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/conversion/stringValueConverter.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/conversion/templateStringPartValueConverter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/conversion/templateStringPartValueConverter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/conversion/templateStringPartValueConverter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/conversion/templateStringPartValueConverter.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/compilationUnits/empty.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/compilationUnits/empty.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/compilationUnits/empty.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/compilationUnits/empty.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/compilationUnits/withoutPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/compilationUnits/withoutPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/compilationUnits/withoutPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/compilationUnits/withoutPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/annotation.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/annotation.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/annotation.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/annotation.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/annotationCall on compilation unit.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/annotationCall on compilation unit.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/annotationCall on compilation unit.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/annotationCall on compilation unit.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/annotationCall on declaration.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/annotationCall on declaration.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/annotationCall on declaration.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/annotationCall on declaration.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/attribute.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/attribute.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/attribute.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/attribute.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/class.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/class.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/class.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/class.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/enum.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/enum.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/enum.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/enum.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/enumVariant.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/enumVariant.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/enumVariant.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/enumVariant.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/function.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/function.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/function.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/function.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/import.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/import.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/import.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/import.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/annotationUsesWithImports.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/annotationUsesWithImports.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/annotationUsesWithImports.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/annotationUsesWithImports.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/annotationUsesWithName.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/annotationUsesWithName.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/annotationUsesWithName.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/annotationUsesWithName.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/full.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/full.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/full.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/full.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/importsAndMembers.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/importsAndMembers.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/importsAndMembers.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/importsAndMembers.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/nameAndMembers.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/nameAndMembers.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/packages/nameAndMembers.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/packages/nameAndMembers.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/predicates.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/predicates.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/predicates.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/predicates.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/alternative.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/alternative.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/alternative.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/alternative.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/body.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/body.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/body.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/body.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/complement.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/complement.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/complement.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/complement.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/empty.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/empty.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/empty.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/empty.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/full.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/full.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/full.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/full.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/parenthesizedTerm.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/parenthesizedTerm.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/parenthesizedTerm.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/parenthesizedTerm.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/protocols and members in one class.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/protocols and members in one class.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/protocols and members in one class.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/protocols and members in one class.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/quantifiedTerm.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/quantifiedTerm.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/quantifiedTerm.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/quantifiedTerm.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/sequence.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/sequence.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/sequence.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/sequence.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/subterm.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/subterm.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/subterm.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/subterm.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/subtermList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/subtermList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/protocols/subtermList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/protocols/subtermList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/step.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/step.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/step.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/step.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/workflow.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/workflow.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/declarations/workflow.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/declarations/workflow.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/blockLambda.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/blockLambda.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/blockLambda.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/blockLambda.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/call.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/call.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/call.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/call.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/expressionLambda.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/expressionLambda.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/expressionLambda.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/expressionLambda.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/indexedAccess.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/indexedAccess.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/indexedAccess.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/indexedAccess.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/infixOperations.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/infixOperations.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/infixOperations.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/infixOperations.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/memberAccess.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/memberAccess.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/memberAccess.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/memberAccess.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/parenthesizedExpression.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/parenthesizedExpression.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/parenthesizedExpression.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/parenthesizedExpression.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/parenthesizedGoalExpression.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/parenthesizedGoalExpression.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/parenthesizedGoalExpression.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/parenthesizedGoalExpression.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/prefixOperations.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/prefixOperations.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/prefixOperations.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/prefixOperations.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/templateString.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/templateString.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/expressions/templateString.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/expressions/templateString.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/statements/assignment.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/statements/assignment.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/statements/assignment.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/statements/assignment.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/statements/blocks.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/statements/blocks.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/statements/blocks.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/statements/blocks.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/statements/expressionStatement.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/statements/expressionStatement.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/statements/expressionStatement.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/statements/expressionStatement.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/statements/goalAssignment.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/statements/goalAssignment.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/statements/goalAssignment.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/statements/goalAssignment.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/types/callableType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/types/callableType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/types/callableType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/types/callableType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/types/memberType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/types/memberType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/types/memberType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/types/memberType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/types/namedType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/types/namedType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/types/namedType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/types/namedType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/types/parenthesizedType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/types/parenthesizedType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/types/parenthesizedType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/types/parenthesizedType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/formatting/types/unionType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/formatting/types/unionType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/formatting/types/unionType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/formatting/types/unionType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty step/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty step/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty step/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty step/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty step/output/tests/generator/emptyStep/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty step/output/tests/generator/emptyStep/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty step/output/tests/generator/emptyStep/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty step/output/tests/generator/emptyStep/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty workflow/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty workflow/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty workflow/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty workflow/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/empty workflow/output/tests/generator/emptyWorkflow/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/parameter with python name/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/parameter with python name/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/parameter with python name/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/parameter with python name/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/parameter with python name/output/tests/generator/parameterWithPythonName/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/parameter with python name/output/tests/generator/parameterWithPythonName/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/parameter with python name/output/tests/generator/parameterWithPythonName/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/parameter with python name/output/tests/generator/parameterWithPythonName/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/step with python name/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/step with python name/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/step with python name/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/step with python name/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/step with python name/output/tests/generator/stepWithPythonName/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/step with python name/output/tests/generator/stepWithPythonName/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/step with python name/output/tests/generator/stepWithPythonName/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/step with python name/output/tests/generator/stepWithPythonName/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two steps/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two steps/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two steps/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two steps/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two steps/output/tests/generator/twoSteps/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two steps/output/tests/generator/twoSteps/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two steps/output/tests/generator/twoSteps/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two steps/output/tests/generator/twoSteps/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two workflows/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two workflows/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two workflows/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two workflows/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test1.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test1.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test1.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test1.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test2.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test2.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test2.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/two workflows/output/tests/generator/twoWorkflows/gen_input_test2.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/workflow with python name/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/workflow with python name/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/workflow with python name/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/workflow with python name/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input_test_flow.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input_test_flow.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input_test_flow.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/declarations/workflow with python name/output/tests/generator/workflowWithPythonName/gen_input_test_flow.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/block lambda/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/block lambda/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/block lambda/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/block lambda/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/block lambda/output/tests/generator/blockLambda/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/call/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/call/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/call/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/call/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/call/output/tests/generator/call/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/constant/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/constant/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/constant/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/constant/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/constant/output/tests/generator/constant/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/enum variant call/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/enum variant call/input.sdstest similarity index 75% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/enum variant call/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/enum variant call/input.sdstest index 6cce0c02a..24973bbfd 100644 --- a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/enum variant call/input.smltest +++ b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/enum variant call/input.sdstest @@ -1,4 +1,4 @@ -// Related to https://github.com/lars-reimann/Simple-ML/issues/118 +// Related to https://github.com/lars-reimann/Safe-DS/issues/118 package tests.generator.enumVariantCall diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/enum variant call/output/tests/generator/enumVariantCall/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/expression lambda/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/expression lambda/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/expression lambda/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/expression lambda/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/expression lambda/output/tests/generator/expressionLambda/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/indexed access/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/indexed access/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/indexed access/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/indexed access/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/indexed access/output/tests/generator/indexedAccess/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/indexed access/output/tests/generator/indexedAccess/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/indexed access/output/tests/generator/indexedAccess/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/indexed access/output/tests/generator/indexedAccess/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/infix operation/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/infix operation/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/infix operation/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/infix operation/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input.py similarity index 73% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input.py index 2c58a2282..2e21352c7 100644 --- a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input.py +++ b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input.py @@ -1,12 +1,12 @@ # Imports ---------------------------------------------------------------------- -import simpleml.codegen +import safeds.codegen # Workflows -------------------------------------------------------------------- def test(): - f(simpleml.codegen.eager_or(g(), g())) - f(simpleml.codegen.eager_and(g(), g())) + f(safeds.codegen.eager_or(g(), g())) + f(safeds.codegen.eager_and(g(), g())) f((h()) == (h())) f((h()) != (h())) f((h()) is (h())) @@ -19,4 +19,4 @@ def test(): f((h()) - (h())) f((h()) * (h())) f((h()) / (h())) - f(simpleml.codegen.eager_elvis(i(), i())) + f(safeds.codegen.eager_elvis(i(), i())) diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/infix operation/output/tests/generator/infixOperation/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/literals/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/literals/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/literals/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/literals/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/literals/output/tests/generator/literals/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/member access/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/member access/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/member access/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/member access/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input.py similarity index 65% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input.py index ab757cdb3..f71199145 100644 --- a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input.py +++ b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input.py @@ -1,6 +1,6 @@ # Imports ---------------------------------------------------------------------- -import simpleml.codegen +import safeds.codegen # Workflows -------------------------------------------------------------------- @@ -10,5 +10,5 @@ def test(): f(h()[1]) f(C().a) f(C().c) - f(simpleml.codegen.safe_access(factory(), 'a')) - f(simpleml.codegen.safe_access(factory(), 'c')) + f(safeds.codegen.safe_access(factory(), 'a')) + f(safeds.codegen.safe_access(factory(), 'c')) diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/member access/output/tests/generator/memberAccess/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/parenthesized expression/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/parenthesized expression/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/parenthesized expression/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/parenthesized expression/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/parenthesized expression/output/tests/generator/parenthesizedExpression/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/prefix operation/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/prefix operation/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/prefix operation/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/prefix operation/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/prefix operation/output/tests/generator/prefixOperation/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/reference/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/reference/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/reference/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/reference/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/reference/output/tests/generator/reference/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/template string/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/template string/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/template string/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/template string/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/expressions/template string/output/tests/generator/templateString/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/imports/_skip_ context different package.smlstub b/DSL/com.larsreimann.safeds/src/test/resources/generator/imports/_skip_ context different package.sdsstub similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/imports/_skip_ context different package.smlstub rename to DSL/com.larsreimann.safeds/src/test/resources/generator/imports/_skip_ context different package.sdsstub diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/imports/_skip_ context package with python module.smlstub b/DSL/com.larsreimann.safeds/src/test/resources/generator/imports/_skip_ context package with python module.sdsstub similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/imports/_skip_ context package with python module.smlstub rename to DSL/com.larsreimann.safeds/src/test/resources/generator/imports/_skip_ context package with python module.sdsstub diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/imports/_skip_ context same package.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/imports/_skip_ context same package.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/imports/_skip_ context same package.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/imports/_skip_ context same package.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/imports/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/imports/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/imports/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/imports/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/imports/output/tests/generator/imports/gen__skip__context_same_package.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/imports/output/tests/generator/imports/gen__skip__context_same_package.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/imports/output/tests/generator/imports/gen__skip__context_same_package.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/imports/output/tests/generator/imports/gen__skip__context_same_package.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/imports/output/tests/generator/imports/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/imports/output/tests/generator/imports/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/imports/output/tests/generator/imports/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/imports/output/tests/generator/imports/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/imports/output/tests/generator/imports/gen_input_test.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/imports/output/tests/generator/imports/gen_input_test.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/imports/output/tests/generator/imports/gen_input_test.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/imports/output/tests/generator/imports/gen_input_test.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/python module/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/python module/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/python module/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/python module/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/python module/output/special_module/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/python module/output/special_module/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/python module/output/special_module/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/python module/output/special_module/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/statements/assignment/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/statements/assignment/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/statements/assignment/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/statements/assignment/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input_testFlow.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input_testFlow.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input_testFlow.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/statements/assignment/output/tests/generator/assignment/gen_input_testFlow.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/statements/expression statement/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/statements/expression statement/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/statements/expression statement/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/statements/expression statement/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input_testFlow.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input_testFlow.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input_testFlow.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/statements/expression statement/output/tests/generator/expressionStatement/gen_input_testFlow.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/statements/statement without effect/input.smltest b/DSL/com.larsreimann.safeds/src/test/resources/generator/statements/statement without effect/input.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/statements/statement without effect/input.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/generator/statements/statement without effect/input.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input_testFlow.py b/DSL/com.larsreimann.safeds/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input_testFlow.py similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input_testFlow.py rename to DSL/com.larsreimann.safeds/src/test/resources/generator/statements/statement without effect/output/tests/generator/statementWithoutEffect/gen_input_testFlow.py diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-annotation between package and import.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-annotation between package and import.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-annotation between package and import.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-annotation between package and import.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-duplicate package.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-duplicate package.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-duplicate package.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-duplicate package.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-import before declaration b/DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-import before declaration similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-import before declaration rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-import before declaration diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-import before package.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-import before package.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/bad-import before package.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/bad-import before package.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/good-complex example.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/good-complex example.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/good-complex example.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/good-complex example.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/good-empty.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/good-empty.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/good-empty.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/good-empty.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/good-lone annotation call.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/good-lone annotation call.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/compilationUnits/good-lone annotation call.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/compilationUnits/good-lone annotation call.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/annotation.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/annotation.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/annotation.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/annotation.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/annotationUse.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/annotationUse.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/annotationUse.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/annotationUse.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/class.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/class.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/class.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/class.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/enum.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/enum.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/enum.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/enum.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/function.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/function.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/function.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/function.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-annotationUsesWithImports.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-annotationUsesWithImports.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-annotationUsesWithImports.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-annotationUsesWithImports.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-annotationUsesWithName.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-annotationUsesWithName.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-annotationUsesWithName.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-annotationUsesWithName.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-full.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-full.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-full.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-full.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-importsOnly.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-importsOnly.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-importsOnly.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-importsOnly.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-nameOnly.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-nameOnly.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/package/good-nameOnly.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/package/good-nameOnly.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/goals/goalsWithArguments.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/goals/goalsWithArguments.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/goals/goalsWithArguments.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/goals/goalsWithArguments.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/predicate.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/predicate.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/predicate.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/predicate.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/predicateComplex.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/predicateComplex.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/predicateComplex.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/predicateComplex.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/predicateWithGoals.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/predicateWithGoals.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/predicates/predicateWithGoals.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/predicates/predicateWithGoals.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as reference list.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as reference list.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as reference list.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as reference list.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as universe.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as universe.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as universe.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with alternative as universe.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with complement as reference list.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with complement as reference list.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with complement as reference list.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with complement as reference list.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with complement as universe.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with complement as universe.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with complement as universe.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with complement as universe.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as reference list.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as reference list.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as reference list.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as reference list.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as universe.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as universe.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as universe.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with parenthesized term as universe.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with sequence as universe.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with sequence as universe.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with sequence as universe.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with sequence as universe.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with token as universe.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with token as universe.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with token as universe.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with token as universe.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with token class as reference list.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with token class as reference list.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-complement with token class as reference list.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-complement with token class as reference list.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-subterm after term.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-subterm after term.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-subterm after term.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-subterm after term.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-subterm without semicolon.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-subterm without semicolon.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/bad-subterm without semicolon.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/bad-subterm without semicolon.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-alternative.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-alternative.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-alternative.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-alternative.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-complement without reference list.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-complement without reference list.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-complement without reference list.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-complement without reference list.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-complement.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-complement.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-complement.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-complement.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-empty.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-empty.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-empty.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-empty.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-parenthesizedTerm.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-parenthesizedTerm.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-parenthesizedTerm.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-parenthesizedTerm.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-quantifiedTerm.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-quantifiedTerm.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-quantifiedTerm.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-quantifiedTerm.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-sequence.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-sequence.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-sequence.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-sequence.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-subterms.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-subterms.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-subterms.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-subterms.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-token.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-token.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-token.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-token.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-tokenClasses.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-tokenClasses.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/protocols/good-tokenClasses.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/protocols/good-tokenClasses.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/bad-two visibilities (internal, private).smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/bad-two visibilities (internal, private).sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/bad-two visibilities (internal, private).smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/bad-two visibilities (internal, private).sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/bad-two visibilities (private, internal).smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/bad-two visibilities (private, internal).sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/bad-two visibilities (private, internal).smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/bad-two visibilities (private, internal).sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/good-step in compilation unit.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/good-step in compilation unit.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/good-step in compilation unit.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/good-step in compilation unit.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/good-step in package.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/good-step in package.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/steps/good-step in package.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/steps/good-step in package.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/workflow.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/workflow.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/declarations/workflow.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/declarations/workflow.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/arithmeticOperator.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/arithmeticOperator.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/arithmeticOperator.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/arithmeticOperator.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/blockLambda.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/blockLambda.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/blockLambda.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/blockLambda.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/call.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/call.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/call.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/call.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/chainedExpression.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/chainedExpression.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/chainedExpression.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/chainedExpression.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/comparisonOperator.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/comparisonOperator.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/comparisonOperator.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/comparisonOperator.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/expressionLambda.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/expressionLambda.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/expressionLambda.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/expressionLambda.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/indexedAccess/bad-indexed access without index.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/indexedAccess/bad-indexed access without index.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/indexedAccess/bad-indexed access without index.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/indexedAccess/bad-indexed access without index.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/indexedAccess/good-indexed access.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/indexedAccess/good-indexed access.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/indexedAccess/good-indexed access.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/indexedAccess/good-indexed access.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/booleanLiteral.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/booleanLiteral.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/booleanLiteral.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/booleanLiteral.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/nullLiteral.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/nullLiteral.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/nullLiteral.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/nullLiteral.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/numberLiteral.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/numberLiteral.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/numberLiteral.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/numberLiteral.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/stringLiteral.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/stringLiteral.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/literals/stringLiteral.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/literals/stringLiteral.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/logicalOperator.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/logicalOperator.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/logicalOperator.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/logicalOperator.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/memberAccess.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/memberAccess.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/memberAccess.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/memberAccess.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/parenthesizedExpression.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/parenthesizedExpression.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/parenthesizedExpression.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/parenthesizedExpression.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/reference.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/reference.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/reference.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/reference.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/templateString_bad.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/templateString_bad.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/templateString_bad.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/templateString_bad.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/templateString_good.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/templateString_good.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/expressions/templateString_good.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/expressions/templateString_good.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnd.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnd.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnd.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnd.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnnotation.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnnotation.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnnotation.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAnnotation.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAs.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAs.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAs.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAs.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAttr.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAttr.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedAttr.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedAttr.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedClass.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedClass.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedClass.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedClass.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedConstraint.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedConstraint.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedConstraint.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedConstraint.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedEnum.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedEnum.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedEnum.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedEnum.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedFalse.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedFalse.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedFalse.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedFalse.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedFun.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedFun.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedFun.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedFun.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedImport.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedImport.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedImport.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedImport.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedIn.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedIn.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedIn.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedIn.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedNot.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedNot.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedNot.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedNot.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedNull.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedNull.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedNull.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedNull.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedOr.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedOr.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedOr.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedOr.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedOut.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedOut.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedOut.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedOut.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedStatic.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedStatic.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedStatic.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedStatic.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedStep.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedStep.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedStep.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedStep.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedSub.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedSub.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedSub.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedSub.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedSuper.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedSuper.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedSuper.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedSuper.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedTrue.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedTrue.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedTrue.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedTrue.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedUnion.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedUnion.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedUnion.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedUnion.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedVal.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedVal.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedVal.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedVal.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedVararg.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedVararg.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedVararg.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedVararg.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedWorkflow.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedWorkflow.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedWorkflow.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedWorkflow.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedYield.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedYield.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescapedYield.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescapedYield.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescaped_.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescaped_.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/bad-unescaped_.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/bad-unescaped_.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/good-escapedKeywords.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/good-escapedKeywords.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/good-escapedKeywords.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/good-escapedKeywords.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/good-escapedNonKeyword.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/good-escapedNonKeyword.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/keywordsAsNames/good-escapedNonKeyword.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/keywordsAsNames/good-escapedNonKeyword.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedEnum.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedEnum.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedEnum.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedEnum.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedResultList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedResultList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedResultList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedResultList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedTypeParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedTypeParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedTypeParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/parserShouldNotCrashOnSyntaxErrors/unclosedTypeParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/statements/assignment.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/statements/assignment.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/statements/assignment.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/statements/assignment.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/statements/expressionStatement.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/statements/expressionStatement.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/statements/expressionStatement.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/statements/expressionStatement.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAnnotationUse_ArgumentList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAnnotationUse_ArgumentList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAnnotationUse_ArgumentList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAnnotationUse_ArgumentList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAnnotation_ConstraintList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAnnotation_ConstraintList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAnnotation_ConstraintList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAnnotation_ConstraintList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAnnotation_ParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAnnotation_ParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAnnotation_ParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAnnotation_ParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAssignment_AssigneeList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAssignment_AssigneeList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inAssignment_AssigneeList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inAssignment_AssigneeList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inBlockLambda_ParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inBlockLambda_ParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inBlockLambda_ParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inBlockLambda_ParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inCall_ArgumentList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inCall_ArgumentList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inCall_ArgumentList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inCall_ArgumentList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inCall_TypeArgumentList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inCall_TypeArgumentList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inCall_TypeArgumentList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inCall_TypeArgumentList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_ConstraintList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_ConstraintList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_ConstraintList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_ConstraintList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_ParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_ParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_ParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_ParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_SuperTypeList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_SuperTypeList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_SuperTypeList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_SuperTypeList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_TypeParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_TypeParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inClass_TypeParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inClass_TypeParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inEnumVariant_ConstraintList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inEnumVariant_ConstraintList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inEnumVariant_ConstraintList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inEnumVariant_ConstraintList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inEnumVariant_ParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inEnumVariant_ParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inEnumVariant_ParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inEnumVariant_ParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inEnumVariant_TypeParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inEnumVariant_TypeParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inEnumVariant_TypeParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inEnumVariant_TypeParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inExpressionLambda_ParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inExpressionLambda_ParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inExpressionLambda_ParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inExpressionLambda_ParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunctionType_ParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunctionType_ParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunctionType_ParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunctionType_ParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunctionType_ResultList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunctionType_ResultList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunctionType_ResultList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunctionType_ResultList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_ParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_ParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_ParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_ParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_ResultList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_ResultList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_ResultList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_ResultList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterConstraintList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterConstraintList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterConstraintList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterConstraintList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inFunction_TypeParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inNamedType_TypeArgumentList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inNamedType_TypeArgumentList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inNamedType_TypeArgumentList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inNamedType_TypeArgumentList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inWorkflowStep_ParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inWorkflowStep_ParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/trailingCommas/inWorkflowStep_ParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/trailingCommas/inWorkflowStep_ParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/types/callableType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/types/callableType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/types/callableType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/types/callableType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/types/memberType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/types/memberType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/types/memberType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/types/memberType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/types/namedType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/types/namedType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/types/namedType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/types/namedType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/types/parenthesizedType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/types/parenthesizedType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/types/parenthesizedType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/types/parenthesizedType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/grammar/types/unionType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/grammar/types/unionType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/grammar/types/unionType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/grammar/types/unionType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/junit-platform.properties b/DSL/com.larsreimann.safeds/src/test/resources/junit-platform.properties similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/junit-platform.properties rename to DSL/com.larsreimann.safeds/src/test/resources/junit-platform.properties diff --git a/DSL/de.unibonn.simpleml/src/test/resources/partialEvaluation/callables.smltest b/DSL/com.larsreimann.safeds/src/test/resources/partialEvaluation/callables.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/partialEvaluation/callables.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/partialEvaluation/callables.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/partialEvaluation/calls.smltest b/DSL/com.larsreimann.safeds/src/test/resources/partialEvaluation/calls.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/partialEvaluation/calls.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/partialEvaluation/calls.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/partialEvaluation/memberAccesses.smltest b/DSL/com.larsreimann.safeds/src/test/resources/partialEvaluation/memberAccesses.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/partialEvaluation/memberAccesses.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/partialEvaluation/memberAccesses.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/partialEvaluation/references.smltest b/DSL/com.larsreimann.safeds/src/test/resources/partialEvaluation/references.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/partialEvaluation/references.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/partialEvaluation/references.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/annotationCall/externalsInOtherPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/annotationCall/externalsInOtherPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/annotationCall/externalsInOtherPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/annotationCall/externalsInOtherPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/annotationCall/externalsInSamePackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/annotationCall/externalsInSamePackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/annotationCall/externalsInSamePackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/annotationCall/externalsInSamePackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/annotationCall/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/annotationCall/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/annotationCall/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/annotationCall/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/argument/externalsInOtherPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/argument/externalsInOtherPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/argument/externalsInOtherPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/argument/externalsInOtherPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/argument/externalsInSamePackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/argument/externalsInSamePackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/argument/externalsInSamePackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/argument/externalsInSamePackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/argument/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/argument/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/argument/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/argument/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/goalReference/externalsInOtherPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/goalReference/externalsInOtherPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/goalReference/externalsInOtherPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/goalReference/externalsInOtherPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/goalReference/externalsInSamePackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/goalReference/externalsInSamePackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/goalReference/externalsInSamePackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/goalReference/externalsInSamePackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/goalReference/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/goalReference/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/goalReference/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/goalReference/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/importWithAlias/externalsInOtherPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/importWithAlias/externalsInOtherPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/importWithAlias/externalsInOtherPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/importWithAlias/externalsInOtherPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/importWithAlias/externalsInSamePackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/importWithAlias/externalsInSamePackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/importWithAlias/externalsInSamePackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/importWithAlias/externalsInSamePackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/importWithAlias/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/importWithAlias/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/importWithAlias/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/importWithAlias/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/namedType/externalsInOtherPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/namedType/externalsInOtherPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/namedType/externalsInOtherPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/namedType/externalsInOtherPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/namedType/externalsInSamePackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/namedType/externalsInSamePackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/namedType/externalsInSamePackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/namedType/externalsInSamePackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/namedType/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/namedType/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/namedType/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/namedType/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/protocolReference/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/protocolReference/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/protocolReference/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/protocolReference/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/reference/externalsInOtherPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/reference/externalsInOtherPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/reference/externalsInOtherPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/reference/externalsInOtherPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/reference/externalsInSamePackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/reference/externalsInSamePackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/reference/externalsInSamePackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/reference/externalsInSamePackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/reference/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/reference/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/reference/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/reference/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/typeArgument/externalsInOtherPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/typeArgument/externalsInOtherPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/typeArgument/externalsInOtherPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/typeArgument/externalsInOtherPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/typeArgument/externalsInSamePackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/typeArgument/externalsInSamePackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/typeArgument/externalsInSamePackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/typeArgument/externalsInSamePackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/typeArgument/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/typeArgument/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/typeArgument/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/typeArgument/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/typeParameterConstraint/externalsInOtherPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/typeParameterConstraint/externalsInOtherPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/typeParameterConstraint/externalsInOtherPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/typeParameterConstraint/externalsInOtherPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/typeParameterConstraint/externalsInSamePackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/typeParameterConstraint/externalsInSamePackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/typeParameterConstraint/externalsInSamePackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/typeParameterConstraint/externalsInSamePackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/typeParameterConstraint/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/typeParameterConstraint/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/typeParameterConstraint/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/typeParameterConstraint/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/yield/externalsInOtherPackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/yield/externalsInOtherPackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/yield/externalsInOtherPackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/yield/externalsInOtherPackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/yield/externalsInSamePackage.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/yield/externalsInSamePackage.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/yield/externalsInSamePackage.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/yield/externalsInSamePackage.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/scoping/yield/main.smltest b/DSL/com.larsreimann.safeds/src/test/resources/scoping/yield/main.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/scoping/yield/main.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/scoping/yield/main.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/serialization/extensionsTest.smltest b/DSL/com.larsreimann.safeds/src/test/resources/serialization/extensionsTest.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/serialization/extensionsTest.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/serialization/extensionsTest.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/staticAnalysis/recursion.smltest b/DSL/com.larsreimann.safeds/src/test/resources/staticAnalysis/recursion.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/staticAnalysis/recursion.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/staticAnalysis/recursion.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/staticAnalysis/sideEffects.smltest b/DSL/com.larsreimann.safeds/src/test/resources/staticAnalysis/sideEffects.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/staticAnalysis/sideEffects.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/staticAnalysis/sideEffects.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/deprecated.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/deprecated.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/deprecated.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/deprecated.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/description.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/description.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/description.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/description.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pure.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pure.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pure.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pure.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonModule.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonModule.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonModule.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonModule.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonModuleMissing.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonModuleMissing.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonModuleMissing.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonModuleMissing.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonModuleMultipleAnnotations.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonModuleMultipleAnnotations.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonModuleMultipleAnnotations.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonModuleMultipleAnnotations.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonName.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonName.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/pythonName.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/pythonName.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/repeatable.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/repeatable.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/repeatable.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/repeatable.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/since.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/since.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/since.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/since.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/target.smltest b/DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/target.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/stdlibAccess/annotations/target.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/stdlibAccess/annotations/target.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/assignees/blockLambdaResults.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/assignees/blockLambdaResults.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/assignees/blockLambdaResults.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/assignees/blockLambdaResults.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/assignees/placeholders.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/assignees/placeholders.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/assignees/placeholders.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/assignees/placeholders.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/assignees/yields.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/assignees/yields.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/assignees/yields.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/assignees/yields.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/attributes.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/attributes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/attributes.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/attributes.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/classes.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/classes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/classes.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/classes.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/enumVariants.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/enumVariants.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/enumVariants.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/enumVariants.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/enums.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/enums.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/enums.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/enums.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/functions.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/functions.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/functions.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/functions.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/parameters.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/parameters.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/parameters.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/parameters.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/results.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/results.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/results.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/results.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/steps.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/steps.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/declarations/steps.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/declarations/steps.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/arguments.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/arguments.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/arguments.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/arguments.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/blockLambdas.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/blockLambdas.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/blockLambdas.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/blockLambdas.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/calls.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/calls.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/calls.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/calls.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/expressionLambdas.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/expressionLambdas.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/expressionLambdas.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/expressionLambdas.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/indexedAccesses.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/indexedAccesses.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/indexedAccesses.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/indexedAccesses.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/literals.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/literals.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/literals.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/literals.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/memberAccesses.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/memberAccesses.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/memberAccesses.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/memberAccesses.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/arithmetic.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/arithmetic.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/arithmetic.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/arithmetic.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/comparison.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/comparison.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/comparison.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/comparison.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/elvis.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/elvis.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/elvis.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/elvis.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/equality.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/equality.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/equality.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/equality.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/logical.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/logical.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/logical.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/logical.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/strictEquality.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/strictEquality.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/operations/strictEquality.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/operations/strictEquality.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/parenthesizedExpressions.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/parenthesizedExpressions.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/parenthesizedExpressions.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/parenthesizedExpressions.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/references.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/references.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/references.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/references.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/templateStrings.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/templateStrings.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/expressions/templateStrings.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/expressions/templateStrings.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/callableTypes.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/callableTypes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/callableTypes.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/callableTypes.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/memberTypes.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/memberTypes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/memberTypes.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/memberTypes.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/namedTypes.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/namedTypes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/namedTypes.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/namedTypes.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/parenthesizedTypes.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/parenthesizedTypes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/parenthesizedTypes.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/parenthesizedTypes.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/unionTypes.smltest b/DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/unionTypes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/typeComputer/types/unionTypes.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/typeComputer/types/unionTypes.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/stub file (only annotations).smlstub b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/stub file (only annotations).sdsstub similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/stub file (only annotations).smlstub rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/stub file (only annotations).sdsstub diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/stub file (only imports).smlstub b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/stub file (only imports).sdsstub similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/stub file (only imports).smlstub rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/stub file (only imports).sdsstub diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/stub file (with declarations).smlstub b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/stub file (with declarations).sdsstub similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/stub file (with declarations).smlstub rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/stub file (with declarations).sdsstub diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/workflow file (only annotations).smlflow b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/workflow file (only annotations).sdsflow similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/workflow file (only annotations).smlflow rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/workflow file (only annotations).sdsflow diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/workflow file (only imports).smlflow b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/workflow file (only imports).sdsflow similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/workflow file (only imports).smlflow rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/workflow file (only imports).sdsflow diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/workflow file (with declarations).smlflow b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/workflow file (with declarations).sdsflow similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/must declare package/workflow file (with declarations).smlflow rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/must declare package/workflow file (with declarations).sdsflow diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/stubFileMustNotDeclareWorkflowsOrSteps.smlstub b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/stubFileMustNotDeclareWorkflowsOrSteps.sdsstub similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/stubFileMustNotDeclareWorkflowsOrSteps.smlstub rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/stubFileMustNotDeclareWorkflowsOrSteps.sdsstub diff --git a/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesAcrossFiles.sdstest b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesAcrossFiles.sdstest new file mode 100644 index 000000000..fd905b4cc --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesAcrossFiles.sdstest @@ -0,0 +1,19 @@ +package safeds.lang + +// semantic_error "A declaration with qualified name 'safeds.lang.Any' exists already." +annotation »Any« + +// semantic_error "A declaration with qualified name 'safeds.lang.Any' exists already." +class »Any« + +// semantic_error "A declaration with qualified name 'safeds.lang.Any' exists already." +enum »Any« + +// semantic_error "A declaration with qualified name 'safeds.lang.Any' exists already." +fun »Any«() + +// semantic_error "A declaration with qualified name 'safeds.lang.Any' exists already." +step »Any«() {} + +// semantic_error "A declaration with qualified name 'safeds.lang.Any' exists already." +workflow »Any« {} diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesInStubFile.smlstub b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesInStubFile.sdsstub similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesInStubFile.smlstub rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesInStubFile.sdsstub diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesInWorkflowFile.smlflow b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesInWorkflowFile.sdsflow similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesInWorkflowFile.smlflow rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/uniqueNamesInWorkflowFile.sdsflow diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/workflowFileMustOnlyDeclareWorkflowsAndSteps.smlflow b/DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/workflowFileMustOnlyDeclareWorkflowsAndSteps.sdsflow similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/workflowFileMustOnlyDeclareWorkflowsAndSteps.smlflow rename to DSL/com.larsreimann.safeds/src/test/resources/validation/compilationUnits/workflowFileMustOnlyDeclareWorkflowsAndSteps.sdsflow diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/annotations/parameter types.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/annotations/parameter types.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/annotations/parameter types.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/annotations/parameter types.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/annotations/uniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/annotations/uniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/annotations/uniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/annotations/uniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/annotations/unnecessaryParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/annotations/unnecessaryParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/annotations/unnecessaryParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/annotations/unnecessaryParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/attributes/mustHaveType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/attributes/mustHaveType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/attributes/mustHaveType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/attributes/mustHaveType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/acyclicSuperTypes.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/acyclicSuperTypes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/acyclicSuperTypes.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/acyclicSuperTypes.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/inheritedMembersMustHaveUniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/inheritedMembersMustHaveUniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/inheritedMembersMustHaveUniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/inheritedMembersMustHaveUniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/mustInheritOnlyClasses.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/mustInheritOnlyClasses.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/mustInheritOnlyClasses.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/mustInheritOnlyClasses.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/only one protocol per class.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/only one protocol per class.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/only one protocol per class.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/only one protocol per class.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/protocol reference must point to instance member.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/protocol reference must point to instance member.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/protocol reference must point to instance member.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/protocol reference must point to instance member.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/unique names for protocol subterms.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/unique names for protocol subterms.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/unique names for protocol subterms.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/unique names for protocol subterms.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/uniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/uniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/uniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/uniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/uniqueParentTypes.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/uniqueParentTypes.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/uniqueParentTypes.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/uniqueParentTypes.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/unnecessaryBody.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/unnecessaryBody.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/unnecessaryBody.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/unnecessaryBody.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/unnecessaryTypeParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/unnecessaryTypeParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/classes/unnecessaryTypeParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/classes/unnecessaryTypeParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/deprecation.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/deprecation.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/deprecation.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/deprecation.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enumVariants/uniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enumVariants/uniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enumVariants/uniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enumVariants/uniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enumVariants/unnecessaryParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enumVariants/unnecessaryParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enumVariants/unnecessaryParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enumVariants/unnecessaryParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enumVariants/unnecessaryTypeParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enumVariants/unnecessaryTypeParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enumVariants/unnecessaryTypeParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enumVariants/unnecessaryTypeParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enums/uniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enums/uniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enums/uniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enums/uniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enums/unnecessaryBody.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enums/unnecessaryBody.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/enums/unnecessaryBody.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/enums/unnecessaryBody.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/nonStaticPropagates.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/nonStaticPropagates.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/nonStaticPropagates.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/nonStaticPropagates.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/purePropagates.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/purePropagates.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/purePropagates.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/purePropagates.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/staticPropagates.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/staticPropagates.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/staticPropagates.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/staticPropagates.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/uniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/uniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/uniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/uniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/unnecessaryResultList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/unnecessaryResultList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/unnecessaryResultList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/unnecessaryResultList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/unnecessaryTypeParameterList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/unnecessaryTypeParameterList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/functions/unnecessaryTypeParameterList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/functions/unnecessaryTypeParameterList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/imports/noWildcardImportWithAlias.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/imports/noWildcardImportWithAlias.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/imports/noWildcardImportWithAlias.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/imports/noWildcardImportWithAlias.sdstest diff --git a/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/imports/unresolvedNamespace.sdstest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/imports/unresolvedNamespace.sdstest new file mode 100644 index 000000000..eabeed314 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/imports/unresolvedNamespace.sdstest @@ -0,0 +1,15 @@ +package tests.unresolvedNamespace + +// semantic_error "No declaration with qualified name 'safeds.langs.Any' exists." +import »safeds.langs.Any« +// no_semantic_error "No declaration with qualified name 'safeds.lang.Any' exists." +import »safeds.lang.Any« +// no_semantic_error "No declaration with qualified name 'tests.unresolvedNamespace.C' exists." +import »tests.unresolvedNamespace.C« + +// semantic_error "No package with qualified name 'safeds.langs' exists." +import »safeds.langs.*« +// no_semantic_error "No package with qualified name 'safeds.model' exists." +import »safeds.lang.*« + +class C diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/block lambda prefix.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/block lambda prefix.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/block lambda prefix.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/block lambda prefix.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/name convention.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/name convention.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/name convention.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/name convention.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package lowercase.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package lowercase.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package lowercase.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package lowercase.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package snake case.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package snake case.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package snake case.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package snake case.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package underscore.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package underscore.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package underscore.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package underscore.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package uppercase.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package uppercase.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/nameConvention/package uppercase.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/nameConvention/package uppercase.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameterLists/no optional and variadic parameters.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameterLists/no optional and variadic parameters.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameterLists/no optional and variadic parameters.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameterLists/no optional and variadic parameters.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameterLists/noRequiredParametersAfterFirstOptionalParameter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameterLists/noRequiredParametersAfterFirstOptionalParameter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameterLists/noRequiredParametersAfterFirstOptionalParameter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameterLists/noRequiredParametersAfterFirstOptionalParameter.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameterLists/vararg must be last parameter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameterLists/vararg must be last parameter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameterLists/vararg must be last parameter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameterLists/vararg must be last parameter.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/default value must be constant.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/default value must be constant.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/default value must be constant.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/default value must be constant.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/expert must be optional.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/expert must be optional.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/expert must be optional.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/expert must be optional.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/mustHaveType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/mustHaveType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/mustHaveType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/mustHaveType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/mustNotDeprecateRequiredParameter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/mustNotDeprecateRequiredParameter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/mustNotDeprecateRequiredParameter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/mustNotDeprecateRequiredParameter.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/variadic parameters must not have default value.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/variadic parameters must not have default value.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/parameters/variadic parameters must not have default value.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/parameters/variadic parameters must not have default value.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/placeholders/renamingOfDeclaration.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/placeholders/renamingOfDeclaration.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/placeholders/renamingOfDeclaration.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/placeholders/renamingOfDeclaration.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/placeholders/unused.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/placeholders/unused.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/placeholders/unused.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/placeholders/unused.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/results/mustHaveType.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/results/mustHaveType.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/results/mustHaveType.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/results/mustHaveType.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/duplicateYield.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/duplicateYield.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/duplicateYield.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/duplicateYield.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/unassignedResult.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/unassignedResult.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/unassignedResult.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/unassignedResult.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/uniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/uniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/uniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/uniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/unnecessaryResultList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/unnecessaryResultList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/unnecessaryResultList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/unnecessaryResultList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/unusedParameter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/unusedParameter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/steps/unusedParameter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/steps/unusedParameter.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/typeParameters/varienceTogetherWithKind.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/typeParameters/varienceTogetherWithKind.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/typeParameters/varienceTogetherWithKind.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/typeParameters/varienceTogetherWithKind.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/workflows/noYield.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/workflows/noYield.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/workflows/noYield.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/workflows/noYield.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/workflows/uniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/workflows/uniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/workflows/uniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/declarations/workflows/uniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/arguments/must be constant.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/arguments/must be constant.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/arguments/must be constant.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/arguments/must be constant.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/arguments/variadic parameter assigned by name.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/arguments/variadic parameter assigned by name.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/arguments/variadic parameter assigned by name.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/arguments/variadic parameter assigned by name.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/calledClassMustHaveConstructor.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/calledClassMustHaveConstructor.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/calledClassMustHaveConstructor.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/calledClassMustHaveConstructor.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/context.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/context.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/context.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/context.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/missingTypeArgumentList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/missingTypeArgumentList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/missingTypeArgumentList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/missingTypeArgumentList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/receiverMustBeCallable.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/receiverMustBeCallable.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/receiverMustBeCallable.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/receiverMustBeCallable.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/recursion.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/recursion.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/recursion.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/recursion.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/unnecessaryArgumentList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/unnecessaryArgumentList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/calls/unnecessaryArgumentList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/calls/unnecessaryArgumentList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/infixOperation/division by zero.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/infixOperation/division by zero.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/infixOperation/division by zero.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/infixOperation/division by zero.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/infixOperation/unnecessaryElvisOperator.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/infixOperation/unnecessaryElvisOperator.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/infixOperation/unnecessaryElvisOperator.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/infixOperation/unnecessaryElvisOperator.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/lambdas/context.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/lambdas/context.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/lambdas/context.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/lambdas/context.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/lambdas/uniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/lambdas/uniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/lambdas/uniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/lambdas/uniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/enumVariantMustBeInstantiated.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/enumVariantMustBeInstantiated.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/enumVariantMustBeInstantiated.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/enumVariantMustBeInstantiated.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/instanceMethodMustBeCalled.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/instanceMethodMustBeCalled.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/instanceMethodMustBeCalled.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/instanceMethodMustBeCalled.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/missingSafeAccess.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/missingSafeAccess.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/missingSafeAccess.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/missingSafeAccess.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/unnecessarySafeAccess.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/unnecessarySafeAccess.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/memberAccess/unnecessarySafeAccess.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/memberAccess/unnecessarySafeAccess.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/references/must not statically reference class.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/references/must not statically reference class.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/references/must not statically reference class.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/references/must not statically reference class.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/references/must not statically reference enum.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/references/must not statically reference enum.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/references/must not statically reference enum.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/references/must not statically reference enum.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/templateStrings/missingTemplateExpression.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/templateStrings/missingTemplateExpression.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/expressions/templateStrings/missingTemplateExpression.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/expressions/templateStrings/missingTemplateExpression.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/arguments must be constant.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/arguments must be constant.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/arguments must be constant.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/arguments must be constant.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/cardinality.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/cardinality.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/cardinality.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/cardinality.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/duplicateTarget.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/duplicateTarget.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/duplicateTarget.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/duplicateTarget.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python module (1).smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python module (1).sdstest similarity index 60% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python module (1).smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python module (1).sdstest index c0d7a25ba..5f1c77abe 100644 --- a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python module (1).smltest +++ b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python module (1).sdstest @@ -1,3 +1,3 @@ -// semantic_info "Python module is identical to Simple-ML package (can remove annotation call)." +// semantic_info "Python module is identical to Safe-DS package (can remove annotation call)." »@PythonModule("tests.validation.other.annotationCalls.identicalPythonModule")« package tests.validation.other.annotationCalls.identicalPythonModule diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python module (2).smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python module (2).sdstest similarity index 50% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python module (2).smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python module (2).sdstest index fe0022887..500a4711c 100644 --- a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python module (2).smltest +++ b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python module (2).sdstest @@ -1,7 +1,7 @@ -// no_semantic_info "Python module is identical to Simple-ML package (can remove annotation call)." +// no_semantic_info "Python module is identical to Safe-DS package (can remove annotation call)." »@PythonModule("tests.validation.other.annotation_calls.identical_python_module")« package tests.validation.other.annotationCalls.identicalPythonModule -// no_semantic_info "Python module is identical to Simple-ML package (can remove annotation call)." +// no_semantic_info "Python module is identical to Safe-DS package (can remove annotation call)." »@PythonModule("TestClass")« class TestClass diff --git a/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python name.sdstest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python name.sdstest new file mode 100644 index 000000000..5b42d55c3 --- /dev/null +++ b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/identical python name.sdstest @@ -0,0 +1,9 @@ +package tests.validation.other.annotationCalls.identicalPythonName + +// semantic_info "Python name is identical to Safe-DS name (can remove annotation call)." +»@PythonName("TestClass1")« +class TestClass1 + +// no_semantic_info "Python name is identical to Safe-DS name (can remove annotation call)." +»@PythonName("Test_Class_2")« +class TestClass2 diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/missingArgumentList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/missingArgumentList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/missingArgumentList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/missingArgumentList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/pure implies no side effects.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/pure implies no side effects.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/pure implies no side effects.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/pure implies no side effects.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/target.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/target.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/target.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/target.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/unnecessaryArgumentList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/unnecessaryArgumentList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/unnecessaryArgumentList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/annotationCalls/unnecessaryArgumentList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/missingRequiredParameter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/missingRequiredParameter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/missingRequiredParameter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/missingRequiredParameter.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/noPositionalArgumentsAfterFirstNamedArgument.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/noPositionalArgumentsAfterFirstNamedArgument.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/noPositionalArgumentsAfterFirstNamedArgument.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/noPositionalArgumentsAfterFirstNamedArgument.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/tooManyArguments.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/tooManyArguments.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/tooManyArguments.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/tooManyArguments.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/uniqueParameters.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/uniqueParameters.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/argumentLists/uniqueParameters.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/argumentLists/uniqueParameters.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/is unnecessary in call.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/is unnecessary in call.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/is unnecessary in call.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/is unnecessary in call.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/is unnecessary in named type.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/is unnecessary in named type.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/is unnecessary in named type.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/is unnecessary in named type.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/missingRequiredTypeParameter.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/missingRequiredTypeParameter.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/missingRequiredTypeParameter.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/missingRequiredTypeParameter.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/noPositionalTypeArgumentsAfterFirstNamedTypeArgument.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/noPositionalTypeArgumentsAfterFirstNamedTypeArgument.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/noPositionalTypeArgumentsAfterFirstNamedTypeArgument.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/noPositionalTypeArgumentsAfterFirstNamedTypeArgument.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/tooManyTypeArguments.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/tooManyTypeArguments.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/tooManyTypeArguments.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/tooManyTypeArguments.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/uniqueTypeParameters.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/uniqueTypeParameters.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/other/typeArgumentLists/uniqueTypeParameters.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/other/typeArgumentLists/uniqueTypeParameters.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/statements/assignments/hasNoEffect.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/statements/assignments/hasNoEffect.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/statements/assignments/hasNoEffect.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/statements/assignments/hasNoEffect.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/statements/assignments/ignoresResultOfCall.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/statements/assignments/ignoresResultOfCall.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/statements/assignments/ignoresResultOfCall.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/statements/assignments/ignoresResultOfCall.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/statements/assignments/nothingAssigned.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/statements/assignments/nothingAssigned.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/statements/assignments/nothingAssigned.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/statements/assignments/nothingAssigned.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/statements/assignments/unnecessaryAssignment.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/statements/assignments/unnecessaryAssignment.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/statements/assignments/unnecessaryAssignment.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/statements/assignments/unnecessaryAssignment.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/statements/expressionStatements/hasNoEffect.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/statements/expressionStatements/hasNoEffect.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/statements/expressionStatements/hasNoEffect.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/statements/expressionStatements/hasNoEffect.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/arguments.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/arguments.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/arguments.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/arguments.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/defaultValues.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/defaultValues.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/defaultValues.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/defaultValues.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/indexedAccesses.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/indexedAccesses.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/indexedAccesses.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/indexedAccesses.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/infixOperations.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/infixOperations.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/infixOperations.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/infixOperations.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/prefixOperations.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/prefixOperations.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/prefixOperations.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/prefixOperations.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/yields.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/yields.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/typeChecking/yields.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/typeChecking/yields.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/types/callableTypes/no optional parameters.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/types/callableTypes/no optional parameters.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/types/callableTypes/no optional parameters.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/types/callableTypes/no optional parameters.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/types/callableTypes/uniqueNames.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/types/callableTypes/uniqueNames.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/types/callableTypes/uniqueNames.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/types/callableTypes/uniqueNames.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/types/namedTypes/missingTypeArgumentList.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/types/namedTypes/missingTypeArgumentList.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/types/namedTypes/missingTypeArgumentList.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/types/namedTypes/missingTypeArgumentList.sdstest diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/types/unionTypes/numberOfTypeArguments.smltest b/DSL/com.larsreimann.safeds/src/test/resources/validation/types/unionTypes/numberOfTypeArguments.sdstest similarity index 100% rename from DSL/de.unibonn.simpleml/src/test/resources/validation/types/unionTypes/numberOfTypeArguments.smltest rename to DSL/com.larsreimann.safeds/src/test/resources/validation/types/unionTypes/numberOfTypeArguments.sdstest diff --git a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/LineBreaks.kt b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/LineBreaks.kt similarity index 87% rename from DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/LineBreaks.kt rename to DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/LineBreaks.kt index 55c3ab8fe..750fcece2 100644 --- a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/LineBreaks.kt +++ b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/LineBreaks.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.testing +package com.larsreimann.safeds.testing /** * Replaces line-breaks in the string with the ones used by the operating system (\n on Unix, \r on MacOS, \r\n on diff --git a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/ParseHelper.kt b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/ParseHelper.kt similarity index 86% rename from DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/ParseHelper.kt rename to DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/ParseHelper.kt index 269beab7e..e7f212204 100644 --- a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/ParseHelper.kt +++ b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/ParseHelper.kt @@ -1,11 +1,11 @@ @file:Suppress("unused", "MemberVisibilityCanBePrivate") -package de.unibonn.simpleml.testing +package com.larsreimann.safeds.testing import com.google.inject.Inject import com.google.inject.Provider -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.stdlibAccess.loadStdlib +import com.larsreimann.safeds.safeDS.SdsCompilationUnit +import com.larsreimann.safeds.stdlibAccess.loadStdlib import org.eclipse.core.runtime.FileLocator import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.resource.Resource @@ -23,12 +23,12 @@ typealias ResourceName = String * Utilities for tests that load their test data from files or strings. */ class ParseHelper @Inject constructor( - private val parseHelper: ParseHelper, + private val parseHelper: ParseHelper, private val resourceSetProvider: Provider ) { /** - * Parses the contents of the resource with the given [resourceName] and returns the contained [SmlCompilationUnit] + * Parses the contents of the resource with the given [resourceName] and returns the contained [SdsCompilationUnit] * or `null` if something went wrong. Any resources in the [context] are included in the same [ResourceSet]. * Likewise, if [loadStdlib] is `true`, the standard library is also included in the [ResourceSet]. */ @@ -36,7 +36,7 @@ class ParseHelper @Inject constructor( resourceName: ResourceName, context: List = emptyList(), loadStdlib: Boolean = true - ): SmlCompilationUnit? { + ): SdsCompilationUnit? { val programText = readProgramTextFromResource(resourceName) ?: return null val uri = javaClass.classLoader.getResourceEmfUri(resourceName) ?: return null @@ -44,7 +44,7 @@ class ParseHelper @Inject constructor( } /** - * Parses the given [programText] and returns the contained [SmlCompilationUnit] or `null` if something went wrong. + * Parses the given [programText] and returns the contained [SdsCompilationUnit] or `null` if something went wrong. * Any resources in the [context] are included in the same [ResourceSet]. Likewise, if [loadStdlib] is `true`, the * standard library is also included in the [ResourceSet]. */ @@ -52,7 +52,7 @@ class ParseHelper @Inject constructor( programText: String, context: List = emptyList(), loadStdlib: Boolean = true - ): SmlCompilationUnit? { + ): SdsCompilationUnit? { val resourceSet = createResourceSetFromContext(context) if (loadStdlib) { @@ -62,8 +62,8 @@ class ParseHelper @Inject constructor( } /** - * Parses the given [programText] and returns the contained [SmlCompilationUnit] or `null` if something went wrong. - * The [URI] of the [Resource] that contains the created [SmlCompilationUnit] is set to [uriToUse]. Any resources in + * Parses the given [programText] and returns the contained [SdsCompilationUnit] or `null` if something went wrong. + * The [URI] of the [Resource] that contains the created [SdsCompilationUnit] is set to [uriToUse]. Any resources in * the [context] are included in the same [ResourceSet]. Likewise, if [loadStdlib] is `true`, the standard library * is also included in the [ResourceSet]. */ @@ -72,7 +72,7 @@ class ParseHelper @Inject constructor( uriToUse: URI, context: List = emptyList(), loadStdlib: Boolean = true - ): SmlCompilationUnit? { + ): SdsCompilationUnit? { val resourceSet = createResourceSetFromContext(context) if (loadStdlib) { diff --git a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/SimpleMLInjectorProvider.kt b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/SafeDSInjectorProvider.kt similarity index 79% rename from DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/SimpleMLInjectorProvider.kt rename to DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/SafeDSInjectorProvider.kt index 0fdf21987..059fce7f9 100644 --- a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/SimpleMLInjectorProvider.kt +++ b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/SafeDSInjectorProvider.kt @@ -1,16 +1,16 @@ -package de.unibonn.simpleml.testing +package com.larsreimann.safeds.testing import com.google.inject.Guice import com.google.inject.Injector -import de.unibonn.simpleml.SimpleMLRuntimeModule -import de.unibonn.simpleml.SimpleMLStandaloneSetup +import com.larsreimann.safeds.SafeDSRuntimeModule +import com.larsreimann.safeds.SafeDSStandaloneSetup import org.eclipse.xtext.testing.GlobalRegistries.GlobalStateMemento import org.eclipse.xtext.testing.GlobalRegistries.initializeDefaults import org.eclipse.xtext.testing.GlobalRegistries.makeCopyOfGlobalState import org.eclipse.xtext.testing.IInjectorProvider import org.eclipse.xtext.testing.IRegistryConfigurator -class SimpleMLInjectorProvider : IInjectorProvider, IRegistryConfigurator { +class SafeDSInjectorProvider : IInjectorProvider, IRegistryConfigurator { private var stateBeforeInjectorCreation: GlobalStateMemento? = null private var stateAfterInjectorCreation: GlobalStateMemento? = null private var injector: Injector? = null @@ -24,19 +24,19 @@ class SimpleMLInjectorProvider : IInjectorProvider, IRegistryConfigurator { } private fun internalCreateInjector(): Injector { - return object : SimpleMLStandaloneSetup() { + return object : SafeDSStandaloneSetup() { override fun createInjector(): Injector { return Guice.createInjector(createRuntimeModule()) } }.createInjectorAndDoEMFRegistration() } - private fun createRuntimeModule(): SimpleMLRuntimeModule { + private fun createRuntimeModule(): SafeDSRuntimeModule { // make it work also with Maven/Tycho and OSGI // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=493672 - return object : SimpleMLRuntimeModule() { + return object : SafeDSRuntimeModule() { override fun bindClassLoaderToInstance(): ClassLoader { - return SimpleMLInjectorProvider::class.java.classLoader + return SafeDSInjectorProvider::class.java.classLoader } } } diff --git a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/TestMarker.kt b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/TestMarker.kt similarity index 88% rename from DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/TestMarker.kt rename to DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/TestMarker.kt index f5d6e9b2e..781656a5d 100644 --- a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/TestMarker.kt +++ b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/TestMarker.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.testing +package com.larsreimann.safeds.testing /** * Describe a program range in a test file from the opening to the closing test marker. diff --git a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/TestRanges.kt b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/TestRanges.kt similarity index 89% rename from DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/TestRanges.kt rename to DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/TestRanges.kt index f1cea0b78..7947b5e51 100644 --- a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/TestRanges.kt +++ b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/TestRanges.kt @@ -1,12 +1,12 @@ -package de.unibonn.simpleml.testing - -import de.unibonn.simpleml.location.XtextPosition -import de.unibonn.simpleml.location.XtextRange -import de.unibonn.simpleml.testing.FindTestRangesResult.CloseWithoutOpenFailure -import de.unibonn.simpleml.testing.FindTestRangesResult.OpenWithoutCloseFailure -import de.unibonn.simpleml.testing.FindTestRangesResult.Success -import de.unibonn.simpleml.testing.TestMarker.CLOSE -import de.unibonn.simpleml.testing.TestMarker.OPEN +package com.larsreimann.safeds.testing + +import com.larsreimann.safeds.location.XtextPosition +import com.larsreimann.safeds.location.XtextRange +import com.larsreimann.safeds.testing.FindTestRangesResult.CloseWithoutOpenFailure +import com.larsreimann.safeds.testing.FindTestRangesResult.OpenWithoutCloseFailure +import com.larsreimann.safeds.testing.FindTestRangesResult.Success +import com.larsreimann.safeds.testing.TestMarker.CLOSE +import com.larsreimann.safeds.testing.TestMarker.OPEN /** * Finds test ranges, i.e. parts of the program delimited by opening and closing test markers. They are sorted by the diff --git a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/TestResourceUtils.kt b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/TestResourceUtils.kt similarity index 91% rename from DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/TestResourceUtils.kt rename to DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/TestResourceUtils.kt index 6bfe11c6b..9040371cd 100644 --- a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/TestResourceUtils.kt +++ b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/TestResourceUtils.kt @@ -1,6 +1,6 @@ -package de.unibonn.simpleml.testing +package com.larsreimann.safeds.testing -import de.unibonn.simpleml.constant.SmlFileExtension +import com.larsreimann.safeds.constant.SdsFileExtension import org.eclipse.core.runtime.FileLocator import org.eclipse.emf.common.util.URI import org.junit.jupiter.api.DynamicContainer @@ -65,9 +65,9 @@ private fun createDynamicTestFromResource( private fun isTestFile(filePath: Path): Boolean { return Files.isRegularFile(filePath) && ( - filePath.fileName.toString().endsWith(".${SmlFileExtension.Flow}") || - filePath.fileName.toString().endsWith(".${SmlFileExtension.Stub}") || - filePath.fileName.toString().endsWith(".${SmlFileExtension.Test}") + filePath.fileName.toString().endsWith(".${SdsFileExtension.Flow}") || + filePath.fileName.toString().endsWith(".${SdsFileExtension.Stub}") || + filePath.fileName.toString().endsWith(".${SdsFileExtension.Test}") ) && !filePath.fileName.toString().startsWith("_skip_") } diff --git a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/assertions/EmfAssertions.kt b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/assertions/EmfAssertions.kt similarity index 79% rename from DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/assertions/EmfAssertions.kt rename to DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/assertions/EmfAssertions.kt index 0a2aa5acf..5acfb06b7 100644 --- a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/assertions/EmfAssertions.kt +++ b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/assertions/EmfAssertions.kt @@ -1,7 +1,7 @@ -package de.unibonn.simpleml.testing.assertions +package com.larsreimann.safeds.testing.assertions -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration +import com.larsreimann.safeds.emf.descendants +import com.larsreimann.safeds.safeDS.SdsAbstractDeclaration import org.eclipse.emf.ecore.EObject /** @@ -12,7 +12,7 @@ import org.eclipse.emf.ecore.EObject * @return The unique declaration if it exists. * @throws AssertionError If no unique declaration exists. */ -inline fun EObject.findUniqueDeclarationOrFail(name: String): T { +inline fun EObject.findUniqueDeclarationOrFail(name: String): T { shouldHaveUniqueDeclaration(name) return this.descendants().find { it.name == name }!! } @@ -23,7 +23,7 @@ inline fun EObject.findUniqueDeclarationOrF * @receiver Root of the subtree within the EMF model that should be searched. * @param name The name the declaration needs to have. */ -inline fun EObject.shouldHaveUniqueDeclaration(name: String) { +inline fun EObject.shouldHaveUniqueDeclaration(name: String) { val candidates = this.descendants().filter { it.name == name }.toList() if (candidates.isEmpty()) { @@ -33,13 +33,13 @@ inline fun EObject.shouldHaveUniqueDeclarat } } -fun SmlAbstractDeclaration.shouldBeResolved() { +fun SdsAbstractDeclaration.shouldBeResolved() { if (this.eIsProxy()) { throw AssertionError("Expected cross-reference to be resolved but it wasn't.") } } -fun SmlAbstractDeclaration.shouldNotBeResolved() { +fun SdsAbstractDeclaration.shouldNotBeResolved() { if (!this.eIsProxy()) { throw AssertionError("Expected cross-reference to be unresolved but it wasn't.") } diff --git a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/assertions/NumberAssertions.kt b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/assertions/NumberAssertions.kt similarity index 77% rename from DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/assertions/NumberAssertions.kt rename to DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/assertions/NumberAssertions.kt index 9e5cf4d2a..b43a84b3d 100644 --- a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/assertions/NumberAssertions.kt +++ b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/assertions/NumberAssertions.kt @@ -1,4 +1,4 @@ -package de.unibonn.simpleml.testing.assertions +package com.larsreimann.safeds.testing.assertions import io.kotest.matchers.doubles.plusOrMinus import io.kotest.matchers.shouldBe diff --git a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/assertions/ParsingAssertions.kt b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/assertions/ParsingAssertions.kt similarity index 97% rename from DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/assertions/ParsingAssertions.kt rename to DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/assertions/ParsingAssertions.kt index c65ee9593..2a18e9eb0 100644 --- a/DSL/de.unibonn.simpleml/src/testFixtures/kotlin/de/unibonn/simpleml/testing/assertions/ParsingAssertions.kt +++ b/DSL/com.larsreimann.safeds/src/testFixtures/kotlin/com/larsreimann/safeds/testing/assertions/ParsingAssertions.kt @@ -1,6 +1,6 @@ -package de.unibonn.simpleml.testing.assertions +package com.larsreimann.safeds.testing.assertions -import de.unibonn.simpleml.location.XtextRange +import com.larsreimann.safeds.location.XtextRange import org.eclipse.xtext.diagnostics.Severity import org.eclipse.xtext.validation.Issue diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/SimpleMLIdeSetup.kt b/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/SimpleMLIdeSetup.kt deleted file mode 100644 index 8b270ff4e..000000000 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/SimpleMLIdeSetup.kt +++ /dev/null @@ -1,16 +0,0 @@ -package de.unibonn.simpleml.ide - -import com.google.inject.Guice -import com.google.inject.Injector -import de.unibonn.simpleml.SimpleMLRuntimeModule -import de.unibonn.simpleml.SimpleMLStandaloneSetup -import org.eclipse.xtext.util.Modules2 - -/** - * Initialization support for running Xtext languages as language servers. - */ -class SimpleMLIdeSetup : SimpleMLStandaloneSetup() { - override fun createInjector(): Injector? { - return Guice.createInjector(Modules2.mixin(SimpleMLRuntimeModule(), SimpleMLIdeModule())) - } -} diff --git a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolKindProvider.kt b/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolKindProvider.kt deleted file mode 100644 index de83c1d4e..000000000 --- a/DSL/de.unibonn.simpleml.ide/src/main/kotlin/de/unibonn/simpleml/ide/server/symbol/SimpleMLDocumentSymbolKindProvider.kt +++ /dev/null @@ -1,39 +0,0 @@ -package de.unibonn.simpleml.ide.server.symbol - -import de.unibonn.simpleml.emf.isClassMember -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlFunction -import org.eclipse.emf.ecore.EClass -import org.eclipse.emf.ecore.EObject -import org.eclipse.lsp4j.SymbolKind -import org.eclipse.xtext.ide.server.symbol.DocumentSymbolMapper -import org.eclipse.xtext.resource.IEObjectDescription - -class SimpleMLDocumentSymbolKindProvider : DocumentSymbolMapper.DocumentSymbolKindProvider() { - override fun getSymbolKind(obj: EObject?): SymbolKind? { - if (obj is SmlFunction && obj.isClassMember()) { - return SymbolKind.Method - } - - return obj?.let { getSymbolKind(it.eClass()) } - } - - override fun getSymbolKind(description: IEObjectDescription?): SymbolKind? { - return getSymbolKind(description?.eObjectOrProxy) - } - - override fun getSymbolKind(clazz: EClass): SymbolKind? { - return when (clazz) { - Literals.SML_ANNOTATION -> SymbolKind.Interface // Not ideal but matches @interface in Java - Literals.SML_ATTRIBUTE -> SymbolKind.Field - Literals.SML_CLASS -> SymbolKind.Class - Literals.SML_COMPILATION_UNIT -> SymbolKind.Package - Literals.SML_ENUM -> SymbolKind.Enum - Literals.SML_ENUM_VARIANT -> SymbolKind.EnumMember - Literals.SML_FUNCTION -> SymbolKind.Function - Literals.SML_STEP -> SymbolKind.Function - Literals.SML_WORKFLOW -> SymbolKind.Function - else -> null - } - } -} diff --git a/DSL/de.unibonn.simpleml.vscode/README.md b/DSL/de.unibonn.simpleml.vscode/README.md deleted file mode 100644 index 6dc4da04a..000000000 --- a/DSL/de.unibonn.simpleml.vscode/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Simple-ML - -A preview of the language support for the [Simple-ML](https://simple-ml.de/) DSL. - -## Requirements - -You need to install [OpenJDK 17 LTS](https://adoptium.net/temurin/releases). Later releases should also work fine. diff --git a/DSL/de.unibonn.simpleml.vscode/icons/icon.png b/DSL/de.unibonn.simpleml.vscode/icons/icon.png deleted file mode 100644 index a47c996aff5416a35414122ba2b05ee591c237fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5783 zcmcIoRZyHkv;7tc7TgIQ92R%N5+t~LaCawIf-LT?A!rEhvbfvg5Hvvo1SbRy4$I~L z>ptGs`_R*M=3(Yk^_=dWj#gKd!^Wh*1ONbAL0(4l*+c(h=r5kv0f_ndvjcf*%1Hq= zQWmW({!l57|sqJg>Hy6WKX8{JE z+tUuHy}Y|+;u0@1K z|6E?}rBskQlc1ZS9@vqf)9O6d7D;{p*-;t;6mq1{;qRyg?*D(#00vA^3d_AJwV7KL znqz(J+DQ}rzzQa72=fN7%I#k0!gT(Gtb``Gh^mgmt5W|MJRlUaC0If;{99viYQz-< zbYKqSgEMTXW*mZAV;hY87YnFq;yyyTVwzITykhSaoj%Z)MlHsz$Y`17DE%3BWlCHr zx^lQBasq!lsQsqCT&Fx{=#@1V8)wDtlN4Qht*#3JBg_~Xd-xNtz+z=rQTe*e(9{mq zxv;4@`;!!82bB*MISWk|P9!Ry>>(m?s<7sr25TD}l>-sEDuaNueBRlKCC!~>0?A5( zw+Ck)ckPzE=|pK20@$gk?U^N4*_m#0pXI&39Tk!XXpI_g={i!_Y@S*--Bn^clpi!v zfC@a!7S)a+)r&X6&DBY&Ct{TuUmI;!WeqOhJ)|#Crsc7eMz7g43{_}4S}?a=`-^sO zr5QL-RLcTwpV92Te+q8-SrB9-;rD9CBdAp@K*IS;V{DF1<{f{U0f`!~4{F356Rczh zDt6nOUF5*}ViiWX8^vh)Cj_%C}2pPy|p z!KU~U>ep};t(MB-3=lmrzgbm+!{m2ot3$-Pwx?T>fiwXf5sh$d28CKB9&})%zz>;^ zLFT+MXo#-etyB3cv`YzBehHAAANt(sNuUU0z^NWDok(0PE50iSk1$DhIF3BbKBaUp zxaIy~b}n{q^rwsew6>v?t$2RO5*ZdGM&ladaBhMz2u$r zj?q8pe}~U?sR|d4w)oSPI03bv_8!G?^l;nhDDwp{v{zmEyqzq+y%V~q)} z(Ly6Q#=s?$bIq}(`Hf~=)+(!t@J6*+&MS=OsbvLD$MEHB)ZW64rp!GpXRq<-7vA7y zxs|;W4W-qY@cWU|5#sG^KBH>Mt-Ykp@0D$5L4EPA+K$NEt`OBfOimg~@p~zl1-uvR z4e`EFY#IKl#~1JsLn^z1{Tt=(gQ|B8{@=^Ibv%pO?f3ePMBxx54rw0v>^{BfF^0@b zH-I!je^rj9^{J`=K&?rPuh=RobLO(wSIMP^_m~ z3Ygj!8a=y=wYYkPb-YX-K$0||?IUGtYf!__dpEGPq85XvdV(7kIg(fXz`-+`Dg)wz zSdUo1h6J{oFaGWvrpjj|n5f7J5|us2O#wx{e&5nV)%P7(AYRA6 z6y?jf8y;$b1el#)9U>NbiW@QjiNl}YV=%!wB<3Z|I<;C2^_E#rm zyMp~8KHP>BdOv~R(6gRrnKjHT8p4y?I5Svt$*io1iAQ{t(jorCpjRa4@}og4?^9sX zdRgVCi^ci%cfU)1aQl6Emc}F}u$LxO=AaZ~5Q7`$&l>t##RlCx-U$qw3){1q`8mMo zpfYZWDEQFq(y^fFL^(B9$|}C6sbcM~>fDIgYq)8q_VoT-m&t|OW+;o}K!}|R+c3>j zj&tVQapS(3C9iWPD6=@E`!7$VAR|1ZOp3rsDwCX-je={E4e&t-dIbJ@2WCu|ob#U9 z-m{&%^6MzN3OYqjy3haNMM5>ssqJVesKa6RE!?&%Lsm|t2@6**8O*V&BXhAnR`BzY zB;_(hC4hitk_~#;;Hj-qSNnc=n= z=O-0wmBt;y^Ol@~CLi7*5oM|j1tr15#BG>h$Q7PvMvo? zH>`DI+4~Hdlq~V&g5+sxQ8hWCZLPkHEp6|HGjkj1g6}-9&>9omt~a@kW#ZJ{+Kp&2 zP;~SulwRc&4mjeD<+>`&P|>JLq1FYS>t>(-HoE=9)}ntW==&EBH7(xg&0YKJSBd4~ z1S83??a}Nq5(2b{FFY@EAs*p_D_LG)j#3%;elNnlXnmSYr?XX~Eb`DO=T8#b3V_YL zVUPj1BU@i(1hyJbbU_po(xZPy$P*|yOX7$OUu!BwgXkD3Xh=#R-1q1Z_`gi8vVN2D z#bLF}t9RQu5P7fwE(Shuw^0>cU-~*34(HxaK>f6keRH;`o%}ceAGLJ4o3Z1Lnx>o2 zj-h}J%Y|2KKHy3xvs!&1FjEcTT2CTV+Q>TP)j5gFdo54ojs?V%<&E^ViVyGdtVV}4 z9n~MD(s^D~v{~SPO=qr~t{I_}tNH9&SzKbtT0i^Eh41w)fyD?pvTzg!jy3Tq>?GMa zRMNqFrK$vX`p!Kc!hq2f0ayC{niJFu8bJRNgeiE8&i{sj@<1hXh;bJm0!-Ms>`LG4Kj6LtUXR$QfVD zeH|UYojH2wRSHbX86mxuw*1vjlL&u3g-2OzM~gXP=qC?O4%3=zU02?&GQMs@YQX8v zuee5;s^sbAHE;K8&)xW*HV^UkY5(Qg5ZIf5%pNAXFbq+E@ zVe3vMYX|r9DO~S^-Tkb7d2_DHF}He5?U^Qxt>o6{U)73o%(aL1A>)lKFcVz2Sz5ii zWDzOFX1Km>FO7az#Bv=MR@F!Qa&Tg8qhnpozEHBg#f-Z&=qKFqS&+RSb(|IHR-z)y zJr)>X&9~7?0D3&8u=06mOo&gSGNm%@1f6Dc>zBIDpdIrwjF9(2=8bW&%#=RZI#zLv z_oca`XDT!vlT>|(KJ_#Fuf%(4bTUKtEJ5)1L@3N0JoL_TsdnzwZ~QA7Nn@se^O)xKRkWf&e~>2R(C7pF zEV~DVJu)ZnpaCZlh%fD()JOAMxKYaV3IhI`)E~q-1kex4=!rpe>seAFk!w3oB-t?td z!ewH4E`M~ph~Dhiv-`du(MUk{8)ixNSc#YhNVd4?@*FhIm?9;g`@Rotr)|842R2WP z6cXpxXeoj7TT!71s`T&(95iDj*{2(^`D_6FDap;gylM-NR6~_NX|*DL_FciJFRKA0 zhMj})X#7IY3Z|tJJ!>OROPzJ=K|{mDnGI>ll+XO0(znkzylrW(&JZ~4lg&iu=15P6 z1Vml#VJl~P2v^ctlq7tn5?5Y}fW4(zHu%BsEEaIz??k@OlZO$&hL#Lyu4lQ&^;Pdu zG`gx1FaZ)HF<^>%Bh5}ShW;w5iCIb1zN1KH6$9j~)8HghzWCjLrYy)1-&nL^Ni({y zUP0C2VOYJm=YXBlH^oh1M*oIEYa~J*C9H8S8!`3Ic`MNZuEgoRC?x%D4Xc5y*8wF6lvok8WRf`A-tPUglqr4pU{3<;R-#| zA0IL9zbEs{-{3*1jawUlJ3Yzxyn+MuX@JpO&M;rYj#&+qHJyD%)g&B}lGqX^f^ z#=VS8Ag$CztOWhQfS%F{|KK~&5BP_#=gkV5FL9a9-ff1|rY@zWJ^j*)Q+s4zpvKC* zaG_ZX9t(o6_#mkLCW5bTK!3hmr)*AlTZ(q?mn<&EJ6>_KJ%y_IW@Ne~;z8S(IpZXP z(h_gsb^Z6FrU*{Y>6Nx*={;)E?nAm2vK8i0C3Xu``e6Yw1jRpN4aJ}03Ra)4CI3qs z+!aK>6nEh{Mfnv{{tBKsof_Oj_}41naY`L@s$zF|9$-({q#}KTQpdcubn44I`RZDI zAp_MS!^~y|Te!P#?SiVI`@(E+Rp1^Tlo_C6{3NakxIXGqOx%!VGS{ZFu6PA6<$rER zppmz^WBeKi=28h#vjVQTfOe) zj52&dWqO@*eN2{b1|otZx&cbU`_FkD!EAb}FYkWMXtsIqE^G@R{7~?F*`FAfoUD>R zx3A)vD}?sN*>0ukDdqk)sD2D0XN9^*Bne8c@XMquZ7CE7H4zdI%r7nAE>N$$`-RzI zfQgq1w9aC$vP`i)&NC;QQNL+UcK$;M1Z8^d)66e(x6(TmQD1nOa_nYz1(Qk-GXmXw zlU+eoiwqffpt6q@@~^5P@q+>ZGedvmqX36V#`5_mTaRRJa6F?fD5_n|LkNF}E)9{Z z0^ux^1l6fm?_VDlT#X3wo+EzXX!SilC%bOQzshL;x#)a6P+d=W&+|hbA>ldyOXE9` zU4C&ni#pbfK@50D6;7iwGl5P=`>p!;J9c|YA=v6L^Mrr4`}vRQGuohnlb##n#&r!x z!)U;*sJH3DPxh1WH~L4yHqP>CoOJ~=QttL#VbNiDkCM)NzFU_1p20#%(5d@mSDm*s_V)Mgur)%@-O0FjM z(>4V-;Px)GU*|*5F117&XTRunAmSnDTi$O{Ag8yJSkqjcsMC1-k5By)BBZmr;iIih zm>iX|G*YiSm~vLfRV95(X@KKV(^>M!s^(OHOb?)#4(j}fdV2Nf;LIWrDR|+x$^qx| zZspxB9&;B9Hm)g+38&E*`aMmrw5;zz8Vc>c4v5=H^RmGIng0ntPkRJP=uYGF_Iol=&psWYiiu?QF7P z+}np#7k|gTo1WU1==xLi)Z|w$>8QTRecL?YA<;@fAORboZrGZcvyQVdj3CUPr=oN* zqKlCpQrHoH6t4iIk0TG#L-SfjJT4Q42!=QH7glB&wwQUuPfU|}WSi@8oY}{{Fri=~ z%CYnNeoTtcYrf_uQV*3_|4P~C4o&K4lzsGJ)|oN{!T&X@eT|8PlMLQU?ceSEBl{P* z=7jjN`pzA>LnSvT&R2d>rzV@_GUB9qbe*mTm$o0L0h0tLoRAZ0=4Nq>#k|w@EdA-5 zuwIfr!G_%Bez^%GxBELjr6K*qhrBmgDtbGwr*#!|bk59%eLE#-P-qZyya zXbXlGP!Iw6(g7N8jR(1)yV%GBs2g7TBdd>0^_^~clj5y7kL&A{NKsdoD1E|^6E;&j z|3fzN$MZQm5O=y`NtCpw-;BIjOPRSL@^#9OJ%w9 z75KPT@tl9|P@ql)e79gu?ly-| z*oHK$v;5)`-{*`^zC%%G=0OLHtJ>f}i+;J!+oJWTZrNJ)1KPY^ohEF07Hg-zq}UHf z@!Bx^gu84Y%9w}9!T(V4cwAZz6I|PZPiS-a@R)^aM(&nKIsMQ-X^vFaI1)&^7E!#O z>)?F!L*kQaI~7K$TfnCIH#TeMR?SGX2(N0_HRcs*6irf%D@jSt-aBu@|JJU_>2-!B zC#nZASTjf;*gY0fT$6f3hqUo!=H|N6Ux?qZ({AsO%LVc96?bDdu*+korRu!&r$UDk zrGQetpub#G>DW%Hm7OrfP4Me+N9WP2KFjU;NQl^8&M9wf0r;oH$Lz^KC+a58b4QOi za9d-ktG@g5qkQkQEfHox#FE^Gj^TX^F_xC=rnAw7Tt(N7f5{c|A1KR8IO&nlp7DP< zQdx?P3y7tnmBFxk3kyOgJLZR4^9qsNvPP~p*Y#U9rg*A+W#6dF5kd7En= 6" - } - }, - "node_modules/@types/node": { - "version": "17.0.40", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.40.tgz", - "integrity": "sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg==", - "dev": true - }, - "node_modules/@types/vscode": { - "version": "1.67.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.67.0.tgz", - "integrity": "sha512-GH8BDf8cw9AC9080uneJfulhSa7KHSMI2s/CyKePXoGNos9J486w2V4YKoeNUqIEkW4hKoEAWp6/cXTwyGj47g==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/big-integer": { - "version": "1.6.48", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.1", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/esbuild": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.42.tgz", - "integrity": "sha512-V0uPZotCEHokJdNqyozH6qsaQXqmZEOiZWrXnds/zaH/0SyrIayRXWRB98CENO73MIZ9T3HBIOsmds5twWtmgw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.42", - "esbuild-android-arm64": "0.14.42", - "esbuild-darwin-64": "0.14.42", - "esbuild-darwin-arm64": "0.14.42", - "esbuild-freebsd-64": "0.14.42", - "esbuild-freebsd-arm64": "0.14.42", - "esbuild-linux-32": "0.14.42", - "esbuild-linux-64": "0.14.42", - "esbuild-linux-arm": "0.14.42", - "esbuild-linux-arm64": "0.14.42", - "esbuild-linux-mips64le": "0.14.42", - "esbuild-linux-ppc64le": "0.14.42", - "esbuild-linux-riscv64": "0.14.42", - "esbuild-linux-s390x": "0.14.42", - "esbuild-netbsd-64": "0.14.42", - "esbuild-openbsd-64": "0.14.42", - "esbuild-sunos-64": "0.14.42", - "esbuild-windows-32": "0.14.42", - "esbuild-windows-64": "0.14.42", - "esbuild-windows-arm64": "0.14.42" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.42.tgz", - "integrity": "sha512-P4Y36VUtRhK/zivqGVMqhptSrFILAGlYp0Z8r9UQqHJ3iWztRCNWnlBzD9HRx0DbueXikzOiwyOri+ojAFfW6A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.42.tgz", - "integrity": "sha512-0cOqCubq+RWScPqvtQdjXG3Czb3AWI2CaKw3HeXry2eoA2rrPr85HF7IpdU26UWdBXgPYtlTN1LUiuXbboROhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.42.tgz", - "integrity": "sha512-ipiBdCA3ZjYgRfRLdQwP82rTiv/YVMtW36hTvAN5ZKAIfxBOyPXY7Cejp3bMXWgzKD8B6O+zoMzh01GZsCuEIA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.42.tgz", - "integrity": "sha512-bU2tHRqTPOaoH/4m0zYHbFWpiYDmaA0gt90/3BMEFaM0PqVK/a6MA2V/ypV5PO0v8QxN6gH5hBPY4YJ2lopXgA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.42.tgz", - "integrity": "sha512-75h1+22Ivy07+QvxHyhVqOdekupiTZVLN1PMwCDonAqyXd8TVNJfIRFrdL8QmSJrOJJ5h8H1I9ETyl2L8LQDaw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.42.tgz", - "integrity": "sha512-W6Jebeu5TTDQMJUJVarEzRU9LlKpNkPBbjqSu+GUPTHDCly5zZEQq9uHkmHHl7OKm+mQ2zFySN83nmfCeZCyNA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.42.tgz", - "integrity": "sha512-Ooy/Bj+mJ1z4jlWcK5Dl6SlPlCgQB9zg1UrTCeY8XagvuWZ4qGPyYEWGkT94HUsRi2hKsXvcs6ThTOjBaJSMfg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.42.tgz", - "integrity": "sha512-2L0HbzQfbTuemUWfVqNIjOfaTRt9zsvjnme6lnr7/MO9toz/MJ5tZhjqrG6uDWDxhsaHI2/nsDgrv8uEEN2eoA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.42.tgz", - "integrity": "sha512-STq69yzCMhdRaWnh29UYrLSr/qaWMm/KqwaRF1pMEK7kDiagaXhSL1zQGXbYv94GuGY/zAwzK98+6idCMUOOCg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.42.tgz", - "integrity": "sha512-c3Ug3e9JpVr8jAcfbhirtpBauLxzYPpycjWulD71CF6ZSY26tvzmXMJYooQ2YKqDY4e/fPu5K8bm7MiXMnyxuA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.42.tgz", - "integrity": "sha512-QuvpHGbYlkyXWf2cGm51LBCHx6eUakjaSrRpUqhPwjh/uvNUYvLmz2LgPTTPwCqaKt0iwL+OGVL0tXA5aDbAbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.42.tgz", - "integrity": "sha512-8ohIVIWDbDT+i7lCx44YCyIRrOW1MYlks9fxTo0ME2LS/fxxdoJBwHWzaDYhjvf8kNpA+MInZvyOEAGoVDrMHg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.42.tgz", - "integrity": "sha512-DzDqK3TuoXktPyG1Lwx7vhaF49Onv3eR61KwQyxYo4y5UKTpL3NmuarHSIaSVlTFDDpcIajCDwz5/uwKLLgKiQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.42.tgz", - "integrity": "sha512-YFRhPCxl8nb//Wn6SiS5pmtplBi4z9yC2gLrYoYI/tvwuB1jldir9r7JwAGy1Ck4D7sE7wBN9GFtUUX/DLdcEQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.42.tgz", - "integrity": "sha512-QYSD2k+oT9dqB/4eEM9c+7KyNYsIPgzYOSrmfNGDIyJrbT1d+CFVKvnKahDKNJLfOYj8N4MgyFaU9/Ytc6w5Vw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.42.tgz", - "integrity": "sha512-M2meNVIKWsm2HMY7+TU9AxM7ZVwI9havdsw6m/6EzdXysyCFFSoaTQ/Jg03izjCsK17FsVRHqRe26Llj6x0MNA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.42.tgz", - "integrity": "sha512-uXV8TAZEw36DkgW8Ak3MpSJs1ofBb3Smkc/6pZ29sCAN1KzCAQzsje4sUwugf+FVicrHvlamCOlFZIXgct+iqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.42.tgz", - "integrity": "sha512-4iw/8qWmRICWi9ZOnJJf9sYt6wmtp3hsN4TdI5NqgjfOkBVMxNdM9Vt3626G1Rda9ya2Q0hjQRD9W1o+m6Lz6g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.42.tgz", - "integrity": "sha512-j3cdK+Y3+a5H0wHKmLGTJcq0+/2mMBHPWkItR3vytp/aUGD/ua/t2BLdfBIzbNN9nLCRL9sywCRpOpFMx3CxzA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.42.tgz", - "integrity": "sha512-+lRAARnF+hf8J0mN27ujO+VbhPbDqJ8rCcJKye4y7YZLV6C4n3pTRThAb388k/zqF5uM0lS5O201u0OqoWSicw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fstream": { - "version": "1.0.12", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/glob": { - "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/isarray": { - "version": "1.0.0", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/listenercount": { - "version": "1.0.1", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/typescript": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", - "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unzipper": { - "version": "0.10.11", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/vscode-jsonrpc": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", - "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz", - "integrity": "sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==", - "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.5", - "vscode-languageserver-protocol": "3.17.1" - }, - "engines": { - "vscode": "^1.67.0" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", - "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", - "dependencies": { - "vscode-jsonrpc": "8.0.1", - "vscode-languageserver-types": "3.17.1" - } - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", - "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==" - }, - "node_modules/vscode-test": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", - "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - }, - "engines": { - "node": ">=8.9.3" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - }, - "dependencies": { - "@tootallnate/once": { - "version": "1.1.2", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/node": { - "version": "17.0.40", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.40.tgz", - "integrity": "sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg==", - "dev": true - }, - "@types/vscode": { - "version": "1.67.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.67.0.tgz", - "integrity": "sha512-GH8BDf8cw9AC9080uneJfulhSa7KHSMI2s/CyKePXoGNos9J486w2V4YKoeNUqIEkW4hKoEAWp6/cXTwyGj47g==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "balanced-match": { - "version": "1.0.0", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "big-integer": { - "version": "1.6.48", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "dev": true - }, - "binary": { - "version": "0.3.0", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "bluebird": { - "version": "3.4.7", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true - }, - "buffers": { - "version": "0.1.1", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true - }, - "chainsaw": { - "version": "0.1.0", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "concat-map": { - "version": "0.0.1", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.2", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "debug": { - "version": "4.3.1", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "duplexer2": { - "version": "0.1.4", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "esbuild": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.42.tgz", - "integrity": "sha512-V0uPZotCEHokJdNqyozH6qsaQXqmZEOiZWrXnds/zaH/0SyrIayRXWRB98CENO73MIZ9T3HBIOsmds5twWtmgw==", - "dev": true, - "requires": { - "esbuild-android-64": "0.14.42", - "esbuild-android-arm64": "0.14.42", - "esbuild-darwin-64": "0.14.42", - "esbuild-darwin-arm64": "0.14.42", - "esbuild-freebsd-64": "0.14.42", - "esbuild-freebsd-arm64": "0.14.42", - "esbuild-linux-32": "0.14.42", - "esbuild-linux-64": "0.14.42", - "esbuild-linux-arm": "0.14.42", - "esbuild-linux-arm64": "0.14.42", - "esbuild-linux-mips64le": "0.14.42", - "esbuild-linux-ppc64le": "0.14.42", - "esbuild-linux-riscv64": "0.14.42", - "esbuild-linux-s390x": "0.14.42", - "esbuild-netbsd-64": "0.14.42", - "esbuild-openbsd-64": "0.14.42", - "esbuild-sunos-64": "0.14.42", - "esbuild-windows-32": "0.14.42", - "esbuild-windows-64": "0.14.42", - "esbuild-windows-arm64": "0.14.42" - } - }, - "esbuild-android-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.42.tgz", - "integrity": "sha512-P4Y36VUtRhK/zivqGVMqhptSrFILAGlYp0Z8r9UQqHJ3iWztRCNWnlBzD9HRx0DbueXikzOiwyOri+ojAFfW6A==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.42.tgz", - "integrity": "sha512-0cOqCubq+RWScPqvtQdjXG3Czb3AWI2CaKw3HeXry2eoA2rrPr85HF7IpdU26UWdBXgPYtlTN1LUiuXbboROhg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.42.tgz", - "integrity": "sha512-ipiBdCA3ZjYgRfRLdQwP82rTiv/YVMtW36hTvAN5ZKAIfxBOyPXY7Cejp3bMXWgzKD8B6O+zoMzh01GZsCuEIA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.42.tgz", - "integrity": "sha512-bU2tHRqTPOaoH/4m0zYHbFWpiYDmaA0gt90/3BMEFaM0PqVK/a6MA2V/ypV5PO0v8QxN6gH5hBPY4YJ2lopXgA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.42.tgz", - "integrity": "sha512-75h1+22Ivy07+QvxHyhVqOdekupiTZVLN1PMwCDonAqyXd8TVNJfIRFrdL8QmSJrOJJ5h8H1I9ETyl2L8LQDaw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.42.tgz", - "integrity": "sha512-W6Jebeu5TTDQMJUJVarEzRU9LlKpNkPBbjqSu+GUPTHDCly5zZEQq9uHkmHHl7OKm+mQ2zFySN83nmfCeZCyNA==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.42.tgz", - "integrity": "sha512-Ooy/Bj+mJ1z4jlWcK5Dl6SlPlCgQB9zg1UrTCeY8XagvuWZ4qGPyYEWGkT94HUsRi2hKsXvcs6ThTOjBaJSMfg==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.42.tgz", - "integrity": "sha512-2L0HbzQfbTuemUWfVqNIjOfaTRt9zsvjnme6lnr7/MO9toz/MJ5tZhjqrG6uDWDxhsaHI2/nsDgrv8uEEN2eoA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.42.tgz", - "integrity": "sha512-STq69yzCMhdRaWnh29UYrLSr/qaWMm/KqwaRF1pMEK7kDiagaXhSL1zQGXbYv94GuGY/zAwzK98+6idCMUOOCg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.42.tgz", - "integrity": "sha512-c3Ug3e9JpVr8jAcfbhirtpBauLxzYPpycjWulD71CF6ZSY26tvzmXMJYooQ2YKqDY4e/fPu5K8bm7MiXMnyxuA==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.42.tgz", - "integrity": "sha512-QuvpHGbYlkyXWf2cGm51LBCHx6eUakjaSrRpUqhPwjh/uvNUYvLmz2LgPTTPwCqaKt0iwL+OGVL0tXA5aDbAbg==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.42.tgz", - "integrity": "sha512-8ohIVIWDbDT+i7lCx44YCyIRrOW1MYlks9fxTo0ME2LS/fxxdoJBwHWzaDYhjvf8kNpA+MInZvyOEAGoVDrMHg==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.42.tgz", - "integrity": "sha512-DzDqK3TuoXktPyG1Lwx7vhaF49Onv3eR61KwQyxYo4y5UKTpL3NmuarHSIaSVlTFDDpcIajCDwz5/uwKLLgKiQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.42.tgz", - "integrity": "sha512-YFRhPCxl8nb//Wn6SiS5pmtplBi4z9yC2gLrYoYI/tvwuB1jldir9r7JwAGy1Ck4D7sE7wBN9GFtUUX/DLdcEQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.42.tgz", - "integrity": "sha512-QYSD2k+oT9dqB/4eEM9c+7KyNYsIPgzYOSrmfNGDIyJrbT1d+CFVKvnKahDKNJLfOYj8N4MgyFaU9/Ytc6w5Vw==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.42.tgz", - "integrity": "sha512-M2meNVIKWsm2HMY7+TU9AxM7ZVwI9havdsw6m/6EzdXysyCFFSoaTQ/Jg03izjCsK17FsVRHqRe26Llj6x0MNA==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.42.tgz", - "integrity": "sha512-uXV8TAZEw36DkgW8Ak3MpSJs1ofBb3Smkc/6pZ29sCAN1KzCAQzsje4sUwugf+FVicrHvlamCOlFZIXgct+iqQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.42.tgz", - "integrity": "sha512-4iw/8qWmRICWi9ZOnJJf9sYt6wmtp3hsN4TdI5NqgjfOkBVMxNdM9Vt3626G1Rda9ya2Q0hjQRD9W1o+m6Lz6g==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.42.tgz", - "integrity": "sha512-j3cdK+Y3+a5H0wHKmLGTJcq0+/2mMBHPWkItR3vytp/aUGD/ua/t2BLdfBIzbNN9nLCRL9sywCRpOpFMx3CxzA==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.42", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.42.tgz", - "integrity": "sha512-+lRAARnF+hf8J0mN27ujO+VbhPbDqJ8rCcJKye4y7YZLV6C4n3pTRThAb388k/zqF5uM0lS5O201u0OqoWSicw==", - "dev": true, - "optional": true - }, - "fs.realpath": { - "version": "1.0.0", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.12", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "glob": { - "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "inflight": { - "version": "1.0.6", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "listenercount": { - "version": "1.0.1", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "once": { - "version": "1.4.0", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "3.0.2", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "traverse": { - "version": "0.3.9", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true - }, - "typescript": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", - "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", - "dev": true - }, - "unzipper": { - "version": "0.10.11", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "vscode-jsonrpc": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", - "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==" - }, - "vscode-languageclient": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz", - "integrity": "sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==", - "requires": { - "minimatch": "^3.0.4", - "semver": "^7.3.5", - "vscode-languageserver-protocol": "3.17.1" - } - }, - "vscode-languageserver-protocol": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", - "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", - "requires": { - "vscode-jsonrpc": "8.0.1", - "vscode-languageserver-types": "3.17.1" - } - }, - "vscode-languageserver-types": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", - "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==" - }, - "vscode-test": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", - "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - } - }, - "wrappy": { - "version": "1.0.2", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/DSL/de.unibonn.simpleml.vscode/package.json b/DSL/de.unibonn.simpleml.vscode/package.json deleted file mode 100644 index 0e3bb317b..000000000 --- a/DSL/de.unibonn.simpleml.vscode/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "simple-ml", - "displayName": "Simple-ML", - "description": "Machine Learning made simple.", - "publisher": "Simple-ML", - "repository": { - "url": "https://github.com/Simple-ML/Simple-ML" - }, - "icon": "icons/icon.png", - "galleryBanner": { - "color": "#ffffff" - }, - "version": "0.0.1", - "engines": { - "vscode": "^1.62.0" - }, - "categories": [ - "Programming Languages", - "Machine Learning", - "Data Science" - ], - "contributes": { - "languages": [ - { - "id": "simple-ml", - "aliases": [ - "Simple-ML", - "simple-ml", - "SimpleML", - "simpleml" - ], - "extensions": [ - ".smlflow", - ".smlstub", - ".smltest" - ], - "configuration": "./language-configuration.json" - } - ], - "grammars": [ - { - "language": "simple-ml", - "scopeName": "source.simpleml", - "path": "./syntaxes/simple-ml.tmLanguage.json" - } - ] - }, - "activationEvents": [ - "onLanguage:simple-ml" - ], - "main": "./dist/extension.js", - "scripts": { - "vscode:prepublish": "esbuild src/extension.ts --bundle --platform=node --external:vscode --outfile=dist/extension.js", - "vscode:package": "vsce package" - }, - "dependencies": { - "vscode-languageclient": "^8.0.1" - }, - "devDependencies": { - "@types/node": "^17.0.40", - "@types/vscode": "^1.67.0", - "esbuild": "^0.14.42", - "typescript": "^4.7.3", - "vscode-test": "^1.6.1" - } -} diff --git a/DSL/de.unibonn.simpleml.vscode/tsconfig.json b/DSL/de.unibonn.simpleml.vscode/tsconfig.json deleted file mode 100644 index 876a7bfa1..000000000 --- a/DSL/de.unibonn.simpleml.vscode/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es2019", - "lib": ["ES2019"], - "outDir": "out", - "rootDir": "src", - "sourceMap": true - }, - "include": ["src/**/*"], - "exclude": ["node_modules", ".vscode-test"] -} diff --git a/DSL/de.unibonn.simpleml.vscode/vsc-extension-quickstart.md b/DSL/de.unibonn.simpleml.vscode/vsc-extension-quickstart.md deleted file mode 100644 index 2892013ff..000000000 --- a/DSL/de.unibonn.simpleml.vscode/vsc-extension-quickstart.md +++ /dev/null @@ -1,29 +0,0 @@ -# Welcome to your VS Code Extension - -## What's in the folder - -* This folder contains all of the files necessary for your extension. -* `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension. -* `syntaxes/simple-ml.tmLanguage.json` - this is the Text mate grammar file that is used for tokenization. -* `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets. - -## Get up and running straight away - -* Make sure the language configuration settings in `language-configuration.json` are accurate. -* Press `F5` to open a new window with your extension loaded. -* Create a new file with a file name suffix matching your language. -* Verify that syntax highlighting works and that the language configuration settings are working. - -## Make changes - -* You can relaunch the extension from the debug toolbar after making changes to the files listed above. -* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. - -## Add more language features - -* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at https://code.visualstudio.com/docs - -## Install your extension - -* To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code. -* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. diff --git a/DSL/de.unibonn.simpleml/model/SimpleML.ecore b/DSL/de.unibonn.simpleml/model/SimpleML.ecore deleted file mode 100644 index 038c3374a..000000000 --- a/DSL/de.unibonn.simpleml/model/SimpleML.ecore +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DSL/de.unibonn.simpleml/model/SimpleML.genmodel b/DSL/de.unibonn.simpleml/model/SimpleML.genmodel deleted file mode 100644 index 17cde32d5..000000000 --- a/DSL/de.unibonn.simpleml/model/SimpleML.genmodel +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleML.xtext b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleML.xtext deleted file mode 100644 index b14d2731e..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleML.xtext +++ /dev/null @@ -1,802 +0,0 @@ -grammar de.unibonn.simpleml.SimpleML hidden ( - WS, - SL_COMMENT, - ML_COMMENT, - TEST_MARKER -) -import 'http://www.eclipse.org/emf/2002/Ecore' as ecore -import 'http://www.unibonn.de/simpleml/SimpleML' - - - -/********************************************************************************************************************** - * Declarations - **********************************************************************************************************************/ - -// Compilations Units -------------------------------------------------------------------------------------------------- - -SmlCompilationUnit - : {SmlCompilationUnit} - =>annotationCalls+=SmlAnnotationCall* // Annotation calls before a package declaration belong to the compilation unit - ('package' name=QualifiedName)? - imports+=SmlImport* - members+=SmlCompilationUnitMember* - ; - -SmlCompilationUnitMember returns SmlAbstractAnnotatedObject - : {SmlAnnotationCallList} annotationCalls+=SmlAnnotationCall* - - ( {SmlAnnotation.annotationCallList=current} - 'annotation' name=ID - parameterList=SmlParameterList? - constraint=SmlConstraint? - - | {SmlClass.annotationCallList=current} - 'class' name=ID - typeParameterList=SmlTypeParameterList? - parameterList=SmlParameterList? - parentTypeList=SmlParentTypeList? - body=SmlClassBody? - - | {SmlEnum.annotationCallList=current} - 'enum' name=ID - body=SmlEnumBody? - - | {SmlFunction.annotationCallList=current} - 'fun' name=ID - typeParameterList=SmlTypeParameterList? - parameterList=SmlParameterList - resultList=SmlResultList? - body=SmlFunctionBody? - - | {SmlStep.annotationCallList=current} - visibility=('internal'|'private')? - 'step' name=ID - parameterList=SmlParameterList - resultList=SmlResultList? - body=SmlBlock - - | {SmlWorkflow.annotationCallList=current} - 'workflow' name=ID - body=SmlBlock - - | {SmlPredicate.annotationCallList=current} - 'predicate' name=ID - parameterList=SmlParameterList - resultList=SmlResultList? - goalList=SmlGoalList - ) - ; - -SmlImport - : 'import' importedNamespace=QualifiedNameWithWildcard alias=SmlImportAlias? - ; - -SmlImportAlias - : 'as' name=ID - ; - - -// Annotations --------------------------------------------------------------------------------------------------------- - -SmlAnnotationCall - : '@' annotation=[SmlAnnotation] argumentList=SmlAnnotationCallArgumentList? - ; - -SmlAnnotationCallArgumentList returns SmlArgumentList - : {SmlArgumentList} '(' (arguments+=SmlAnnotationCallArgument (',' arguments+=SmlAnnotationCallArgument)* ','?)? ')' - ; - -SmlAnnotationCallArgument returns SmlArgument - : (parameter=[SmlParameter] '=')? value=SmlExpression - ; - - -// Classes ------------------------------------------------------------------------------------------------------------- - -SmlParentTypeList - : 'sub' parentTypes+=SmlParentType (',' parentTypes+=SmlParentType)* ','? - ; - -SmlParentType returns SmlAbstractType - : SmlParentPrimaryType =>({SmlMemberType.receiver=current} '.' member=SmlNamedType)* - ; - -SmlParentPrimaryType returns SmlAbstractType - : SmlNamedType - | SmlParentParenthesizedType - ; - -SmlParentParenthesizedType returns SmlParenthesizedType - : '(' type=SmlParentType ')' - ; - -SmlClassBody - : {SmlClassBody} '{' members+=SmlClassMember* '}' - ; - -SmlClassMember returns SmlAbstractObject - : SmlAnnotatedClassMember - | SmlProtocol - | SmlConstraint - ; - -SmlAnnotatedClassMember returns SmlAbstractAnnotatedObject - : {SmlAnnotationCallList} annotationCalls+=SmlAnnotationCall* - - ( {SmlAttribute.annotationCallList=current} - static?='static'? - 'attr' name=ID (':' type=SmlType)? - - | {SmlClass.annotationCallList=current} - 'class' name=ID - typeParameterList=SmlTypeParameterList? - parameterList=SmlParameterList? - parentTypeList=SmlParentTypeList? - body=SmlClassBody? - - | {SmlEnum.annotationCallList=current} - 'enum' name=ID - body=SmlEnumBody? - - | {SmlFunction.annotationCallList=current} - static?='static'? - 'fun' name=ID - typeParameterList=SmlTypeParameterList? - parameterList=SmlParameterList - resultList=SmlResultList? - body=SmlFunctionBody? - ) - ; - -SmlConstraint - : 'constraint' constraintList=SmlGoalList - ; - -SmlProtocol - : 'protocol' body=SmlProtocolBody - ; - -SmlProtocolBody - : {SmlProtocolBody} - '{' - subtermList=SmlProtocolSubtermList? - term=SmlProtocolTerm? - '}' - ; - -SmlProtocolSubtermList - : subterms+=SmlProtocolSubterm+ - ; - -SmlProtocolSubterm - : 'subterm' name=ID '=' term=SmlProtocolTerm ';' - ; - -SmlProtocolTerm returns SmlAbstractProtocolTerm - : SmlProtocolAlternative - ; - -SmlProtocolAlternative returns SmlAbstractProtocolTerm - : SmlProtocolSequence - ( - {SmlProtocolAlternative.terms+=current} '|' terms+=SmlProtocolSequence - ('|' terms+=SmlProtocolSequence)* - )? - ; - -SmlProtocolSequence returns SmlAbstractProtocolTerm - : SmlProtocolQuantifiedTerm - ( - {SmlProtocolSequence.terms+=current} terms+=SmlProtocolQuantifiedTerm - (terms+=SmlProtocolQuantifiedTerm)* - )? - ; - -SmlProtocolQuantifiedTerm returns SmlAbstractProtocolTerm - : SmlProtocolPrimaryElement - ({SmlProtocolQuantifiedTerm.term=current} quantifier=SmlProtocolQuantifier)? - ; - -SmlProtocolQuantifier - : '?' - | '*' - | '+' - ; - -SmlProtocolPrimaryElement returns SmlAbstractProtocolTerm - : SmlProtocolComplement - | SmlProtocolReference - | SmlProtocolTokenClass - | SmlProtocolParenthesizedTerm - ; - -SmlProtocolComplement - : {SmlProtocolComplement} - '[' - universe=SmlProtocolTokenClass? - '^' - referenceList=SmlProtocolReferenceList? - ']' - ; - -SmlProtocolReferenceList - : references+=SmlProtocolReference+ - ; - -SmlProtocolReference - : token=[SmlAbstractProtocolToken] - ; - -SmlProtocolTokenClass - : value=SmlProtocolTokenClassValue - ; - -SmlProtocolTokenClassValue - : '.' - | '\\a' - | '\\f' - ; - -SmlProtocolParenthesizedTerm - : '(' term=SmlProtocolTerm ')' - ; - - -// Enums --------------------------------------------------------------------------------------------------------------- - -SmlEnumBody - : {SmlEnumBody} '{' variants+=SmlEnumVariant* '}' - ; - -SmlEnumVariant - : annotationCalls+=SmlAnnotationCall* - name=ID - typeParameterList=SmlTypeParameterList? - parameterList=SmlParameterList? - constraint=SmlConstraint? - ; - - -// Parameters ---------------------------------------------------------------------------------------------------------- - -SmlParameterList - : {SmlParameterList} '(' (parameters+=SmlParameter (',' parameters+=SmlParameter)* ','?)? ')' - ; - -// Used while parsing lambdas to avoid left-recursion. Can be treated like a normal parameter list. -SmlLambdaParameterList - : {SmlLambdaParameterList} '(' (parameters+=SmlParameter (',' parameters+=SmlParameter)* ','?)? ')' - ; - -SmlParameter - : annotationCalls+=SmlAnnotationCall* - variadic?='vararg'? - name=ID (':' type=SmlType)? - ('=' defaultValue=SmlExpression)? - ; - - -// Results ------------------------------------------------------------------------------------------------------------- - -SmlResultList - : {SmlResultList} '->' results+=SmlResult // If there is exactly one result we need no parentheses - | {SmlResultList} '->' '(' (results+=SmlResult (',' results+=SmlResult)* ','?)? ')' - ; - -SmlResult - : annotationCalls+=SmlAnnotationCall* - name=ID (':' type=SmlType)? - ; - -// Function ------------------------------------------------------------------------------------------------------------- - -SmlFunctionBody - : {SmlFunctionBody} '{' statements+=SmlFunctionStatement* '}' - ; - -SmlFunctionStatement returns SmlAbstractObject - : SmlConstraint - ; - -/********************************************************************************************************************** - * Statements - **********************************************************************************************************************/ - -// Functions and workflows -------------------------------------------------------------------------------------------- - -SmlBlock - : {SmlBlock} '{' statements+=SmlStatement* '}' - ; - -SmlStatement returns SmlAbstractStatement - : SmlAssignment - | SmlExpressionStatement - ; - -SmlAssignment - : assigneeList=SmlAssigneeList '=' expression=SmlExpression ';' - ; - -SmlAssigneeList - : assignees+=SmlAssignee (',' assignees+=SmlAssignee)* ','? - ; - -SmlAssignee returns SmlAbstractAssignee - : {SmlPlaceholder} 'val' name=ID - | {SmlWildcard} '_' - | {SmlYield} 'yield' result=[SmlResult] - ; - -SmlExpressionStatement - : expression=SmlExpression ';' - ; - -/********************************************************************************************************************** - * Expressions - **********************************************************************************************************************/ - -SmlExpression returns SmlAbstractExpression - : SmlLambda - | SmlOrExpression - ; - -SmlLambda returns SmlAbstractExpression - : SmlLambdaParameterList - ( {SmlBlockLambda.parameterList=current} body=SmlBlockLambdaBlock - | {SmlExpressionLambda.parameterList=current} '->' result=SmlExpression - ) - ; - -SmlBlockLambdaBlock returns SmlBlock - : {SmlBlock} '{' statements+=SmlBlockLambdaStatement* '}' - ; - -SmlBlockLambdaStatement returns SmlAbstractStatement - : SmlBlockLambdaAssignment - | SmlExpressionStatement - ; - -SmlBlockLambdaAssignment returns SmlAssignment - : assigneeList=SmlBlockLambdaAssigneeList '=' expression=SmlExpression ';' - ; - -SmlBlockLambdaAssigneeList returns SmlAssigneeList - : assignees+=SmlBlockLambdaAssignee (',' assignees+=SmlBlockLambdaAssignee)* ','? - ; - -SmlBlockLambdaAssignee returns SmlAbstractAssignee - : {SmlWildcard} '_' - | {SmlPlaceholder} 'val' name=ID - | {SmlBlockLambdaResult} 'yield' name=ID - ; - -SmlOrExpression returns SmlAbstractExpression - : SmlAndExpression ({SmlInfixOperation.leftOperand=current} operator='or' rightOperand=SmlAndExpression)* - ; - -SmlAndExpression returns SmlAbstractExpression - : SmlNotExpression ({SmlInfixOperation.leftOperand=current} operator='and' rightOperand=SmlNotExpression)* - ; - -SmlNotExpression returns SmlAbstractExpression - : {SmlPrefixOperation} operator='not' operand=SmlNotExpression - | SmlEqualityExpression - ; - -SmlEqualityExpression returns SmlAbstractExpression - : SmlComparisonExpression ({SmlInfixOperation.leftOperand=current} operator=SmlEqualityOperator rightOperand=SmlComparisonExpression)? - ; - -SmlEqualityOperator - : '==' - | '!=' - | '===' - | '!==' - ; - -SmlComparisonExpression returns SmlAbstractExpression - : SmlAdditiveExpression ({SmlInfixOperation.leftOperand=current} operator=SmlComparisonOperator rightOperand=SmlAdditiveExpression)? - ; - -SmlComparisonOperator - : '<' - | '<=' - | '>=' - | '>' - ; - -SmlAdditiveExpression returns SmlAbstractExpression - : SmlMultiplicativeExpression ({SmlInfixOperation.leftOperand=current} operator=SmlAdditiveOperator rightOperand=SmlMultiplicativeExpression)* - ; - -SmlAdditiveOperator - : '+' - | '-' - ; - -SmlMultiplicativeExpression returns SmlAbstractExpression - : SmlElvisExpression ({SmlInfixOperation.leftOperand=current} operator=SmlMultiplicativeOperator rightOperand=SmlElvisExpression)* - ; - -SmlMultiplicativeOperator - : '*' - | '/' - ; - -SmlElvisExpression returns SmlAbstractExpression - : SmlUnaryOperation ({SmlInfixOperation.leftOperand=current} operator='?:' rightOperand=SmlUnaryOperation)* - ; - -SmlUnaryOperation returns SmlAbstractExpression - : {SmlPrefixOperation} operator='-' operand=SmlUnaryOperation - | SmlChainedExpression - ; - -SmlChainedExpression returns SmlAbstractExpression - : SmlPrimaryExpression =>( - {SmlCall.receiver=current} typeArgumentList=SmlTypeArgumentList? argumentList=SmlCallArgumentList - | {SmlIndexedAccess.receiver=current} '[' index=SmlExpression ']' - | {SmlMemberAccess.receiver=current} (nullSafe?='?')? '.' member=SmlReference - )* - ; - -SmlCallArgumentList returns SmlArgumentList - : {SmlArgumentList} '(' (arguments+=SmlCallArgument (',' arguments+=SmlCallArgument)* ','?)? ')' - ; - -SmlCallArgument returns SmlArgument - : (parameter=[SmlParameter] '=')? value=SmlExpression - ; - -SmlPrimaryExpression returns SmlAbstractExpression - : SmlLiteral - | SmlParenthesizedExpression - | SmlReference - | SmlTemplateString - ; - -SmlLiteral returns SmlAbstractLiteral - : SmlBoolean - | SmlFloat - | SmlInt - | SmlNull - | SmlString - ; - -SmlBoolean - : true?='true' - | {SmlBoolean} 'false' - ; - -SmlFloat - : value=FLOAT - ; - -SmlInt - : value=INT - ; - -SmlNull - : {SmlNull} 'null' - ; - -SmlString - : value=STRING - ; - -SmlReference - : declaration=[SmlAbstractDeclaration] - ; - -SmlParenthesizedExpression - : '(' expression=SmlExpression ')' - ; - - -// Template strings ---------------------------------------------------------------------------------------------------- - -SmlTemplateString - : expressions+=SmlTemplateStringStart expressions+=SmlExpression? - (expressions+=SmlTemplateStringInner expressions+=SmlExpression?)* - expressions+=SmlTemplateStringEnd - ; - -SmlTemplateStringStart - : value=TEMPLATE_STRING_START - ; - -SmlTemplateStringInner - : value=TEMPLATE_STRING_INNER - ; - -SmlTemplateStringEnd - : value=TEMPLATE_STRING_END - ; - - -/********************************************************************************************************************** - * Predicates - **********************************************************************************************************************/ - -SmlGoalList - : {SmlGoalList} '{' ( goals+=SmlGoal (',' goals+=SmlGoal)* )? '}' - ; - -SmlGoal returns SmlAbstractGoal - : SmlExpressionGoal - | SmlAssignmentGoal - | SmlAbstractConstraintGoal - ; - -SmlAssignmentGoal - : placeholder=SmlGoalPlaceholder "=" expression=SmlGoalExpression - ; - -SmlGoalPlaceholder - : 'val' name=ID - ; - -SmlExpressionGoal - : expression=SmlGoalExpression - ; - -SmlGoalExpression returns SmlAbstractGoalExpression - : SmlChainedGoalExpression - ; - -SmlChainedGoalExpression returns SmlAbstractGoalExpression - : SmlGoalCall - ; - -SmlGoalCall returns SmlAbstractGoalExpression - : SmlPrimaryGoalExpression ( {SmlGoalCall.receiver=current}'(' (argumentList=SmlGoalArgumentList)? ')' )? - ; - -SmlGoalArgumentList - : {SmlGoalArgumentList} arguments+=SmlGoalArgument (',' arguments+=SmlGoalArgument)* - ; - -SmlGoalArgument - : (parameter=[SmlParameter] "=")? value=SmlGoalExpression - ; - -SmlPrimaryGoalExpression returns SmlAbstractGoalExpression - : SmlGoalReference - | SmlParenthesizedGoalExpression - | SmlLiteral - ; - -SmlGoalReference - : declaration=[SmlAbstractDeclaration] - ; - -SmlParenthesizedGoalExpression - : '(' expressions+=SmlGoalExpression (',' expressions+=SmlGoalExpression)* ')' - ; - - -/********************************************************************************************************************** - * Names - **********************************************************************************************************************/ - -QualifiedName - : ID ('.' ID)* - ; - -QualifiedNameWithWildcard - : QualifiedName ('.' '*')? - ; - - - -/********************************************************************************************************************** - * Types - **********************************************************************************************************************/ - -SmlType returns SmlAbstractType - : SmlPrimaryType =>({SmlMemberType.receiver=current} '.' member=SmlNamedType)* - ; - -SmlPrimaryType returns SmlAbstractType - : SmlCallableType - | SmlNamedType - | SmlUnionType - | SmlParenthesizedType - ; - -SmlParenthesizedType - : '(' type=SmlType ')' - ; - -// Callable Types ------------------------------------------------------------------------------------------------------ - -SmlCallableType - : parameterList=SmlParameterList - resultList=SmlResultList - ; - - -// Named Types --------------------------------------------------------------------------------------------------------- - -SmlNamedType - : declaration=[SmlAbstractNamedTypeDeclaration] - typeArgumentList=SmlTypeArgumentList? - (nullable?='?')? - ; - - -// Union Types --------------------------------------------------------------------------------------------------------- - -SmlUnionType - : 'union' typeArgumentList=SmlUnionTypeArgumentList - ; - -SmlUnionTypeArgumentList returns SmlTypeArgumentList - : {SmlTypeArgumentList} ('<' (typeArguments+=SmlUnionTypeArgument (',' typeArguments+=SmlUnionTypeArgument)* ','?)? '>') - ; - -SmlUnionTypeArgument returns SmlTypeArgument - : value=SmlUnionTypeArgumentValue - ; - -SmlUnionTypeArgumentValue returns SmlAbstractTypeArgumentValue - : {SmlTypeProjection} type=SmlType - ; - - -// Generics ------------------------------------------------------------------------------------------------------------ - -SmlTypeParameterList - : {SmlTypeParameterList} ('<' (typeParameters+=SmlTypeParameter (',' typeParameters+=SmlTypeParameter)* ','?)? '>') - ; - -SmlTypeParameter - : annotationCalls+=SmlAnnotationCall* - variance=SmlTypeParameterVariance? - name=ID - ('::' kind=SmlTypeParameterKind)? - ; - -SmlTypeParameterVariance - : 'in' - | 'out' - ; - -SmlTypeParameterKind - : '$SchemaType' - | '$ExpressionType' - | '$IntType' - | '$FloatType' - | '$BooleanType' - | '$StringType' - | '$NamedType' - ; - -SmlAbstractConstraintGoal - : SmlTypeParameterConstraintGoal - ; - -SmlTypeParameterConstraintGoal - : leftOperand=[SmlTypeParameter] operator=SmlTypeParameterConstraintOperator rightOperand=SmlType - ; - -SmlTypeParameterConstraintOperator - : 'sub' - | 'super' - ; - -SmlTypeArgumentList - : {SmlTypeArgumentList} '<' (typeArguments+=SmlTypeArgument (',' typeArguments+=SmlTypeArgument)* ','?)? '>' - ; - -SmlTypeArgument - : (typeParameter=[SmlTypeParameter] '=')? value=SmlTypeArgumentValue - ; - -SmlTypeArgumentValue returns SmlAbstractTypeArgumentValue - : {SmlStarProjection} '*' - | {SmlTypeProjection} variance=SmlTypeParameterVariance? type=SmlType - ; - - - -/********************************************************************************************************************** - * Terminals - **********************************************************************************************************************/ - -terminal FLOAT returns ecore::EDouble - : DECIMAL_DIGIT+ '.' DECIMAL_DIGIT+ FLOAT_EXPONENT? - | DECIMAL_DIGIT+ FLOAT_EXPONENT - ; - -terminal fragment DECIMAL_DIGIT - : '0'..'9' - ; - -terminal fragment FLOAT_EXPONENT - : ('e'|'E') ('+'|'-')? DECIMAL_DIGIT+ - ; - -terminal ID - : IDENTIFIER - | '`' IDENTIFIER '`' - ; - -terminal fragment IDENTIFIER - : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* - ; - -terminal INT returns ecore::EInt - : DECIMAL_DIGIT+ - ; - -terminal ML_COMMENT - : '/*' -> '*/' - ; - -terminal SL_COMMENT - : '//' !('\r'|'\n')* ('\r'? '\n')? - ; - -terminal STRING returns ecore::EString - : STRING_START - STRING_TEXT* - STRING_END - ; - -terminal fragment STRING_START - : STRING_DELIMITER - ; - -terminal fragment STRING_END - : '{'? STRING_DELIMITER - ; - -terminal fragment STRING_DELIMITER - : '"' - ; - -terminal fragment STRING_TEXT - : '{'? ESCAPE_SEQUENCE - | '{'? !('\\'|STRING_DELIMITER|'{') - ; - -terminal fragment ESCAPE_SEQUENCE - : '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\'|'{' */ - ; - -terminal fragment TEMPLATE_EXPRESSION_START - : '{{' - ; - -terminal fragment TEMPLATE_EXPRESSION_END - : '}}' - ; - -terminal TEMPLATE_STRING_START - : STRING_START - STRING_TEXT* - TEMPLATE_EXPRESSION_START - ; - -terminal TEMPLATE_STRING_INNER - : TEMPLATE_EXPRESSION_END - STRING_TEXT* - TEMPLATE_EXPRESSION_START - ; - -terminal TEMPLATE_STRING_END - : TEMPLATE_EXPRESSION_END - STRING_TEXT* - STRING_END - ; - -terminal TEST_MARKER - : '»' - | '«' - ; - -terminal WS - : (' '|'\t'|'\r'|'\n')+ - ; diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlPrefixOperationOperator.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlPrefixOperationOperator.kt deleted file mode 100644 index 9069fdb70..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlPrefixOperationOperator.kt +++ /dev/null @@ -1,33 +0,0 @@ -package de.unibonn.simpleml.constant - -import de.unibonn.simpleml.simpleML.SmlPrefixOperation - -/** - * The possible operators for an [SmlPrefixOperation]. - */ -enum class SmlPrefixOperationOperator(val operator: String) { - - /** - * Logical negation. - */ - Not("not"), - - /** - * Arithmetic negation. - */ - Minus("-"); - - override fun toString(): String { - return operator - } -} - -/** - * Returns the [SmlPrefixOperationOperator] of this [SmlPrefixOperation]. - * - * @throws IllegalArgumentException If the operator is unknown. - */ -fun SmlPrefixOperation.operator(): SmlPrefixOperationOperator { - return SmlPrefixOperationOperator.values().firstOrNull { it.operator == this.operator } - ?: throw IllegalArgumentException("Unknown prefix operator '$operator'.") -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlProtocolQuantifiedTermQuantifier.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlProtocolQuantifiedTermQuantifier.kt deleted file mode 100644 index 8506d520a..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlProtocolQuantifiedTermQuantifier.kt +++ /dev/null @@ -1,26 +0,0 @@ -package de.unibonn.simpleml.constant - -import de.unibonn.simpleml.simpleML.SmlProtocolQuantifiedTerm - -/** - * The possible quantifiers for an [SmlProtocolQuantifiedTerm]. - */ -enum class SmlProtocolQuantifiedTermQuantifier(val quantifier: String) { - ZeroOrOne("?"), - ZeroOrMore("*"), - OneOrMore("+"); - - override fun toString(): String { - return quantifier - } -} - -/** - * Returns the [SmlProtocolQuantifiedTermQuantifier] of this [SmlProtocolQuantifiedTerm]. - * - * @throws IllegalArgumentException If the quantifier is unknown. - */ -fun SmlProtocolQuantifiedTerm.quantifier(): SmlProtocolQuantifiedTermQuantifier { - return SmlProtocolQuantifiedTermQuantifier.values().firstOrNull { it.quantifier == this.quantifier } - ?: throw IllegalArgumentException("Unknown quantified term quantifier '$quantifier'.") -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlVisibility.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlVisibility.kt deleted file mode 100644 index f2e65ba86..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant/SmlVisibility.kt +++ /dev/null @@ -1,38 +0,0 @@ -package de.unibonn.simpleml.constant - -import de.unibonn.simpleml.simpleML.SmlStep - -/** - * The possible visibilities of an [SmlStep]. - */ -enum class SmlVisibility(val visibility: String?) { - - /** - * The [SmlStep] is visible everywhere. - */ - Public(null), - - /** - * The [SmlStep] is only visible in the same package. - */ - Internal("internal"), - - /** - * The [SmlStep] is only visible in the same file. - */ - Private("private"); - - override fun toString(): String { - return name - } -} - -/** - * Returns the [SmlVisibility] of this [SmlStep]. - * - * @throws IllegalArgumentException If the visibility is unknown. - */ -fun SmlStep.visibility(): SmlVisibility { - return SmlVisibility.values().firstOrNull { it.visibility == this.visibility } - ?: throw IllegalArgumentException("Unknown visibility '$visibility'.") -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/Creators.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/Creators.kt deleted file mode 100644 index 4fe69e4a4..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/Creators.kt +++ /dev/null @@ -1,1599 +0,0 @@ -@file:Suppress("unused") - -package de.unibonn.simpleml.emf - -import de.unibonn.simpleml.constant.SmlFileExtension -import de.unibonn.simpleml.constant.SmlInfixOperationOperator -import de.unibonn.simpleml.constant.SmlKind -import de.unibonn.simpleml.constant.SmlPrefixOperationOperator -import de.unibonn.simpleml.constant.SmlProtocolQuantifiedTermQuantifier -import de.unibonn.simpleml.constant.SmlProtocolTokenClassValue -import de.unibonn.simpleml.constant.SmlTypeParameterConstraintOperator -import de.unibonn.simpleml.constant.SmlVariance -import de.unibonn.simpleml.constant.SmlVisibility -import de.unibonn.simpleml.simpleML.SimpleMLFactory -import de.unibonn.simpleml.simpleML.SmlAbstractAssignee -import de.unibonn.simpleml.simpleML.SmlAbstractClassMember -import de.unibonn.simpleml.simpleML.SmlAbstractCompilationUnitMember -import de.unibonn.simpleml.simpleML.SmlAbstractConstraintGoal -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlAbstractGoal -import de.unibonn.simpleml.simpleML.SmlAbstractGoalExpression -import de.unibonn.simpleml.simpleML.SmlAbstractLambda -import de.unibonn.simpleml.simpleML.SmlAbstractNamedTypeDeclaration -import de.unibonn.simpleml.simpleML.SmlAbstractObject -import de.unibonn.simpleml.simpleML.SmlAbstractProtocolTerm -import de.unibonn.simpleml.simpleML.SmlAbstractProtocolToken -import de.unibonn.simpleml.simpleML.SmlAbstractStatement -import de.unibonn.simpleml.simpleML.SmlAbstractType -import de.unibonn.simpleml.simpleML.SmlAbstractTypeArgumentValue -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlAnnotationCallList -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlArgumentList -import de.unibonn.simpleml.simpleML.SmlAssigneeList -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlAssignmentGoal -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlBlock -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlBoolean -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCallableType -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlConstraint -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionGoal -import de.unibonn.simpleml.simpleML.SmlExpressionLambda -import de.unibonn.simpleml.simpleML.SmlExpressionStatement -import de.unibonn.simpleml.simpleML.SmlFloat -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlGoalArgument -import de.unibonn.simpleml.simpleML.SmlGoalArgumentList -import de.unibonn.simpleml.simpleML.SmlGoalCall -import de.unibonn.simpleml.simpleML.SmlGoalList -import de.unibonn.simpleml.simpleML.SmlGoalReference -import de.unibonn.simpleml.simpleML.SmlImport -import de.unibonn.simpleml.simpleML.SmlImportAlias -import de.unibonn.simpleml.simpleML.SmlIndexedAccess -import de.unibonn.simpleml.simpleML.SmlInfixOperation -import de.unibonn.simpleml.simpleML.SmlInt -import de.unibonn.simpleml.simpleML.SmlLambdaParameterList -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlMemberType -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlNull -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlParameterList -import de.unibonn.simpleml.simpleML.SmlParentTypeList -import de.unibonn.simpleml.simpleML.SmlParenthesizedExpression -import de.unibonn.simpleml.simpleML.SmlParenthesizedGoalExpression -import de.unibonn.simpleml.simpleML.SmlParenthesizedType -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlPredicate -import de.unibonn.simpleml.simpleML.SmlPrefixOperation -import de.unibonn.simpleml.simpleML.SmlProtocol -import de.unibonn.simpleml.simpleML.SmlProtocolAlternative -import de.unibonn.simpleml.simpleML.SmlProtocolComplement -import de.unibonn.simpleml.simpleML.SmlProtocolParenthesizedTerm -import de.unibonn.simpleml.simpleML.SmlProtocolQuantifiedTerm -import de.unibonn.simpleml.simpleML.SmlProtocolReference -import de.unibonn.simpleml.simpleML.SmlProtocolReferenceList -import de.unibonn.simpleml.simpleML.SmlProtocolSequence -import de.unibonn.simpleml.simpleML.SmlProtocolSubterm -import de.unibonn.simpleml.simpleML.SmlProtocolTokenClass -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlResultList -import de.unibonn.simpleml.simpleML.SmlStarProjection -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlString -import de.unibonn.simpleml.simpleML.SmlTemplateString -import de.unibonn.simpleml.simpleML.SmlTypeArgument -import de.unibonn.simpleml.simpleML.SmlTypeArgumentList -import de.unibonn.simpleml.simpleML.SmlTypeParameter -import de.unibonn.simpleml.simpleML.SmlTypeParameterConstraintGoal -import de.unibonn.simpleml.simpleML.SmlTypeParameterList -import de.unibonn.simpleml.simpleML.SmlTypeProjection -import de.unibonn.simpleml.simpleML.SmlUnionType -import de.unibonn.simpleml.simpleML.SmlWildcard -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.utils.nullIfEmptyElse -import org.eclipse.emf.common.util.URI -import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.xtext.resource.XtextResource -import kotlin.math.absoluteValue - -private val factory = SimpleMLFactory.eINSTANCE - -/** - * Returns a new [Resource]. - * - * This can be useful to serialize EObjects that were initialized with the creators in this file rather than generated - * by the parser, since serialization requires EObjects to be contained in a resource. - */ -fun createSmlDummyResource( - fileName: String, - fileExtension: SmlFileExtension, - compilationUnit: SmlCompilationUnit -): Resource { - val uri = URI.createURI("dummy:/$fileName.${fileExtension.extension}") - return XtextResource(uri).apply { - this.contents += compilationUnit - } -} - -/** - * Returns a new [Resource]. - * - * This can be useful to serialize EObjects that were initialized with the creators in this file rather than generated - * by the parser, since serialization requires EObjects to be contained in a resource. - */ -fun createSmlDummyResource( - fileName: String, - fileExtension: SmlFileExtension, - packageName: String, - init: SmlCompilationUnit.() -> Unit = {} -): Resource { - val uri = URI.createURI("dummy:/$fileName.${fileExtension.extension}") - return XtextResource(uri).apply { - this.contents += createSmlCompilationUnit( - packageName = packageName, - init = init - ) - } -} - -/** - * Returns a new object of class [SmlAnnotation]. - */ -fun createSmlAnnotation( - name: String, - annotationCalls: List = emptyList(), - parameters: List = emptyList() -): SmlAnnotation { - return factory.createSmlAnnotation().apply { - this.name = name - this.annotationCallList = createSmlAnnotationCallList(annotationCalls) - this.parameterList = parameters.nullIfEmptyElse(::createSmlParameterList) - } -} - -/** - * Adds a new object of class [SmlAnnotation] to the receiver. - */ -fun SmlCompilationUnit.smlAnnotation( - name: String, - annotationCalls: List = emptyList(), - parameters: List = emptyList() -) { - this.addMember(createSmlAnnotation(name, annotationCalls, parameters)) -} - -/** - * Returns a new object of class [SmlAnnotationCall]. - */ -fun createSmlAnnotationCall( - annotation: SmlAnnotation, - arguments: List = emptyList() -): SmlAnnotationCall { - return factory.createSmlAnnotationCall().apply { - this.annotation = annotation - this.argumentList = arguments.nullIfEmptyElse(::createSmlArgumentList) - } -} - -/** - * Returns a new object of class [SmlAnnotationCall] that points to an annotation with the given name. - */ -fun createSmlAnnotationCall( - annotationName: String, - arguments: List = emptyList() -): SmlAnnotationCall { - return createSmlAnnotationCall( - createSmlAnnotation(annotationName), - arguments - ) -} - -/** - * Returns a new object of class [SmlAnnotationCallList]. - */ -private fun createSmlAnnotationCallList(annotationCalls: List): SmlAnnotationCallList { - return factory.createSmlAnnotationCallList().apply { - this.annotationCalls += annotationCalls - } -} - -/** - * Returns a new object of class [SmlArgument]. - */ -fun createSmlArgument(value: SmlAbstractExpression, parameter: SmlParameter? = null): SmlArgument { - return factory.createSmlArgument().apply { - this.value = value - this.parameter = parameter - } -} - -/** - * Returns a new object of class [SmlArgument] that points to a parameter with the given name. - */ -fun createSmlArgument(value: SmlAbstractExpression, parameterName: String): SmlArgument { - return createSmlArgument( - value, - createSmlParameter(parameterName) - ) -} - -/** - * Returns a new object of class [SmlArgumentList]. - */ -fun createSmlArgumentList(arguments: List): SmlArgumentList { - return factory.createSmlArgumentList().apply { - this.arguments += arguments - } -} - -/** - * Returns a new object of class [SmlAssigneeList]. - */ -fun createSmlAssigneeList(assignees: List): SmlAssigneeList { - return factory.createSmlAssigneeList().apply { - this.assignees += assignees - } -} - -/** - * Returns a new object of class [SmlAssignment]. - * - * @throws IllegalArgumentException If no assignees are passed. - */ -fun createSmlAssignment(assignees: List, expression: SmlAbstractExpression): SmlAssignment { - if (assignees.isEmpty()) { - throw IllegalArgumentException("Must have at least one assignee.") - } - - return factory.createSmlAssignment().apply { - this.assigneeList = createSmlAssigneeList(assignees) - this.expression = expression - } -} - -/** - * Adds a new object of class [SmlAssignment] to the receiver. - */ -fun SmlBlockLambda.smlAssignment(assignees: List, expression: SmlAbstractExpression) { - this.addStatement(createSmlAssignment(assignees, expression)) -} - -/** - * Adds a new object of class [SmlAssignment] to the receiver. - */ -fun SmlWorkflow.smlAssignment(assignees: List, expression: SmlAbstractExpression) { - this.addStatement(createSmlAssignment(assignees, expression)) -} - -/** - * Adds a new object of class [SmlAssignment] to the receiver. - */ -fun SmlStep.smlAssignment(assignees: List, expression: SmlAbstractExpression) { - this.addStatement(createSmlAssignment(assignees, expression)) -} - -/** - * Returns a new object of class [SmlAssignmentGoal]. - */ -fun createSmlAssignmentGoal(placeholderName: String, expression: SmlAbstractGoalExpression): SmlAssignmentGoal { - return factory.createSmlAssignmentGoal().apply { - this.placeholder = factory.createSmlGoalPlaceholder().apply { - this.name = placeholderName - } - this.expression = expression - } -} - -/** - * Adds a new object of class [SmlAssignmentGoal] to the receiver. - */ -fun SmlPredicate.smlAssignmentGoal(placeholderName: String, expression: SmlAbstractGoalExpression) { - this.addGoal(createSmlAssignmentGoal(placeholderName, expression)) -} - -/** - * Returns a new object of class [SmlAttribute]. - */ -fun createSmlAttribute( - name: String, - annotationCalls: List = emptyList(), - isStatic: Boolean = false, - type: SmlAbstractType? = null -): SmlAttribute { - return factory.createSmlAttribute().apply { - this.name = name - this.annotationCallList = createSmlAnnotationCallList(annotationCalls) - this.isStatic = isStatic - this.type = type - } -} - -/** - * Adds a new object of class [SmlAttribute] to the receiver. - */ -fun SmlClass.smlAttribute( - name: String, - annotationCalls: List = emptyList(), - isStatic: Boolean = false, - type: SmlAbstractType? = null -) { - this.addMember(createSmlAttribute(name, annotationCalls, isStatic, type)) -} - -/** - * Returns a new object of class [SmlBlock]. - */ -fun createSmlBlock( - statements: List = emptyList(), - init: SmlBlock.() -> Unit = {} -): SmlBlock { - return factory.createSmlBlock().apply { - this.statements += statements - this.init() - } -} - -/** - * Returns a new object of class [SmlBlockLambda]. - */ -fun createSmlBlockLambda( - parameters: List = emptyList(), - statements: List = emptyList(), - init: SmlBlockLambda.() -> Unit = {} -): SmlBlockLambda { - return factory.createSmlBlockLambda().apply { - this.parameterList = createSmlLambdaParameterList(parameters) - this.body = factory.createSmlBlock() - statements.forEach { addStatement(it) } - this.init() - } -} - -/** - * Adds a new statement to the receiver. - */ -private fun SmlBlockLambda.addStatement(statement: SmlAbstractStatement) { - if (this.body == null) { - this.body = factory.createSmlBlock() - } - - this.body.statements += statement -} - -/** - * Returns a new object of class [SmlBlockLambdaResult]. - */ -fun createSmlBlockLambdaResult(name: String): SmlBlockLambdaResult { - return factory.createSmlBlockLambdaResult().apply { - this.name = name - } -} - -/** - * Returns a new object of class [SmlBoolean]. - */ -fun createSmlBoolean(value: Boolean): SmlBoolean { - return factory.createSmlBoolean().apply { - this.isTrue = value - } -} - -/** - * Returns a new object of class [SmlCall]. - */ -fun createSmlCall( - receiver: SmlAbstractExpression, - typeArguments: List = emptyList(), - arguments: List = emptyList() -): SmlCall { - return factory.createSmlCall().apply { - this.receiver = receiver - this.typeArgumentList = typeArguments.nullIfEmptyElse(::createSmlTypeArgumentList) - this.argumentList = createSmlArgumentList(arguments) - } -} - -/** - * Returns a new object of class [SmlCallableType]. - */ -fun createSmlCallableType(parameters: List, results: List): SmlCallableType { - return factory.createSmlCallableType().apply { - this.parameterList = createSmlParameterList(parameters) - this.resultList = createSmlResultList(results) - } -} - -/** - * Returns a new object of class [SmlClass]. - */ -fun createSmlClass( - name: String, - annotationCalls: List = emptyList(), - typeParameters: List = emptyList(), - parameters: List? = null, // null and emptyList() are semantically different - parentTypes: List = emptyList(), - constraint: SmlConstraint? = null, - protocol: SmlProtocol? = null, - members: List = emptyList(), - init: SmlClass.() -> Unit = {} -): SmlClass { - return factory.createSmlClass().apply { - this.name = name - this.annotationCallList = createSmlAnnotationCallList(annotationCalls) - this.typeParameterList = typeParameters.nullIfEmptyElse(::createSmlTypeParameterList) - this.parameterList = parameters?.let { createSmlParameterList(it) } - this.parentTypeList = parentTypes.nullIfEmptyElse(::createSmlParentTypeList) - protocol?.let { addMember(it) } - constraint?.let { addMember(it) } - members.forEach { addMember(it) } - this.init() - } -} - -/** - * Adds a new object of class [SmlClass] to the receiver. - */ -fun SmlClass.smlClass( - name: String, - annotationCalls: List = emptyList(), - typeParameters: List = emptyList(), - parameters: List? = null, - parentTypes: List = emptyList(), - constraint: SmlConstraint? = null, - protocol: SmlProtocol? = null, - members: List = emptyList(), - init: SmlClass.() -> Unit = {} -) { - this.addMember( - createSmlClass( - name, - annotationCalls, - typeParameters, - parameters, - parentTypes, - constraint, - protocol, - members, - init - ) - ) -} - -/** - * Adds a new object of class [SmlClass] to the receiver. - */ -fun SmlCompilationUnit.smlClass( - name: String, - annotationCalls: List = emptyList(), - typeParameters: List = emptyList(), - parameters: List? = null, - parentTypes: List = emptyList(), - constraint: SmlConstraint? = null, - protocol: SmlProtocol? = null, - members: List = emptyList(), - init: SmlClass.() -> Unit = {} -) { - this.addMember( - createSmlClass( - name, - annotationCalls, - typeParameters, - parameters, - parentTypes, - constraint, - protocol, - members, - init - ) - ) -} - -/** - * Adds a new member to the receiver. - */ -private fun SmlClass.addMember(member: SmlAbstractObject) { - if (this.body == null) { - this.body = factory.createSmlClassBody() - } - - this.body.members += member -} - -/** - * Returns a new object of class [SmlCompilationUnit]. - */ -fun createSmlCompilationUnit( - packageName: String, - annotationCalls: List = emptyList(), - imports: List = emptyList(), - members: List = emptyList(), - init: SmlCompilationUnit.() -> Unit = {} -): SmlCompilationUnit { - return factory.createSmlCompilationUnit().apply { - this.name = packageName - this.annotationCalls += annotationCalls - this.imports += imports - members.forEach { addMember(it) } - init() - } -} - -/** - * Adds a new member to the receiver. - */ -private fun SmlCompilationUnit.addMember(member: SmlAbstractCompilationUnitMember) { - this.members += member -} - -/** - * Returns a new object of class [SmlConstraint]. - */ -fun createSmlConstraint(goals: List): SmlConstraint { - return factory.createSmlConstraint().apply { - this.constraintList = createSmlGoalList(goals) - } -} - -/** - * Returns a new object of class [SmlEnum]. - */ -fun createSmlEnum( - name: String, - annotationCalls: List = emptyList(), - variants: List = emptyList(), - init: SmlEnum.() -> Unit = {} -): SmlEnum { - return factory.createSmlEnum().apply { - this.name = name - this.annotationCallList = createSmlAnnotationCallList(annotationCalls) - variants.forEach { addVariant(it) } - this.init() - } -} - -/** - * Adds a new object of class [SmlEnum] to the receiver. - */ -fun SmlClass.smlEnum( - name: String, - annotationCalls: List = emptyList(), - variants: List = emptyList(), - init: SmlEnum.() -> Unit = {} -) { - this.addMember(createSmlEnum(name, annotationCalls, variants, init)) -} - -/** - * Adds a new object of class [SmlEnum] to the receiver. - */ -fun SmlCompilationUnit.smlEnum( - name: String, - annotationCalls: List = emptyList(), - variants: List = emptyList(), - init: SmlEnum.() -> Unit = {} -) { - this.addMember(createSmlEnum(name, annotationCalls, variants, init)) -} - -/** - * Adds a new variant to the receiver. - */ -private fun SmlEnum.addVariant(variant: SmlEnumVariant) { - if (this.body == null) { - this.body = factory.createSmlEnumBody() - } - - this.body.variants += variant -} - -/** - * Returns a new object of class [SmlEnumVariant]. - */ -fun createSmlEnumVariant( - name: String, - annotationCalls: List = emptyList(), - typeParameters: List = emptyList(), - parameters: List = emptyList(), - constraint: SmlConstraint? = null, -): SmlEnumVariant { - return factory.createSmlEnumVariant().apply { - this.name = name - this.annotationCalls += annotationCalls - this.typeParameterList = typeParameters.nullIfEmptyElse(::createSmlTypeParameterList) - this.parameterList = parameters.nullIfEmptyElse(::createSmlParameterList) - this.constraint = constraint - } -} - -/** - * Adds a new object of class [SmlEnumVariant] to the receiver. - */ -fun SmlEnum.smlEnumVariant( - name: String, - annotationCalls: List = emptyList(), - typeParameters: List = emptyList(), - parameters: List = emptyList(), - constraint: SmlConstraint? = null -) { - this.addVariant(createSmlEnumVariant(name, annotationCalls, typeParameters, parameters, constraint)) -} - -/** - * Returns a new object of class [SmlExpressionGoal]. - */ -fun createSmlExpressionGoal(expression: SmlAbstractGoalExpression): SmlExpressionGoal { - return factory.createSmlExpressionGoal().apply { - this.expression = expression - } -} - -/** - * Adds a new object of class [SmlExpressionGoal] to the receiver. - */ -fun SmlPredicate.smlExpressionGoal(expression: SmlAbstractGoalExpression) { - this.addGoal(createSmlExpressionGoal(expression)) -} - -/** - * Returns a new object of class [SmlExpressionLambda]. - */ -fun createSmlExpressionLambda( - parameters: List = emptyList(), - result: SmlAbstractExpression -): SmlExpressionLambda { - return factory.createSmlExpressionLambda().apply { - this.parameterList = createSmlLambdaParameterList(parameters) - this.result = result - } -} - -/** - * Returns a new object of class [SmlExpressionStatement]. - */ -fun createSmlExpressionStatement(expression: SmlAbstractExpression): SmlExpressionStatement { - return factory.createSmlExpressionStatement().apply { - this.expression = expression - } -} - -/** - * Adds a new object of class [SmlExpressionStatement] to the receiver. - */ -fun SmlBlockLambda.smlExpressionStatement(expression: SmlAbstractExpression) { - this.addStatement(createSmlExpressionStatement(expression)) -} - -/** - * Adds a new object of class [SmlExpressionStatement] to the receiver. - */ -fun SmlWorkflow.smlExpressionStatement(expression: SmlAbstractExpression) { - this.addStatement(createSmlExpressionStatement(expression)) -} - -/** - * Adds a new object of class [SmlExpressionStatement] to the receiver. - */ -fun SmlStep.smlExpressionStatement(expression: SmlAbstractExpression) { - this.addStatement(createSmlExpressionStatement(expression)) -} - -/** - * Returns a new object of class [SmlFloat] if the value is non-negative. Otherwise, the absolute value will be wrapped - * in a [SmlPrefixOperation] to negate it. - */ -fun createSmlFloat(value: Double): SmlAbstractExpression { - val float = factory.createSmlFloat().apply { - this.value = value.absoluteValue - } - - return when { - value < 0 -> createSmlPrefixOperation(SmlPrefixOperationOperator.Minus, float) - else -> float - } -} - -/** - * Returns a new object of class [SmlFunction]. - */ -fun createSmlFunction( - name: String, - annotationCalls: List = emptyList(), - isStatic: Boolean = false, - typeParameters: List = emptyList(), - parameters: List = emptyList(), - results: List = emptyList(), - constraint: SmlConstraint? = null -): SmlFunction { - return factory.createSmlFunction().apply { - this.name = name - this.annotationCallList = createSmlAnnotationCallList(annotationCalls) - this.isStatic = isStatic - this.typeParameterList = typeParameters.nullIfEmptyElse(::createSmlTypeParameterList) - this.parameterList = createSmlParameterList(parameters) - this.resultList = results.nullIfEmptyElse(::createSmlResultList) - constraint?.let { addStatement(it) } - } -} - -/** - * Adds a new statement to the receiver. - */ -private fun SmlFunction.addStatement(statement: SmlAbstractObject) { - if (this.body == null) { - this.body = factory.createSmlFunctionBody() - } - - this.body.statements += statement -} - -/** - * Adds a new object of class [SmlFunction] to the receiver. - */ -fun SmlClass.smlFunction( - name: String, - annotationCalls: List = emptyList(), - isStatic: Boolean = false, - typeParameters: List = emptyList(), - parameters: List = emptyList(), - results: List = emptyList(), - constraint: SmlConstraint? = null -) { - this.addMember( - createSmlFunction( - name, - annotationCalls, - isStatic, - typeParameters, - parameters, - results, - constraint - ) - ) -} - -/** - * Adds a new object of class [SmlFunction] to the receiver. - */ -fun SmlCompilationUnit.smlFunction( - name: String, - annotationCalls: List = emptyList(), - isStatic: Boolean = false, - typeParameters: List = emptyList(), - parameters: List = emptyList(), - results: List = emptyList(), - constraint: SmlConstraint? = null -) { - this.addMember( - createSmlFunction( - name, - annotationCalls, - isStatic, - typeParameters, - parameters, - results, - constraint - ) - ) -} - -/** - * Returns a new object of class [SmlGoalArgument]. - */ -fun createSmlGoalArgument(value: SmlAbstractGoalExpression, parameter: SmlParameter? = null): SmlGoalArgument { - return factory.createSmlGoalArgument().apply { - this.value = value - this.parameter = parameter - } -} - -/** - * Returns a new object of class [SmlGoalArgument] that points to a parameter with the given name. - */ -fun createSmlGoalArgument(value: SmlAbstractGoalExpression, parameterName: String): SmlGoalArgument { - return createSmlGoalArgument( - value, - createSmlParameter(parameterName) - ) -} - -/** - * Returns a new object of class [SmlGoalArgumentList]. - */ -fun createSmlGoalArgumentList(arguments: List): SmlGoalArgumentList { - return factory.createSmlGoalArgumentList().apply { - this.arguments += arguments - } -} - -/** - * Returns a new object of class [SmlGoalCall]. - */ -fun createSmlGoalCall( - receiver: SmlAbstractGoalExpression, - arguments: List -): SmlGoalCall { - return factory.createSmlGoalCall().apply { - this.receiver = receiver - this.argumentList = createSmlGoalArgumentList(arguments) - } -} - -/** - * Returns a new object of class [SmlGoalList]. - */ -fun createSmlGoalList(goals: List): SmlGoalList { - return factory.createSmlGoalList().apply { - this.goals += goals - } -} - -/** - * Returns a new object of class [SmlImport]. - */ -fun createSmlImport(importedNamespace: String, alias: String? = null): SmlImport { - return factory.createSmlImport().apply { - this.importedNamespace = importedNamespace - this.alias = createSmlImportAlias(alias) - } -} - -/** - * Returns a new object of class [SmlGoalReference]. - */ -fun createSmlGoalReference(declaration: SmlAbstractDeclaration): SmlGoalReference { - return factory.createSmlGoalReference().apply { - this.declaration = declaration - } -} - -/** - * Returns a new object of class [SmlImportAlias] or `null` if the parameter is `null`. - */ -private fun createSmlImportAlias(name: String?): SmlImportAlias? { - if (name == null) { - return null - } - - return factory.createSmlImportAlias().apply { - this.name = name - } -} - -/** - * Returns a new object of class [SmlIndexedAccess]. - */ -fun createSmlIndexedAccess( - index: SmlAbstractExpression -): SmlIndexedAccess { - return factory.createSmlIndexedAccess().apply { - this.index = index - } -} - -/** - * Returns a new object of class [SmlInfixOperation]. - */ -fun createSmlInfixOperation( - leftOperand: SmlAbstractExpression, - operator: SmlInfixOperationOperator, - rightOperand: SmlAbstractExpression -): SmlInfixOperation { - return factory.createSmlInfixOperation().apply { - this.leftOperand = leftOperand - this.operator = operator.operator - this.rightOperand = rightOperand - } -} - -/** - * Returns a new object of class [SmlInt] if the value is non-negative. Otherwise, the absolute value will be wrapped in - * a [SmlPrefixOperation] to negate it. - */ -fun createSmlInt(value: Int): SmlAbstractExpression { - val int = factory.createSmlInt().apply { - this.value = value.absoluteValue - } - - return when { - value < 0 -> createSmlPrefixOperation(SmlPrefixOperationOperator.Minus, int) - else -> int - } -} - -/** - * Returns a new object of class [SmlMemberAccess]. - */ -fun createSmlMemberAccess( - receiver: SmlAbstractExpression, - member: SmlReference, - isNullSafe: Boolean = false -): SmlMemberAccess { - return factory.createSmlMemberAccess().apply { - this.receiver = receiver - this.member = member - this.isNullSafe = isNullSafe - } -} - -/** - * Returns a new object of class [SmlMemberType]. - */ -fun createSmlMemberType(receiver: SmlAbstractType, member: SmlNamedType): SmlMemberType { - return factory.createSmlMemberType().apply { - this.receiver = receiver - this.member = member - } -} - -/** - * Returns a new object of class [SmlNamedType]. - */ -fun createSmlNamedType( - declaration: SmlAbstractNamedTypeDeclaration, - typeArguments: List = emptyList(), - isNullable: Boolean = false -): SmlNamedType { - return factory.createSmlNamedType().apply { - this.declaration = declaration - this.typeArgumentList = typeArguments.nullIfEmptyElse(::createSmlTypeArgumentList) - this.isNullable = isNullable - } -} - -/** - * Returns a new object of class [SmlNull]. - */ -fun createSmlNull(): SmlNull { - return factory.createSmlNull() -} - -/** - * Returns a new object of class [SmlParameter]. - */ -fun createSmlParameter( - name: String, - annotationCalls: List = emptyList(), - isVariadic: Boolean = false, - type: SmlAbstractType? = null, - defaultValue: SmlAbstractExpression? = null -): SmlParameter { - return factory.createSmlParameter().apply { - this.name = name - this.annotationCalls += annotationCalls - this.isVariadic = isVariadic - this.type = type - this.defaultValue = defaultValue - } -} - -/** - * Returns a new object of class [SmlParameterList]. - */ -fun createSmlParameterList(parameters: List): SmlParameterList { - return factory.createSmlParameterList().apply { - this.parameters += parameters - } -} - -/** - * Returns a new object of class [SmlLambdaParameterList]. These have to be used as parameter lists of an - * [SmlAbstractLambda] - */ -@Suppress("FunctionName") -fun createSmlLambdaParameterList(parameters: List): SmlLambdaParameterList { - return factory.createSmlLambdaParameterList().apply { - this.parameters += parameters - } -} - -/** - * Returns a new object of class [SmlParenthesizedExpression]. - */ -fun createSmlParenthesizedExpression(expression: SmlAbstractExpression): SmlParenthesizedExpression { - return factory.createSmlParenthesizedExpression().apply { - this.expression = expression - } -} - -/** - * Returns a new object of class [SmlParenthesizedGoalExpression]. - */ -fun createSmlParenthesizedGoalExpression(expressions: List): SmlParenthesizedGoalExpression { - return factory.createSmlParenthesizedGoalExpression().apply { - this.expressions += expressions - } -} - -/** - * Returns a new object of class [SmlParenthesizedType]. - */ -fun createSmlParenthesizedType(type: SmlAbstractType): SmlParenthesizedType { - return factory.createSmlParenthesizedType().apply { - this.type = type - } -} - -/** - * Returns a new object of class [SmlParentTypeList]. - */ -fun createSmlParentTypeList(parentTypes: List): SmlParentTypeList { - return factory.createSmlParentTypeList().apply { - this.parentTypes += parentTypes - } -} - -/** - * Returns a new object of class [SmlPlaceholder]. - */ -fun createSmlPlaceholder(name: String): SmlPlaceholder { - return factory.createSmlPlaceholder().apply { - this.name = name - } -} - -/** - * Returns a new object of class [SmlPredicate]. - */ -fun createSmlPredicate( - name: String, - annotationCalls: List = emptyList(), - parameters: List = emptyList(), - results: List = emptyList(), - goals: List = emptyList(), -): SmlPredicate { - return factory.createSmlPredicate().apply { - this.name = name - this.annotationCallList = createSmlAnnotationCallList(annotationCalls) - this.parameterList = createSmlParameterList(parameters) - this.resultList = results.nullIfEmptyElse(::createSmlResultList) - goals.forEach { addGoal(it) } - } -} - -/** - * Adds a new object of class [SmlPredicate] to the receiver. - */ -fun SmlCompilationUnit.smlPredicate( - name: String, - annotationCalls: List = emptyList(), - parameters: List = emptyList(), - results: List = emptyList(), - goals: List = emptyList(), -) { - this.addMember( - createSmlPredicate( - name, - annotationCalls, - parameters, - results, - goals - ) - ) -} - -/** - * Adds a new goal to the receiver. - */ -private fun SmlPredicate.addGoal(goal: SmlAbstractGoal) { - if (this.goalList == null) { - this.goalList = factory.createSmlGoalList() - } - - this.goalList.goals += goal -} - -/** - * Returns a new object of class [SmlPrefixOperation]. - */ -fun createSmlPrefixOperation(operator: SmlPrefixOperationOperator, operand: SmlAbstractExpression): SmlPrefixOperation { - return factory.createSmlPrefixOperation().apply { - this.operator = operator.operator - this.operand = operand - } -} - -/** - * Returns a new object of class [SmlProtocol]. - */ -fun createSmlProtocol( - subterms: List = emptyList(), - term: SmlAbstractProtocolTerm? = null, - init: SmlProtocol.() -> Unit = {} -): SmlProtocol { - return factory.createSmlProtocol().apply { - this.body = factory.createSmlProtocolBody() - subterms.forEach { addSubterm(it) } - this.body.term = term - this.init() - } -} - -/** - * Adds a new object of class [SmlProtocol] to the receiver. - */ -fun SmlClass.smlProtocol( - subterms: List = emptyList(), - term: SmlAbstractProtocolTerm? = null, - init: SmlProtocol.() -> Unit = {} -) { - this.addMember(createSmlProtocol(subterms, term, init)) -} - -/** - * Adds a new subterm to the receiver. - */ -private fun SmlProtocol.addSubterm(subterm: SmlProtocolSubterm) { - if (this.body == null) { - this.body = factory.createSmlProtocolBody() - } - - if (this.body.subtermList == null) { - this.body.subtermList = factory.createSmlProtocolSubtermList() - } - - this.body.subtermList.subterms += subterm -} - -/** - * Returns a new object of class [SmlProtocolAlternative]. - */ -fun createSmlProtocolAlternative(terms: List): SmlProtocolAlternative { - if (terms.size < 2) { - throw IllegalArgumentException("Must have at least two terms.") - } - - return factory.createSmlProtocolAlternative().apply { - this.terms += terms - } -} - -/** - * Returns a new object of class [SmlProtocolComplement]. - */ -fun createSmlProtocolComplement( - universe: SmlProtocolTokenClass? = null, - references: List = emptyList() -): SmlProtocolComplement { - return factory.createSmlProtocolComplement().apply { - this.universe = universe - this.referenceList = references.nullIfEmptyElse(::createSmlProtocolReferenceList) - } -} - -/** - * Returns a new object of class [SmlProtocolParenthesizedTerm]. - */ -fun createSmlProtocolParenthesizedTerm(term: SmlAbstractProtocolTerm): SmlProtocolParenthesizedTerm { - return factory.createSmlProtocolParenthesizedTerm().apply { - this.term = term - } -} - -/** - * Returns a new object of class [SmlProtocolQuantifiedTerm]. - */ -fun createSmlProtocolQuantifiedTerm( - term: SmlAbstractProtocolTerm, - quantifier: SmlProtocolQuantifiedTermQuantifier -): SmlProtocolQuantifiedTerm { - return factory.createSmlProtocolQuantifiedTerm().apply { - this.term = term - this.quantifier = quantifier.quantifier - } -} - -/** - * Returns a new object of class [SmlProtocolReference]. - */ -fun createSmlProtocolReference(token: SmlAbstractProtocolToken): SmlProtocolReference { - return factory.createSmlProtocolReference().apply { - this.token = token - } -} - -/** - * Returns a new object of class [SmlProtocolReferenceList]. - */ -fun createSmlProtocolReferenceList(references: List): SmlProtocolReferenceList { - return factory.createSmlProtocolReferenceList().apply { - this.references += references - } -} - -/** - * Returns a new object of class [SmlProtocolSequence]. - * - * @throws IllegalArgumentException If `terms.size < 2`. - */ -fun createSmlProtocolSequence(terms: List): SmlProtocolSequence { - if (terms.size < 2) { - throw IllegalArgumentException("Must have at least two terms.") - } - - return factory.createSmlProtocolSequence().apply { - this.terms += terms - } -} - -/** - * Returns a new object of class [SmlProtocolSubterm]. - */ -fun createSmlProtocolSubterm(name: String, term: SmlAbstractProtocolTerm): SmlProtocolSubterm { - return factory.createSmlProtocolSubterm().apply { - this.name = name - this.term = term - } -} - -/** - * Returns a new object of class [SmlProtocolSubterm]. - */ -fun SmlProtocol.smlProtocolSubterm(name: String, term: SmlAbstractProtocolTerm) { - this.addSubterm(createSmlProtocolSubterm(name, term)) -} - -/** - * Returns a new object of class [SmlProtocolTokenClass]. - */ -fun createSmlProtocolTokenClass(value: SmlProtocolTokenClassValue): SmlProtocolTokenClass { - return factory.createSmlProtocolTokenClass().apply { - this.value = value.value - } -} - -/** - * Returns a new object of class [SmlReference]. - */ -fun createSmlReference(declaration: SmlAbstractDeclaration): SmlReference { - return factory.createSmlReference().apply { - this.declaration = declaration - } -} - -/** - * Returns a new object of class [SmlResult]. - */ -fun createSmlResult( - name: String, - annotationCalls: List = emptyList(), - type: SmlAbstractType? = null -): SmlResult { - return factory.createSmlResult().apply { - this.name = name - this.annotationCalls += annotationCalls - this.type = type - } -} - -/** - * Returns a new object of class [SmlResultList]. - */ -fun createSmlResultList(results: List): SmlResultList { - return factory.createSmlResultList().apply { - this.results += results - } -} - -/** - * Returns a new object of class [SmlStarProjection]. - */ -fun createSmlStarProjection(): SmlStarProjection { - return factory.createSmlStarProjection() -} - -/** - * Returns a new object of class [SmlStep]. - */ -fun createSmlStep( - name: String, - annotationCalls: List = emptyList(), - visibility: SmlVisibility = SmlVisibility.Public, - parameters: List = emptyList(), - results: List = emptyList(), - statements: List = emptyList(), - init: SmlStep.() -> Unit = {} -): SmlStep { - return factory.createSmlStep().apply { - this.name = name - this.annotationCallList = createSmlAnnotationCallList(annotationCalls) - this.visibility = visibility.visibility - this.parameterList = createSmlParameterList(parameters) - this.resultList = results.nullIfEmptyElse(::createSmlResultList) - this.body = factory.createSmlBlock() - statements.forEach { addStatement(it) } - this.init() - } -} - -/** - * Adds a new object of class [SmlStep] to the receiver. - */ -fun SmlCompilationUnit.smlStep( - name: String, - annotationCalls: List = emptyList(), - visibility: SmlVisibility = SmlVisibility.Public, - parameters: List = emptyList(), - results: List = emptyList(), - statements: List = emptyList(), - init: SmlStep.() -> Unit = {} -) { - this.addMember( - createSmlStep( - name, - annotationCalls, - visibility, - parameters, - results, - statements, - init - ) - ) -} - -/** - * Adds a new statement to the receiver. - */ -private fun SmlStep.addStatement(statement: SmlAbstractStatement) { - if (this.body == null) { - this.body = factory.createSmlBlock() - } - - this.body.statements += statement -} - -/** - * Returns a new object of class [SmlString]. - */ -fun createSmlString(value: String): SmlString { - return factory.createSmlString().apply { - this.value = value - } -} - -/** - * Returns a new object of class [SmlTemplateString]. String parts should not include delimiters (`"`, `{{`, `}}`). - * Template expressions are inserted between the string parts. - * - * @throws IllegalArgumentException If `stringParts.size < 2`. - * @throws IllegalArgumentException If `templateExpressions` is empty. - * @throws IllegalArgumentException If `stringsParts.size` != `templateExpressions.size + 1`. - */ -fun createSmlTemplateString( - stringParts: List, - templateExpressions: List -): SmlTemplateString { - - // One of the first two checks is sufficient but this allows better error messages. - if (stringParts.size < 2) { - throw IllegalArgumentException("Must have at least two string parts.") - } else if (templateExpressions.isEmpty()) { - throw IllegalArgumentException("Must have at least one template expression.") - } else if (stringParts.size != templateExpressions.size + 1) { - throw IllegalArgumentException("Must have exactly one more string part than there are template expressions.") - } - - return factory.createSmlTemplateString().apply { - stringParts.forEachIndexed { index, value -> - - // Next template string part - this.expressions += when (index) { - 0 -> { - factory.createSmlTemplateStringStart().apply { - this.value = value - } - } - stringParts.size - 1 -> { - factory.createSmlTemplateStringEnd().apply { - this.value = value - } - } - else -> { - factory.createSmlTemplateStringInner().apply { - this.value = value - } - } - } - - // Next template expression - if (index < templateExpressions.size) { - this.expressions += templateExpressions[index] - } - } - - this.expressions += expressions - } -} - -/** - * Returns a new object of class [SmlTypeArgument]. - */ -fun createSmlTypeArgument( - value: SmlAbstractTypeArgumentValue, - typeParameter: SmlTypeParameter? = null -): SmlTypeArgument { - return factory.createSmlTypeArgument().apply { - this.value = value - this.typeParameter = typeParameter - } -} - -/** - * Returns a new object of class [SmlTypeArgument] that points to a type parameter with the given name. - */ -fun createSmlTypeArgument( - value: SmlAbstractTypeArgumentValue, - typeParameterName: String -): SmlTypeArgument { - return createSmlTypeArgument( - value, - createSmlTypeParameter(typeParameterName) - ) -} - -/** - * Returns a new object of class [SmlTypeArgumentList]. - */ -fun createSmlTypeArgumentList(typeArguments: List): SmlTypeArgumentList { - return factory.createSmlTypeArgumentList().apply { - this.typeArguments += typeArguments - } -} - -/** - * Returns a new object of class [SmlTypeParameter]. - */ -fun createSmlTypeParameter( - name: String, - annotationCalls: List = emptyList(), - variance: SmlVariance = SmlVariance.Invariant, - kind: SmlKind = SmlKind.NoKind -): SmlTypeParameter { - return factory.createSmlTypeParameter().apply { - this.name = name - this.annotationCalls += annotationCalls - this.variance = variance.variance - this.kind = kind.kind - } -} - -/** - * Returns a new object of class [SmlTypeParameterList]. - */ -fun createSmlTypeParameterList(typeParameters: List): SmlTypeParameterList { - return factory.createSmlTypeParameterList().apply { - this.typeParameters += typeParameters - } -} - -/** - * Returns a new object of class [SmlTypeParameterConstraintGoal]. - */ -fun createSmlTypeParameterConstraintGoal( - leftOperand: SmlTypeParameter, - operator: SmlTypeParameterConstraintOperator, - rightOperand: SmlAbstractType -): SmlTypeParameterConstraintGoal { - return factory.createSmlTypeParameterConstraintGoal().apply { - this.leftOperand = leftOperand - this.operator = operator.operator - this.rightOperand = rightOperand - } -} - -/** - * Returns a new object of class [SmlTypeParameterConstraintGoal] that points to a type parameter with the given name. - */ -fun createSmlTypeParameterConstraintGoal( - leftOperandName: String, - operator: SmlTypeParameterConstraintOperator, - rightOperand: SmlAbstractType -): SmlTypeParameterConstraintGoal { - return createSmlTypeParameterConstraintGoal( - createSmlTypeParameter(leftOperandName), - operator, - rightOperand - ) -} - -/** - * Returns a new object of class [SmlTypeProjection]. - */ -fun createSmlTypeProjection(type: SmlAbstractType, variance: SmlVariance = SmlVariance.Invariant): SmlTypeProjection { - return factory.createSmlTypeProjection().apply { - this.type = type - this.variance = variance.variance - } -} - -/** - * Returns a new object of class [SmlUnionType]. - * - * @throws IllegalArgumentException If no type arguments are passed. - */ -fun createSmlUnionType(typeArguments: List): SmlUnionType { - if (typeArguments.isEmpty()) { - throw IllegalArgumentException("Must have at least one type argument.") - } - - return factory.createSmlUnionType().apply { - this.typeArgumentList = createSmlTypeArgumentList(typeArguments) - } -} - -/** - * Returns a new object of class [SmlWildcard]. - */ -fun createSmlWildcard(): SmlWildcard { - return factory.createSmlWildcard() -} - -/** - * Returns a new object of class [SmlWorkflow]. - */ -fun createSmlWorkflow( - name: String, - annotationCalls: List = emptyList(), - statements: List = emptyList(), - init: SmlWorkflow.() -> Unit = {} -): SmlWorkflow { - return factory.createSmlWorkflow().apply { - this.name = name - this.annotationCallList = createSmlAnnotationCallList(annotationCalls) - this.body = factory.createSmlBlock() - statements.forEach { addStatement(it) } - this.init() - } -} - -/** - * Adds a new object of class [SmlWorkflow] to the receiver. - */ -fun SmlCompilationUnit.smlWorkflow( - name: String, - annotationCalls: List = emptyList(), - statements: List = emptyList(), - init: SmlWorkflow.() -> Unit = {} -) { - this.addMember(createSmlWorkflow(name, annotationCalls, statements, init)) -} - -/** - * Adds a new statement to the receiver. - */ -private fun SmlWorkflow.addStatement(statement: SmlAbstractStatement) { - if (this.body == null) { - this.body = factory.createSmlBlock() - } - - this.body.statements += statement -} - -/** - * Returns a new object of class [SmlYield]. - */ -fun createSmlYield(result: SmlResult): SmlYield { - return factory.createSmlYield().apply { - this.result = result - } -} - -/** - * Returns a new object of class [SmlYield] that points to a result with the given name. - */ -fun createSmlYield(resultName: String): SmlYield { - return createSmlYield(createSmlResult(resultName)) -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/SimpleShortcuts.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/SimpleShortcuts.kt deleted file mode 100644 index 71270142a..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/SimpleShortcuts.kt +++ /dev/null @@ -1,491 +0,0 @@ -@file:Suppress("unused") - -/** - * Contains shortcuts that simplify working with the EMF model. Since most of these are very straightforward, unit tests - * are usually not required. - */ - -package de.unibonn.simpleml.emf - -import de.unibonn.simpleml.simpleML.SmlAbstractAssignee -import de.unibonn.simpleml.simpleML.SmlAbstractCallable -import de.unibonn.simpleml.simpleML.SmlAbstractClassMember -import de.unibonn.simpleml.simpleML.SmlAbstractCompilationUnitMember -import de.unibonn.simpleml.simpleML.SmlAbstractConstraintGoal -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAbstractGoal -import de.unibonn.simpleml.simpleML.SmlAbstractLambda -import de.unibonn.simpleml.simpleML.SmlAbstractLocalVariable -import de.unibonn.simpleml.simpleML.SmlAbstractObject -import de.unibonn.simpleml.simpleML.SmlAbstractProtocolTerm -import de.unibonn.simpleml.simpleML.SmlAbstractStatement -import de.unibonn.simpleml.simpleML.SmlAbstractType -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlAnnotationCallList -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCallableType -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlClassBody -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlConstraint -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionLambda -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlFunctionBody -import de.unibonn.simpleml.simpleML.SmlImport -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlPredicate -import de.unibonn.simpleml.simpleML.SmlProtocol -import de.unibonn.simpleml.simpleML.SmlProtocolBody -import de.unibonn.simpleml.simpleML.SmlProtocolComplement -import de.unibonn.simpleml.simpleML.SmlProtocolReference -import de.unibonn.simpleml.simpleML.SmlProtocolSubterm -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlTypeArgument -import de.unibonn.simpleml.simpleML.SmlTypeParameter -import de.unibonn.simpleml.simpleML.SmlUnionType -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.utils.uniqueOrNull -import org.eclipse.emf.ecore.EObject -import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.emf.ecore.resource.ResourceSet -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.contract - -/* ******************************************************************************************************************** - * Accessing descendants * - * ********************************************************************************************************************/ - -// EObject ----------------------------------------------------------------------------------------- - -fun EObject.resourceSetOrNull(): ResourceSet? { - return eResource()?.resourceSet -} - -// Resource ---------------------------------------------------------------------------------------- - -fun Resource.compilationUnitOrNull(): SmlCompilationUnit? { - return this.allContents - ?.asSequence() - ?.filterIsInstance() - ?.firstOrNull() -} - -// SmlAbstractCallable ----------------------------------------------------------------------------- - -fun SmlAbstractCallable?.parametersOrEmpty(): List { - return this?.parameterList?.parameters.orEmpty() -} - -/** - * Returns all calls that are actually executed immediately when this [SmlAbstractCallable] is called. - */ -fun SmlAbstractCallable.immediateCalls(): List { - return descendants { it is SmlAbstractLambda }.toList() -} - -// SmlAbstractDeclaration -------------------------------------------------------------------------- - -fun SmlAbstractDeclaration?.annotationCallsOrEmpty(): List { - return this?.annotationCallList?.annotationCalls ?: this?.annotationCalls.orEmpty() -} - -// SmlAnnotation ----------------------------------------------------------------------------------- - -fun SmlAnnotation?.constraintsOrEmpty(): List { - return this?.constraint?.constraintList?.goals.orEmpty() -} - -// SmlAnnotationCall ------------------------------------------------------------------------------- - -fun SmlAnnotationCall?.argumentsOrEmpty(): List { - return this?.argumentList?.arguments.orEmpty() -} - -// SmlAssignment ----------------------------------------------------------------------------------- - -fun SmlAssignment?.assigneesOrEmpty(): List { - return this?.assigneeList?.assignees - ?.filterIsInstance() - .orEmpty() -} - -fun SmlAssignment?.blockLambdaResultsOrEmpty(): List { - return this.assigneesOrEmpty().filterIsInstance() -} - -fun SmlAssignment?.placeholdersOrEmpty(): List { - return this.assigneesOrEmpty().filterIsInstance() -} - -fun SmlAssignment?.yieldsOrEmpty(): List { - return this.assigneesOrEmpty().filterIsInstance() -} - -// SmlBlockLambda ---------------------------------------------------------------------------------- - -fun SmlBlockLambda?.blockLambdaResultsOrEmpty(): List { - return this.statementsOrEmpty() - .filterIsInstance() - .flatMap { it.blockLambdaResultsOrEmpty() } -} - -fun SmlBlockLambda?.localVariablesOrEmpty(): List { - return this.parametersOrEmpty() + this.placeholdersOrEmpty() -} - -fun SmlBlockLambda?.placeholdersOrEmpty(): List { - return this.statementsOrEmpty() - .filterIsInstance() - .flatMap { it.placeholdersOrEmpty() } -} - -fun SmlBlockLambda?.statementsOrEmpty(): List { - return this?.body?.statements.orEmpty() -} - -// SmlCall ----------------------------------------------------------------------------------------- - -fun SmlCall?.argumentsOrEmpty(): List { - return this?.argumentList?.arguments.orEmpty() -} - -fun SmlCall?.typeArgumentsOrEmpty(): List { - return this?.typeArgumentList?.typeArguments.orEmpty() -} - -// SmlCallableType --------------------------------------------------------------------------------- - -fun SmlCallableType?.resultsOrEmpty(): List { - return this?.resultList?.results.orEmpty() -} - -// SmlClass ---------------------------------------------------------------------------------------- - -fun SmlClass?.typeParametersOrEmpty(): List { - return this?.typeParameterList?.typeParameters.orEmpty() -} - -fun SmlClass?.parentTypesOrEmpty(): List { - return this?.parentTypeList?.parentTypes.orEmpty() -} - -fun SmlClass?.constraintsOrEmpty(): List { - return this?.body?.members - ?.filterIsInstance() - .orEmpty() -} - -fun SmlClass?.objectsInBodyOrEmpty(): List { - return this?.body?.members.orEmpty() -} - -fun SmlClass?.classMembersOrEmpty(): List { - return this?.body?.members - ?.filterIsInstance() - .orEmpty() -} - -fun SmlClass?.protocolsOrEmpty(): List { - return this?.body?.members - ?.filterIsInstance() - .orEmpty() -} - -fun SmlClass.uniqueProtocolOrNull(): SmlProtocol? { - return this.protocolsOrEmpty().uniqueOrNull() -} - -// SmlCompilationUnit ------------------------------------------------------------------------------ - -fun SmlCompilationUnit?.compilationUnitMembersOrEmpty(): List { - return this?.members - ?.filterIsInstance() - .orEmpty() -} - -// SmlEnum ----------------------------------------------------------------------------------------- - -fun SmlEnum?.variantsOrEmpty(): List { - return this?.body?.variants.orEmpty() -} - -// SmlEnumVariant ---------------------------------------------------------------------------------- - -fun SmlEnumVariant?.typeParametersOrEmpty(): List { - return this?.typeParameterList?.typeParameters.orEmpty() -} - -fun SmlEnumVariant?.constraintsOrEmpty(): List { - return this?.constraint?.constraintList?.goals.orEmpty() -} - -// SmlFunction ------------------------------------------------------------------------------------- - -fun SmlFunction?.resultsOrEmpty(): List { - return this?.resultList?.results.orEmpty() -} - -fun SmlFunction?.typeParametersOrEmpty(): List { - return this?.typeParameterList?.typeParameters.orEmpty() -} - -fun SmlFunction?.constraintsOrEmpty(): List { - return this?.body?.statements - ?.filterIsInstance() - .orEmpty() -} - -// SmlImport --------------------------------------------------------------------------------------- - -fun SmlImport.aliasNameOrNull(): String? { - return this.alias?.name -} - -fun SmlImport.importedNameOrNull(): String? { - return when (alias) { - null -> when { - isQualified() -> importedNamespace.split(".").last() - else -> null - } - else -> aliasNameOrNull() - } -} - -// SmlNamedType ------------------------------------------------------------------------------------ - -fun SmlNamedType?.typeArgumentsOrEmpty(): List { - return this?.typeArgumentList?.typeArguments.orEmpty() -} - -// SmlPredicate ------------------------------------------------------------------------------------- - -fun SmlPredicate?.goalsOrEmpty(): List { - return this?.goalList?.goals.orEmpty() -} - -// SmlProtocol ------------------------------------------------------------------------------------- - -fun SmlProtocol?.subtermsOrEmpty(): List { - return this?.body.subtermsOrEmpty() -} - -fun SmlProtocol.termOrNull(): SmlAbstractProtocolTerm? { - return this.body?.term -} - -// SmlProtocolBody --------------------------------------------------------------------------------- - -fun SmlProtocolBody?.subtermsOrEmpty(): List { - return this?.subtermList?.subterms.orEmpty() -} - -// SmlProtocolComplement --------------------------------------------------------------------------- - -fun SmlProtocolComplement?.referencesOrEmpty(): List { - return this?.referenceList?.references.orEmpty() -} - -// SmlUnionType ------------------------------------------------------------------------------------ - -fun SmlUnionType?.typeArgumentsOrEmpty(): List { - return this?.typeArgumentList?.typeArguments.orEmpty() -} - -// SmlWorkflow ------------------------------------------------------------------------------------- - -fun SmlWorkflow?.placeholdersOrEmpty(): List { - return this.statementsOrEmpty() - .filterIsInstance() - .flatMap { it.placeholdersOrEmpty() } -} - -fun SmlWorkflow?.statementsOrEmpty(): List { - return this?.body?.statements.orEmpty() -} - -// SmlWorkflowStep --------------------------------------------------------------------------------- - -fun SmlStep?.localVariablesOrEmpty(): List { - return this.parametersOrEmpty() + this.placeholdersOrEmpty() -} - -fun SmlStep?.placeholdersOrEmpty(): List { - return this.statementsOrEmpty() - .filterIsInstance() - .flatMap { it.placeholdersOrEmpty() } -} - -fun SmlStep?.resultsOrEmpty(): List { - return this?.resultList?.results.orEmpty() -} - -fun SmlStep?.statementsOrEmpty(): List { - return this?.body?.statements.orEmpty() -} - -fun SmlStep?.yieldsOrEmpty(): List { - return this.statementsOrEmpty() - .filterIsInstance() - .flatMap { it.yieldsOrEmpty() } -} - -/* ******************************************************************************************************************** - * Accessing ancestors * - * ********************************************************************************************************************/ - -fun EObject.containingBlockLambdaOrNull() = this.closestAncestorOrNull() -fun EObject.containingCallableOrNull() = this.closestAncestorOrNull() -fun EObject.containingClassOrNull() = this.closestAncestorOrNull() -fun EObject.containingCompilationUnitOrNull() = this.closestAncestorOrNull() -fun EObject.containingDeclarationOrNull() = this.closestAncestorOrNull() -fun EObject.containingEnumOrNull() = this.closestAncestorOrNull() -fun EObject.containingExpressionLambdaOrNull() = this.closestAncestorOrNull() -fun EObject.containingFunctionOrNull() = this.closestAncestorOrNull() -fun EObject.containingProtocolOrNull() = this.closestAncestorOrNull() -fun EObject.containingStepOrNull() = this.closestAncestorOrNull() -fun EObject.containingWorkflowOrNull() = this.closestAncestorOrNull() - -fun SmlAnnotationCall.targetOrNull(): SmlAbstractDeclaration? { - return when (val declaration = this.containingDeclarationOrNull() ?: return null) { - is SmlAnnotationCallList -> declaration.containingDeclarationOrNull() - else -> declaration - } -} - -/* ******************************************************************************************************************** - * Accessing siblings * - * ********************************************************************************************************************/ - -fun SmlConstraint.typeParametersOrNull(): List? { - return when (val parent = this.eContainer()) { - is SmlClassBody -> { - val parentClass: EObject = parent.eContainer() - if (parentClass is SmlClass) { - parentClass.typeParametersOrEmpty() - } else { - null - } - } - is SmlEnumVariant -> return parent.typeParametersOrEmpty() - is SmlFunctionBody -> { - val parentFunction: EObject = parent.eContainer() - if (parentFunction is SmlFunction) { - parentFunction.typeParametersOrEmpty() - } else { - null - } - } - else -> null - } -} - -/* ******************************************************************************************************************** - * Checks * - * ********************************************************************************************************************/ - -// SmlAbstractClassMember -------------------------------------------------------------------------- - -/** - * Returns whether this [SmlAbstractClassMember] is truly contained in a class and static. - */ -fun SmlAbstractClassMember.isStatic(): Boolean { - return when { - !this.isClassMember() -> false - this is SmlClass || this is SmlEnum -> true - this is SmlAttribute && this.isStatic -> true - this is SmlFunction && this.isStatic -> true - else -> false - } -} - -// SmlAbstractDeclaration -------------------------------------------------------------------------- - -/** - * Returns whether this [SmlAbstractDeclaration] is contained in a class. - */ -fun SmlAbstractDeclaration.isClassMember(): Boolean { - return this is SmlAbstractClassMember && containingClassOrNull() != null -} - -/** - * Returns whether this [SmlAbstractDeclaration] is a global declaration. - */ -fun SmlAbstractDeclaration.isGlobal(): Boolean { - return !isClassMember() && this is SmlAbstractCompilationUnitMember -} - -/** - * Returns whether this [SmlAbstractDeclaration] is resolved, i.e. not a proxy. - */ -@OptIn(ExperimentalContracts::class) -fun SmlAbstractDeclaration?.isResolved(): Boolean { - contract { - returns(true) implies (this@isResolved != null) - } - - return (this != null) && !this.eIsProxy() -} - -// SmlArgument ------------------------------------------------------------------------------------- - -fun SmlArgument.isNamed() = parameter != null -fun SmlArgument.isPositional() = parameter == null - -// SmlEnum ----------------------------------------------------------------------------------------- - -/** - * Returns whether no [SmlEnumVariant]s of this [SmlEnum] have non-empty parameter list. Only those enums can be - * processed by the compiler, so non-constant [SmlEnum]s cannot be used as the type of parameters of annotations. - */ -fun SmlEnum.isConstant(): Boolean { - return variantsOrEmpty().all { it.parametersOrEmpty().isEmpty() } -} - -// SmlFunction ----------------------------------------------------------------------------------- - -fun SmlFunction.isMethod() = containingClassOrNull() != null - -// SmlImport --------------------------------------------------------------------------------------- - -fun SmlImport.isQualified() = !importedNamespace.endsWith(".*") -fun SmlImport.isWildcard() = importedNamespace.endsWith(".*") - -// SmlParameter ------------------------------------------------------------------------------------ - -fun SmlParameter.isRequired() = defaultValue == null && !isVariadic -fun SmlParameter.isOptional() = defaultValue != null - -// SmlTypeArgument --------------------------------------------------------------------------------- - -fun SmlTypeArgument.isNamed() = typeParameter != null -fun SmlTypeArgument.isPositional() = typeParameter == null - -/* ******************************************************************************************************************** - * Conversions * - * ********************************************************************************************************************/ - -// SmlAbstractDeclaration -------------------------------------------------------------------------- - -/** - * Returns this [SmlAbstractDeclaration] if it is resolved, otherwise `null`. - * - * @see isResolved - */ -fun T.asResolvedOrNull(): T? { - return when { - isResolved() -> this - else -> null - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLHiddenTokenSequencer.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLHiddenTokenSequencer.kt deleted file mode 100644 index 435adfa4f..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLHiddenTokenSequencer.kt +++ /dev/null @@ -1,27 +0,0 @@ -package de.unibonn.simpleml.serializer - -import com.google.inject.Inject -import de.unibonn.simpleml.services.SimpleMLGrammarAccess -import org.eclipse.emf.ecore.EObject -import org.eclipse.xtext.RuleCall -import org.eclipse.xtext.nodemodel.ICompositeNode -import org.eclipse.xtext.serializer.sequencer.HiddenTokenSequencer - -@Suppress("unused") -class SimpleMLHiddenTokenSequencer @Inject constructor( - private val grammarAccess: SimpleMLGrammarAccess -) : HiddenTokenSequencer() { - - override fun enterAssignedParserRuleCall(rc: RuleCall, semanticChild: EObject, node: ICompositeNode?): Boolean { - semanticChild.eAdapters() - .filterIsInstance() - .forEach { - val rule = when (it) { - is SingleLineCommentAdapter -> grammarAccess.sL_COMMENTRule - is MultiLineCommentAdapter -> grammarAccess.mL_COMMENTRule - } - delegate.acceptComment(rule, it.toString(), null) - } - return super.enterAssignedParserRuleCall(rc, semanticChild, node) - } -} \ No newline at end of file diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLSemanticSequencer.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLSemanticSequencer.kt deleted file mode 100644 index b028d20db..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLSemanticSequencer.kt +++ /dev/null @@ -1,3 +0,0 @@ -package de.unibonn.simpleml.serializer - -internal class SimpleMLSemanticSequencer : AbstractSimpleMLSemanticSequencer() \ No newline at end of file diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLSyntacticSequencer.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLSyntacticSequencer.kt deleted file mode 100644 index c40a1b13e..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/serializer/SimpleMLSyntacticSequencer.kt +++ /dev/null @@ -1,3 +0,0 @@ -package de.unibonn.simpleml.serializer - -class SimpleMLSyntacticSequencer: AbstractSimpleMLSyntacticSequencer() \ No newline at end of file diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/CallToCallable.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/CallToCallable.kt deleted file mode 100644 index 4ca22e5cc..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/CallToCallable.kt +++ /dev/null @@ -1,111 +0,0 @@ -package de.unibonn.simpleml.staticAnalysis - -import de.unibonn.simpleml.emf.blockLambdaResultsOrEmpty -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.resultsOrEmpty -import de.unibonn.simpleml.simpleML.SmlAbstractAssignee -import de.unibonn.simpleml.simpleML.SmlAbstractCallable -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlAbstractObject -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCallableType -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionLambda -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlParenthesizedExpression -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlStep -import org.eclipse.emf.ecore.EObject - -fun SmlCall.callableOrNull(): SmlAbstractCallable? { - return when (val maybeCallable = this.maybeCallable()) { - is CallableResult.Callable -> maybeCallable.callable - else -> null - } -} - -sealed interface CallableResult { - object Unresolvable : CallableResult - object NotCallable : CallableResult - class Callable(val callable: SmlAbstractCallable) : CallableResult -} - -fun SmlCall.maybeCallable(): CallableResult { - val visited = mutableSetOf() - var current: EObject? = this.receiver - while (current != null && current !in visited) { - visited += current - - current = when { - current.eIsProxy() -> return CallableResult.Unresolvable - current is SmlAbstractCallable -> return CallableResult.Callable(current) - current is SmlCall -> { - val results = current.resultsOrNull() - if (results == null || results.size != 1) { - return CallableResult.Unresolvable - } - - results.first() - } - current is SmlAbstractAssignee -> current.assignedOrNull() - current is SmlMemberAccess -> current.member.declaration - current is SmlParameter -> return when (val typeOrNull = current.type) { - null -> CallableResult.Unresolvable - is SmlCallableType -> CallableResult.Callable(typeOrNull) - else -> CallableResult.NotCallable - } - current is SmlParenthesizedExpression -> current.expression - current is SmlReference -> current.declaration - current is SmlResult -> return when (val typeOrNull = current.type) { - null -> CallableResult.Unresolvable - is SmlCallableType -> CallableResult.Callable(typeOrNull) - else -> CallableResult.NotCallable - } - else -> return CallableResult.NotCallable - } - } - - return CallableResult.Unresolvable -} - -/** - * Returns the list of [SmlParameter]s of the called callable or `null` if it cannot be resolved. - */ -fun SmlCall.parametersOrNull(): List? { - return callableOrNull()?.parametersOrEmpty() -} - -/** - * Returns the list of [SmlAbstractObject]s that are returned by the called callable or `null` if it cannot be resolved. - * Possible types depend on the called callable: - * - [SmlBlockLambda] -> [SmlBlockLambdaResult] - * - [SmlCallableType] -> [SmlResult] - * - [SmlClass] -> [SmlClass] - * - [SmlEnumVariant] -> [SmlEnumVariant] - * - [SmlExpressionLambda] -> [SmlAbstractExpression] - * - [SmlFunction] -> [SmlResult] - * - [SmlStep] -> [SmlResult] - */ -fun SmlCall.resultsOrNull(): List? { - return when (val callable = this.callableOrNull()) { - is SmlBlockLambda -> callable.blockLambdaResultsOrEmpty() - is SmlCallableType -> callable.resultsOrEmpty() - is SmlClass -> listOf(callable) - is SmlEnumVariant -> listOf(callable) - is SmlExpressionLambda -> listOf(callable.result) - is SmlFunction -> callable.resultsOrEmpty() - is SmlStep -> callable.resultsOrEmpty() - else -> null - } -} - -sealed interface ResultsResult { - object Unresolved : ResultsResult - object NotCallable : ResultsResult -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/LocalDeclarationToReferences.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/LocalDeclarationToReferences.kt deleted file mode 100644 index 88932948f..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/LocalDeclarationToReferences.kt +++ /dev/null @@ -1,25 +0,0 @@ -package de.unibonn.simpleml.staticAnalysis - -import de.unibonn.simpleml.emf.descendants -import de.unibonn.simpleml.emf.placeholdersOrEmpty -import de.unibonn.simpleml.simpleML.SmlAbstractObject -import de.unibonn.simpleml.simpleML.SmlAbstractStatement -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlReference - -fun SmlParameter.usesIn(obj: SmlAbstractObject): Sequence { - return obj - .descendants() - .filter { it.declaration == this } -} - -fun SmlPlaceholder.usesIn(obj: SmlAbstractObject): Sequence { - return obj - .descendants() - .dropWhile { it !is SmlAssignment || this !in it.placeholdersOrEmpty() } - .drop(1) - .flatMap { it.descendants() } - .filter { it.declaration == this } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/SideEffects.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/SideEffects.kt deleted file mode 100644 index 33da04e22..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/SideEffects.kt +++ /dev/null @@ -1,73 +0,0 @@ -package de.unibonn.simpleml.staticAnalysis - -import de.unibonn.simpleml.emf.assigneesOrEmpty -import de.unibonn.simpleml.emf.immediateCalls -import de.unibonn.simpleml.simpleML.SmlAbstractCallable -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlAbstractLambda -import de.unibonn.simpleml.simpleML.SmlAbstractStatement -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlCallableType -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionStatement -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlWildcard -import de.unibonn.simpleml.stdlibAccess.hasNoSideEffects - -/** - * Whether this [SmlAbstractStatement] has no side effects and, thus, can be removed. - * - * @param resultIfUnknown What to return if neither purity nor impurity can be proven. Note that external functions are - * still always assumed to have side effects unless they are marked with `@Pure` or `@NoSideEffects. - */ -fun SmlAbstractStatement.statementHasNoSideEffects(resultIfUnknown: Boolean = false): Boolean { - return when (this) { - is SmlAssignment -> { - assigneesOrEmpty().all { it is SmlWildcard } && expression.expressionHasNoSideEffects(resultIfUnknown) - } - is SmlExpressionStatement -> { - expression.expressionHasNoSideEffects(resultIfUnknown) - } - else -> { - throw IllegalArgumentException("Missing case to handle statement $this.") - } - } -} - -/** - * Whether this [SmlAbstractExpression] has no side effects and, thus, can be removed. - * - * @param resultIfUnknown What to return if neither purity nor impurity can be proven. Note that external functions are - * still always assumed to have side effects unless they are marked with `@Pure` or `@NoSideEffects. - */ -fun SmlAbstractExpression.expressionHasNoSideEffects(resultIfUnknown: Boolean = false): Boolean { - return when (this) { - is SmlCall -> !isRecursive() && callableOrNull().callableHasNoSideEffects(resultIfUnknown) - else -> true - } -} - -/** - * Whether this [SmlAbstractCallable] has no side effects, so calls to this can be removed. - * - * @param resultIfUnknown What to return if neither purity nor impurity can be proven. Note that external functions are - * still always assumed to have side effects unless they are marked with `@Pure` or `@NoSideEffects. - */ -fun SmlAbstractCallable?.callableHasNoSideEffects(resultIfUnknown: Boolean = false): Boolean { - return when (this) { - null -> resultIfUnknown - - is SmlAbstractLambda -> immediateCalls().all { it.expressionHasNoSideEffects(resultIfUnknown) } - is SmlStep -> immediateCalls().all { it.expressionHasNoSideEffects(resultIfUnknown) } - - is SmlCallableType -> resultIfUnknown - is SmlClass -> true - is SmlEnumVariant -> true - is SmlFunction -> hasNoSideEffects() - - else -> throw IllegalArgumentException("Cannot handle callable of type '${this::class.simpleName}'.") - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/classHierarchy/ClassHierarchy.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/classHierarchy/ClassHierarchy.kt deleted file mode 100644 index 2e2ef6cda..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/classHierarchy/ClassHierarchy.kt +++ /dev/null @@ -1,64 +0,0 @@ -package de.unibonn.simpleml.staticAnalysis.classHierarchy - -import de.unibonn.simpleml.emf.classMembersOrEmpty -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.parentTypesOrEmpty -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.staticAnalysis.typing.ClassType -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.stdlibAccess.StdlibClasses -import de.unibonn.simpleml.stdlibAccess.getStdlibClassOrNull -import de.unibonn.simpleml.utils.uniqueOrNull - -fun SmlClass.isSubtypeOf(other: SmlClass) = - this == this.getStdlibClassOrNull(StdlibClasses.Nothing) || - this == other || other in superClasses() - -fun SmlClass.superClasses() = sequence { - val visited = mutableSetOf() - - // TODO: multiple parent classes - var current = parentClassOrNull() - while (current != null && current !in visited) { - yield(current) - visited += current - current = current.parentClassOrNull() - } - - val anyClass = this@superClasses.getStdlibClassOrNull(StdlibClasses.Any) - if (anyClass != null && this@superClasses != anyClass && visited.lastOrNull() != anyClass) { - yield(anyClass) - } -} - -fun SmlClass.superClassMembers() = - this.superClasses().flatMap { it.classMembersOrEmpty().asSequence() } - -// TODO only static methods can be hidden -fun SmlFunction.hiddenFunction(): SmlFunction? { - val containingClassOrInterface = closestAncestorOrNull() ?: return null - return containingClassOrInterface.superClassMembers() - .filterIsInstance() - .firstOrNull { it.name == name } -} - -fun SmlClass?.inheritedNonStaticMembersOrEmpty(): Set { - return this?.parentClassesOrEmpty() - ?.flatMap { it.classMembersOrEmpty() } - ?.filter { it is SmlAttribute && !it.isStatic || it is SmlFunction && !it.isStatic } - ?.toSet() - .orEmpty() -} - -fun SmlClass?.parentClassesOrEmpty(): List { - return this.parentTypesOrEmpty().mapNotNull { - (it.type() as? ClassType)?.smlClass - } -} - -fun SmlClass?.parentClassOrNull(): SmlClass? { - return this.parentClassesOrEmpty().uniqueOrNull() -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ArgumentToParameter.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ArgumentToParameter.kt deleted file mode 100644 index 9fdfc0f0b..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ArgumentToParameter.kt +++ /dev/null @@ -1,47 +0,0 @@ -package de.unibonn.simpleml.staticAnalysis.linking - -import de.unibonn.simpleml.emf.asResolvedOrNull -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.isNamed -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlArgumentList -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.staticAnalysis.parametersOrNull - -/** - * Returns the [SmlParameter] that corresponds to this [SmlArgument] or `null` if it cannot be resolved. - */ -fun SmlArgument.parameterOrNull(): SmlParameter? { - return when { - isNamed() -> parameter.asResolvedOrNull() - else -> { - val argumentList = closestAncestorOrNull() ?: return null - val parameters = argumentList.parametersOrNull() ?: return null - val lastParameter = parameters.lastOrNull() - - val firstNamedArgumentIndex = argumentList.arguments.indexOfFirst { it.isNamed() } - val thisIndex = argumentList.arguments.indexOf(this) - - return when { - lastParameter?.isVariadic == true && thisIndex >= parameters.size - 1 -> lastParameter - firstNamedArgumentIndex != -1 && thisIndex > firstNamedArgumentIndex -> null - else -> parameters.getOrNull(thisIndex) - } - } - } -} - -/** - * Returns the list of [SmlParameter]s that corresponds to this list of [SmlArgument]s or `null` if it cannot be - * resolved. - */ -fun SmlArgumentList.parametersOrNull(): List? { - return when (val parent = this.eContainer()) { - is SmlAnnotationCall -> parent.annotation.asResolvedOrNull()?.parametersOrEmpty() - is SmlCall -> parent.parametersOrNull() - else -> null - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ResultToYield.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ResultToYield.kt deleted file mode 100644 index ea11001ac..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/ResultToYield.kt +++ /dev/null @@ -1,29 +0,0 @@ -package de.unibonn.simpleml.staticAnalysis.linking - -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.yieldsOrEmpty -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlResultList -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.utils.uniqueOrNull - -/** - * Returns the unique [SmlYield] that corresponds to this [SmlResult] or `null` if no or multiple [SmlYield]s exist. - * Note that an [SmlYield] can only be used inside an [SmlStep], so this will always return `null` for [SmlResult]s that - * are not inside an [SmlStep]. - */ -fun SmlResult.uniqueYieldOrNull(): SmlYield? { - return yieldsOrEmpty().uniqueOrNull() -} - -/** - * Returns all [SmlYield]s that corresponds to this [SmlResult]. Note that an [SmlYield] can only be used inside an - * [SmlStep], so this will always return an empty list for [SmlResult]s that are not inside an [SmlStep]. - */ -fun SmlResult.yieldsOrEmpty(): List { - val resultList = closestAncestorOrNull() ?: return emptyList() - val step = resultList.eContainer() as? SmlStep ?: return emptyList() - - return step.yieldsOrEmpty().filter { it.result == this } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/TypeArgumentToTypeParameter.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/TypeArgumentToTypeParameter.kt deleted file mode 100644 index 2799d54c7..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/linking/TypeArgumentToTypeParameter.kt +++ /dev/null @@ -1,63 +0,0 @@ -package de.unibonn.simpleml.staticAnalysis.linking - -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.isNamed -import de.unibonn.simpleml.emf.isResolved -import de.unibonn.simpleml.emf.typeParametersOrEmpty -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlTypeArgument -import de.unibonn.simpleml.simpleML.SmlTypeArgumentList -import de.unibonn.simpleml.simpleML.SmlTypeParameter -import de.unibonn.simpleml.staticAnalysis.callableOrNull - -/** - * Returns the [SmlTypeParameter] that corresponds to this [SmlTypeArgument] or `null` if it cannot be resolved. - */ -fun SmlTypeArgument.typeParameterOrNull(): SmlTypeParameter? { - return when { - this.isNamed() -> typeParameter - else -> { - val typeArgumentList = closestAncestorOrNull() ?: return null - - // Cannot match positional type argument if it is preceded by named type arguments - val firstNamedTypeArgumentIndex = typeArgumentList.typeArguments.indexOfFirst { it.isNamed() } - val thisIndex = typeArgumentList.typeArguments.indexOf(this) - if (firstNamedTypeArgumentIndex != -1 && thisIndex > firstNamedTypeArgumentIndex) { - return null - } - - typeArgumentList.typeParametersOrNull()?.getOrNull(thisIndex) - } - } -} - -/** - * Returns the list of [SmlTypeParameter]s that corresponds to this list of [SmlTypeArgument]s or `null` if it cannot - * not be resolved. - */ -fun SmlTypeArgumentList.typeParametersOrNull(): List? { - return when (val parent = eContainer()) { - is SmlCall -> { - when (val callable = parent.callableOrNull()) { - is SmlClass -> callable.typeParametersOrEmpty() - is SmlEnumVariant -> callable.typeParametersOrEmpty() - is SmlFunction -> callable.typeParametersOrEmpty() - else -> null - } - } - is SmlNamedType -> { - val declaration = parent.declaration - when { - !declaration.isResolved() -> null - declaration is SmlClass -> declaration.typeParametersOrEmpty() - declaration is SmlEnumVariant -> declaration.typeParametersOrEmpty() - else -> null - } - } - else -> null - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/SmlSimplifiedExpression.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/SmlSimplifiedExpression.kt deleted file mode 100644 index 732147cbf..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/SmlSimplifiedExpression.kt +++ /dev/null @@ -1,111 +0,0 @@ -package de.unibonn.simpleml.staticAnalysis.partialEvaluation - -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlAbstractResult -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlResult - -typealias ParameterSubstitutions = Map - -sealed interface SmlSimplifiedExpression - -internal sealed interface SmlIntermediateExpression : SmlSimplifiedExpression - -internal sealed interface SmlIntermediateCallable : SmlIntermediateExpression { - val parameters: List -} - -internal data class SmlIntermediateBlockLambda( - override val parameters: List, - val results: List, - val substitutionsOnCreation: ParameterSubstitutions -) : SmlIntermediateCallable - -internal data class SmlIntermediateExpressionLambda( - override val parameters: List, - val result: SmlAbstractExpression, - val substitutionsOnCreation: ParameterSubstitutions -) : SmlIntermediateCallable - -internal data class SmlIntermediateStep( - override val parameters: List, - val results: List -) : SmlIntermediateCallable - -internal class SmlIntermediateRecord( - resultSubstitutions: List> -) : SmlIntermediateExpression { - private val resultSubstitutions = resultSubstitutions.toMap() - - fun getSubstitutionByReferenceOrNull(reference: SmlReference): SmlSimplifiedExpression? { - val result = reference.declaration as? SmlAbstractResult ?: return null - return resultSubstitutions[result] - } - - fun getSubstitutionByIndexOrNull(index: Int?): SmlSimplifiedExpression? { - if (index == null) { - return null - } - return resultSubstitutions.values.toList().getOrNull(index) - } - - /** - * If the record contains exactly one substitution its value is returned. Otherwise, it returns `this`. - */ - fun unwrap(): SmlSimplifiedExpression? { - return when (resultSubstitutions.size) { - 1 -> resultSubstitutions.values.first() - else -> this - } - } - - override fun toString(): String { - return resultSubstitutions.entries.joinToString(prefix = "{", postfix = "}") { (result, value) -> - "${result.name}=$value" - } - } -} - -data class SmlIntermediateVariadicArguments( - private val arguments: List -) : SmlSimplifiedExpression { - fun getArgumentByIndexOrNull(index: Int?): SmlSimplifiedExpression? { - if (index == null) { - return null - } - return arguments.getOrNull(index) - } -} - -sealed interface SmlConstantExpression : SmlSimplifiedExpression - -data class SmlConstantBoolean(val value: Boolean) : SmlConstantExpression { - override fun toString(): String = value.toString() -} - -data class SmlConstantEnumVariant(val value: SmlEnumVariant) : SmlConstantExpression { - override fun toString(): String = value.name -} - -sealed class SmlConstantNumber : SmlConstantExpression { - abstract val value: Number -} - -data class SmlConstantFloat(override val value: Double) : SmlConstantNumber() { - override fun toString(): String = value.toString() -} - -data class SmlConstantInt(override val value: Int) : SmlConstantNumber() { - override fun toString(): String = value.toString() -} - -object SmlConstantNull : SmlConstantExpression { - override fun toString(): String = "null" -} - -data class SmlConstantString(val value: String) : SmlConstantExpression { - override fun toString(): String = value -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/ToConstantExpression.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/ToConstantExpression.kt deleted file mode 100644 index 622151fc8..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis/partialEvaluation/ToConstantExpression.kt +++ /dev/null @@ -1,409 +0,0 @@ -package de.unibonn.simpleml.staticAnalysis.partialEvaluation - -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.And -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.By -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.Elvis -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.Equals -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.GreaterThan -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.GreaterThanOrEquals -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.IdenticalTo -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.LessThan -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.LessThanOrEquals -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.NotEquals -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.NotIdenticalTo -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.Or -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.Plus -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.Times -import de.unibonn.simpleml.constant.SmlPrefixOperationOperator.Not -import de.unibonn.simpleml.constant.operator -import de.unibonn.simpleml.emf.argumentsOrEmpty -import de.unibonn.simpleml.emf.blockLambdaResultsOrEmpty -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.isOptional -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.resultsOrEmpty -import de.unibonn.simpleml.simpleML.SmlAbstractAssignee -import de.unibonn.simpleml.simpleML.SmlAbstractExpression -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlBoolean -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionLambda -import de.unibonn.simpleml.simpleML.SmlFloat -import de.unibonn.simpleml.simpleML.SmlIndexedAccess -import de.unibonn.simpleml.simpleML.SmlInfixOperation -import de.unibonn.simpleml.simpleML.SmlInt -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlNull -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlParenthesizedExpression -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlPrefixOperation -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlString -import de.unibonn.simpleml.simpleML.SmlTemplateString -import de.unibonn.simpleml.simpleML.SmlTemplateStringEnd -import de.unibonn.simpleml.simpleML.SmlTemplateStringInner -import de.unibonn.simpleml.simpleML.SmlTemplateStringStart -import de.unibonn.simpleml.staticAnalysis.callableHasNoSideEffects -import de.unibonn.simpleml.staticAnalysis.indexOrNull -import de.unibonn.simpleml.staticAnalysis.linking.parameterOrNull -import de.unibonn.simpleml.staticAnalysis.linking.uniqueYieldOrNull -import de.unibonn.simpleml.utils.uniqueOrNull -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.Minus as InfixMinus -import de.unibonn.simpleml.constant.SmlPrefixOperationOperator.Minus as PrefixMinus - -/** - * Tries to evaluate this expression. On success a [SmlConstantExpression] is returned, otherwise `null`. - */ -fun SmlAbstractExpression.toConstantExpressionOrNull(): SmlConstantExpression? { - return toConstantExpressionOrNull(emptyMap()) -} - -internal fun SmlAbstractExpression.toConstantExpressionOrNull(substitutions: ParameterSubstitutions): SmlConstantExpression? { - return when (val simplifiedExpression = simplify(substitutions)) { - is SmlConstantExpression? -> simplifiedExpression - is SmlIntermediateRecord -> simplifiedExpression.unwrap() as? SmlConstantExpression - else -> null - } -} - -internal fun SmlAbstractExpression.simplify(substitutions: ParameterSubstitutions): SmlSimplifiedExpression? { - return when (this) { - - // Base cases - is SmlBoolean -> SmlConstantBoolean(isTrue) - is SmlFloat -> SmlConstantFloat(value) - is SmlInt -> SmlConstantInt(value) - is SmlNull -> SmlConstantNull - is SmlString -> SmlConstantString(value) - is SmlTemplateStringStart -> SmlConstantString(value) - is SmlTemplateStringInner -> SmlConstantString(value) - is SmlTemplateStringEnd -> SmlConstantString(value) - is SmlBlockLambda -> simplifyBlockLambda(substitutions) - is SmlExpressionLambda -> simplifyExpressionLambda(substitutions) - - // Simple recursive cases - is SmlArgument -> value.simplify(substitutions) - is SmlInfixOperation -> simplifyInfixOp(substitutions) - is SmlParenthesizedExpression -> expression.simplify(substitutions) - is SmlPrefixOperation -> simplifyPrefixOp(substitutions) - is SmlTemplateString -> simplifyTemplateString(substitutions) - - // Complex recursive cases - is SmlCall -> simplifyCall(substitutions) - is SmlIndexedAccess -> simplifyIndexedAccess(substitutions) - is SmlMemberAccess -> simplifyMemberAccess(substitutions) - is SmlReference -> simplifyReference(substitutions) - - // Warn if case is missing - else -> throw IllegalArgumentException("Missing case to handle $this.") - } -} - -private fun SmlBlockLambda.simplifyBlockLambda(substitutions: ParameterSubstitutions): SmlIntermediateBlockLambda? { - return when { - callableHasNoSideEffects(resultIfUnknown = true) -> SmlIntermediateBlockLambda( - parameters = parametersOrEmpty(), - results = blockLambdaResultsOrEmpty(), - substitutionsOnCreation = substitutions - ) - else -> null - } -} - -private fun SmlExpressionLambda.simplifyExpressionLambda( - substitutions: ParameterSubstitutions -): SmlIntermediateExpressionLambda? { - return when { - callableHasNoSideEffects(resultIfUnknown = true) -> SmlIntermediateExpressionLambda( - parameters = parametersOrEmpty(), - result = result, - substitutionsOnCreation = substitutions - ) - else -> null - } -} - -private fun SmlInfixOperation.simplifyInfixOp(substitutions: ParameterSubstitutions): SmlConstantExpression? { - - // By design none of the operators are short-circuited - val constantLeft = leftOperand.toConstantExpressionOrNull(substitutions) ?: return null - val constantRight = rightOperand.toConstantExpressionOrNull(substitutions) ?: return null - - return when (operator()) { - Or -> simplifyLogicalOp(constantLeft, Boolean::or, constantRight) - And -> simplifyLogicalOp(constantLeft, Boolean::and, constantRight) - Equals -> SmlConstantBoolean(constantLeft == constantRight) - NotEquals -> SmlConstantBoolean(constantLeft != constantRight) - IdenticalTo -> SmlConstantBoolean(constantLeft == constantRight) - NotIdenticalTo -> SmlConstantBoolean(constantLeft != constantRight) - LessThan -> simplifyComparisonOp( - constantLeft, - { a, b -> a < b }, - { a, b -> a < b }, - constantRight - ) - LessThanOrEquals -> simplifyComparisonOp( - constantLeft, - { a, b -> a <= b }, - { a, b -> a <= b }, - constantRight - ) - GreaterThanOrEquals -> simplifyComparisonOp( - constantLeft, - { a, b -> a >= b }, - { a, b -> a >= b }, - constantRight - ) - GreaterThan -> simplifyComparisonOp( - constantLeft, - { a, b -> a > b }, - { a, b -> a > b }, - constantRight - ) - Plus -> simplifyArithmeticOp( - constantLeft, - { a, b -> a + b }, - { a, b -> a + b }, - constantRight - ) - InfixMinus -> simplifyArithmeticOp( - constantLeft, - { a, b -> a - b }, - { a, b -> a - b }, - constantRight - ) - Times -> simplifyArithmeticOp( - constantLeft, - { a, b -> a * b }, - { a, b -> a * b }, - constantRight - ) - By -> { - if (constantRight == SmlConstantFloat(0.0) || constantRight == SmlConstantInt(0)) { - return null - } - - simplifyArithmeticOp( - constantLeft, - { a, b -> a / b }, - { a, b -> a / b }, - constantRight - ) - } - Elvis -> when (constantLeft) { - SmlConstantNull -> constantRight - else -> constantLeft - } - } -} - -private fun simplifyLogicalOp( - leftOperand: SmlConstantExpression, - operation: (Boolean, Boolean) -> Boolean, - rightOperand: SmlConstantExpression, -): SmlConstantExpression? { - - return when { - leftOperand is SmlConstantBoolean && rightOperand is SmlConstantBoolean -> { - SmlConstantBoolean(operation(leftOperand.value, rightOperand.value)) - } - else -> null - } -} - -private fun simplifyComparisonOp( - leftOperand: SmlConstantExpression, - doubleOperation: (Double, Double) -> Boolean, - intOperation: (Int, Int) -> Boolean, - rightOperand: SmlConstantExpression, -): SmlConstantExpression? { - - return when { - leftOperand is SmlConstantInt && rightOperand is SmlConstantInt -> { - SmlConstantBoolean(intOperation(leftOperand.value, rightOperand.value)) - } - leftOperand is SmlConstantNumber && rightOperand is SmlConstantNumber -> { - SmlConstantBoolean(doubleOperation(leftOperand.value.toDouble(), rightOperand.value.toDouble())) - } - else -> null - } -} - -private fun simplifyArithmeticOp( - leftOperand: SmlConstantExpression, - doubleOperation: (Double, Double) -> Double, - intOperation: (Int, Int) -> Int, - rightOperand: SmlConstantExpression, -): SmlConstantExpression? { - - return when { - leftOperand is SmlConstantInt && rightOperand is SmlConstantInt -> { - SmlConstantInt(intOperation(leftOperand.value, rightOperand.value)) - } - leftOperand is SmlConstantNumber && rightOperand is SmlConstantNumber -> { - SmlConstantFloat(doubleOperation(leftOperand.value.toDouble(), rightOperand.value.toDouble())) - } - else -> null - } -} - -private fun SmlPrefixOperation.simplifyPrefixOp(substitutions: ParameterSubstitutions): SmlConstantExpression? { - val constantOperand = operand.toConstantExpressionOrNull(substitutions) ?: return null - - return when (operator()) { - Not -> when (constantOperand) { - is SmlConstantBoolean -> SmlConstantBoolean(!constantOperand.value) - else -> null - } - PrefixMinus -> when (constantOperand) { - is SmlConstantFloat -> SmlConstantFloat(-constantOperand.value) - is SmlConstantInt -> SmlConstantInt(-constantOperand.value) - else -> null - } - } -} - -private fun SmlTemplateString.simplifyTemplateString(substitutions: ParameterSubstitutions): SmlConstantExpression? { - val constExpressions = expressions.map { - it.toConstantExpressionOrNull(substitutions) ?: return null - } - - return SmlConstantString(constExpressions.joinToString("")) -} - -private fun SmlCall.simplifyCall(substitutions: ParameterSubstitutions): SmlSimplifiedExpression? { - val simpleReceiver = simplifyReceiver(substitutions) ?: return null - val newSubstitutions = buildNewSubstitutions(simpleReceiver, substitutions) - - return when (simpleReceiver) { - is SmlIntermediateBlockLambda -> { - SmlIntermediateRecord( - simpleReceiver.results.map { - it to it.simplifyAssignee(newSubstitutions) - } - ) - } - is SmlIntermediateExpressionLambda -> simpleReceiver.result.simplify(newSubstitutions) - is SmlIntermediateStep -> { - SmlIntermediateRecord( - simpleReceiver.results.map { - it to it.uniqueYieldOrNull()?.simplifyAssignee(newSubstitutions) - } - ) - } - } -} - -private fun SmlCall.simplifyReceiver(substitutions: ParameterSubstitutions): SmlIntermediateCallable? { - return when (val simpleReceiver = receiver.simplify(substitutions)) { - is SmlIntermediateRecord -> simpleReceiver.unwrap() as? SmlIntermediateCallable - is SmlIntermediateCallable -> simpleReceiver - else -> return null - } -} - -private fun SmlCall.buildNewSubstitutions( - simpleReceiver: SmlIntermediateCallable, - oldSubstitutions: ParameterSubstitutions -): ParameterSubstitutions { - - val substitutionsOnCreation = when (simpleReceiver) { - is SmlIntermediateBlockLambda -> simpleReceiver.substitutionsOnCreation - is SmlIntermediateExpressionLambda -> simpleReceiver.substitutionsOnCreation - else -> emptyMap() - } - - val substitutionsOnCall = argumentsOrEmpty() - .groupBy { it.parameterOrNull() } - .mapValues { (parameter, arguments) -> - when { - parameter == null -> null - parameter.isVariadic -> SmlIntermediateVariadicArguments( - arguments.map { it.simplify(oldSubstitutions) } - ) - else -> arguments.uniqueOrNull()?.simplify(oldSubstitutions) - } - } - - return buildMap { - putAll(substitutionsOnCreation) - substitutionsOnCall.entries.forEach { (parameter, argument) -> - if (parameter != null) { - put(parameter, argument) - } - } - } -} - -private fun SmlIndexedAccess.simplifyIndexedAccess(substitutions: ParameterSubstitutions): SmlSimplifiedExpression? { - val simpleReceiver = receiver.simplify(substitutions) as? SmlIntermediateVariadicArguments ?: return null - val simpleIndex = index.simplify(substitutions) as? SmlConstantInt ?: return null - - return simpleReceiver.getArgumentByIndexOrNull(simpleIndex.value) -} - -private fun SmlMemberAccess.simplifyMemberAccess(substitutions: ParameterSubstitutions): SmlSimplifiedExpression? { - if (member.declaration is SmlEnumVariant) { - return member.simplifyReference(substitutions) - } - - return when (val simpleReceiver = receiver.simplify(substitutions)) { - SmlConstantNull -> when { - isNullSafe -> SmlConstantNull - else -> null - } - is SmlIntermediateRecord -> simpleReceiver.getSubstitutionByReferenceOrNull(member) - else -> null - } -} - -private fun SmlReference.simplifyReference(substitutions: ParameterSubstitutions): SmlSimplifiedExpression? { - return when (val declaration = this.declaration) { - is SmlEnumVariant -> when { - declaration.parametersOrEmpty().isEmpty() -> SmlConstantEnumVariant(declaration) - else -> null - } - is SmlPlaceholder -> declaration.simplifyAssignee(substitutions) - is SmlParameter -> declaration.simplifyParameter(substitutions) - is SmlStep -> declaration.simplifyStep() - else -> null - } -} - -private fun SmlAbstractAssignee.simplifyAssignee(substitutions: ParameterSubstitutions): SmlSimplifiedExpression? { - val simpleFullAssignedExpression = closestAncestorOrNull() - ?.expression - ?.simplify(substitutions) - ?: return null - - return when (simpleFullAssignedExpression) { - is SmlIntermediateRecord -> simpleFullAssignedExpression.getSubstitutionByIndexOrNull(indexOrNull()) - else -> when { - indexOrNull() == 0 -> simpleFullAssignedExpression - else -> null - } - } -} - -private fun SmlParameter.simplifyParameter(substitutions: ParameterSubstitutions): SmlSimplifiedExpression? { - return when { - this in substitutions -> substitutions[this] - isOptional() -> defaultValue?.simplify(substitutions) - else -> null - } -} - -private fun SmlStep.simplifyStep(): SmlIntermediateStep? { - return when { - callableHasNoSideEffects(resultIfUnknown = true) -> SmlIntermediateStep( - parameters = parametersOrEmpty(), - results = resultsOrEmpty() - ) - else -> null - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/SimpleMLValidator.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/SimpleMLValidator.kt deleted file mode 100644 index 6fe4afe44..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/SimpleMLValidator.kt +++ /dev/null @@ -1,107 +0,0 @@ -package de.unibonn.simpleml.validation - -import de.unibonn.simpleml.validation.declarations.AnnotationChecker -import de.unibonn.simpleml.validation.declarations.AttributeChecker -import de.unibonn.simpleml.validation.declarations.ClassChecker -import de.unibonn.simpleml.validation.declarations.CompilationUnitChecker -import de.unibonn.simpleml.validation.declarations.DeclarationChecker -import de.unibonn.simpleml.validation.declarations.EnumChecker -import de.unibonn.simpleml.validation.declarations.EnumVariantChecker -import de.unibonn.simpleml.validation.declarations.FunctionChecker -import de.unibonn.simpleml.validation.declarations.ImportChecker -import de.unibonn.simpleml.validation.declarations.NameConventionChecker -import de.unibonn.simpleml.validation.declarations.ParameterChecker -import de.unibonn.simpleml.validation.declarations.ParameterListChecker -import de.unibonn.simpleml.validation.declarations.PlaceholderChecker -import de.unibonn.simpleml.validation.declarations.ResultChecker -import de.unibonn.simpleml.validation.declarations.StepChecker -import de.unibonn.simpleml.validation.declarations.TypeParameterChecker -import de.unibonn.simpleml.validation.declarations.WorkflowChecker -import de.unibonn.simpleml.validation.expressions.ArgumentChecker -import de.unibonn.simpleml.validation.expressions.CallChecker -import de.unibonn.simpleml.validation.expressions.InfixOperationChecker -import de.unibonn.simpleml.validation.expressions.LambdaChecker -import de.unibonn.simpleml.validation.expressions.MemberAccessChecker -import de.unibonn.simpleml.validation.expressions.ReferenceChecker -import de.unibonn.simpleml.validation.expressions.TemplateStringChecker -import de.unibonn.simpleml.validation.other.AnnotationCallChecker -import de.unibonn.simpleml.validation.other.ArgumentListChecker -import de.unibonn.simpleml.validation.other.DeprecationChecker -import de.unibonn.simpleml.validation.other.ProtocolChecker -import de.unibonn.simpleml.validation.other.TypeArgumentListChecker -import de.unibonn.simpleml.validation.statements.AssignmentChecker -import de.unibonn.simpleml.validation.statements.ExpressionsStatementChecker -import de.unibonn.simpleml.validation.typeChecking.ArgumentTypeChecker -import de.unibonn.simpleml.validation.typeChecking.DefaultValueTypeChecker -import de.unibonn.simpleml.validation.typeChecking.IndexedAccessTypeChecker -import de.unibonn.simpleml.validation.typeChecking.InfixOperationTypeChecker -import de.unibonn.simpleml.validation.typeChecking.PrefixOperationTypeChecker -import de.unibonn.simpleml.validation.typeChecking.YieldTypeChecker -import de.unibonn.simpleml.validation.types.CallableTypeChecker -import de.unibonn.simpleml.validation.types.NamedTypeChecker -import de.unibonn.simpleml.validation.types.UnionTypeChecker -import org.eclipse.xtext.validation.ComposedChecks - -/** - * This class contains custom validation rules. - * - * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation - */ -@ComposedChecks( - validators = [ - - // Declarations - AnnotationChecker::class, - AttributeChecker::class, - ClassChecker::class, - CompilationUnitChecker::class, - DeclarationChecker::class, - EnumChecker::class, - EnumVariantChecker::class, - FunctionChecker::class, - ImportChecker::class, - ParameterChecker::class, - ParameterListChecker::class, - PlaceholderChecker::class, - ResultChecker::class, - WorkflowChecker::class, - StepChecker::class, - TypeParameterChecker::class, - - NameConventionChecker::class, - - // Expressions - ArgumentChecker::class, - CallChecker::class, - InfixOperationChecker::class, - LambdaChecker::class, - MemberAccessChecker::class, - ReferenceChecker::class, - TemplateStringChecker::class, - - // Statements - AssignmentChecker::class, - ExpressionsStatementChecker::class, - - // Type Checking - ArgumentTypeChecker::class, - DefaultValueTypeChecker::class, - IndexedAccessTypeChecker::class, - InfixOperationTypeChecker::class, - PrefixOperationTypeChecker::class, - YieldTypeChecker::class, - - // Types - CallableTypeChecker::class, - NamedTypeChecker::class, - UnionTypeChecker::class, - - // Other - AnnotationCallChecker::class, - ArgumentListChecker::class, - DeprecationChecker::class, - ProtocolChecker::class, - TypeArgumentListChecker::class, - ] -) -class SimpleMLValidator : AbstractSimpleMLValidator() diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/AnnotationChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/AnnotationChecker.kt deleted file mode 100644 index b368dfdca..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/AnnotationChecker.kt +++ /dev/null @@ -1,69 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import com.google.errorprone.annotations.Var -import de.unibonn.simpleml.emf.isConstant -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.staticAnalysis.typing.ClassType -import de.unibonn.simpleml.staticAnalysis.typing.EnumType -import de.unibonn.simpleml.staticAnalysis.typing.VariadicType -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.stdlibAccess.StdlibClasses -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode -import org.eclipse.xtext.validation.Check - -class AnnotationChecker : AbstractSimpleMLChecker() { - - @Check - fun uniqueNames(smlAnnotation: SmlAnnotation) { - smlAnnotation.parametersOrEmpty().reportDuplicateNames { - "A parameter with name '${it.name}' exists already in this annotation." - } - } - - @Check - fun unnecessaryParameterList(smlAnnotation: SmlAnnotation) { - if (smlAnnotation.parameterList != null && smlAnnotation.parametersOrEmpty().isEmpty()) { - info( - "Unnecessary parameter list.", - Literals.SML_ABSTRACT_CALLABLE__PARAMETER_LIST, - InfoCode.UnnecessaryParameterList - ) - } - } - - private val validParameterTypes = setOf( - StdlibClasses.Boolean, - StdlibClasses.Float, - StdlibClasses.Int, - StdlibClasses.String, - ) - - @Check - fun parameterTypes(smlAnnotation: SmlAnnotation) { - smlAnnotation.parametersOrEmpty().forEach { - val unwrappedParameterType = when (val parameterType = it.type()) { - is VariadicType -> parameterType.elementType - else -> parameterType - } - - val isValid = when (unwrappedParameterType) { - is ClassType -> unwrappedParameterType.qualifiedName in validParameterTypes - is EnumType -> unwrappedParameterType.smlEnum.isConstant() - else -> false - } - - if (!isValid) { - error( - "Parameters of annotations must have type Boolean, Float, Int, String, or a constant enum.", - it, - Literals.SML_PARAMETER__TYPE, - ErrorCode.UnsupportedAnnotationParameterType - ) - } - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/AttributeChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/AttributeChecker.kt deleted file mode 100644 index aab3eeae0..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/AttributeChecker.kt +++ /dev/null @@ -1,21 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check - -class AttributeChecker : AbstractSimpleMLChecker() { - - @Check - fun type(smlAttribute: SmlAttribute) { - if (smlAttribute.type == null) { - error( - "An attribute must have a type.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.AttributeMustHaveType - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/CompilationUnitChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/CompilationUnitChecker.kt deleted file mode 100644 index b9d3053f0..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/CompilationUnitChecker.kt +++ /dev/null @@ -1,131 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.constant.isInStubFile -import de.unibonn.simpleml.constant.isInTestFile -import de.unibonn.simpleml.emf.compilationUnitMembersOrEmpty -import de.unibonn.simpleml.emf.importedNameOrNull -import de.unibonn.simpleml.emf.isQualified -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.scoping.externalGlobalDeclarations -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlImport -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.utils.duplicatesBy -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check -import org.eclipse.xtext.validation.CheckType - -class CompilationUnitChecker : AbstractSimpleMLChecker() { - - @Check - fun members(smlCompilationUnit: SmlCompilationUnit) { - if (smlCompilationUnit.isInStubFile()) { - smlCompilationUnit.compilationUnitMembersOrEmpty() - .filter { it is SmlWorkflow || it is SmlStep } - .forEach { - error( - "A stub file must not declare workflows or steps.", - it, - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.StubFileMustNotDeclareWorkflowsOrSteps - ) - } - } else if (!smlCompilationUnit.isInTestFile()) { - smlCompilationUnit.compilationUnitMembersOrEmpty() - .filter { it !is SmlWorkflow && it !is SmlStep } - .forEach { - error( - "A workflow file must only declare workflows and steps.", - it, - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.WorkflowFileMustOnlyDeclareWorkflowsAndSteps - ) - } - } - } - - @Check - fun uniquePackageDeclaration(smlCompilationUnit: SmlCompilationUnit) { - if (smlCompilationUnit.isInTestFile()) { - return - } - - if (smlCompilationUnit.name == null) { - smlCompilationUnit.compilationUnitMembersOrEmpty().firstOrNull()?.let { - error( - "A file with declarations must declare its package.", - it, - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.FileMustDeclarePackage - ) - } - } - } - - @Check - fun uniqueNames(smlCompilationUnit: SmlCompilationUnit) { - val namedEObjects = smlCompilationUnit.imports.filter { it.isQualified() } + smlCompilationUnit.members - - namedEObjects.duplicatesBy { - when (it) { - is SmlImport -> it.importedNameOrNull() - is SmlAbstractDeclaration -> it.name - else -> null - } - }.forEach { - when { - it is SmlImport && it.alias == null -> { - error( - "A declaration with name '${it.importedNameOrNull()}' exists already in this file.", - it, - Literals.SML_IMPORT__IMPORTED_NAMESPACE, - ErrorCode.REDECLARATION - ) - } - it is SmlImport && it.alias != null -> { - error( - "A declaration with name '${it.importedNameOrNull()}' exists already in this file.", - it.alias, - Literals.SML_IMPORT_ALIAS__NAME, - ErrorCode.REDECLARATION - ) - } - it is SmlAbstractDeclaration -> { - error( - "A declaration with name '${it.name}' exists already in this file.", - it, - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.REDECLARATION - ) - } - } - } - } - - @Check(CheckType.NORMAL) - fun uniqueNamesAcrossFiles(smlCompilationUnit: SmlCompilationUnit) { - - // Since the stdlib is automatically loaded into a workspace, every declaration would be marked as a duplicate - // when editing the stdlib - if (smlCompilationUnit.isInStubFile() && smlCompilationUnit.name.startsWith("simpleml")) { - return - } - - val externalGlobalDeclarations = smlCompilationUnit.externalGlobalDeclarations() - smlCompilationUnit.compilationUnitMembersOrEmpty().forEach { member -> - val qualifiedName = member.qualifiedNameOrNull() - if (externalGlobalDeclarations.any { it.qualifiedName == qualifiedName }) { - error( - "A declaration with qualified name '$qualifiedName' exists already.", - member, - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.REDECLARATION_IN_OTHER_FILE - ) - } - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/EnumChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/EnumChecker.kt deleted file mode 100644 index 41cc4b32a..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/EnumChecker.kt +++ /dev/null @@ -1,28 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.emf.variantsOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.InfoCode -import org.eclipse.xtext.validation.Check - -class EnumChecker : AbstractSimpleMLChecker() { - - @Check - fun body(smlEnum: SmlEnum) { - if (smlEnum.body != null && smlEnum.variantsOrEmpty().isEmpty()) { - info( - "Unnecessary enum body.", - Literals.SML_ENUM__BODY, - InfoCode.UnnecessaryBody - ) - } - } - - @Check - fun uniqueNames(smlEnum: SmlEnum) { - smlEnum.variantsOrEmpty() - .reportDuplicateNames { "A declaration with name '${it.name}' exists already in this enum." } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/EnumVariantChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/EnumVariantChecker.kt deleted file mode 100644 index a30e95538..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/EnumVariantChecker.kt +++ /dev/null @@ -1,40 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.typeParametersOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.InfoCode -import org.eclipse.xtext.validation.Check - -class EnumVariantChecker : AbstractSimpleMLChecker() { - - @Check - fun typeParameterList(smlEnumVariant: SmlEnumVariant) { - if (smlEnumVariant.typeParameterList != null && smlEnumVariant.typeParametersOrEmpty().isEmpty()) { - info( - "Unnecessary type parameter list.", - Literals.SML_ENUM_VARIANT__TYPE_PARAMETER_LIST, - InfoCode.UnnecessaryTypeParameterList - ) - } - } - - @Check - fun parameterList(smlEnumVariant: SmlEnumVariant) { - if (smlEnumVariant.parameterList != null && smlEnumVariant.parametersOrEmpty().isEmpty()) { - info( - "Unnecessary parameter list.", - Literals.SML_ABSTRACT_CALLABLE__PARAMETER_LIST, - InfoCode.UnnecessaryParameterList - ) - } - } - - @Check - fun uniqueNames(smlEnumVariant: SmlEnumVariant) { - smlEnumVariant.parametersOrEmpty() - .reportDuplicateNames { "A parameter with name '${it.name}' exists already in this enum variant." } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/FunctionChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/FunctionChecker.kt deleted file mode 100644 index 9b83a3fe8..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/FunctionChecker.kt +++ /dev/null @@ -1,88 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.resultsOrEmpty -import de.unibonn.simpleml.emf.typeParametersOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.staticAnalysis.classHierarchy.hiddenFunction -import de.unibonn.simpleml.stdlibAccess.isPure -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode -import org.eclipse.xtext.validation.Check - -class FunctionChecker : AbstractSimpleMLChecker() { - - @Check - fun nonStaticPropagates(smlFunction: SmlFunction) { - if (smlFunction.isStatic) { - val hiddenFunction = smlFunction.hiddenFunction() - if (hiddenFunction != null && !hiddenFunction.isStatic) { - error( - "One of the supertypes of this class declares a non-static function with this name, so this must be non-static as well.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.NON_STATIC_PROPAGATES - ) - } - } - } - - @Check - fun purePropagates(smlFunction: SmlFunction) { - if (!smlFunction.isPure()) { - val hiddenFunction = smlFunction.hiddenFunction() - if (hiddenFunction != null && hiddenFunction.isPure()) { - error( - "One of the supertypes of this class declares a pure function with this name, so this must be pure as well.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.PURE_PROPAGATES - ) - } - } - } - - @Check - fun staticPropagates(smlFunction: SmlFunction) { - if (!smlFunction.isStatic) { - val hiddenFunction = smlFunction.hiddenFunction() - if (hiddenFunction != null && hiddenFunction.isStatic) { - error( - "One of the supertypes of this class declares a static function with this name, so this must be static as well.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.STATIC_PROPAGATES - ) - } - } - } - - @Check - fun uniqueNames(smlFunction: SmlFunction) { - val declarations = smlFunction.parametersOrEmpty() + smlFunction.resultsOrEmpty() - declarations.reportDuplicateNames { - "A parameter or result with name '${it.name}' exists already in this function." - } - } - - @Check - fun unnecessaryResultList(smlFunction: SmlFunction) { - if (smlFunction.resultList != null && smlFunction.resultsOrEmpty().isEmpty()) { - info( - "Unnecessary result list.", - Literals.SML_FUNCTION__RESULT_LIST, - InfoCode.UnnecessaryResultList - ) - } - } - - @Check - fun unnecessaryTypeParameterList(smlFunction: SmlFunction) { - if (smlFunction.typeParameterList != null && smlFunction.typeParametersOrEmpty().isEmpty()) { - info( - "Unnecessary type parameter list.", - Literals.SML_FUNCTION__TYPE_PARAMETER_LIST, - InfoCode.UnnecessaryTypeParameterList - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/NameConventionChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/NameConventionChecker.kt deleted file mode 100644 index 9786f8e6f..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/NameConventionChecker.kt +++ /dev/null @@ -1,150 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlProtocolSubterm -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlTypeParameter -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.WarningCode -import org.eclipse.xtext.validation.Check - -class NameConventionChecker : AbstractSimpleMLChecker() { - - @Check - fun segmentsShouldBeLowercase(smlCompilationUnit: SmlCompilationUnit) { - val hasInvalidSegments = smlCompilationUnit.name - .split('.') - .any { !it.isLowerCamelCase() } - - if (hasInvalidSegments) { - warning( - "All segments of the qualified name of a package should be lowerCamelCase.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - WarningCode.SegmentsShouldBeLowerCamelCase - ) - } - } - - @Check - fun blockLambdaPrefix(smlDeclaration: SmlAbstractDeclaration) { - if (smlDeclaration.name.startsWith("__block_lambda_")) { - error( - "Names of declarations must not start with '__block_lambda_'. This is reserved for code generation of block lambdas.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.BlockLambdaPrefix - ) - } - } - - @Check - fun annotationNamesShouldBeUpperCamelCase(smlAnnotation: SmlAnnotation) { - smlAnnotation.nameShouldBeUpperCamelCase("annotations") - } - - @Check - fun attributeNamesShouldBeLowerCamelCase(smlAttribute: SmlAttribute) { - smlAttribute.nameShouldBeLowerCamelCase("attributes") - } - - @Check - fun classNamesShouldBeUpperCamelCase(smlClass: SmlClass) { - smlClass.nameShouldBeUpperCamelCase("classes") - } - - @Check - fun enumNamesShouldBeUpperCamelCase(smlEnum: SmlEnum) { - smlEnum.nameShouldBeUpperCamelCase("enums") - } - - @Check - fun enumVariantNamesShouldBeUpperCamelCase(smlEnumVariant: SmlEnumVariant) { - smlEnumVariant.nameShouldBeUpperCamelCase("enum variants") - } - - @Check - fun functionNamesShouldBeLowerCamelCase(smlFunction: SmlFunction) { - smlFunction.nameShouldBeLowerCamelCase("functions") - } - - @Check - fun lambdaResultNamesShouldBeLowerCamelCase(smlBlockLambdaResult: SmlBlockLambdaResult) { - smlBlockLambdaResult.nameShouldBeLowerCamelCase("lambda results") - } - - @Check - fun parameterNamesShouldBeLowerCamelCase(smlParameter: SmlParameter) { - smlParameter.nameShouldBeLowerCamelCase("parameters") - } - - @Check - fun placeholderNamesShouldBeLowerCamelCase(smlPlaceholder: SmlPlaceholder) { - smlPlaceholder.nameShouldBeLowerCamelCase("placeholders") - } - - @Check - fun protocolSubtermNamesShouldBeLowerCamelCase(smlProtocolSubterm: SmlProtocolSubterm) { - smlProtocolSubterm.nameShouldBeLowerCamelCase("protocol subterms") - } - - @Check - fun resultNamesShouldBeLowerCamelCase(smlResult: SmlResult) { - smlResult.nameShouldBeLowerCamelCase("results") - } - - @Check - fun stepNamesShouldBeLowerCamelCase(smlStep: SmlStep) { - smlStep.nameShouldBeLowerCamelCase("steps") - } - - @Check - fun typeParameterNamesShouldBeUpperCamelCase(smlTypeParameter: SmlTypeParameter) { - smlTypeParameter.nameShouldBeUpperCamelCase("type parameters") - } - - @Check - fun workflowNamesShouldBeLowerCamelCase(smlWorkflow: SmlWorkflow) { - smlWorkflow.nameShouldBeLowerCamelCase("workflows") - } - - private fun SmlAbstractDeclaration.nameShouldBeUpperCamelCase(declarationType: String) { - if (this.name != null && !this.name.isUpperCamelCase()) { - warning( - "Names of $declarationType should be UpperCamelCase.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - WarningCode.NameShouldBeUpperCamelCase - ) - } - } - - private fun SmlAbstractDeclaration.nameShouldBeLowerCamelCase(declarationType: String) { - if (this.name != null && !this.name.isLowerCamelCase()) { - warning( - "Names of $declarationType should be lowerCamelCase.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - WarningCode.NameShouldBeLowerCamelCase - ) - } - } - - private fun String.isUpperCamelCase(): Boolean { - return Regex("^[A-Z][a-zA-Z0-9]*$").matches(this) - } - - private fun String.isLowerCamelCase(): Boolean { - return Regex("^[a-z][a-zA-Z0-9]*$").matches(this) - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ParameterChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ParameterChecker.kt deleted file mode 100644 index ba09a2959..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ParameterChecker.kt +++ /dev/null @@ -1,69 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.isOptional -import de.unibonn.simpleml.emf.isRequired -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAbstractLambda -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlParameterList -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.toConstantExpressionOrNull -import de.unibonn.simpleml.stdlibAccess.StdlibAnnotations -import de.unibonn.simpleml.stdlibAccess.annotationCallsOrEmpty -import de.unibonn.simpleml.stdlibAccess.isExpert -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check -import org.eclipse.xtext.validation.CheckType - -class ParameterChecker : AbstractSimpleMLChecker() { - - @Check - fun type(smlParameter: SmlParameter) { - val parameterList = smlParameter.closestAncestorOrNull() ?: return - if (smlParameter.type == null && parameterList.eContainer() !is SmlAbstractLambda) { - error( - "A parameter must have a type.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.ParameterMustHaveType - ) - } - } - - @Check(CheckType.NORMAL) - fun defaultValueMustBeConstant(smlParameter: SmlParameter) { - val defaultValue = smlParameter.defaultValue ?: return - if (defaultValue.toConstantExpressionOrNull() == null) { - error( - "Default values of parameters must be constant.", - Literals.SML_PARAMETER__DEFAULT_VALUE, - ErrorCode.MustBeConstant - ) - } - } - - @Check - fun variadicParametersMustHaveNoDefaultValue(smlParameter: SmlParameter) { - if (smlParameter.isVariadic && smlParameter.isOptional()) { - error( - "Variadic parameters must not have default values.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.VariadicParametersMustNotHaveDefaultValue - ) - } - } - - @Check - fun expertMustBeOptional(smlParameter: SmlParameter) { - if (smlParameter.isRequired() && smlParameter.isExpert()) { - smlParameter.annotationCallsOrEmpty(StdlibAnnotations.Expert).forEach { - error( - "An expert parameter must be optional.", - it, - null, - ErrorCode.MustBeConstant - ) - } - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/PlaceholderChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/PlaceholderChecker.kt deleted file mode 100644 index dd9395b64..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/PlaceholderChecker.kt +++ /dev/null @@ -1,47 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlBlock -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.staticAnalysis.assignedOrNull -import de.unibonn.simpleml.staticAnalysis.usesIn -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.WarningCode -import org.eclipse.xtext.validation.Check - -class PlaceholderChecker : AbstractSimpleMLChecker() { - - @Check - fun renamingOfDeclaration(smlPlaceholder: SmlPlaceholder) { - val assigned = smlPlaceholder.assignedOrNull() - if (assigned is SmlReference) { - val declaration = assigned.declaration - if (declaration is SmlClass || declaration is SmlEnum || declaration is SmlFunction || declaration is SmlParameter || declaration is SmlPlaceholder) - warning( - "This placeholder only provides another name for a declaration.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - WarningCode.PlaceholderIsRenamingOfDeclaration - ) - } - } - - @Check - fun unused(smlPlaceholder: SmlPlaceholder) { - val block = smlPlaceholder.closestAncestorOrNull() ?: return - val assignment = smlPlaceholder.closestAncestorOrNull() ?: return - if (assignment != block.statements.lastOrNull() && smlPlaceholder.usesIn(block).none()) { - warning( - "This placeholder is unused.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - WarningCode.UnusedPlaceholder - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ResultChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ResultChecker.kt deleted file mode 100644 index 56f8b8ffd..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/ResultChecker.kt +++ /dev/null @@ -1,21 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check - -class ResultChecker : AbstractSimpleMLChecker() { - - @Check - fun type(smlResult: SmlResult) { - if (smlResult.type == null) { - error( - "A result must have a type.", - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.ResultMustHaveType - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/StepChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/StepChecker.kt deleted file mode 100644 index a008b582a..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/StepChecker.kt +++ /dev/null @@ -1,82 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.emf.asResolvedOrNull -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.placeholdersOrEmpty -import de.unibonn.simpleml.emf.resultsOrEmpty -import de.unibonn.simpleml.emf.yieldsOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.staticAnalysis.linking.yieldsOrEmpty -import de.unibonn.simpleml.staticAnalysis.usesIn -import de.unibonn.simpleml.utils.duplicatesBy -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode -import de.unibonn.simpleml.validation.codes.WarningCode -import org.eclipse.xtext.validation.Check - -class StepChecker : AbstractSimpleMLChecker() { - - @Check - fun parameterIsUnused(smlStep: SmlStep) { - smlStep.parametersOrEmpty() - .filter { it.usesIn(smlStep).none() } - .forEach { - warning( - "This parameter is unused.", - it, - Literals.SML_ABSTRACT_DECLARATION__NAME, - WarningCode.UnusedParameter - ) - } - } - - @Check - fun uniqueNames(smlStep: SmlStep) { - val declarations = - smlStep.parametersOrEmpty() + smlStep.resultsOrEmpty() + smlStep.placeholdersOrEmpty() - declarations.reportDuplicateNames { - "A parameter, result or placeholder with name '${it.name}' exists already in this step." - } - } - - @Check - fun unnecessaryResultList(smlStep: SmlStep) { - if (smlStep.resultList != null && smlStep.resultsOrEmpty().isEmpty()) { - info( - "Unnecessary result list.", - Literals.SML_STEP__RESULT_LIST, - InfoCode.UnnecessaryResultList - ) - } - } - - @Check - fun unassignedResult(smlStep: SmlStep) { - smlStep.resultsOrEmpty().forEach { - if (it.yieldsOrEmpty().isEmpty()) { - error( - "No value is assigned to this result.", - it, - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.UnassignedResult - ) - } - } - } - - @Check - fun duplicateResultAssignment(smlStep: SmlStep) { - smlStep.yieldsOrEmpty() - .duplicatesBy { it.result.asResolvedOrNull() } - .forEach { - error( - "This result is assigned multiple times.", - it, - Literals.SML_YIELD__RESULT, - ErrorCode.DuplicateResultAssignment - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/TypeParameterChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/TypeParameterChecker.kt deleted file mode 100644 index 7f952abbd..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/TypeParameterChecker.kt +++ /dev/null @@ -1,25 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.constant.SmlKind -import de.unibonn.simpleml.constant.SmlVariance -import de.unibonn.simpleml.constant.kind -import de.unibonn.simpleml.constant.variance -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlTypeParameter -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check - -class TypeParameterChecker : AbstractSimpleMLChecker() { - - @Check - fun mustNotHaveVarianceAndKind(smlTypeParameter: SmlTypeParameter) { - if (smlTypeParameter.variance() != SmlVariance.Invariant && smlTypeParameter.kind() != SmlKind.NoKind) { - error( - "Can not use variance and kind together", - Literals.SML_ABSTRACT_DECLARATION__NAME, - ErrorCode.VarianceAndKind - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/WorkflowChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/WorkflowChecker.kt deleted file mode 100644 index d028e5d36..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/declarations/WorkflowChecker.kt +++ /dev/null @@ -1,34 +0,0 @@ -package de.unibonn.simpleml.validation.declarations - -import de.unibonn.simpleml.emf.placeholdersOrEmpty -import de.unibonn.simpleml.emf.statementsOrEmpty -import de.unibonn.simpleml.emf.yieldsOrEmpty -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check - -class WorkflowChecker : AbstractSimpleMLChecker() { - - @Check - fun noYield(smlWorkflow: SmlWorkflow) { - smlWorkflow.statementsOrEmpty() - .filterIsInstance() - .flatMap { it.yieldsOrEmpty() } - .forEach { - error( - "Yield must not be used in a workflow.", - it, - null, - ErrorCode.NO_YIELD_IN_WORKFLOW - ) - } - } - - @Check - fun uniqueNames(smlWorkflow: SmlWorkflow) { - smlWorkflow.placeholdersOrEmpty() - .reportDuplicateNames { "A declaration with name '${it.name}' exists already in this workflow." } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/ArgumentChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/ArgumentChecker.kt deleted file mode 100644 index da6857f17..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/ArgumentChecker.kt +++ /dev/null @@ -1,39 +0,0 @@ -package de.unibonn.simpleml.validation.expressions - -import de.unibonn.simpleml.emf.isNamed -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.staticAnalysis.linking.parameterOrNull -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.toConstantExpressionOrNull -import de.unibonn.simpleml.stdlibAccess.isConstant -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check -import org.eclipse.xtext.validation.CheckType - -class ArgumentChecker : AbstractSimpleMLChecker() { - - @Check(CheckType.NORMAL) - fun argumentMustBeConstant(smlArgument: SmlArgument) { - val parameterIsConstant = smlArgument.parameterOrNull()?.isConstant() ?: false - - if (parameterIsConstant && smlArgument.value?.toConstantExpressionOrNull() == null) { - error( - "Arguments assigned to constant parameters must be constant.", - Literals.SML_ARGUMENT__VALUE, - ErrorCode.MustBeConstant - ) - } - } - - @Check - fun variadicParameterMustNotBeAssignedByName(smlArgument: SmlArgument) { - if (smlArgument.isNamed() && (smlArgument.parameterOrNull()?.isVariadic == true)) { - error( - "A variadic parameter must not be assigned by name.", - Literals.SML_ARGUMENT__PARAMETER, - ErrorCode.VariadicParameterMustNotBeAssignedByName - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/CallChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/CallChecker.kt deleted file mode 100644 index c748371bf..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/CallChecker.kt +++ /dev/null @@ -1,153 +0,0 @@ -package de.unibonn.simpleml.validation.expressions - -import de.unibonn.simpleml.emf.argumentsOrEmpty -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.typeArgumentsOrEmpty -import de.unibonn.simpleml.emf.typeParametersOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlExpressionStatement -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.staticAnalysis.CallableResult -import de.unibonn.simpleml.staticAnalysis.callableOrNull -import de.unibonn.simpleml.staticAnalysis.isRecursive -import de.unibonn.simpleml.staticAnalysis.maybeCallable -import de.unibonn.simpleml.staticAnalysis.resultsOrNull -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode -import org.eclipse.xtext.validation.Check - -class CallChecker : AbstractSimpleMLChecker() { - - @Check - fun missingTypeArgumentList(smlCall: SmlCall) { - if (smlCall.typeArgumentList != null) { - return - } - - val typeParameters = when (val callable = smlCall.callableOrNull()) { - is SmlClass -> callable.typeParametersOrEmpty() - is SmlEnumVariant -> callable.typeParametersOrEmpty() - is SmlFunction -> callable.typeParametersOrEmpty() - else -> return - } - - if (typeParameters.isNotEmpty()) { - error( - "Missing type argument list.", - Literals.SML_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, - ErrorCode.MISSING_TYPE_ARGUMENT_LIST - ) - } - } - - @Check - fun context(smlCall: SmlCall) { - val results = smlCall.resultsOrNull() ?: return - val source = when (smlCall.receiver) { - is SmlMemberAccess -> smlCall.receiver - else -> smlCall - } - val feature = when (smlCall.receiver) { - is SmlMemberAccess -> Literals.SML_MEMBER_ACCESS__MEMBER - else -> Literals.SML_ABSTRACT_CHAINED_EXPRESSION__RECEIVER - } - - if (results.isEmpty() && !smlCall.hasValidContextForCallWithoutResults()) { - error( - "A call that produces no results is not allowed in this context.", - source, - feature, - ErrorCode.CONTEXT_OF_CALL_WITHOUT_RESULTS - ) - } else if (results.size > 1 && !smlCall.hasValidContextForCallWithMultipleResults()) { - error( - "A call that produces multiple results is not allowed in this context.", - source, - feature, - ErrorCode.CONTEXT_OF_CALL_WITH_MANY_RESULTS - ) - } - } - - private fun SmlCall.hasValidContextForCallWithoutResults(): Boolean { - val context = this.eContainer() - return context is SmlExpressionStatement - } - - private fun SmlCall.hasValidContextForCallWithMultipleResults(): Boolean { - val context = this.eContainer() - return context is SmlAssignment || context is SmlExpressionStatement || context is SmlMemberAccess - } - - @Check - fun recursion(smlCall: SmlCall) { - if (smlCall.isRecursive()) { - error( - "Recursive calls are not allowed.", - Literals.SML_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, - ErrorCode.NO_RECURSION - ) - } - } - - @Check - fun receiver(smlCall: SmlCall) { - when (val maybeCallable = smlCall.maybeCallable()) { - CallableResult.NotCallable -> { - error( - "This expression must not be called.", - Literals.SML_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, - ErrorCode.RECEIVER_MUST_BE_CALLABLE - ) - } - is CallableResult.Callable -> { - val callable = maybeCallable.callable - if (callable is SmlClass && callable.parameterList == null) { - error( - "Cannot create an instance of a class that has no constructor.", - Literals.SML_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, - ErrorCode.CALLED_CLASS_MUST_HAVE_CONSTRUCTOR - ) - } - } - else -> {} - } - } - - @Check - fun unnecessaryArgumentList(smlCall: SmlCall) { - - // Call has no argument list anyway - if (smlCall.argumentList == null) { - return - } - - // Call is used to pass type arguments or arguments - if (smlCall.typeArgumentsOrEmpty().isNotEmpty() || smlCall.argumentsOrEmpty().isNotEmpty()) { - return - } - - // Receiver is not callable or cannot be resolved - val callable = smlCall.callableOrNull() ?: return - - // Only calls to enum variants can sometimes be omitted without changing the meaning of the program - if (callable !is SmlEnumVariant) { - return - } - - // This enum variant does not need to be called - if (callable.typeParametersOrEmpty().isEmpty() && callable.parametersOrEmpty().isEmpty()) { - info( - "Unnecessary argument list.", - Literals.SML_ABSTRACT_CALL__ARGUMENT_LIST, - InfoCode.UnnecessaryArgumentList - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/InfixOperationChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/InfixOperationChecker.kt deleted file mode 100644 index da0e93955..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/InfixOperationChecker.kt +++ /dev/null @@ -1,77 +0,0 @@ -package de.unibonn.simpleml.validation.expressions - -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.By -import de.unibonn.simpleml.constant.SmlInfixOperationOperator.Elvis -import de.unibonn.simpleml.simpleML.SmlInfixOperation -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantFloat -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantInt -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.SmlConstantNull -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.toConstantExpressionOrNull -import de.unibonn.simpleml.staticAnalysis.typing.NamedType -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.stdlibAccess.StdlibClasses -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode -import org.eclipse.xtext.validation.Check - -class InfixOperationChecker : AbstractSimpleMLChecker() { - - @Check - fun dispatchCheckInfixOperation(smlInfixOperation: SmlInfixOperation) { - when (smlInfixOperation.operator) { - By.operator -> checkByOperator(smlInfixOperation) - Elvis.operator -> checkElvisOperator(smlInfixOperation) - } - } - - private fun checkByOperator(smlInfixOperation: SmlInfixOperation) { - val leftType = smlInfixOperation.leftOperand.type() - if (!(leftType is NamedType && leftType.qualifiedName in setOf(StdlibClasses.Float, StdlibClasses.Int))) { - return - } - - val rightValue = smlInfixOperation.rightOperand.toConstantExpressionOrNull() - if (rightValue in setOf(SmlConstantFloat(0.0), SmlConstantFloat(-0.0), SmlConstantInt(0))) { - error( - "Division by zero.", - null, - ErrorCode.DivisionByZero - ) - } - } - - private fun checkElvisOperator(smlInfixOperation: SmlInfixOperation) { - val leftType = smlInfixOperation.leftOperand.type() - if (!(leftType is NamedType && leftType.isNullable)) { - info( - "The left operand is never null so the elvis operator is unnecessary (keep left operand).", - null, - InfoCode.UnnecessaryElvisOperator - ) - return - } - - val leftValue = smlInfixOperation.leftOperand.toConstantExpressionOrNull() - val rightValue = smlInfixOperation.rightOperand.toConstantExpressionOrNull() - if (leftValue is SmlConstantNull && rightValue is SmlConstantNull) { - info( - "Both operands are always null so the elvis operator is unnecessary (replace with null).", - null, - InfoCode.UnnecessaryElvisOperator - ) - } else if (leftValue is SmlConstantNull) { - info( - "The left operand is always null so the elvis operator is unnecessary (keep right operand).", - null, - InfoCode.UnnecessaryElvisOperator - ) - } else if (rightValue is SmlConstantNull) { - info( - "The right operand is always null so the elvis operator is unnecessary (keep left operand).", - null, - InfoCode.UnnecessaryElvisOperator - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/LambdaChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/LambdaChecker.kt deleted file mode 100644 index a82b08ea4..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/LambdaChecker.kt +++ /dev/null @@ -1,53 +0,0 @@ -package de.unibonn.simpleml.validation.expressions - -import de.unibonn.simpleml.emf.assigneesOrEmpty -import de.unibonn.simpleml.emf.blockLambdaResultsOrEmpty -import de.unibonn.simpleml.emf.closestAncestorOrNull -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.placeholdersOrEmpty -import de.unibonn.simpleml.simpleML.SmlAbstractLambda -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlBlockLambda -import de.unibonn.simpleml.simpleML.SmlParenthesizedExpression -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.staticAnalysis.linking.parameterOrNull -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check - -class LambdaChecker : AbstractSimpleMLChecker() { - - @Check - fun uniqueNames(smlBlockLambda: SmlBlockLambda) { - val declarations = - smlBlockLambda.parametersOrEmpty() + smlBlockLambda.placeholdersOrEmpty() + smlBlockLambda.blockLambdaResultsOrEmpty() - declarations.reportDuplicateNames { - "A parameter, result or placeholder with name '${it.name}' exists already in this lambda." - } - } - - @Check - fun context(smlLambda: SmlAbstractLambda) { - val context = smlLambda.closestAncestorOrNull { it !is SmlParenthesizedExpression } ?: return - - val contextIsValid = when (context) { - is SmlArgument -> { - when (val parameter = context.parameterOrNull()) { - null -> true // Resolution of parameter failed, so this already shows another error - else -> parameter.type != null - } - } - is SmlAssignment -> context.assigneesOrEmpty().firstOrNull() is SmlYield - else -> false - } - - if (!contextIsValid) { - error( - "A lambda must either be yielded in a step or assigned to a typed parameter.", - null, - ErrorCode.LambdaMustBeTypedArgumentOrYielded - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/MemberAccessChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/MemberAccessChecker.kt deleted file mode 100644 index 9d7586d76..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/MemberAccessChecker.kt +++ /dev/null @@ -1,67 +0,0 @@ -package de.unibonn.simpleml.validation.expressions - -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.typeParametersOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.staticAnalysis.typing.NamedType -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode -import org.eclipse.xtext.validation.Check - -class MemberAccessChecker : AbstractSimpleMLChecker() { - - @Check - fun mustBeCalled(smlMemberAccess: SmlMemberAccess) { - when (val member = smlMemberAccess.member.declaration) { - is SmlFunction -> { - if (!member.isStatic && smlMemberAccess.eContainer() !is SmlCall) { - error( - "An instance method must be called.", - Literals.SML_MEMBER_ACCESS__MEMBER, - ErrorCode.INSTANCE_METHOD_MUST_BE_CALLED - ) - } - } - is SmlEnumVariant -> { - val mustBeInstantiated = - member.typeParametersOrEmpty().isNotEmpty() || member.parametersOrEmpty().isNotEmpty() - if (mustBeInstantiated && smlMemberAccess.eContainer() !is SmlCall) { - error( - "An enum variant with parameters or type parameters must be instantiated.", - Literals.SML_MEMBER_ACCESS__MEMBER, - ErrorCode.ENUM_VARIANT_MUST_BE_INSTANTIATED - ) - } - } - } - } - - @Check - fun unnecessarySafeAccess(smlMemberAccess: SmlMemberAccess) { - val type = smlMemberAccess.receiver.type() - - if (smlMemberAccess.isNullSafe) { - if (!(type is NamedType && type.isNullable)) { - info( - "The receiver is never null so the safe access is unnecessary.", - null, - InfoCode.UnnecessarySafeAccess - ) - } - } else { - if (type is NamedType && type.isNullable) { - error( - "The receiver can be null so a safe access must be used.", - null, - ErrorCode.MissingSafeAccess - ) - } - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/ReferenceChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/ReferenceChecker.kt deleted file mode 100644 index 5b055f44a..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/ReferenceChecker.kt +++ /dev/null @@ -1,64 +0,0 @@ -package de.unibonn.simpleml.validation.expressions - -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAbstractChainedExpression -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.emf.ecore.EObject -import org.eclipse.xtext.validation.Check - -class ReferenceChecker : AbstractSimpleMLChecker() { - - @Check - fun mustNotStaticallyReferenceClass(smlReference: SmlReference) { - val declaration = smlReference.declaration - if (declaration !is SmlClass || declaration.parameterList != null) { - return - } - - // Reference must eventually be the receiver of a chained expression - var previous: EObject = smlReference - var current: EObject = previous.eContainer() - while (current is SmlAbstractChainedExpression) { - if (current.receiver == previous) { - return - } - previous = current - current = current.eContainer() - } - - error( - "Must not statically reference class.", - Literals.SML_REFERENCE__DECLARATION, - ErrorCode.MustNotStaticallyReferenceClass - ) - } - - @Check - fun mustNotStaticallyReferenceEnum(smlReference: SmlReference) { - if (smlReference.declaration !is SmlEnum) { - return - } - - // Reference must eventually be the receiver of a member access - var previous: EObject = smlReference - var current: EObject = previous.eContainer() - while (current is SmlMemberAccess) { - if (current.receiver == previous) { - return - } - previous = current - current = current.eContainer() - } - - error( - "Must not statically reference enum.", - Literals.SML_REFERENCE__DECLARATION, - ErrorCode.MustNotStaticallyReferenceEnum - ) - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/TemplateStringChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/TemplateStringChecker.kt deleted file mode 100644 index 872079601..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/expressions/TemplateStringChecker.kt +++ /dev/null @@ -1,26 +0,0 @@ -package de.unibonn.simpleml.validation.expressions - -import de.unibonn.simpleml.simpleML.SmlAbstractTemplateStringPart -import de.unibonn.simpleml.simpleML.SmlTemplateString -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check - -class TemplateStringChecker : AbstractSimpleMLChecker() { - - @Check - fun missingTemplateExpression(smlTemplateString: SmlTemplateString) { - smlTemplateString.expressions - .windowed(size = 2, step = 1) - .forEach { (first, second) -> - if (first is SmlAbstractTemplateStringPart && second is SmlAbstractTemplateStringPart) { - error( - "There must be a template expression between two template string parts.", - second, - null, - ErrorCode.MissingTemplateExpression - ) - } - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/AnnotationCallChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/AnnotationCallChecker.kt deleted file mode 100644 index 16d60fe15..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/AnnotationCallChecker.kt +++ /dev/null @@ -1,227 +0,0 @@ -package de.unibonn.simpleml.validation.other - -import de.unibonn.simpleml.emf.argumentsOrEmpty -import de.unibonn.simpleml.emf.isRequired -import de.unibonn.simpleml.emf.isResolved -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.targetOrNull -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAnnotation -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlCompilationUnit -import de.unibonn.simpleml.simpleML.SmlEnum -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlMemberAccess -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlResult -import de.unibonn.simpleml.simpleML.SmlStep -import de.unibonn.simpleml.simpleML.SmlTypeParameter -import de.unibonn.simpleml.simpleML.SmlWorkflow -import de.unibonn.simpleml.staticAnalysis.linking.parametersOrNull -import de.unibonn.simpleml.staticAnalysis.partialEvaluation.toConstantExpressionOrNull -import de.unibonn.simpleml.stdlibAccess.StdlibAnnotations -import de.unibonn.simpleml.stdlibAccess.StdlibEnums.AnnotationTarget -import de.unibonn.simpleml.stdlibAccess.isPure -import de.unibonn.simpleml.stdlibAccess.pythonModuleOrNull -import de.unibonn.simpleml.stdlibAccess.pythonNameOrNull -import de.unibonn.simpleml.stdlibAccess.validTargets -import de.unibonn.simpleml.utils.duplicatesBy -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode -import de.unibonn.simpleml.validation.codes.WarningCode -import org.eclipse.xtext.validation.Check -import org.eclipse.xtext.validation.CheckType - -class AnnotationCallChecker : AbstractSimpleMLChecker() { - - @Check - fun duplicateTargetInTargetAnnotation(smlAnnotationCall: SmlAnnotationCall) { - val annotation = smlAnnotationCall.annotation - if (!annotation.isResolved() || annotation.qualifiedNameOrNull() != StdlibAnnotations.Target) { - return - } - - smlAnnotationCall - .argumentsOrEmpty() - .map { it.value } - .filterIsInstance() - .duplicatesBy { it.member.declaration.qualifiedNameOrNull() } - .forEach { - warning( - "This annotation target is used multiple times.", - it, - null, - WarningCode.DuplicateTarget - ) - } - } - - @Check - fun missingArgumentList(smlAnnotationCall: SmlAnnotationCall) { - if (smlAnnotationCall.argumentList != null) { - return - } - - val annotation = smlAnnotationCall.annotation - if (!annotation.isResolved()) { - return - } - - val parameters = smlAnnotationCall.annotation.parametersOrEmpty() - if (parameters.any { it.isRequired() }) { - error( - "Missing argument list.", - Literals.SML_ANNOTATION_CALL__ANNOTATION, - ErrorCode.MISSING_ARGUMENT_LIST - ) - } - } - - @Check - fun target(smlAnnotationCall: SmlAnnotationCall) { - - // Get target of annotation use - val actualTarget = smlAnnotationCall.targetOrNull() ?: return - - // Get legal targets of used annotation - val annotation = smlAnnotationCall.annotation - if (!annotation.isResolved()) { - return - } - - val legalTargets = annotation.validTargets() - - // Compare actual and legal targets - val wrongTarget: String? = when { - actualTarget is SmlAnnotation && AnnotationTarget.Annotation !in legalTargets -> { - "an annotation" - } - actualTarget is SmlAttribute && AnnotationTarget.Attribute !in legalTargets -> { - "an attribute" - } - actualTarget is SmlClass && AnnotationTarget.Class !in legalTargets -> { - "a class" - } - actualTarget is SmlCompilationUnit && AnnotationTarget.CompilationUnit !in legalTargets -> { - "a compilation unit" - } - actualTarget is SmlEnum && AnnotationTarget.Enum !in legalTargets -> { - "an enum" - } - actualTarget is SmlEnumVariant && AnnotationTarget.EnumVariant !in legalTargets -> { - "an enum variant" - } - actualTarget is SmlFunction && AnnotationTarget.Function !in legalTargets -> { - "a function" - } - actualTarget is SmlParameter && AnnotationTarget.Parameter !in legalTargets -> { - "a parameter" - } - actualTarget is SmlResult && AnnotationTarget.Result !in legalTargets -> { - "a result" - } - actualTarget is SmlTypeParameter && AnnotationTarget.TypeParameter !in legalTargets -> { - "a type parameter" - } - actualTarget is SmlWorkflow && AnnotationTarget.Workflow !in legalTargets -> { - "a workflow" - } - actualTarget is SmlStep && AnnotationTarget.Step !in legalTargets -> { - "a step" - } - else -> null - } - - // Show error - if (wrongTarget != null) { - error( - "This annotation cannot be applied to $wrongTarget.", - null, - ErrorCode.WRONG_TARGET - ) - } - } - - @Check - fun unnecessaryArgumentList(smlAnnotationCall: SmlAnnotationCall) { - if (smlAnnotationCall.argumentList == null || smlAnnotationCall.argumentsOrEmpty().isNotEmpty()) { - return - } - - val parametersOrNull = smlAnnotationCall.argumentList.parametersOrNull() - if (parametersOrNull != null && parametersOrNull.none { it.isRequired() }) { - info( - "Unnecessary argument list.", - Literals.SML_ABSTRACT_CALL__ARGUMENT_LIST, - InfoCode.UnnecessaryArgumentList - ) - } - } - - @Check(CheckType.NORMAL) - fun argumentsMustBeConstant(smlAnnotationCall: SmlAnnotationCall) { - smlAnnotationCall.argumentsOrEmpty().forEach { - if (it.value?.toConstantExpressionOrNull() == null) { - error( - "Arguments in annotation call must be constant.", - it, - Literals.SML_ARGUMENT__VALUE, - ErrorCode.MustBeConstant - ) - } - } - } - - @Check - fun pureImpliesNoSideEffects(smlAnnotationCall: SmlAnnotationCall) { - if (smlAnnotationCall.annotation.qualifiedNameOrNull() != StdlibAnnotations.NoSideEffects) { - return - } - - val target = smlAnnotationCall.targetOrNull() ?: return - if (target is SmlFunction && target.isPure()) { - info( - "Purity implies absence of side effects (remove this annotation call).", - null, - InfoCode.PureImpliesNoSideEffects - ) - } - } - - @Check - fun identicalPythonModule(smlAnnotationCall: SmlAnnotationCall) { - if (smlAnnotationCall.annotation.qualifiedNameOrNull() != StdlibAnnotations.PythonModule) { - return - } - - val target = smlAnnotationCall.targetOrNull() as? SmlCompilationUnit ?: return - if (target.name == target.pythonModuleOrNull()) { - info( - "Python module is identical to Simple-ML package (can remove annotation call).", - null, - InfoCode.IdenticalPythonModule - ) - } - } - - @Check - fun identicalPythonName(smlAnnotationCall: SmlAnnotationCall) { - if (smlAnnotationCall.annotation.qualifiedNameOrNull() != StdlibAnnotations.PythonName) { - return - } - - val target = smlAnnotationCall.targetOrNull() ?: return - if (target.name == target.pythonNameOrNull()) { - info( - "Python name is identical to Simple-ML name (can remove annotation call).", - null, - InfoCode.IdenticalPythonName - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/DeprecationChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/DeprecationChecker.kt deleted file mode 100644 index 7acf9fafd..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/DeprecationChecker.kt +++ /dev/null @@ -1,98 +0,0 @@ -package de.unibonn.simpleml.validation.other - -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAbstractAssignee -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAnnotationCall -import de.unibonn.simpleml.simpleML.SmlArgument -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.simpleML.SmlParameter -import de.unibonn.simpleml.simpleML.SmlReference -import de.unibonn.simpleml.simpleML.SmlTypeArgument -import de.unibonn.simpleml.simpleML.SmlWildcard -import de.unibonn.simpleml.staticAnalysis.assignedOrNull -import de.unibonn.simpleml.staticAnalysis.linking.parameterOrNull -import de.unibonn.simpleml.staticAnalysis.linking.typeParameterOrNull -import de.unibonn.simpleml.stdlibAccess.isDeprecated -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.WarningCode -import org.eclipse.xtext.validation.Check - -class DeprecationChecker : AbstractSimpleMLChecker() { - - @Check - fun annotationUseReferenceDeprecatedAnnotation(smlAnnotationCall: SmlAnnotationCall) { - val annotation = smlAnnotationCall.annotation ?: return - if (annotation.isDeprecated()) { - warning( - "The used annotation is deprecated.", - Literals.SML_ANNOTATION_CALL__ANNOTATION, - WarningCode.ReferencedDeclarationIsDeprecated - ) - } - } - - @Check - fun assigneeAssignedToDeprecatedValue(smlAssignee: SmlAbstractAssignee) { - if (smlAssignee is SmlWildcard) { - return - } - - val assigned = smlAssignee.assignedOrNull() ?: return - if (assigned is SmlAbstractDeclaration && assigned.isDeprecated()) { - warning( - "The assigned declaration is deprecated.", - null, - WarningCode.AssignedDeclarationIsDeprecated - ) - } - } - - @Check - fun argumentReferencesDeprecatedParameter(smlArgument: SmlArgument) { - val parameter = smlArgument.parameterOrNull() ?: return - if (parameter.isDeprecated()) { - warning( - "The corresponding parameter is deprecated.", - null, - WarningCode.CorrespondingParameterIsDeprecated - ) - } - } - - @Check - fun namedTypeReferencesDeprecatedDeclaration(smlNamedType: SmlNamedType) { - val declaration = smlNamedType.declaration ?: return - if (declaration.isDeprecated()) { - warning( - "The referenced declaration is deprecated.", - Literals.SML_NAMED_TYPE__DECLARATION, - WarningCode.ReferencedDeclarationIsDeprecated - ) - } - } - - @Check - fun referenceReferencesDeprecatedDeclaration(smlReference: SmlReference) { - val declaration = smlReference.declaration ?: return - if (declaration !is SmlParameter && declaration.isDeprecated()) { - warning( - "The referenced declaration is deprecated.", - Literals.SML_REFERENCE__DECLARATION, - WarningCode.ReferencedDeclarationIsDeprecated - ) - } - } - - @Check - fun typeArgumentReferencesDeprecatedTypeParameter(smlTypeArgument: SmlTypeArgument) { - val typeParameter = smlTypeArgument.typeParameterOrNull() ?: return - if (typeParameter.isDeprecated()) { - warning( - "The corresponding type parameter is deprecated.", - null, - WarningCode.CorrespondingTypeParameterIsDeprecated - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/ProtocolChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/ProtocolChecker.kt deleted file mode 100644 index 4cf021786..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/other/ProtocolChecker.kt +++ /dev/null @@ -1,34 +0,0 @@ -package de.unibonn.simpleml.validation.other - -import de.unibonn.simpleml.simpleML.SmlAttribute -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlProtocolReference -import de.unibonn.simpleml.simpleML.SmlProtocolSubtermList -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check - -class ProtocolChecker : AbstractSimpleMLChecker() { - - @Check - fun mustOnlyReferToInstanceMembers(smlProtocolReference: SmlProtocolReference) { - val token = smlProtocolReference.token - val isStaticAttribute = token is SmlAttribute && token.isStatic - val isStaticFunction = token is SmlFunction && token.isStatic - - if (isStaticAttribute || isStaticFunction) { - error( - "Must only reference instance members.", - null, - ErrorCode.OnlyReferenceInstanceMembers - ) - } - } - - @Check - fun uniqueNames(smlProtocolSubtermList: SmlProtocolSubtermList) { - smlProtocolSubtermList.subterms.reportDuplicateNames { - "A subterm with name '${it.name}' exists already in this protocol." - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/statements/AssignmentChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/statements/AssignmentChecker.kt deleted file mode 100644 index 461c8ca6d..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/statements/AssignmentChecker.kt +++ /dev/null @@ -1,84 +0,0 @@ -package de.unibonn.simpleml.validation.statements - -import de.unibonn.simpleml.emf.assigneesOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlAbstractDeclaration -import de.unibonn.simpleml.simpleML.SmlAssignment -import de.unibonn.simpleml.simpleML.SmlBlockLambdaResult -import de.unibonn.simpleml.simpleML.SmlCall -import de.unibonn.simpleml.simpleML.SmlPlaceholder -import de.unibonn.simpleml.simpleML.SmlWildcard -import de.unibonn.simpleml.simpleML.SmlYield -import de.unibonn.simpleml.staticAnalysis.AssignedResult -import de.unibonn.simpleml.staticAnalysis.expressionHasNoSideEffects -import de.unibonn.simpleml.staticAnalysis.maybeAssigned -import de.unibonn.simpleml.staticAnalysis.resultsOrNull -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import de.unibonn.simpleml.validation.codes.InfoCode -import de.unibonn.simpleml.validation.codes.WarningCode -import org.eclipse.xtext.validation.Check - -class AssignmentChecker : AbstractSimpleMLChecker() { - - @Check - fun unnecessaryAssigneeList(smlAssignment: SmlAssignment) { - if (smlAssignment.assigneesOrEmpty().all { it is SmlWildcard }) { - info( - "This assignment can be converted to an expression statement.", - null, - InfoCode.UnnecessaryAssignment - ) - } - } - - @Check - fun assigneeWithoutValue(smlAssignment: SmlAssignment) { - smlAssignment.assigneesOrEmpty() - .filter { it.maybeAssigned() == AssignedResult.NotAssigned } - .forEach { - error( - "No value is assigned to this assignee.", - it, - null, - ErrorCode.ASSIGNEE_WITHOUT_VALUE - ) - } - } - - @Check - fun hasNoEffect(smlAssignment: SmlAssignment) { - if (smlAssignment.assigneesOrEmpty() - .any { it is SmlPlaceholder || it is SmlYield || it is SmlBlockLambdaResult } - ) { - return - } - - if (smlAssignment.expression.expressionHasNoSideEffects()) { - warning( - "This statement does nothing.", - null, - WarningCode.StatementDoesNothing - ) - } - } - - @Check - fun ignoredResultOfCall(smlAssignment: SmlAssignment) { - val expression = smlAssignment.expression - if (expression is SmlCall) { - val results = (expression.resultsOrNull() ?: listOf()) - val unassignedResults = results.drop(smlAssignment.assigneesOrEmpty().size) - - unassignedResults - .filterIsInstance() - .forEach { - warning( - "The result '${it.name}' is implicitly ignored.", - Literals.SML_ASSIGNMENT__ASSIGNEE_LIST, - WarningCode.ImplicitlyIgnoredResultOfCall - ) - } - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/statements/ExpressionsStatementChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/statements/ExpressionsStatementChecker.kt deleted file mode 100644 index 6a3b33ea7..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/statements/ExpressionsStatementChecker.kt +++ /dev/null @@ -1,21 +0,0 @@ -package de.unibonn.simpleml.validation.statements - -import de.unibonn.simpleml.simpleML.SmlExpressionStatement -import de.unibonn.simpleml.staticAnalysis.expressionHasNoSideEffects -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.WarningCode -import org.eclipse.xtext.validation.Check - -class ExpressionsStatementChecker : AbstractSimpleMLChecker() { - - @Check - fun hasNoEffect(smlExpressionStatement: SmlExpressionStatement) { - if (smlExpressionStatement.expression.expressionHasNoSideEffects()) { - warning( - "This statement does nothing.", - null, - WarningCode.StatementDoesNothing - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/IndexedAccessTypeChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/IndexedAccessTypeChecker.kt deleted file mode 100644 index 4c9ac7df2..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/IndexedAccessTypeChecker.kt +++ /dev/null @@ -1,53 +0,0 @@ -package de.unibonn.simpleml.validation.typeChecking - -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SimpleMLPackage -import de.unibonn.simpleml.simpleML.SmlIndexedAccess -import de.unibonn.simpleml.staticAnalysis.typing.ClassType -import de.unibonn.simpleml.staticAnalysis.typing.UnresolvedType -import de.unibonn.simpleml.staticAnalysis.typing.VariadicType -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.stdlibAccess.StdlibClasses -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check -import org.eclipse.xtext.validation.CheckType - -class IndexedAccessTypeChecker : AbstractSimpleMLChecker() { - - @Check(CheckType.NORMAL) - fun receiverMustBeVariadic(smlIndexedAccess: SmlIndexedAccess) { - val receiverType = smlIndexedAccess.receiver.type() - if (receiverType is UnresolvedType) { - return // Scoping error already shown - } - - if (receiverType !is VariadicType) { - error( - "The receiver of an indexed access must refer to a variadic parameter.", - SimpleMLPackage.Literals.SML_ABSTRACT_CHAINED_EXPRESSION__RECEIVER, - ErrorCode.WrongType - ) - } - } - - @Check - fun indexMustBeInt(smlIndexedAccess: SmlIndexedAccess) { - val indexType = smlIndexedAccess.index.type() - if (indexType is UnresolvedType) { - return - } - - val hasWrongType = indexType !is ClassType || - indexType.isNullable || - indexType.smlClass.qualifiedNameOrNull() != StdlibClasses.Int - - if (hasWrongType) { - error( - "The index of an indexed access must be an instance of the class 'Int'.", - SimpleMLPackage.Literals.SML_INDEXED_ACCESS__INDEX, - ErrorCode.WrongType - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/PrefixOperationTypeChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/PrefixOperationTypeChecker.kt deleted file mode 100644 index 5dcffe851..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/typeChecking/PrefixOperationTypeChecker.kt +++ /dev/null @@ -1,55 +0,0 @@ -package de.unibonn.simpleml.validation.typeChecking - -import de.unibonn.simpleml.constant.SmlPrefixOperationOperator -import de.unibonn.simpleml.constant.operator -import de.unibonn.simpleml.naming.qualifiedNameOrNull -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlPrefixOperation -import de.unibonn.simpleml.staticAnalysis.typing.ClassType -import de.unibonn.simpleml.staticAnalysis.typing.UnresolvedType -import de.unibonn.simpleml.staticAnalysis.typing.type -import de.unibonn.simpleml.stdlibAccess.StdlibClasses -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check -import org.eclipse.xtext.validation.CheckType - -class PrefixOperationTypeChecker : AbstractSimpleMLChecker() { - - @Check(CheckType.NORMAL) - fun operand(smlPrefixOperation: SmlPrefixOperation) { - val operandType = smlPrefixOperation.operand.type() - if (operandType is UnresolvedType) { - return // Scoping error already shown - } - - when (smlPrefixOperation.operator()) { - SmlPrefixOperationOperator.Not -> { - val hasWrongType = operandType !is ClassType || - operandType.isNullable || - operandType.smlClass.qualifiedNameOrNull() != StdlibClasses.Boolean - - if (hasWrongType) { - error( - "The operand of a logical negation must be an instance of the class 'Boolean'.", - Literals.SML_PREFIX_OPERATION__OPERAND, - ErrorCode.WrongType - ) - } - } - SmlPrefixOperationOperator.Minus -> { - val hasWrongType = operandType !is ClassType || - operandType.isNullable || - operandType.smlClass.qualifiedNameOrNull() !in setOf(StdlibClasses.Float, StdlibClasses.Int) - - if (hasWrongType) { - error( - "The operand of an arithmetic negation must be an instance of the class 'Float' or the class 'Int'.", - Literals.SML_PREFIX_OPERATION__OPERAND, - ErrorCode.WrongType - ) - } - } - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/CallableTypeChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/CallableTypeChecker.kt deleted file mode 100644 index 037804499..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/CallableTypeChecker.kt +++ /dev/null @@ -1,35 +0,0 @@ -package de.unibonn.simpleml.validation.types - -import de.unibonn.simpleml.emf.isOptional -import de.unibonn.simpleml.emf.parametersOrEmpty -import de.unibonn.simpleml.emf.resultsOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage.Literals -import de.unibonn.simpleml.simpleML.SmlCallableType -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check - -class CallableTypeChecker : AbstractSimpleMLChecker() { - - @Check - fun uniqueNames(smlCallableType: SmlCallableType) { - val declarations = smlCallableType.parametersOrEmpty() + smlCallableType.resultsOrEmpty() - declarations.reportDuplicateNames { - "A parameter or result with name '${it.name}' exists already in this callable type." - } - } - - @Check - fun noOptionalParameters(smlCallableType: SmlCallableType) { - smlCallableType.parametersOrEmpty().forEach { - if (it.isOptional()) { - error( - "Parameters in callable types must not be optional.", - it, - Literals.SML_PARAMETER__DEFAULT_VALUE, - ErrorCode.NoOptionalParametersInCallableType - ) - } - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/NamedTypeChecker.kt b/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/NamedTypeChecker.kt deleted file mode 100644 index 2736815b3..000000000 --- a/DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation/types/NamedTypeChecker.kt +++ /dev/null @@ -1,38 +0,0 @@ -package de.unibonn.simpleml.validation.types - -import de.unibonn.simpleml.emf.typeParametersOrEmpty -import de.unibonn.simpleml.simpleML.SimpleMLPackage -import de.unibonn.simpleml.simpleML.SmlClass -import de.unibonn.simpleml.simpleML.SmlEnumVariant -import de.unibonn.simpleml.simpleML.SmlFunction -import de.unibonn.simpleml.simpleML.SmlNamedType -import de.unibonn.simpleml.validation.AbstractSimpleMLChecker -import de.unibonn.simpleml.validation.codes.ErrorCode -import org.eclipse.xtext.validation.Check - -class NamedTypeChecker : AbstractSimpleMLChecker() { - - @Check - fun missingTypeArgumentList(smlNamedType: SmlNamedType) { - if (smlNamedType.typeArgumentList != null) { - return - } - - val declaration = smlNamedType.declaration - val typeParameters = when { - declaration.eIsProxy() -> return - declaration is SmlClass -> declaration.typeParametersOrEmpty() - declaration is SmlEnumVariant -> declaration.typeParametersOrEmpty() - declaration is SmlFunction -> declaration.typeParametersOrEmpty() - else -> return - } - - if (typeParameters.isNotEmpty()) { - error( - "Missing type argument list.", - SimpleMLPackage.Literals.SML_NAMED_TYPE__DECLARATION, - ErrorCode.MISSING_TYPE_ARGUMENT_LIST - ) - } - } -} diff --git a/DSL/de.unibonn.simpleml/src/test/resources/conversion/qualifiedNameValueConverter.smltest b/DSL/de.unibonn.simpleml/src/test/resources/conversion/qualifiedNameValueConverter.smltest deleted file mode 100644 index 18db65582..000000000 --- a/DSL/de.unibonn.simpleml/src/test/resources/conversion/qualifiedNameValueConverter.smltest +++ /dev/null @@ -1,3 +0,0 @@ -package simpleml.`package` - -import simpleml.`package`.* diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesAcrossFiles.smltest b/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesAcrossFiles.smltest deleted file mode 100644 index ba8becccd..000000000 --- a/DSL/de.unibonn.simpleml/src/test/resources/validation/compilationUnits/uniqueNamesAcrossFiles.smltest +++ /dev/null @@ -1,19 +0,0 @@ -package simpleml.lang - -// semantic_error "A declaration with qualified name 'simpleml.lang.Any' exists already." -annotation »Any« - -// semantic_error "A declaration with qualified name 'simpleml.lang.Any' exists already." -class »Any« - -// semantic_error "A declaration with qualified name 'simpleml.lang.Any' exists already." -enum »Any« - -// semantic_error "A declaration with qualified name 'simpleml.lang.Any' exists already." -fun »Any«() - -// semantic_error "A declaration with qualified name 'simpleml.lang.Any' exists already." -step »Any«() {} - -// semantic_error "A declaration with qualified name 'simpleml.lang.Any' exists already." -workflow »Any« {} diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/imports/unresolvedNamespace.smltest b/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/imports/unresolvedNamespace.smltest deleted file mode 100644 index 2de332ffe..000000000 --- a/DSL/de.unibonn.simpleml/src/test/resources/validation/declarations/imports/unresolvedNamespace.smltest +++ /dev/null @@ -1,15 +0,0 @@ -package tests.unresolvedNamespace - -// semantic_error "No declaration with qualified name 'simpleml.langs.Any' exists." -import »simpleml.langs.Any« -// no_semantic_error "No declaration with qualified name 'simpleml.lang.Any' exists." -import »simpleml.lang.Any« -// no_semantic_error "No declaration with qualified name 'tests.unresolvedNamespace.C' exists." -import »tests.unresolvedNamespace.C« - -// semantic_error "No package with qualified name 'simpleml.langs' exists." -import »simpleml.langs.*« -// no_semantic_error "No package with qualified name 'simpleml.model' exists." -import »simpleml.lang.*« - -class C diff --git a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python name.smltest b/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python name.smltest deleted file mode 100644 index d9212d195..000000000 --- a/DSL/de.unibonn.simpleml/src/test/resources/validation/other/annotationCalls/identical python name.smltest +++ /dev/null @@ -1,9 +0,0 @@ -package tests.validation.other.annotationCalls.identicalPythonName - -// semantic_info "Python name is identical to Simple-ML name (can remove annotation call)." -»@PythonName("TestClass1")« -class TestClass1 - -// no_semantic_info "Python name is identical to Simple-ML name (can remove annotation call)." -»@PythonName("Test_Class_2")« -class TestClass2 diff --git a/DSL/settings.gradle.kts b/DSL/settings.gradle.kts index a829b0c82..aeb5a86fe 100644 --- a/DSL/settings.gradle.kts +++ b/DSL/settings.gradle.kts @@ -1,7 +1,7 @@ -rootProject.name = "Simple-ML.DSL" +rootProject.name = "Safe-DS.DSL" include( - "de.unibonn.simpleml", - "de.unibonn.simpleml.ide", - "de.unibonn.simpleml.vscode" + "com.larsreimann.safeds", + "com.larsreimann.safeds.ide", + "com.larsreimann.safeds.vscode" ) diff --git a/docs/DSL/development/how-to-add-a-new-language-concept.md b/docs/DSL/development/how-to-add-a-new-language-concept.md index 30e647896..ebe9fcfb5 100644 --- a/docs/DSL/development/how-to-add-a-new-language-concept.md +++ b/docs/DSL/development/how-to-add-a-new-language-concept.md @@ -1,15 +1,15 @@ # How to add a new language concept 1. Create new classes in the EMF model (_abstract syntax_): - 1. [Update the Ecore file][SimpleML.ecore]. Ensure that `SmlAbstractObject` is either a direct of transitive supertype. - 1. [Update the Genmodel file][SimpleML.genmodel]. + 1. [Update the Ecore file][SafeDS.ecore]. Ensure that `SmlAbstractObject` is either a direct of transitive supertype. + 1. [Update the Genmodel file][SafeDS.genmodel]. 1. Update the grammar (_concrete syntax_). 1. Create [grammar tests][grammar-tests]: 1. Positive tests (with comment `// no_syntax_error`) 1. Negative tests (with comment `// syntax_error`) 1. Run the tests (`./gradlew test`). There should be failures. - 1. Update the [Xtext grammar file][SimpleML.xtext]. + 1. Update the [Xtext grammar file][SafeDS.xtext]. 1. Run the tests again (`./gradlew test`). Tests should now pass. 1. Update the [constants][constants] if the concrete syntax of your concept has terminals that need to be accessed programmatically (e.g. operators or modifiers). @@ -56,42 +56,42 @@ -[SimpleML.ecore]: ../../../DSL/de.unibonn.simpleml/model/SimpleML.ecore +[SafeDS.ecore]: ../../../DSL/com.larsreimann.safeds/model/SafeDS.ecore -[SimpleML.genmodel]: ../../../DSL/de.unibonn.simpleml/model/SimpleML.genmodel +[SafeDS.genmodel]: ../../../DSL/com.larsreimann.safeds/model/SafeDS.genmodel -[grammar-tests]: ../../../DSL/de.unibonn.simpleml/src/test/resources/grammar +[grammar-tests]: ../../../DSL/com.larsreimann.safeds/src/test/resources/grammar -[SimpleML.xtext]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/SimpleML.xtext +[SafeDS.xtext]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/SafeDS.xtext -[converter-tests]: ../../../DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/conversion +[converter-tests]: ../../../DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/conversion -[converters]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/conversion +[converters]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/conversion -[scoping-tests]: ../../../DSL/de.unibonn.simpleml/src/test/kotlin/de/unibonn/simpleml/scoping/ScopingTest.kt +[scoping-tests]: ../../../DSL/com.larsreimann.safeds/src/test/kotlin/com/larsreimann/safeds/scoping/ScopingTest.kt -[local-scope-provider]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLScopeProvider.kt +[local-scope-provider]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSScopeProvider.kt -[resource-description-strategy]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/scoping/SimpleMLResourceDescriptionStrategy.kt +[resource-description-strategy]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/scoping/SafeDSResourceDescriptionStrategy.kt -[static-analysis]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/staticAnalysis +[static-analysis]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/staticAnalysis -[validation-tests]: ../../../DSL/de.unibonn.simpleml/src/test/resources/validation +[validation-tests]: ../../../DSL/com.larsreimann.safeds/src/test/resources/validation -[validators]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/validation +[validators]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/validation -[constants]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/constant +[constants]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/constant -[creators]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/Creators.kt +[creators]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/Creators.kt -[shortcuts]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/emf/SimpleShortcuts.kt +[shortcuts]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/emf/SimpleShortcuts.kt -[generator-tests]: ../../../DSL/de.unibonn.simpleml/src/test/resources/generator +[generator-tests]: ../../../DSL/com.larsreimann.safeds/src/test/resources/generator -[generator]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/generator/SimpleMLGenerator.kt +[generator]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/generator/SafeDSGenerator.kt -[formatting-tests]: ../../../DSL/de.unibonn.simpleml/src/test/resources/formatting +[formatting-tests]: ../../../DSL/com.larsreimann.safeds/src/test/resources/formatting -[formatting]: ../../../DSL/de.unibonn.simpleml/src/main/kotlin/de/unibonn/simpleml/formatting2/SimpleMLFormatter.kt +[formatting]: ../../../DSL/com.larsreimann.safeds/src/main/kotlin/com/larsreimann/safeds/formatting2/SafeDSFormatter.kt [tutorial]: ../tutorial/README.md diff --git a/docs/DSL/tutorial/README.md b/docs/DSL/tutorial/README.md index 65baff54a..df4947a93 100644 --- a/docs/DSL/tutorial/README.md +++ b/docs/DSL/tutorial/README.md @@ -1,10 +1,10 @@ -# Simple-ML DSL Tutorial +# Safe-DS DSL Tutorial -The Simple-ML DSL is split into two main parts: +The Safe-DS DSL is split into two main parts: -* The _[workflow language][workflow-language]_ is used to solve specific Machine Learning problems. Unless you want to add functionality to Simple-ML, this sublanguage is all you need to learn. To use the workflow language, create a file with the extension `.smlflow`. -* The _[stub language][stub-language]_ is used to integrate external code written in Python into Simple-ML, so it can be used in the [workflow language][workflow-language]. The main purpose of this sublanguage is to define the [Simple-ML Standard Library (stdlib)][stdlib]. To use the stub language, create a file with the extension `.smlstub`. +* The _[workflow language][workflow-language]_ is used to solve specific Machine Learning problems. Unless you want to add functionality to Safe-DS, this sublanguage is all you need to learn. To use the workflow language, create a file with the extension `.sdsflow`. +* The _[stub language][stub-language]_ is used to integrate external code written in Python into Safe-DS, so it can be used in the [workflow language][workflow-language]. The main purpose of this sublanguage is to define the [Safe-DS Standard Library (stdlib)][stdlib]. To use the stub language, create a file with the extension `.sdsstub`. [workflow-language]: ./workflow-language/README.md [stub-language]: ./stub-language/README.md -[stdlib]: ../../../DSL/de.unibonn.simpleml/src/main/resources/stdlib +[stdlib]: ../../../DSL/com.larsreimann.safeds/src/main/resources/stdlib diff --git a/docs/DSL/tutorial/common/README.md b/docs/DSL/tutorial/common/README.md index cd397f179..dc902f44d 100644 --- a/docs/DSL/tutorial/common/README.md +++ b/docs/DSL/tutorial/common/README.md @@ -1,6 +1,6 @@ # Common Parts of Workflow Language and Stub Language -Several parts of the Simple-ML DSL are shared between the [workflow lanugage][workflow-language] and the [stub language][stub-language]. Here is the list: +Several parts of the Safe-DS DSL are shared between the [workflow lanugage][workflow-language] and the [stub language][stub-language]. Here is the list: * [Packages][packages] help avoid conflicts that could arise if two declarations have the same name. * [Imports][imports] make declarations in other packages accessible. diff --git a/docs/DSL/tutorial/common/comments.md b/docs/DSL/tutorial/common/comments.md index 94f89ba4c..5bcaf8e9f 100644 --- a/docs/DSL/tutorial/common/comments.md +++ b/docs/DSL/tutorial/common/comments.md @@ -2,7 +2,7 @@ Comments are mostly used to add explanations to the code for future readers - which can be yourself. They can also be used to "comment out" code that you want to keep but that should not be run right now, since comments are ignored by the compiler. -Simple-ML has two types of comments, namely _line comments_, which end at a linebreak, and _block comments_, which can cover multiple lines. +Safe-DS has two types of comments, namely _line comments_, which end at a linebreak, and _block comments_, which can cover multiple lines. ## Line Comments diff --git a/docs/DSL/tutorial/common/imports.md b/docs/DSL/tutorial/common/imports.md index 1bdac9897..a9390d23c 100644 --- a/docs/DSL/tutorial/common/imports.md +++ b/docs/DSL/tutorial/common/imports.md @@ -1,20 +1,20 @@ # Imports -By default, only declarations in the same package as the current file or in the `simpleml.lang` [package][packages] are accessible. All other declarations must be imported first. +By default, only declarations in the same package as the current file or in the `safeds.lang` [package][packages] are accessible. All other declarations must be imported first. -Simple-ML has two kinds of imports, namely a _qualified import_, which imports a single declaration, and a _wildcard import_, which imports everything in a [package][packages]. +Safe-DS has two kinds of imports, namely a _qualified import_, which imports a single declaration, and a _wildcard import_, which imports everything in a [package][packages]. ## Qualified Imports -A _qualified import_ makes a single declaration available. Here is an example that imports the [class][classes] `DecisionTree` in the [package][packages] `simpleml.model.regression`: +A _qualified import_ makes a single declaration available. Here is an example that imports the [class][classes] `DecisionTree` in the [package][packages] `safeds.model.regression`: ``` -import simpleml.model.regression.DecisionTree +import safeds.model.regression.DecisionTree ``` The syntax consists of the following parts: * The keyword `import` -* The _qualified name_ of the declaration to import (here `simpleml.model.regression.DecisionTree`). The qualified name can be obtained by concatenating the name of the [package][packages] that contains the declaration (i.e. `simpleml.model.regression`) with the name of the declaration (i.e. `DecisionTree`). The two parts are separated by a dot. +* The _qualified name_ of the declaration to import (here `safeds.model.regression.DecisionTree`). The qualified name can be obtained by concatenating the name of the [package][packages] that contains the declaration (i.e. `safeds.model.regression`) with the name of the declaration (i.e. `DecisionTree`). The two parts are separated by a dot. Once the declaration is imported, we can refer to it by its _simple name_. This is the last segment of the qualified name, which is the name of the declaration. Here is, for example, a [call][calls] to the constructor of the `DecisionTree` class: @@ -27,12 +27,12 @@ DecisionTree() Sometimes the name of the imported declaration can conflict with other declarations that are imported or that are contained in the importing file. To counter this, declarations can be imported under an alias: ``` -import simpleml.model.regression.DecisionTree as StdlibDecisionTree +import safeds.model.regression.DecisionTree as StdlibDecisionTree ``` Let us take apart the syntax: * The keyword `import`. -* The _qualified name_ of the declaration to import (here `simpleml.model.regression.DecisionTree`). The qualified name can be obtained by concatenating the name of the [package][packages] that contains the declaration (i.e. `simpleml.model.regression`) with the name of the declaration (i.e. `DecisionTree`). The two parts are separated by a dot. +* The _qualified name_ of the declaration to import (here `safeds.model.regression.DecisionTree`). The qualified name can be obtained by concatenating the name of the [package][packages] that contains the declaration (i.e. `safeds.model.regression`) with the name of the declaration (i.e. `DecisionTree`). The two parts are separated by a dot. * The keyword `as`. * The alias to use (here `StdlibDecisionTree`). This can be any combination of upper- and lowercase letters, underscores, and numbers, as long as it does not start with a number. @@ -46,15 +46,15 @@ StdlibDecisionTree() We can also import all declarations in a [package][packages] with a single import. While this saves some typing, it also increases the likelihood of name conflicts and can make it harder for readers of the code to determine where a declaration comes from. Therefore, this should be used with caution. -Nevertheless, let us look at an example, which imports all declarations from the [package][packages] `simpleml.model.regression`: +Nevertheless, let us look at an example, which imports all declarations from the [package][packages] `safeds.model.regression`: ``` -import simpleml.model.regression.* +import safeds.model.regression.* ``` Here is the breakdown of the syntax: * The keyword `import`. -* The name of the [package][packages] to import (here `simpleml.model.regression`). +* The name of the [package][packages] to import (here `safeds.model.regression`). * A dot. * A star. @@ -66,7 +66,7 @@ DecisionTree() [Aliases](#qualified-imports-with-alias) cannot be used together with wildcard imports. -Note that declarations in subpackages, i. e. packages that have a different name but the same prefix as the imported one, are **not** imported. Therefore, if we would only `import simpleml.model`, we could no longer access the [class][classes] `DecisionTree`. +Note that declarations in subpackages, i.e. packages that have a different name but the same prefix as the imported one, are **not** imported. Therefore, if we would only `import safeds.model`, we could no longer access the [class][classes] `DecisionTree`. diff --git a/docs/DSL/tutorial/common/packages.md b/docs/DSL/tutorial/common/packages.md index 7d90124cf..8b3bd10b1 100644 --- a/docs/DSL/tutorial/common/packages.md +++ b/docs/DSL/tutorial/common/packages.md @@ -18,50 +18,50 @@ Continue with the explanation of [imports][imports] to understand how to access **Note:** This section is only relevant if you are interested in the [stub language][stub-language]. -In order for code generation to work properly, the Simple-ML package of a Simple-ML declaration in the [stub language][stub-language] must correspond to a [Python module][python-modules] that exports its matching Python declaration. These [Python modules][python-modules] can either directly contain the implementation or globally import the declaration. The latter is possible since all declarations that are globally imported in a [Python module][python-modules] are also automatically exported again in Python. +In order for code generation to work properly, the Safe-DS package of a Safe-DS declaration in the [stub language][stub-language] must correspond to a [Python module][python-modules] that exports its matching Python declaration. These [Python modules][python-modules] can either directly contain the implementation or globally import the declaration. The latter is possible since all declarations that are globally imported in a [Python module][python-modules] are also automatically exported again in Python. ### File Contains Implementation The first option is to use the file that contains the actual implementation of the declaration. Let us start with the following Python code to explain this idea: ```py -# Python file "simpleml/model/regression/_decision_tree.py" +# Python file "safeds/model/regression/_decision_tree.py" class DecisionTree: def __init__(self): pass # Implementation omitted ``` -This file contains the actual implementation of the Python class `DecisionTree`. We now want to make this Python class available in Simple-ML, which requires the following Simple-ML stub file: +This file contains the actual implementation of the Python class `DecisionTree`. We now want to make this Python class available in Safe-DS, which requires the following Safe-DS stub file: ``` -// Simple-ML file "simpleml/model/regression/_decision_tree/DecisionTree.smlstub" +// Safe-DS file "safeds/model/regression/_decision_tree/DecisionTree.sdsstub" -package simpleml.model.regression._decision_tree +package safeds.model.regression._decision_tree class DecisionTree() ``` -Note that the Simple-ML package corresponds to the path to the Python file, where we replace file separators (here `/`) by dots and remove the file extension (here `.py`). Another way to think about this is to ask how a from-import of the Python declaration would look like in Python code that wants to use the Python declaration. In this case we would write +Note that the Safe-DS package corresponds to the path to the Python file, where we replace file separators (here `/`) by dots and remove the file extension (here `.py`). Another way to think about this is to ask how a from-import of the Python declaration would look like in Python code that wants to use the Python declaration. In this case we would write ```py # Python -from simpleml.model.regression._decision_tree import DecisionTree +from safeds.model.regression._decision_tree import DecisionTree ``` -The part between `from` and `import` is exactly what the Simple-ML package has to be. +The part between `from` and `import` is exactly what the Safe-DS package has to be. -The file path is irrelevant in Simple-ML. For the sake of code organization, however, we advise to use the segments of the package name to create a folder hierarchy and then create a Simple-ML stub file with some fitting name in there. +The file path is irrelevant in Safe-DS. For the sake of code organization, however, we advise to use the segments of the package name to create a folder hierarchy and then create a Safe-DS stub file with some fitting name in there. ### File Imports Declaration -The second option is to chose the Simple-ML package that corresponds to a [Python module][python-modules] that imports the declaration we are interested in. This is particularly useful if multiple [Python modules][python-modules] are bundled into a [Python package][python-packages]. In the `__init__.py` file we can then bundle the declarations from different [Python module][python-modules] together. +The second option is to chose the Safe-DS package that corresponds to a [Python module][python-modules] that imports the declaration we are interested in. This is particularly useful if multiple [Python modules][python-modules] are bundled into a [Python package][python-packages]. In the `__init__.py` file we can then bundle the declarations from different [Python module][python-modules] together. We will demonstrate this by extending the example we used above: ```py -# Python file "simpleml/model/regression/_decision_tree.py" +# Python file "safeds/model/regression/_decision_tree.py" class DecisionTree: def __init__(self): @@ -69,7 +69,7 @@ class DecisionTree: ``` ```py -# Python file "simpleml/model/regression/__init__.py +# Python file "safeds/model/regression/__init__.py from ._decision_tree import DecisionTree ``` @@ -79,15 +79,15 @@ The addition of the `__init__.py` file now allows us to import the Python class ```py # Python -from simpleml.model.regression import DecisionTree +from safeds.model.regression import DecisionTree ``` -Note the omission of the suffix `._decision_tree` after `simpleml.model.regression`. Likewise, we can now update the Simple-ML stub code. We again just take everything between `from` and `import` and use this as the Simple-ML package name: +Note the omission of the suffix `._decision_tree` after `safeds.model.regression`. Likewise, we can now update the Safe-DS stub code. We again just take everything between `from` and `import` and use this as the Safe-DS package name: ``` -// Simple-ML file "simpleml/model/regression/DecisionTree.smlstub" +// Safe-DS file "safeds/model/regression/DecisionTree.sdsstub" -package simpleml.model.regression +package safeds.model.regression class DecisionTree() ``` @@ -96,53 +96,53 @@ Generally, this method is preferable to our initial solution in the Section ["Fi ### `@PythonModule` Annotation -Choosing the Simple-ML package according to the rules described above is essential for code generation to work properly. However, we might sometimes get warnings related to the Simple-ML naming convention, which wants the segments of the Simple-ML package to be `lowerCamelCase`. We now have several options: -* If the declaration is not part of the Simple-ML standard library, we can ignore the warning. +Choosing the Safe-DS package according to the rules described above is essential for code generation to work properly. However, we might sometimes get warnings related to the Safe-DS naming convention, which wants the segments of the Safe-DS package to be `lowerCamelCase`. We now have several options: +* If the declaration is not part of the Safe-DS standard library, we can ignore the warning. * We can update the Python code. * We can use the `@PythonModule` annotation. The first two options are self-explanatory. Let us now look at the third one. We use our initial example from the Section ["File Contains Implementation"](#file-contains-implementation) again: ```py -# Python file "simpleml/model/regression/_decision_tree.py" +# Python file "safeds/model/regression/_decision_tree.py" class DecisionTree: def __init__(self): pass # Implementation omitted ``` -Our original solution leads to a warning because the Simple-ML package name contains the segment `_decision_tree`, which is not `lowerCamelCase` due to the underscores: +Our original solution leads to a warning because the Safe-DS package name contains the segment `_decision_tree`, which is not `lowerCamelCase` due to the underscores: ``` -// Simple-ML file "simpleml/model/regression/_decision_tree/DecisionTree.smlstub" +// Safe-DS file "safeds/model/regression/_decision_tree/DecisionTree.sdsstub" -package simpleml.model.regression._decision_tree +package safeds.model.regression._decision_tree class DecisionTree() ``` -By [calling][annotation-calls] the [annotation][annotations] `@PythonModule`, we can also specify the corresponding [Python module][python-modules], however. If this [annotation][annotations] is [called][annotation-calls], it takes precedence over the Simple-ML package name. This allows us to pick an arbitrary Simple-ML package that respects the Simple-ML naming convention. We can even group multiple [Python modules][python-modules] together in one Simple-ML package without relying on Python's `__init__.py` files: +By [calling][annotation-calls] the [annotation][annotations] `@PythonModule`, we can also specify the corresponding [Python module][python-modules], however. If this [annotation][annotations] is [called][annotation-calls], it takes precedence over the Safe-DS package name. This allows us to pick an arbitrary Safe-DS package that respects the Safe-DS naming convention. We can even group multiple [Python modules][python-modules] together in one Safe-DS package without relying on Python's `__init__.py` files: ``` -// Simple-ML file "simpleml/model/regression/DecisionTree.smlstub" +// Safe-DS file "safeds/model/regression/DecisionTree.sdsstub" -@PythonModule("simpleml.model.regression._decision_tree") +@PythonModule("safeds.model.regression._decision_tree") -package simpleml.model.regression +package safeds.model.regression class DecisionTree() ``` Here is a breakdown of this: -* We [call][annotation-calls] the `@PythonModule` [annotation][annotations] before we declare the Simple-ML package. The [Python module][python-modules] that exports the Python declarations that correspond to the Simple-ML declarations in this stub file is passed as a [string literal][string-literals] (here `simpleml.model.regression._decision_tree`). This is used only for code generation and does not affect users of Simple-ML. -* We specify the Simple-ML package as usual. This must be used when we [import][imports] the declaration in another Simple-ML file: +* We [call][annotation-calls] the `@PythonModule` [annotation][annotations] before we declare the Safe-DS package. The [Python module][python-modules] that exports the Python declarations that correspond to the Safe-DS declarations in this stub file is passed as a [string literal][string-literals] (here `safeds.model.regression._decision_tree`). This is used only for code generation and does not affect users of Safe-DS. +* We specify the Safe-DS package as usual. This must be used when we [import][imports] the declaration in another Safe-DS file: ``` - // Simple-ML + // Safe-DS - import simpleml.model.regression.DecisionTree + import safeds.model.regression.DecisionTree ``` -It is important to note that the `@PythonModule` annotation only affects the one Simple-ML file that contains it rather than the entire Simple-ML package. This allows different Simple-ML files in the same package to point to different [Python modules][python-modules]. +It is important to note that the `@PythonModule` annotation only affects the one Safe-DS file that contains it rather than the entire Safe-DS package. This allows different Safe-DS files in the same package to point to different [Python modules][python-modules]. [stub-language]: ../stub-language/README.md [annotations]: ../stub-language/annotations.md diff --git a/docs/DSL/tutorial/common/parameters.md b/docs/DSL/tutorial/common/parameters.md index c15df7a7f..ff322a08d 100644 --- a/docs/DSL/tutorial/common/parameters.md +++ b/docs/DSL/tutorial/common/parameters.md @@ -74,7 +74,7 @@ Several restrictions apply to the order of parameters and to combinations of the **Note:** This section is only relevant if you are interested in the [stub language][stub-language]. -Parameters must be ordered the same way in Python as they are in Simple-ML. Moreover, for each parameter the following elements must match: +Parameters must be ordered the same way in Python as they are in Safe-DS. Moreover, for each parameter the following elements must match: * Name * Type * Kind (required vs. optional vs. variadic) @@ -84,7 +84,7 @@ Let's look at these elements in turn. ### Matching Name -By default, parameter names in Simple-ML must be identical to their names in Python. If this is not desired, for example due to clashing name conventions in Simple-ML and Python, the `@PythonName` annotation can be used to link a Simple-ML parameter to a Python parameter with a different name. Here is an example: +By default, parameter names in Safe-DS must be identical to their names in Python. If this is not desired, for example due to clashing name conventions in Safe-DS and Python, the `@PythonName` annotation can be used to link a Safe-DS parameter to a Python parameter with a different name. Here is an example: ```py # Python code @@ -94,7 +94,7 @@ def accuracy(x_pred: Dataset, x_test: Dataset) -> float: ``` ```txt -// Simple-ML code +// Safe-DS code fun accuracy( @PythonName("x_pred") xPred: Dataset, @@ -102,18 +102,18 @@ fun accuracy( ) -> accuracy: Float ``` -In this case, the Simple-ML parameters `xPred` and `xTest` refer to the Python parameters `x_pred` and `x_test` respectively. +In this case, the Safe-DS parameters `xPred` and `xTest` refer to the Python parameters `x_pred` and `x_test` respectively. ### Matching Type -The Simple-ML type of a parameter should capture the legal values of this parameter accurately. Ideally, the Python parameter should also have a matching [type hint][types-python]. +The Safe-DS type of a parameter should capture the legal values of this parameter accurately. Ideally, the Python parameter should also have a matching [type hint][types-python]. ### Matching Kind -Parameters kinds must match on the Simple-ML and Python sides as well. Concretely, this means: -* All required parameters in Simple-ML must be required in Python. -* All optional parameters in Simple-ML must be optional in Python. -* All variadic parameters in Simple-ML must be variadic in Python (`*args`). +Parameters kinds must match on the Safe-DS and Python sides as well. Concretely, this means: +* All required parameters in Safe-DS must be required in Python. +* All optional parameters in Safe-DS must be optional in Python. +* All variadic parameters in Safe-DS must be variadic in Python (`*args`). Moreover, it must be possible to pass * required parameters by position, @@ -122,7 +122,7 @@ Moreover, it must be possible to pass These rules allow us to restrict required parameters to [positional-only][python-positional-only] or optional parameters to [keyword-only][python-keyword-only]. We can also keep both unrestricted. -The following three examples show valid pairs of Python and Simple-ML programs. +The following three examples show valid pairs of Python and Safe-DS programs. #### Required Parameter @@ -134,7 +134,7 @@ def required(a: int): ``` ```txt -// Simple-ML code +// Safe-DS code fun required(a: Int) ``` @@ -149,7 +149,7 @@ def optional(a: int = 1): ``` ```txt -// Simple-ML code +// Safe-DS code fun optional(a: Int = 1) ``` @@ -164,16 +164,16 @@ def variadic(*a: int): ``` ```txt -// Simple-ML code +// Safe-DS code fun variadic(vararg a: Int) ``` ### Matching Default Value -Most commonly, default values in Python are literals, since default values are only evaluated once in Python rather than every time the function is called. The following table shows how Simple-ML literals and Python literals correspond: +Most commonly, default values in Python are literals, since default values are only evaluated once in Python rather than every time the function is called. The following table shows how Safe-DS literals and Python literals correspond: -| Simple-ML Literal | Python Literal | +| Safe-DS Literal | Python Literal | |---------------------------------------|------------------------| | `1` ([int][int-literals]) | `1` | | `1.0` ([float][float-literals]) | `1.0` | @@ -194,4 +194,4 @@ Most commonly, default values in Python are literals, since default values are o [boolean-literals]: ../workflow-language/expressions.md#boolean-literals [null-literals]: ../workflow-language/expressions.md#null-literal [python-keyword-only]: https://peps.python.org/pep-3102/ -[python-positional-only]: https://peps.python.org/pep-0570/ \ No newline at end of file +[python-positional-only]: https://peps.python.org/pep-0570/ diff --git a/docs/DSL/tutorial/common/results.md b/docs/DSL/tutorial/common/results.md index 46e18416f..7339015f0 100644 --- a/docs/DSL/tutorial/common/results.md +++ b/docs/DSL/tutorial/common/results.md @@ -57,9 +57,9 @@ The notable exception are [callable types][callable-types], where the result lis **Note:** This section is only relevant if you are interested in the [stub language][stub-language]. -Results must be ordered the same way in Python as they are in Simple-ML. Moreover, the Simple-ML type of a result should capture the possible values of this result accurately. Ideally, the Python result should also have a matching [type hint][types-python]. +Results must be ordered the same way in Python as they are in Safe-DS. Moreover, the Safe-DS type of a result should capture the possible values of this result accurately. Ideally, the Python result should also have a matching [type hint][types-python]. -Since Python results do not have a name, the names of Simple-ML results can be arbitrary. Naturally, a name should be chosen that captures the purpose of the result. +Since Python results do not have a name, the names of Safe-DS results can be arbitrary. Naturally, a name should be chosen that captures the purpose of the result. [stub-language]: ../stub-language/README.md diff --git a/docs/DSL/tutorial/common/types.md b/docs/DSL/tutorial/common/types.md index 643a8333a..1b5c31f08 100644 --- a/docs/DSL/tutorial/common/types.md +++ b/docs/DSL/tutorial/common/types.md @@ -1,6 +1,6 @@ # Types -Types describe the values that a declaration can accept. Simple-ML has various categories of types, which are explained in this document. +Types describe the values that a declaration can accept. Safe-DS has various categories of types, which are explained in this document. ## Categories of Types @@ -350,7 +350,7 @@ To improve clarity, parts of a type or the entire type can be enclosed in parent **Note:** This section is only relevant if you are interested in the [stub language][stub-language]. -Optionally, [type hints][type-hints] can be used in Python to denote the type of a declaration. This is generally advisable, since IDEs can use this information to offer additional feature, like improved refactorings. Moreover, static type checker like [mypy][mypy] can detect misuse of an API without running the code. We will now briefly describe how to best use Python's [type hints][type-hints] and explain how they relate to Simple-ML types. +Optionally, [type hints][type-hints] can be used in Python to denote the type of a declaration. This is generally advisable, since IDEs can use this information to offer additional feature, like improved refactorings. Moreover, static type checker like [mypy][mypy] can detect misuse of an API without running the code. We will now briefly describe how to best use Python's [type hints][type-hints] and explain how they relate to Safe-DS types. First, to get [type hints][type-hints] in Python closer to the expected behavior, add the following import to your Python file: @@ -364,9 +364,9 @@ Also add the following import, which brings the declarations that are used by th from typing import Callable, Optional, Tuple, TypeVar, Union ``` -The following table shows how Simple-ML types can be written as Python [type hints][type-hints]: +The following table shows how Safe-DS types can be written as Python [type hints][type-hints]: -| Simple-ML Type | Python Type Hint | +| Safe-DS Type | Python Type Hint | |----------------------------------------|--------------------------------------------------------------------| | `Boolean` | `bool` | | `Float` | `float` | diff --git a/docs/DSL/tutorial/stub-language/README.md b/docs/DSL/tutorial/stub-language/README.md index feef403be..260cb673d 100644 --- a/docs/DSL/tutorial/stub-language/README.md +++ b/docs/DSL/tutorial/stub-language/README.md @@ -1,6 +1,6 @@ # Stub Language -The stub language is the part of the Simple-ML DSL that is used to integrate functions written in Python into Simple-ML. It describes which functionality that is implemented in Python should be publicly available and how it must be used. If do not want to make functionality that exists in Python accessible in Simple-ML, simply do not write stubs for them. The stub language has the following concepts: +The stub language is the part of the Safe-DS DSL that is used to integrate functions written in Python into Safe-DS. It describes which functionality that is implemented in Python should be publicly available and how it must be used. If do not want to make functionality that exists in Python accessible in Safe-DS, simply do not write stubs for them. The stub language has the following concepts: * [Packages][packages] help avoid conflicts that could arise if two declarations have the same name. * [Imports][imports] make declarations in other packages accessible. @@ -10,7 +10,7 @@ The stub language is the part of the Simple-ML DSL that is used to integrate fun * [Annotations][annotations] attach additional metainformation to declarations. * [Comments][comments] document the code. -Files that use the stub language must have the extension `.smlstub`. +Files that use the stub language must have the extension `.sdsstub`. [packages]: ../common/packages.md [imports]: ../common/imports.md diff --git a/docs/DSL/tutorial/stub-language/annotations.md b/docs/DSL/tutorial/stub-language/annotations.md index 62cb56da9..f3df3f9e9 100644 --- a/docs/DSL/tutorial/stub-language/annotations.md +++ b/docs/DSL/tutorial/stub-language/annotations.md @@ -1,6 +1,6 @@ # Annotations -Annotations attach additional metainformation to declarations. Annotations must first be [declared](#declaring-an-annotation), so Simple-ML knows the annotation exists and which inputs are expected. Afterwards, annotations can be [called](#calling-an-annotation), which is the step that truly attaches metainformation to declarations. +Annotations attach additional metainformation to declarations. Annotations must first be [declared](#declaring-an-annotation), so Safe-DS knows the annotation exists and which inputs are expected. Afterwards, annotations can be [called](#calling-an-annotation), which is the step that truly attaches metainformation to declarations. ## Declaring an Annotation @@ -52,7 +52,7 @@ To attach metainformation to a declaration, the annotation must be called on tha * [Type parameters][type-parameters] * [Workflows][workflows] -The valid targets of an annotation can be restricted with the [`Target`][simpleml-lang-target] annotation. By default all targets are allowed. Likewise, an annotation can only be called once on the same declaration by default, unless the annotation is marked as[Repeatable][simpleml-lang-repeatable]. +The valid targets of an annotation can be restricted with the [`Target`][safeds-lang-target] annotation. By default all targets are allowed. Likewise, an annotation can only be called once on the same declaration by default, unless the annotation is marked as[Repeatable][safeds-lang-repeatable]. Annotation calls are always located right in front of their target. Exception: In the case of compilations units they are located at the very top of the file. Here is an example that demonstrates how to call the annotation `OnlyForExperts` that we defined above on a [class][classes]: @@ -85,10 +85,10 @@ The same [restrictions to arguments][argument-restrictions] as for [calls][calls ## Built-in Annotations -The package `simpleml.lang` contains several annotations that are processed by Simple-ML. Refer to the [API documentation][simpleml-lang] for more details. Particularly important are the annotations +The package `safeds.lang` contains several annotations that are processed by Safe-DS. Refer to the [API documentation][safeds-lang] for more details. Particularly important are the annotations -* [`Target`][simpleml-lang-target], which can restrict the possible targets of an annotation, and -* [`Repeatable`][simpleml-lang-repeatable], which allows an annotation to be called multiple times on the same declaration. +* [`Target`][safeds-lang-target], which can restrict the possible targets of an annotation, and +* [`Repeatable`][safeds-lang-repeatable], which allows an annotation to be called multiple times on the same declaration. [parameters]: ../common/parameters.md [types]: ../common/types.md @@ -102,8 +102,8 @@ The package `simpleml.lang` contains several annotations that are processed by S [steps]: ../workflow-language/steps.md [type-parameters]: ./type-parameters.md [workflows]: ../workflow-language/workflows.md -[simpleml-lang]: ../../../Stdlib/API/simpleml_lang.md -[simpleml-lang-repeatable]: ../../../Stdlib/API/simpleml_lang.md#annotation-repeatable -[simpleml-lang-target]: ../../../Stdlib/API/simpleml_lang.md#annotation-target +[safeds-lang]: ../../../Stdlib/API/safeds_lang.md +[safeds-lang-repeatable]: ../../../Stdlib/API/safeds_lang.md#annotation-repeatable +[safeds-lang-target]: ../../../Stdlib/API/safeds_lang.md#annotation-target [calls]: ../workflow-language/expressions.md#calls [argument-restrictions]: ../workflow-language/expressions.md#restrictions-for-arguments diff --git a/docs/DSL/tutorial/stub-language/enumerations.md b/docs/DSL/tutorial/stub-language/enumerations.md index 57b4c4bcb..7ea38e133 100644 --- a/docs/DSL/tutorial/stub-language/enumerations.md +++ b/docs/DSL/tutorial/stub-language/enumerations.md @@ -1,6 +1,6 @@ # Enumerations -An enumeration is a datatype that can take a fixed, finite set of values. The [Ridge model of scikit-learn](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge) for instance allows the user to choose a solver by selecting one of the strings "auto", "svd", "cholesky", "lsqr", "sparse_cg", "sag", "saga". However, the string datatype does not prevent the user from passing another invalid string like "automatic", leading to unspecified behavior. To prevent this, in Simple-ML the solver is an enumeration. +An enumeration is a datatype that can take a fixed, finite set of values. The [Ridge model of scikit-learn](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge) for instance allows the user to choose a solver by selecting one of the strings "auto", "svd", "cholesky", "lsqr", "sparse_cg", "sag", "saga". However, the string datatype does not prevent the user from passing another invalid string like "automatic", leading to unspecified behavior. To prevent this, in Safe-DS the solver is an enumeration. ## Declaring an Enumeration @@ -9,7 +9,7 @@ The syntax to declare an enumeration is as follows: * The name of the enumeration. * A list of the _instances_, i. e. the valid values of the enumeration enclosed in curly braces and separated by commas. -Coming back to the ridge solver example from the introduction, we would implement this in Simple-ML as follows, so that only the seven specified values are valid instances of the datatype. +Coming back to the ridge solver example from the introduction, we would implement this in Safe-DS as follows, so that only the seven specified values are valid instances of the datatype. ``` enum RidgeSolver { diff --git a/docs/DSL/tutorial/workflow-language/README.md b/docs/DSL/tutorial/workflow-language/README.md index cba2f9292..ef40a6ea3 100644 --- a/docs/DSL/tutorial/workflow-language/README.md +++ b/docs/DSL/tutorial/workflow-language/README.md @@ -1,6 +1,6 @@ # Workflow Language -The workflow language is the part of the Simple-ML DSL that is designed to solve specific machine learning problems. It has the following concepts: +The workflow language is the part of the Safe-DS DSL that is designed to solve specific machine learning problems. It has the following concepts: * [Packages][packages] help avoid conflicts that could arise if two declarations have the same name. * [Imports][imports] make declarations in other packages accessible. @@ -10,7 +10,7 @@ The workflow language is the part of the Simple-ML DSL that is designed to solve * [Expressions][expressions] are computations that produce some value. * [Comments][comments] document the code. -Files that use the workflow language must have the extension `.smlflow`. +Files that use the workflow language must have the extension `.sdsflow`. [packages]: ../common/packages.md [imports]: ../common/imports.md diff --git a/docs/DSL/tutorial/workflow-language/expressions.md b/docs/DSL/tutorial/workflow-language/expressions.md index 5adb762bd..ca03d0c5c 100644 --- a/docs/DSL/tutorial/workflow-language/expressions.md +++ b/docs/DSL/tutorial/workflow-language/expressions.md @@ -1,6 +1,6 @@ # Expressions -Expressions are the parts of the [workflow language][workflow-language] that evaluate to some value. A multitude of different expression types known from other programming languages are supported by Simple-ML, from basic [literals](#literals) to [lambdas](#lambdas). +Expressions are the parts of the [workflow language][workflow-language] that evaluate to some value. A multitude of different expression types known from other programming languages are supported by Safe-DS, from basic [literals](#literals) to [lambdas](#lambdas). ## Literals @@ -14,7 +14,7 @@ Int literals denote integers. They use the expected syntax. For example, the int Float literals denote floating point numbers. There are two ways to specify them: * **Decimal form**: One half can be written as `0.5`. Note that neither the integer part nor the decimal part can be omitted, so `.5` and `0.` are syntax errors. -* **Scientific notation**: Writing very large or very small numbers in decimal notation can be cumbersome. In those cases, [scientific notation](https://en.wikipedia.org/wiki/Scientific_notation) is helpful. For example, one thousandth can be written in Simple-ML as `1.0e-3` or `1.0E-3`. You can read this as `1.0 × 10⁻³`. When scientific notation is used, it is allowed to omit the decimal part, so this can be shortened to `1e-3` or `1E-3`. +* **Scientific notation**: Writing very large or very small numbers in decimal notation can be cumbersome. In those cases, [scientific notation](https://en.wikipedia.org/wiki/Scientific_notation) is helpful. For example, one thousandth can be written in Safe-DS as `1.0e-3` or `1.0E-3`. You can read this as `1.0 × 10⁻³`. When scientific notation is used, it is allowed to omit the decimal part, so this can be shortened to `1e-3` or `1E-3`. ### String Literals @@ -45,7 +45,7 @@ In order to interpolate text with other computed values, use [template strings]( ### Boolean Literals -To work with truthiness, Simple-ML has the two boolean literals `false` and `true`. +To work with truthiness, Safe-DS has the two boolean literals `false` and `true`. ### `null` Literal @@ -53,7 +53,7 @@ To denote that a value is unknown or absent, use the literal `null`. ## Operations -Operations are special functions that can be applied to one or two expressions. Simple-ML has a fixed set of operations that cannot be extended. We distinguish between +Operations are special functions that can be applied to one or two expressions. Safe-DS has a fixed set of operations that cannot be extended. We distinguish between * prefix operations (general form ` `), and * infix operations (general form ` `). @@ -69,7 +69,7 @@ The usual arithmetic operations are also supported for integers, floats and comb * Multiplication: `1.1 * 3` (result is a float) * Division: `1.0 / 4.2` (result is a float) -Finally, two numbers can be compared, which results in a boolean. The integer `3` for example is less than the integer `5`. Simple-ML offers operators to do such checks for order: +Finally, two numbers can be compared, which results in a boolean. The integer `3` for example is less than the integer `5`. Safe-DS offers operators to do such checks for order: * Less than: `5 < 6` * Less than or equal: `1 <= 3` @@ -78,7 +78,7 @@ Finally, two numbers can be compared, which results in a boolean. The integer `3 ### Logical Operations -To work with logic, Simple-ML has the two boolean literals `false` and `true` as well as operations to work with them: +To work with logic, Safe-DS has the two boolean literals `false` and `true` as well as operations to work with them: * (Logical) **negation** (example `not a`): Output is `true` if and only if the operand is false: `not a` | false | true @@ -101,12 +101,12 @@ To work with logic, Simple-ML has the two boolean literals `false` and `true` as ### Equality Checks -There are two different types of equality in Simple-ML, _identity_ and _structural equality_. Identity checks if two objects are one and the same, whereas structural equality checks if two objects have the same structure and content. Using a real world example, two phones of the same type would be structurally equal but not identical. Both types of equality checks return a boolean literal `true` if the check was positive and `false` if the check was negative. The syntax for these operations is as follows: +There are two different types of equality in Safe-DS, _identity_ and _structural equality_. Identity checks if two objects are one and the same, whereas structural equality checks if two objects have the same structure and content. Using a real world example, two phones of the same type would be structurally equal but not identical. Both types of equality checks return a boolean literal `true` if the check was positive and `false` if the check was negative. The syntax for these operations is as follows: * Identity: `1 === 2` * Structural equality: `1 == 2` -Simple-ML also has shorthand versions for negated equality checks which should be used instead of an explicit logical negation with the `not` operator: +Safe-DS also has shorthand versions for negated equality checks which should be used instead of an explicit logical negation with the `not` operator: * Negated identity: `1 !== 2` * Negated structural equality: `1 != 2` @@ -222,9 +222,9 @@ Depending on the callee, a call can do different things. The following table lis | [Enum Variant][enum-variants] | Creates a new instance of the enum variant. Enum variants are always callable. The call evaluates to this new instance. | | [Global Function][global-functions] | Invokes the function and runs the associated Python code. The call evaluates to the result record of the function. | | [Method][methods] | Invokes the method and runs the associated Python code. The call evaluates to the result record of the method. | -|[Step][steps]|Invokes the step and runs the Simple-ML code in its body. The call evaluates to the result record of the step.|| -|[Block Lambda](#block-lambdas)|Invokes the lambda and runs the Simple-ML code in its body. The call evaluates to the result record of the lambda.|| -|[Expression Lambda](#expression-lambdas)|Invokes the lambda and runs the Simple-ML code in its body. The call evaluates to the result record of the lambda.|| +|[Step][steps]|Invokes the step and runs the Safe-DS code in its body. The call evaluates to the result record of the step.|| +|[Block Lambda](#block-lambdas)|Invokes the lambda and runs the Safe-DS code in its body. The call evaluates to the result record of the lambda.|| +|[Expression Lambda](#expression-lambdas)|Invokes the lambda and runs the Safe-DS code in its body. The call evaluates to the result record of the lambda.|| |Declaration with [Callable Type][callable-types]|Call whatever the value of the declaration is. #### Result Record @@ -260,7 +260,7 @@ To understand how we can access members of a [class][classes] we must first look ``` class DecisionTree() { static attr verboseTraining: Boolean - + attr maxDepth: Int } ``` @@ -483,7 +483,7 @@ The results of a block lambda are [declared in its body using assignments][assig ### Expression Lambdas -Often, the body of a [block lambda](#block-lambdas) only consists of yielding a single result, as is the case in the example above. The syntax of [block lambdas](#block-lambdas) is quite verbose for such a common use-case, which is why Simple-ML has _expression lambdas_ as a shorter but less flexible alternative. Using an expression lambda we can rewrite the example above as +Often, the body of a [block lambda](#block-lambdas) only consists of yielding a single result, as is the case in the example above. The syntax of [block lambdas](#block-lambdas) is quite verbose for such a common use-case, which is why Safe-DS has _expression lambdas_ as a shorter but less flexible alternative. Using an expression lambda we can rewrite the example above as ``` intListOf(1, 4, 11).filter( diff --git a/docs/DSL/tutorial/workflow-language/statements.md b/docs/DSL/tutorial/workflow-language/statements.md index 9f2ff3f9c..1c4829e51 100644 --- a/docs/DSL/tutorial/workflow-language/statements.md +++ b/docs/DSL/tutorial/workflow-language/statements.md @@ -1,6 +1,6 @@ # Statements -Statements are used in the [workflow language][workflow-language] to run a specific action. Simple-ML supports only two type of statements, namely +Statements are used in the [workflow language][workflow-language] to run a specific action. Safe-DS supports only two type of statements, namely * [expression statements](#expression-statements), which are used to evaluate an expression exactly once and discard any results, and * [assignments](#assignments), which also evaluate an expression exactly once, but can then [assign selected results to placeholders](#declaring-placeholders) or [assign them to own results](#yielding-results). @@ -8,7 +8,7 @@ Other types of statements such as * if-statements to conditionally execute code or * while-statements to repeatedly execute code -are not planned since we want to keep the language small and easy to learn. Moreover, we want to refrain from developing yet another general-purpose programming language. Instead, code that depends on such features can be implemented in Python, integrated into Simple-ML using the [stub language][stub-language], and called in a Simple-ML program using the provided statements. +are not planned since we want to keep the language small and easy to learn. Moreover, we want to refrain from developing yet another general-purpose programming language. Instead, code that depends on such features can be implemented in Python, integrated into Safe-DS using the [stub language][stub-language], and called in a Safe-DS program using the provided statements. ## Expression Statements diff --git a/docs/Stdlib/API/README.md b/docs/Stdlib/API/README.md index d9ee7a827..cb04d3faa 100644 --- a/docs/Stdlib/API/README.md +++ b/docs/Stdlib/API/README.md @@ -1,8 +1,8 @@ -# Simple-ML API Documentation +# Safe-DS API Documentation ## Packages -* [simpleml.lang](./simpleml_lang.md) +* [safeds.lang](./safeds_lang.md) ---------- diff --git a/docs/Stdlib/API/simpleml_lang.md b/docs/Stdlib/API/safeds_lang.md similarity index 99% rename from docs/Stdlib/API/simpleml_lang.md rename to docs/Stdlib/API/safeds_lang.md index 9f875e7d8..2563c24e4 100644 --- a/docs/Stdlib/API/simpleml_lang.md +++ b/docs/Stdlib/API/safeds_lang.md @@ -1,4 +1,4 @@ -# Package `simpleml.lang` +# Package `safeds.lang` ## Table of Contents diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 56f6956bc..342eebb50 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -1,8 +1,8 @@ { - "extends": "./DSL/de.unibonn.simpleml.vscode/tsconfig.json", + "extends": "./DSL/com.larsreimann.safeds.vscode/tsconfig.json", "compilerOptions": { "noEmit": true }, - "include": ["./.eslintrc.js", "./DSL/de.unibonn.simpleml.vscode/src/**/*"], + "include": ["./.eslintrc.js", "./DSL/com.larsreimann.safeds.vscode/src/**/*"], "exclude": [] }