From 4d61be352a31253b9adb5b1b0c6e9472bb90982b Mon Sep 17 00:00:00 2001 From: Imran Malic Settuba <46971368+i-walker@users.noreply.github.com> Date: Thu, 17 Mar 2022 20:44:22 +0100 Subject: [PATCH 01/12] reorg analysis out of plugins folder (#9) * reorg * reorg --- .../analysis/analysis/common/build.gradle.kts | 22 + .../analysis/common/gradle.properties | 6 + .../arrow/meta/continuations/ContSeq.kt | 290 +++ .../phases/analysis/solver/Constants.kt | 4 + .../analysis/solver/DeclarationUtils.kt | 95 + .../phases/analysis/solver/DescriptorUtils.kt | 222 ++ .../phases/analysis/solver/Primitive.kt | 192 ++ .../analysis/solver/ResolvedCallUtils.kt | 175 ++ .../solver/ast/context/ResolutionContext.kt | 27 + .../solver/ast/context/ResolvedCall.kt | 21 + .../ast/context/descriptors/AnalysisResult.kt | 7 + .../ast/context/descriptors/Annotated.kt | 25 + .../descriptors/AnnotationDescriptor.kt | 16 + .../ast/context/descriptors/Annotations.kt | 16 + .../context/descriptors/CallableDescriptor.kt | 13 + .../descriptors/CallableMemberDescriptor.kt | 12 + .../context/descriptors/ClassDescriptor.kt | 38 + .../descriptors/ClassifierDescriptor.kt | 8 + .../ClassifierDescriptorWithTypeParameters.kt | 8 + .../descriptors/ConstructorDescriptor.kt | 6 + .../descriptors/DeclarationDescriptor.kt | 12 + .../DeclarationDescriptorWithVisibility.kt | 5 + .../descriptors/DefaultValueArgument.kt | 7 + .../descriptors/ExpressionValueArgument.kt | 7 + .../context/descriptors/FieldDescriptor.kt | 5 + .../context/descriptors/FunctionDescriptor.kt | 25 + .../descriptors/LocalVariableDescriptor.kt | 3 + .../context/descriptors/MemberDescriptor.kt | 9 + .../ast/context/descriptors/MemberScope.kt | 23 + .../ast/context/descriptors/Modality.kt | 8 + .../context/descriptors/ModuleDescriptor.kt | 10 + .../solver/ast/context/descriptors/Named.kt | 7 + .../descriptors/PackageFragmentDescriptor.kt | 3 + .../descriptors/PackageViewDescriptor.kt | 8 + .../descriptors/ParameterDescriptor.kt | 3 + .../descriptors/PropertyAccessorDescriptor.kt | 5 + .../context/descriptors/PropertyDescriptor.kt | 8 + .../ReceiverParameterDescriptor.kt | 5 + .../ast/context/descriptors/ReceiverValue.kt | 8 + .../descriptors/ResolvedValueArgument.kt | 7 + .../descriptors/SimpleFunctionDescriptor.kt | 3 + .../TypeAliasConstructorDescriptor.kt | 6 + .../descriptors/TypeAliasDescriptor.kt | 14 + .../context/descriptors/TypeConstructor.kt | 11 + .../descriptors/TypeParameterDescriptor.kt | 13 + .../context/descriptors/ValueDescriptor.kt | 7 + .../descriptors/ValueParameterDescriptor.kt | 13 + .../descriptors/VariableAccessorDescriptor.kt | 5 + .../context/descriptors/VariableDescriptor.kt | 7 + .../VariableDescriptorWithAccessors.kt | 9 + .../ast/context/descriptors/Visibility.kt | 6 + .../solver/ast/context/elements/Annotated.kt | 6 + .../context/elements/AnnotatedExpression.kt | 5 + .../solver/ast/context/elements/Annotation.kt | 6 + .../ast/context/elements/AnnotationEntry.kt | 7 + .../elements/AnnotationUseSiteTarget.kt | 13 + .../context/elements/AnnotationsContainer.kt | 3 + .../context/elements/AnonymousInitializer.kt | 6 + .../context/elements/ArrayAccessExpression.kt | 6 + .../ast/context/elements/AssertExpression.kt | 13 + .../context/elements/AssignmentExpression.kt | 11 + .../ast/context/elements/BinaryExpression.kt | 11 + .../ast/context/elements/BlockExpression.kt | 7 + .../ast/context/elements/BreakExpression.kt | 3 + .../ast/context/elements/CallElement.kt | 8 + .../ast/context/elements/CallExpression.kt | 3 + .../context/elements/CallableDeclaration.kt | 8 + .../elements/CallableReferenceExpression.kt | 5 + .../ast/context/elements/CatchClause.kt | 7 + .../solver/ast/context/elements/Class.kt | 12 + .../solver/ast/context/elements/ClassBody.kt | 9 + .../ast/context/elements/ClassInitializer.kt | 3 + .../elements/ClassLiteralExpression.kt | 3 + .../ast/context/elements/ClassOrObject.kt | 8 + .../elements/CompilerMessageSourceLocation.kt | 10 + .../context/elements/ConstantExpression.kt | 3 + .../ast/context/elements/Constructor.kt | 5 + .../elements/ConstructorCalleeExpression.kt | 6 + .../elements/ConstructorDelegationCall.kt | 6 + ...onstructorDelegationReferenceExpression.kt | 5 + .../context/elements/ContinueExpression.kt | 3 + .../ast/context/elements/Declaration.kt | 6 + .../context/elements/DeclarationContainer.kt | 5 + .../context/elements/DeclarationWithBody.kt | 12 + .../elements/DeclarationWithInitializer.kt | 6 + .../elements/DelegatedSuperTypeEntry.kt | 5 + .../elements/DestructuringDeclaration.kt | 6 + .../elements/DestructuringDeclarationEntry.kt | 3 + .../ast/context/elements/DoWhileExpression.kt | 3 + .../elements/DotQualifiedExpression.kt | 3 + .../context/elements/DoubleColonExpression.kt | 7 + .../solver/ast/context/elements/Element.kt | 14 + .../solver/ast/context/elements/EnumEntry.kt | 5 + .../solver/ast/context/elements/Expression.kt | 9 + .../elements/ExpressionLambdaArgument.kt | 3 + .../ExpressionResolvedValueArgument.kt | 6 + .../elements/ExpressionValueArgumentName.kt | 3 + .../context/elements/ExpressionWithLabel.kt | 7 + .../ast/context/elements/FinallySection.kt | 5 + .../ast/context/elements/ForExpression.kt | 7 + .../solver/ast/context/elements/FqName.kt | 5 + .../solver/ast/context/elements/Function.kt | 5 + .../ast/context/elements/FunctionLiteral.kt | 6 + .../ast/context/elements/IfExpression.kt | 7 + .../ast/context/elements/InitializerList.kt | 5 + .../elements/InstanceExpressionWithLabel.kt | 5 + .../ast/context/elements/IsExpression.kt | 8 + .../elements/LabelReferenceExpression.kt | 3 + .../ast/context/elements/LabeledExpression.kt | 5 + .../ast/context/elements/LambdaArgument.kt | 5 + .../ast/context/elements/LambdaExpression.kt | 8 + .../ast/context/elements/LoopExpression.kt | 5 + .../ast/context/elements/ModifierList.kt | 6 + .../ast/context/elements/ModifierListOwner.kt | 5 + .../solver/ast/context/elements/Name.kt | 5 + .../elements/NameReferenceExpression.kt | 3 + .../solver/ast/context/elements/Named.kt | 5 + .../ast/context/elements/NamedDeclaration.kt | 6 + .../ast/context/elements/NamedFunction.kt | 3 + .../ast/context/elements/NullExpression.kt | 3 + .../ast/context/elements/ObjectDeclaration.kt | 6 + .../elements/ObjectLiteralExpression.kt | 5 + .../context/elements/OperationExpression.kt | 5 + .../elements/OperationReferenceExpression.kt | 5 + .../solver/ast/context/elements/Parameter.kt | 13 + .../ast/context/elements/ParameterList.kt | 6 + .../elements/ParenthesizedExpression.kt | 5 + .../ast/context/elements/PostfixExpression.kt | 5 + .../ast/context/elements/PrefixExpression.kt | 3 + .../context/elements/PrimaryConstructor.kt | 3 + .../ast/context/elements/ProjectionKind.kt | 8 + .../solver/ast/context/elements/Property.kt | 17 + .../ast/context/elements/PropertyAccessor.kt | 10 + .../ast/context/elements/PropertyDelegate.kt | 5 + .../ast/context/elements/PureClassOrObject.kt | 19 + .../ast/context/elements/PureElement.kt | 5 + .../context/elements/QualifiedExpression.kt | 6 + .../context/elements/ReferenceExpression.kt | 3 + .../ast/context/elements/ReturnExpression.kt | 6 + .../elements/SafeQualifiedExpression.kt | 3 + .../context/elements/SecondaryConstructor.kt | 5 + .../solver/ast/context/elements/SelfType.kt | 5 + .../context/elements/SimpleNameExpression.kt | 6 + .../elements/StringTemplateExpression.kt | 11 + .../ast/context/elements/SuperExpression.kt | 5 + .../context/elements/SuperTypeCallEntry.kt | 3 + .../ast/context/elements/SuperTypeEntry.kt | 3 + .../ast/context/elements/SuperTypeList.kt | 5 + .../context/elements/SuperTypeListEntry.kt | 5 + .../elements/SynchronizedExpression.kt | 6 + .../ast/context/elements/ThisExpression.kt | 3 + .../elements/ThreePieceForExpression.kt | 7 + .../ast/context/elements/ThrowExpression.kt | 5 + .../ast/context/elements/TryExpression.kt | 7 + .../solver/ast/context/elements/TypeAlias.kt | 6 + .../ast/context/elements/TypeArgumentList.kt | 5 + .../context/elements/TypeCastExpression.kt | 15 + .../ast/context/elements/TypeConstraint.kt | 6 + .../context/elements/TypeConstraintList.kt | 5 + .../ast/context/elements/TypeElement.kt | 5 + .../ast/context/elements/TypeParameter.kt | 8 + .../ast/context/elements/TypeParameterList.kt | 5 + .../elements/TypeParameterListOwner.kt | 8 + .../ast/context/elements/TypeProjection.kt | 6 + .../ast/context/elements/TypeReference.kt | 5 + .../ast/context/elements/UnaryExpression.kt | 6 + .../ast/context/elements/ValueArgument.kt | 7 + .../ast/context/elements/ValueArgumentList.kt | 5 + .../ast/context/elements/ValueArgumentName.kt | 6 + .../context/elements/VariableDeclaration.kt | 5 + .../ast/context/elements/WhenCondition.kt | 3 + .../context/elements/WhenConditionInRange.kt | 7 + .../elements/WhenConditionIsPattern.kt | 6 + .../elements/WhenConditionWithExpression.kt | 5 + .../solver/ast/context/elements/WhenEntry.kt | 7 + .../ast/context/elements/WhenExpression.kt | 8 + .../ast/context/elements/WhileExpression.kt | 3 + .../context/elements/WhileExpressionBase.kt | 5 + .../analysis/solver/ast/context/types/Type.kt | 40 + .../ast/context/types/TypeProjection.kt | 7 + .../solver/ast/context/types/Types.kt | 5 + .../solver/ast/context/types/Variance.kt | 7 + .../analysis/solver/check/Declarations.kt | 395 ++++ .../analysis/solver/check/EntryPoint.kt | 155 ++ .../analysis/solver/check/Expressions.kt | 1966 ++++++++++++++++ .../analysis/solver/check/Parameters.kt | 48 + .../analysis/solver/check/model/CheckData.kt | 35 + .../analysis/solver/check/model/Condition.kt | 56 + .../solver/check/model/ControlFlowFn.kt | 23 + .../solver/check/model/CurrentBranch.kt | 18 + .../solver/check/model/CurrentVarInfo.kt | 24 + .../analysis/solver/check/model/LoopPlace.kt | 6 + .../analysis/solver/check/model/Return.kt | 24 + .../solver/check/model/ReturnPoints.kt | 38 + .../analysis/solver/check/model/StateAfter.kt | 23 + .../analysis/solver/check/model/VarInfo.kt | 36 + .../solver/collect/ExpressionToFormula.kt | 234 ++ .../analysis/solver/collect/FindDescriptor.kt | 202 ++ .../solver/collect/FromAnnotations.kt | 147 ++ .../phases/analysis/solver/collect/FromDSL.kt | 287 +++ .../collect/model/DeclarationConstraints.kt | 10 + .../solver/collect/model/NamedConstraint.kt | 5 + .../phases/analysis/solver/errors/ErrorIds.kt | 262 +++ .../analysis/solver/errors/ErrorMessages.kt | 347 +++ .../solver/search/ConstraintSearch.kt | 260 +++ .../solver/state/SolverInteraction.kt | 272 +++ .../analysis/solver/state/SolverState.kt | 143 ++ .../plugins/analysis/sarif/ReportedError.kt | 12 + .../plugins/analysis/sarif/SarifReporter.kt | 121 + .../meta/plugins/analysis/smt/Booleans.kt | 106 + .../plugins/analysis/smt/FormulaExtensions.kt | 161 ++ .../arrow/meta/plugins/analysis/smt/Ints.kt | 77 + .../meta/plugins/analysis/smt/Rationals.kt | 81 + .../arrow/meta/plugins/analysis/smt/Solver.kt | 186 ++ .../analysis/smt/utils/FieldProvider.kt | 74 + .../analysis/smt/utils/FormulaToKotlin.kt | 163 ++ .../analysis/smt/utils/NameProvider.kt | 29 + .../meta/plugins/analysis/types/Literals.kt | 24 + .../plugins/analysis/types/PrimitiveType.kt | 35 + .../analysis/example/build.gradle.kts | 52 + .../analysis/example/gradle.properties | 6 + .../kotlin/arrow/analysis/BadExample.kt | 89 + .../analysis/java-example/build.gradle.kts | 37 + .../analysis/java-example/gradle.properties | 6 + .../java-example/src/main/java/Example.java | 9 + .../java-gradle-plugin/build.gradle.kts | 47 + .../java-gradle-plugin/gradle.properties | 6 + .../plugin/gradle/AnalysisJavaGradlePlugin.kt | 34 + .../io.arrow-kt.analysis.java.properties | 1 + .../plugin/gradle/analysis.plugin.properties | 1 + .../analysis/java-plugin/build.gradle.kts | 30 + .../analysis/java-plugin/gradle.properties | 6 + .../plugins/analysis/java/AnalysisContext.kt | 56 + .../analysis/java/AnalysisJavaPlugin.kt | 235 ++ .../analysis/java/AnalysisJavaProcessor.kt | 52 + .../plugins/analysis/java/AnalysisMessages.kt | 50 + .../meta/plugins/analysis/java/Resolver.kt | 50 + .../plugins/analysis/java/TaskListener.kt | 45 + .../analysis/java/ast/AnnotationUtils.kt | 113 + .../analysis/java/ast/JavaInterpreter.kt | 244 ++ .../java/ast/JavaResolutionContext.kt | 177 ++ .../descriptors/JavaAnnotationDescriptor.kt | 42 + .../java/ast/descriptors/JavaAnnotations.kt | 22 + .../ast/descriptors/JavaClassDescriptor.kt | 76 + .../descriptors/JavaConstructorDescriptor.kt | 24 + .../java/ast/descriptors/JavaDescriptor.kt | 31 + .../ast/descriptors/JavaDescriptorUtils.kt | 54 + .../descriptors/JavaEnumConstantDescriptor.kt | 70 + .../ast/descriptors/JavaFieldDescriptor.kt | 64 + .../ast/descriptors/JavaFunctionDescriptor.kt | 71 + .../JavaLocalVariableDescriptor.kt | 15 + .../ast/descriptors/JavaMemberDescriptor.kt | 36 + .../java/ast/descriptors/JavaMemberScope.kt | 31 + .../ast/descriptors/JavaModuleDescriptor.kt | 31 + .../ast/descriptors/JavaPackageDescriptor.kt | 20 + .../descriptors/JavaParameterDescriptor.kt | 27 + .../JavaReceiverParameterDescriptor.kt | 57 + .../JavaSimpleFunctionDescriptor.kt | 15 + .../JavaTypeParameterDescriptor.kt | 32 + .../ast/descriptors/JavaValueDescriptor.kt | 35 + .../ast/descriptors/JavaVariableDescriptor.kt | 21 + .../analysis/java/ast/elements/JavaAsIs.kt | 43 + .../analysis/java/ast/elements/JavaAssert.kt | 138 ++ .../java/ast/elements/JavaAssignment.kt | 84 + .../analysis/java/ast/elements/JavaBlock.kt | 33 + .../analysis/java/ast/elements/JavaCall.kt | 123 + .../analysis/java/ast/elements/JavaClass.kt | 111 + .../java/ast/elements/JavaConditional.kt | 62 + .../java/ast/elements/JavaControlStatement.kt | 44 + .../analysis/java/ast/elements/JavaElement.kt | 63 + .../java/ast/elements/JavaElementUtils.kt | 46 + .../java/ast/elements/JavaException.kt | 54 + .../java/ast/elements/JavaFakeReference.kt | 32 + .../java/ast/elements/JavaIdentifier.kt | 45 + .../analysis/java/ast/elements/JavaLabeled.kt | 23 + .../analysis/java/ast/elements/JavaLambda.kt | 86 + .../analysis/java/ast/elements/JavaLiteral.kt | 22 + .../analysis/java/ast/elements/JavaLoop.kt | 59 + .../java/ast/elements/JavaMemberReference.kt | 23 + .../analysis/java/ast/elements/JavaMethod.kt | 102 + .../ast/elements/JavaParameterOrVariable.kt | 80 + .../java/ast/elements/JavaParenthesized.kt | 17 + .../java/ast/elements/JavaResolvedCall.kt | 119 + .../ast/elements/JavaResolvedValueArgument.kt | 54 + .../java/ast/elements/JavaSourceLocation.kt | 33 + .../java/ast/elements/JavaSynchronized.kt | 20 + .../java/ast/elements/JavaTreeUtils.kt | 436 ++++ .../java/ast/elements/JavaTypeElements.kt | 49 + .../java/ast/elements/JavaTypeParameter.kt | 19 + .../java/ast/elements/JavaTypeProjection.kt | 22 + .../analysis/java/ast/types/JavaType.kt | 69 + .../java/ast/types/JavaTypeConstructor.kt | 29 + .../ast/types/JavaTypeParameterConstructor.kt | 26 + .../java/ast/types/JavaTypeProjection.kt | 24 + .../analysis/java/ast/types/JavaTypeUtils.kt | 14 + .../services/com.sun.source.util.Plugin | 1 + .../javax.annotation.processing.Processor | 1 + .../plugins/analysis/java/AnalysisTests.kt | 307 +++ .../arrow/meta/plugins/analysis/java/Utils.kt | 46 + .../kotlin-gradle-plugin/build.gradle.kts | 43 + .../kotlin-gradle-plugin/gradle.properties | 6 + .../plugin/gradle/AnalysisGradlePlugin.kt | 31 + .../io.arrow-kt.analysis.kotlin.properties | 1 + .../plugin/gradle/analysis.plugin.properties | 1 + .../analysis/kotlin-plugin/build.gradle.kts | 30 + .../analysis/kotlin-plugin/gradle.properties | 6 + .../errors/MetaDefaultErrorMessagesJvm.java | 35 + .../plugins/analysis/errors/MetaErrors.java | 35 + .../plugins/analysis/errors/RenderString.java | 16 + .../main/kotlin/arrow/meta/AnalysisPlugin.kt | 11 + .../meta/plugins/analysis/phases/Phases.kt | 241 ++ .../ast/kotlin/KotlinResolutionContext.kt | 214 ++ .../solver/ast/kotlin/KotlinResolvedCall.kt | 79 + .../ast/kotlin/ast/KotlinInterpreter.kt | 152 ++ .../ast/kotlin/descriptors/KotlinAnnotated.kt | 9 + .../descriptors/KotlinAnnotationDescriptor.kt | 35 + .../kotlin/descriptors/KotlinAnnotations.kt | 23 + .../descriptors/KotlinCallableDescriptor.kt | 49 + .../KotlinCallableMemberDescriptor.kt | 40 + .../descriptors/KotlinClassDescriptor.kt | 65 + .../descriptors/KotlinClassifierDescriptor.kt | 15 + ...nClassifierDescriptorWithTypeParameters.kt | 24 + .../KotlinConstructorDescriptor.kt | 17 + .../KotlinDeclarationDescriptor.kt | 38 + ...tlinDeclarationDescriptorWithVisibility.kt | 17 + .../descriptors/KotlinDefaultValueArgument.kt | 27 + .../KotlinExpressionValueArgument.kt | 33 + .../descriptors/KotlinFieldDescriptor.kt | 12 + .../descriptors/KotlinFunctionDescriptor.kt | 34 + .../KotlinLocalVariableDescriptor.kt | 9 + .../descriptors/KotlinMemberDescriptor.kt | 35 + .../kotlin/descriptors/KotlinMemberScope.kt | 28 + .../descriptors/KotlinModuleDescriptor.kt | 24 + .../ast/kotlin/descriptors/KotlinNamed.kt | 10 + .../KotlinPackageFragmentDescriptor.kt | 10 + .../KotlinPackageViewDescriptor.kt | 18 + .../descriptors/KotlinParameterDescriptor.kt | 7 + .../KotlinPropertyAccessorDescriptor.kt | 15 + .../descriptors/KotlinPropertyDescriptor.kt | 21 + .../KotlinReceiverParameterDescriptor.kt | 14 + .../kotlin/descriptors/KotlinReceiverValue.kt | 15 + .../KotlinResolvedValueArgument.kt | 12 + .../KotlinSimpleFunctionDescriptor.kt | 31 + .../KotlinTypeAliasConstructorDescriptor.kt | 17 + .../descriptors/KotlinTypeAliasDescriptor.kt | 21 + .../descriptors/KotlinTypeConstructor.kt | 24 + .../KotlinTypeParameterDescriptor.kt | 30 + .../kotlin/descriptors/KotlinValueArgument.kt | 26 + .../descriptors/KotlinValueDescriptor.kt | 11 + .../KotlinValueParameterDescriptor.kt | 27 + .../KotlinVariableAccessorDescriptor.kt | 13 + .../descriptors/KotlinVariableDescriptor.kt | 20 + .../KotlinVariableDescriptorWithAccessors.kt | 18 + .../kotlin/descriptors/KotlinVisibility.kt | 11 + .../ast/kotlin/elements/KotlinAnnotated.kt | 16 + .../elements/KotlinAnnotatedExpression.kt | 14 + .../ast/kotlin/elements/KotlinAnnotation.kt | 15 + .../kotlin/elements/KotlinAnnotationEntry.kt | 18 + .../elements/KotlinAnnotationsContainer.kt | 8 + .../elements/KotlinAnonymousInitializer.kt | 15 + .../elements/KotlinArrayAccessExpression.kt | 15 + .../elements/KotlinAssignmentExpression.kt | 20 + .../kotlin/elements/KotlinBinaryExpression.kt | 20 + .../kotlin/elements/KotlinBlockExpression.kt | 16 + .../kotlin/elements/KotlinBreakExpression.kt | 9 + .../ast/kotlin/elements/KotlinCallElement.kt | 22 + .../kotlin/elements/KotlinCallExpression.kt | 9 + .../elements/KotlinCallableDeclaration.kt | 21 + .../KotlinCallableReferenceExpression.kt | 14 + .../ast/kotlin/elements/KotlinCatchClause.kt | 18 + .../solver/ast/kotlin/elements/KotlinClass.kt | 34 + .../ast/kotlin/elements/KotlinClassBody.kt | 25 + .../kotlin/elements/KotlinClassInitializer.kt | 9 + .../elements/KotlinClassLiteralExpression.kt | 9 + .../kotlin/elements/KotlinClassOrObject.kt | 24 + .../KotlinCompilerMessageSourceLocation.kt | 20 + .../elements/KotlinConstantExpression.kt | 9 + .../KotlinConstantStringExpression.kt | 14 + .../ast/kotlin/elements/KotlinConstructor.kt | 12 + .../KotlinConstructorCalleeExpression.kt | 16 + .../KotlinConstructorDelegationCall.kt | 13 + ...onstructorDelegationReferenceExpression.kt | 12 + .../elements/KotlinContinueExpression.kt | 9 + .../ast/kotlin/elements/KotlinDeclaration.kt | 20 + .../elements/KotlinDeclarationContainer.kt | 12 + .../elements/KotlinDeclarationWithBody.kt | 29 + .../KotlinDeclarationWithInitializer.kt | 15 + .../kotlin/elements/KotlinDefaultElement.kt | 7 + .../elements/KotlinDefaultExpression.kt | 7 + .../elements/KotlinDelegatedSuperTypeEntry.kt | 13 + .../KotlinDestructuringDeclaration.kt | 15 + .../KotlinDestructuringDeclarationEntry.kt | 11 + .../elements/KotlinDoWhileExpression.kt | 9 + .../elements/KotlinDotQualifiedExpression.kt | 9 + .../elements/KotlinDoubleColonExpression.kt | 16 + .../ast/kotlin/elements/KotlinElement.kt | 51 + .../ast/kotlin/elements/KotlinEnumEntry.kt | 9 + .../ast/kotlin/elements/KotlinExpression.kt | 21 + .../KotlinExpressionLambdaArgument.kt | 9 + .../elements/KotlinExpressionValueArgument.kt | 22 + .../KotlinExpressionValueArgumentName.kt | 15 + .../elements/KotlinExpressionWithLabel.kt | 17 + .../kotlin/elements/KotlinFinallySection.kt | 12 + .../kotlin/elements/KotlinForExpression.kt | 18 + .../ast/kotlin/elements/KotlinFunction.kt | 18 + .../kotlin/elements/KotlinFunctionLiteral.kt | 14 + .../ast/kotlin/elements/KotlinIfExpression.kt | 16 + .../kotlin/elements/KotlinInitializerList.kt | 13 + .../KotlinInstanceExpressionWithLabel.kt | 9 + .../ast/kotlin/elements/KotlinIsExpression.kt | 21 + .../KotlinLabelReferenceExpression.kt | 9 + .../elements/KotlinLabeledExpression.kt | 12 + .../kotlin/elements/KotlinLambdaArgument.kt | 12 + .../kotlin/elements/KotlinLambdaExpression.kt | 20 + .../kotlin/elements/KotlinLoopExpression.kt | 12 + .../ast/kotlin/elements/KotlinModifierList.kt | 15 + .../elements/KotlinModifierListOwner.kt | 13 + .../elements/KotlinNameReferenceExpression.kt | 9 + .../kotlin/elements/KotlinNamedDeclaration.kt | 16 + .../kotlin/elements/KotlinNamedFunction.kt | 9 + .../kotlin/elements/KotlinNullExpression.kt | 12 + .../elements/KotlinObjectDeclaration.kt | 13 + .../elements/KotlinObjectLiteralExpression.kt | 13 + .../elements/KotlinOperationExpression.kt | 12 + .../KotlinOperationReferenceExpression.kt | 10 + .../ast/kotlin/elements/KotlinParameter.kt | 31 + .../kotlin/elements/KotlinParameterList.kt | 8 + .../elements/KotlinParenthesizedExpression.kt | 12 + .../elements/KotlinPrimaryConstructor.kt | 10 + .../kotlin/elements/KotlinProjectionKind.kt | 8 + .../ast/kotlin/elements/KotlinProperty.kt | 45 + .../kotlin/elements/KotlinPropertyAccessor.kt | 29 + .../kotlin/elements/KotlinPropertyDelegate.kt | 12 + .../elements/KotlinPureClassOrObject.kt | 43 + .../elements/KotlinQualifiedExpression.kt | 14 + .../elements/KotlinReferenceExpression.kt | 8 + .../kotlin/elements/KotlinReturnExpression.kt | 16 + .../elements/KotlinSafeQualifiedExpression.kt | 9 + .../elements/KotlinSecondaryConstructor.kt | 13 + .../ast/kotlin/elements/KotlinSelfType.kt | 12 + .../elements/KotlinSimpleNameExpression.kt | 12 + .../KotlinStringTemplateExpression.kt | 27 + .../kotlin/elements/KotlinSuperExpression.kt | 13 + .../elements/KotlinSuperTypeCallEntry.kt | 9 + .../kotlin/elements/KotlinSuperTypeEntry.kt | 8 + .../kotlin/elements/KotlinSuperTypeList.kt | 13 + .../elements/KotlinSuperTypeListEntry.kt | 12 + .../kotlin/elements/KotlinThisExpression.kt | 9 + .../kotlin/elements/KotlinThrowExpression.kt | 12 + .../kotlin/elements/KotlinTryExpression.kt | 18 + .../ast/kotlin/elements/KotlinTypeAlias.kt | 12 + .../kotlin/elements/KotlinTypeArgumentList.kt | 12 + .../elements/KotlinTypeCastExpression.kt | 27 + .../kotlin/elements/KotlinTypeConstraint.kt | 15 + .../elements/KotlinTypeConstraintList.kt | 12 + .../ast/kotlin/elements/KotlinTypeElement.kt | 12 + .../kotlin/elements/KotlinTypeParameter.kt | 23 + .../elements/KotlinTypeParameterList.kt | 12 + .../elements/KotlinTypeParameterListOwner.kt | 21 + .../kotlin/elements/KotlinTypeProjection.kt | 22 + .../kotlin/elements/KotlinTypeReference.kt | 13 + .../kotlin/elements/KotlinUnaryExpression.kt | 16 + .../elements/KotlinValueArgumentList.kt | 12 + .../elements/KotlinValueArgumentName.kt | 15 + .../elements/KotlinVariableDeclaration.kt | 9 + .../kotlin/elements/KotlinWhenCondition.kt | 8 + .../elements/KotlinWhenConditionInRange.kt | 18 + .../elements/KotlinWhenConditionIsPattern.kt | 15 + .../KotlinWhenConditionWithExpression.kt | 13 + .../ast/kotlin/elements/KotlinWhenEntry.kt | 17 + .../kotlin/elements/KotlinWhenExpression.kt | 22 + .../kotlin/elements/KotlinWhileExpression.kt | 9 + .../elements/KotlinWhileExpressionBase.kt | 12 + .../solver/ast/kotlin/types/KotlinType.kt | 86 + .../ast/kotlin/types/KotlinTypeProjection.kt | 19 + .../phases/ir/ConstraintsAnnotations.kt | 206 ++ .../meta/plugins/analysis/phases/ir/Hints.kt | 41 + ...otlin.compiler.plugin.CommandLineProcessor | 1 + ....kotlin.compiler.plugin.ComponentRegistrar | 1 + .../test/kotlin/arrow/meta/plugins/Utils.kt | 18 + .../meta/plugins/analysis/AnalysisTests.kt | 2074 +++++++++++++++++ .../analysis/analysis/laws/build.gradle.kts | 57 + .../analysis/analysis/laws/gradle.properties | 6 + .../arrow/analysis/laws/kotlin/Array.kt | 400 ++++ .../analysis/laws/kotlin/CharAndString.kt | 247 ++ .../arrow/analysis/laws/kotlin/Collections.kt | 726 ++++++ .../kotlin/arrow/analysis/laws/kotlin/Enum.kt | 15 + .../kotlin/arrow/analysis/laws/kotlin/Math.kt | 167 ++ .../arrow/analysis/laws/kotlin/Numbers.kt | 113 + .../arrow/analysis/laws/kotlin/Ranges.kt | 17 + .../arrow/analysis/laws/kotlin/Result.kt | 34 + .../kotlin/arrow/analysis/laws/kotlin/Util.kt | 28 + arrow-libs/analysis/analysis/types/README.md | 199 ++ .../analysis/analysis/types/build.gradle.kts | 33 + .../analysis/analysis/types/gradle.properties | 6 + .../kotlin/arrow/analysis/RefinementDSL.kt | 80 + 496 files changed, 21269 insertions(+) create mode 100644 arrow-libs/analysis/analysis/common/build.gradle.kts create mode 100644 arrow-libs/analysis/analysis/common/gradle.properties create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Constants.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DeclarationUtils.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtils.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Parameters.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/ReportedError.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/SarifReporter.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Booleans.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/FormulaExtensions.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Ints.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FieldProvider.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/NameProvider.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/Literals.kt create mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/PrimitiveType.kt create mode 100644 arrow-libs/analysis/analysis/example/build.gradle.kts create mode 100644 arrow-libs/analysis/analysis/example/gradle.properties create mode 100644 arrow-libs/analysis/analysis/example/src/commonMain/kotlin/arrow/analysis/BadExample.kt create mode 100644 arrow-libs/analysis/analysis/java-example/build.gradle.kts create mode 100644 arrow-libs/analysis/analysis/java-example/gradle.properties create mode 100644 arrow-libs/analysis/analysis/java-example/src/main/java/Example.java create mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts create mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/gradle.properties create mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin.kt create mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.java.properties create mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties create mode 100644 arrow-libs/analysis/analysis/java-plugin/build.gradle.kts create mode 100644 arrow-libs/analysis/analysis/java-plugin/gradle.properties create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisContext.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaProcessor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisMessages.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/Resolver.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/TaskListener.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/AnnotationUtils.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtils.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAsIs.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssert.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaBlock.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaCall.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaConditional.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaControlStatement.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElement.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtils.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaException.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLambda.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLoop.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMethod.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtils.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElements.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaType.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtils.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/com.sun.source.util.Plugin create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/javax.annotation.processing.Processor create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/AnalysisTests.kt create mode 100644 arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/Utils.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts create mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/gradle.properties create mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.kotlin.properties create mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/gradle.properties create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm.java create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaErrors.java create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/RenderString.java create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinType.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/Utils.kt create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt create mode 100644 arrow-libs/analysis/analysis/laws/build.gradle.kts create mode 100644 arrow-libs/analysis/analysis/laws/gradle.properties create mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Array.kt create mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt create mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt create mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Enum.kt create mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt create mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Numbers.kt create mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Ranges.kt create mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Result.kt create mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Util.kt create mode 100644 arrow-libs/analysis/analysis/types/README.md create mode 100644 arrow-libs/analysis/analysis/types/build.gradle.kts create mode 100644 arrow-libs/analysis/analysis/types/gradle.properties create mode 100644 arrow-libs/analysis/analysis/types/src/commonMain/kotlin/arrow/analysis/RefinementDSL.kt diff --git a/arrow-libs/analysis/analysis/common/build.gradle.kts b/arrow-libs/analysis/analysis/common/build.gradle.kts new file mode 100644 index 000000000..70928c54b --- /dev/null +++ b/arrow-libs/analysis/analysis/common/build.gradle.kts @@ -0,0 +1,22 @@ +@file:Suppress("DSL_SCOPE_VIOLATION") + +plugins { + id(libs.plugins.kotlin.jvm.get().pluginId) + alias(libs.plugins.arrowGradleConfig.kotlin) + alias(libs.plugins.arrowGradleConfig.publish) +} + +version = property("projects.analysis_version").toString() + +kotlin { + explicitApi = null +} + +dependencies { + compileOnly(libs.kotlin.stdlibJDK8) + api(libs.arrowCore) + api(projects.arrowAnalysisTypes) + api(libs.javaSmt) + api(libs.apacheCommonsText) + api(libs.sarif4k) +} diff --git a/arrow-libs/analysis/analysis/common/gradle.properties b/arrow-libs/analysis/analysis/common/gradle.properties new file mode 100644 index 000000000..b0a6511c9 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/gradle.properties @@ -0,0 +1,6 @@ +# Maven publishing configuration +POM_NAME=Arrow Analysis Common Behavior +POM_ARTIFACT_ID=arrow-analysis-common +POM_PACKAGING=jar + +pom.name=Arrow Analysis Common Behavior diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt new file mode 100644 index 000000000..f5b1f0f31 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt @@ -0,0 +1,290 @@ +@file:OptIn(ExperimentalTypeInference::class) + +package arrow.meta.continuations + +import kotlin.coroutines.Continuation +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext +import kotlin.coroutines.RestrictsSuspension +import kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED +import kotlin.coroutines.intrinsics.createCoroutineUnintercepted +import kotlin.coroutines.intrinsics.suspendCoroutineUninterceptedOrReturn +import kotlin.coroutines.resume +import kotlin.experimental.ExperimentalTypeInference + +/** + * ContSeq is multi-shot control-flow streaming type. It can emit 0..n elements, and it has ability + * to abort processing elements at any given time in the stream without aborting the whole stream. + * + * It's lazy, and thus allows for passing it around for composition. + * + * It requires **explicit** running by using a terminal operator such as [drain], [forEach], + * [toList] or [toSet]. + * + * Besides that [ContSeq] exposes APIs that you mind find on any other `Monad`. + */ +sealed class ContSeq { + + abstract operator fun iterator(): Iterator + + /** Alias for for-looping over all elements. Most efficient way to derive combinators. */ + inline fun forEach(f: (A) -> Unit) { + for (t in iterator()) f(t) + } + + /** Turns [ContSeq] into an in-memory representation as a [List] */ + fun toList(): List = mutableListOf().apply { this@ContSeq.forEach(::add) } + + /** Turns [ContSeq] into an in-memory representation as a [Set] */ + fun toSet(): Set = mutableSetOf().apply { this@ContSeq.forEach(::add) } + + /** Throws away the output of every emission */ + fun void(): ContSeq = map {} + + /** Runs the sequence of computations, but ignore the output of every computation */ + fun drain(): Unit = forEach {} + + /** + * Maps every element in the sequence with `f`, and allows for aborting the mapped value using + * [ContSyntax.abort] or [ContSyntax.ensure]. + */ + fun map(f: suspend ContSyntax.(A) -> B): ContSeq = ContSeq { + // Weird hack for RestrictSuspension + val f = f as suspend ContSeqSyntax.(A) -> B + forEach { a -> yield(f(a)) } + } + + /** Side-effecting version of map */ + inline fun onEach(crossinline f: (A) -> Unit): ContSeq = map { it.also(f) } + + fun flatMap(f: (A) -> ContSeq): ContSeq = ContSeq { forEach { a -> yieldAll(f(a)) } } + + inline fun zip(fb: ContSeq, crossinline f: (A, B) -> C): ContSeq = flatMap { a -> + fb.map { b -> f(a, b) } + } + + class VarArg(private val aas: Array) : ContSeq() { + override fun iterator(): Iterator = aas.iterator() + } + + class Iterable(private val aas: Iterable) : ContSeq() { + override fun iterator(): Iterator = aas.iterator() + } + + class Builder(private val block: suspend ContSeqSyntax.() -> Unit) : ContSeq() { + override fun iterator(): Iterator = + ContSeqBuilder().apply { + nextStep = block.createCoroutineUnintercepted(receiver = this, completion = this) + } + } + + /** Smart-constructors */ + companion object { + val unit: ContSeq = ContSeq(Unit) + + val abort: ContSeq = ContSeq { abort() } + + fun empty(): ContSeq = EMPTY + + operator fun invoke(aas: Iterable): ContSeq = Iterable(aas) + + operator fun invoke(vararg aas: A): ContSeq = VarArg(aas) + + /** Builds a [Sequence] lazily yielding values one by one. */ + operator fun invoke( + @BuilderInference block: suspend ContSeqSyntax.() -> Unit + ): ContSeq = Builder(block) + } +} + +/** Smart constructor for single-shot [ContSeq] effect. */ +inline fun cont(crossinline f: () -> A): ContSeq = ContSeq { yield(f()) } + +/** Convert any [Iterable] into a [ContSeq] */ +fun Iterable.asContSeq(): ContSeq = ContSeq { yieldAll(this@asContSeq) } + +/** Execute a list of [ContSeq] and gather the values. */ +fun List>.sequence(): ContSeq> = + if (isEmpty()) ContSeq(emptyList()) else ContSeq(flatMap { it.toList() }) + +fun List>.nested(): ContSeq> = + if (isEmpty()) { + cont { emptyList() } + } else { + first().flatMap { x -> drop(1).nested().map { xs -> listOf(x) + xs } } + } + +/** Execute a side effect only when some condition holds. */ +inline fun doOnlyWhen(condition: Boolean, crossinline f: () -> ContSeq): ContSeq = + if (condition) f() else ContSeq.unit + +/** Execute a side effect only when some condition holds. */ +inline fun doOnlyWhen( + condition: Boolean, + value: A, + crossinline f: () -> ContSeq +): ContSeq = if (condition) f() else cont { value } + +/** Execute a side effect only when some condition holds. */ +inline fun doOnlyWhenNotNull( + thing: T?, + value: A, + crossinline f: (T) -> ContSeq +): ContSeq { + return if (thing != null) f(thing) else cont { value } +} + +/** + * [ContSyntax] exposes [abort] which allows for interruption of the computation, meaning that when + * `abort` is encountered the `Cont` will be interrupted and will not yield a value. + * + * However it's a **pure** interruption of the computation, meaning it doesn't involve throwing + * exceptions or halting the program. Other functions like `guard` or `ensureNotNull` are utility + * derivation of `abort`. + */ +sealed interface ContSyntax { + suspend fun abort(): A + + suspend fun ensure(condition: Boolean): Unit = if (condition) Unit else abort() +} + +/** + * The scope for yielding values of a [ContSeq], provides [yield] and [yieldAll] suspension + * functions. + */ +@RestrictsSuspension +sealed interface ContSeqSyntax : ContSyntax { + suspend fun yield(value: A) + suspend fun yieldAll(iterator: Iterator) + suspend fun yieldAll(elements: Iterable) { + if (elements is Collection && elements.isEmpty()) return + return yieldAll(elements.iterator()) + } + + suspend fun yieldAll(sequence: Sequence) = yieldAll(sequence.iterator()) + suspend fun yieldAll(sequence: ContSeq) = yieldAll(sequence.iterator()) +} + +// Internal State Machinery +// The Builder's state: +// Starts in `State_NotReady` which means no values are available, +// This state should never be reach-able by the user since it only resides in this side when +// executing the lambda `suspend ContSeqSyntax.() -> Unit`. +// It either goes to `State_Done` without any values emitted, +// or `yield` gets called while executing the lambda changing the state to `State_Ready` with any +// amount values emitted. +// +// When a value yielded and consumed, the state machine is in (`State_Ready`) and it will go back to +// `State_NotReady`. +// This will also allow the lambda `suspend ContSeqSyntax.() -> Unit` until a next `yield` is +// found, +// or the lambda finishes either putting the state back to `State_Ready` or `State_Done`. +// +// So the state machine composes the `suspend function` from `yield` with the downstream logic, +// and it interleaves those composed functions by changing between `State_NotReady` and +// `State_Ready`. +// +// State_ManyReady & State_ManyNotReady do the same thing, but single there is a value inside +// [nextIterator] instead of [nextValue]. +// +// When a developer mistake was made, then the mechanism will run into `State_Failed` and throw an +// exception. +private typealias State = Int + +private const val State_NotReady: State = 0 +private const val State_ManyNotReady: State = 1 +private const val State_ManyReady: State = 2 +private const val State_Ready: State = 3 +private const val State_Done: State = 4 +private const val State_Failed: State = 5 + +private val EMPTY: ContSeq = ContSeq {} + +private class ContSeqBuilder : ContSeqSyntax, Iterator, Continuation { + private var state = State_NotReady + private var nextValue: T? = null + private var nextIterator: Iterator? = null + var nextStep: Continuation? = null + + override suspend fun abort(): A { + state = State_Done + return suspendCoroutineUninterceptedOrReturn { COROUTINE_SUSPENDED } + } + + override fun hasNext(): Boolean { + while (true) { + when (state) { + State_NotReady -> {} + State_ManyNotReady -> + if (nextIterator!!.hasNext()) { + state = State_ManyReady + return true + } else { + nextIterator = null + } + State_Done -> return false + State_Ready, State_ManyReady -> return true + else -> throw exceptionalState() + } + + state = State_Failed + val step = nextStep!! + nextStep = null + step.resume(Unit) + } + } + + override fun next(): T = + when (state) { + State_NotReady, State_ManyNotReady -> nextNotReady() + State_ManyReady -> { + state = State_ManyNotReady + nextIterator!!.next() + } + State_Ready -> { + state = State_NotReady + @Suppress("UNCHECKED_CAST") val result = nextValue as T + nextValue = null + result + } + else -> throw exceptionalState() + } + + private fun nextNotReady(): T { + if (!hasNext()) throw NoSuchElementException() else return next() + } + + private fun exceptionalState(): Throwable = + when (state) { + State_Done -> NoSuchElementException() + State_Failed -> IllegalStateException("Iterator has failed.") + else -> IllegalStateException("Unexpected state of the iterator: $state") + } + + override suspend fun yield(value: T) { + nextValue = value + state = State_Ready + return suspendCoroutineUninterceptedOrReturn { c -> + nextStep = c + COROUTINE_SUSPENDED + } + } + + override suspend fun yieldAll(iterator: Iterator) { + if (!iterator.hasNext()) return + nextIterator = iterator + state = State_ManyReady + return suspendCoroutineUninterceptedOrReturn { c -> + nextStep = c + COROUTINE_SUSPENDED + } + } + + override fun resumeWith(result: Result) { + result.getOrThrow() + state = State_Done + } + + override val context: CoroutineContext + get() = EmptyCoroutineContext +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Constants.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Constants.kt new file mode 100644 index 000000000..3ee99fdd4 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Constants.kt @@ -0,0 +1,4 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver + +internal const val RESULT_VAR_NAME = "${'$'}result" +internal const val THIS_VAR_NAME = "this" diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DeclarationUtils.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DeclarationUtils.kt new file mode 100644 index 000000000..676d9cc0b --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DeclarationUtils.kt @@ -0,0 +1,95 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Class +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationContainer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PureClassOrObject +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.check.stableBody + +internal fun DeclarationContainer?.singleFieldGroups( + context: ResolutionContext +): Set> = listOfNotNull(this).singleFieldGroups(context) + +internal fun Iterable.singleFieldGroups( + context: ResolutionContext +): Set> { + val result = mutableSetOf>() + forEach { + it.declarations.forEach { decl -> + val descriptor = context.descriptorFor(decl) + if (descriptor?.isField() == true) { + result.joinElements(setOfNotNull(descriptor, decl.asSingleField(context))) + } + } + } + return result +} + +internal fun MutableSet>.joinElements( + elements: Set +) { + val inElement = { s: DeclarationDescriptor -> elements.any { e -> s.fqNameSafe == e.fqNameSafe } } + val wanted = filter { set -> set.any(inElement) } + removeAll(wanted.toSet()) + add((wanted.flatten().filterNot(inElement) + elements).toSet()) +} + +/** + * Finds whether a declaration is a simple field reference, like in + * + * class A(val n: Int) { fun getValue() = n } + * + * This is specially relevant for Java getters + */ +internal fun Declaration.asSingleField(context: ResolutionContext): CallableDescriptor? = + when (val body = stableBody()) { + is BlockExpression -> { + val filtered = + body.statements.mapNotNull { stmt -> + val call = stmt.getResolvedCall(context) + when (call?.specialKind) { + null -> stmt + SpecialKind.Post -> call.getReceiverOrThisNamedArgument() + else -> null // drop the other special calls + } + } + filtered.singleOrNull()?.let { single -> + when { + single is ReturnExpression -> single.returnedExpression?.findSingleField(context) + body.implicitReturnFromLast -> single.findSingleField(context) + else -> null + } + } + } + is ReturnExpression -> body.returnedExpression?.findSingleField(context) + else -> null + } + +private fun Expression.findSingleField(context: ResolutionContext): CallableDescriptor? = + getResolvedCall(context)?.resultingDescriptor?.takeIf { it.isField() } + +private fun ClassOrObject.isInterfaceOrEnum(): Boolean = + when (this) { + is Class -> this.isInterface() || this.isEnum() + else -> false + } + +private fun ClassOrObject.isCompanionObject(): Boolean = + fqName != null && + this.parents.any { parent -> + parent is PureClassOrObject && + parent.companionObjects.any { companion -> fqName == companion?.fqName } + } + +internal fun ClassOrObject.hasImplicitPrimaryConstructor(): Boolean = + !isInterfaceOrEnum() && + !isCompanionObject() && + hasPrimaryConstructor() && + primaryConstructor == null diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtils.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtils.kt new file mode 100644 index 000000000..2a8093abe --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtils.kt @@ -0,0 +1,222 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FunctionDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints +import arrow.meta.plugins.analysis.smt.Solver +import arrow.meta.plugins.analysis.smt.renameDeclarationConstraints +import java.util.LinkedList + +/** Obtain the descriptors which have been overridden by a declaration, if they exist */ +fun DeclarationDescriptor.overriddenDescriptors(): Collection? = + when (this) { + is CallableMemberDescriptor -> this.overriddenDescriptors + else -> null + } + +internal val DeclarationDescriptor.topMostOverriden: DeclarationDescriptor + get() = overriddenDescriptors()?.first { it.overriddenDescriptors().isNullOrEmpty() } ?: this + +/** + * returns true if we have declared something with a @Law or lives inside an object that inherits + * Laws + */ +fun DeclarationDescriptor.isALaw(): Boolean = + annotations().hasAnnotation(FqName("arrow.analysis.Law")) + +/** returns true if the type inherits Laws */ +internal fun DeclarationDescriptor?.isLawsType(): Boolean = + this?.annotations()?.hasAnnotation(FqName("arrow.analysis.Laws")) ?: false + +/** + * check if a descriptor is compatible with other, in the sense that they refer to a function with + * the same signature + */ +fun DeclarationDescriptor.isCompatibleWith(other: DeclarationDescriptor): Boolean = + when { + this is CallableDescriptor && other is CallableDescriptor -> { + // we have to ignore the parameters which come from Laws + val params1 = + this.allParameters.filter { param -> + !param.type.descriptor.isLawsType() && + !(this is ConstructorDescriptor && param is ReceiverParameterDescriptor) + } + val params2 = + other.allParameters.filter { param -> + !param.type.descriptor.isLawsType() && + !(other is ConstructorDescriptor && param is ReceiverParameterDescriptor) + } + params1.size == params2.size && + params1.zip(params2).all { (p1, p2) -> + sameVarity(p1, p2) && (p1.type.isEqualTo(p2.type) || p1.type.isTypeParameter()) + } + } + else -> true + } + +/** + * check if a descriptor is compatible with other, in the sense that the arguments are (possibly) + * supertypes + */ +fun DeclarationDescriptor.isLooselyCompatibleWith(other: DeclarationDescriptor): Boolean = + when { + this is CallableDescriptor && other is CallableDescriptor -> { + // we have to ignore the parameters which come from Laws + val params1 = + this.allParameters.filter { param -> + !param.type.descriptor.isLawsType() && + !(this is ConstructorDescriptor && param is ReceiverParameterDescriptor) + } + val params2 = + other.allParameters.filter { param -> + !param.type.descriptor.isLawsType() && + !(other is ConstructorDescriptor && param is ReceiverParameterDescriptor) + } + params1.size == params2.size && + params1.zip(params2).all { (p1, p2) -> sameVarity(p1, p2) && p2.type.isSubtypeOf(p1.type) } + } + else -> true + } + +fun sameVarity(p1: ParameterDescriptor, p2: ParameterDescriptor): Boolean = + when { + p1 is ValueParameterDescriptor && p2 is ValueParameterDescriptor -> + (p1.varargElementType == null && p2.varargElementType == null) || + (p1.varargElementType != null && p2.varargElementType != null) + else -> true + } + +/** should we treat a node as a field and create 'field(name, x)'? */ +fun DeclarationDescriptor.isField(): Boolean = + when (this) { + is PropertyDescriptor -> hasOneReceiver() && !(returnType?.descriptor?.isFun ?: false) + is FunctionDescriptor -> + valueParameters.isEmpty() && hasOneReceiver() && !(returnType?.descriptor?.isFun ?: false) + else -> false + } + +/** has a dispatch or extension receiver, but not both */ +internal fun CallableDescriptor.hasOneReceiver(): Boolean = + (extensionReceiverParameter != null && dispatchReceiverParameter == null) || + (extensionReceiverParameter == null && dispatchReceiverParameter != null) + +/** Gather all descriptors which satisfy a predicate, going inside every element recursively. */ +fun DeclarationDescriptor.gather( + predicate: (DeclarationDescriptor) -> Boolean +): List { + // we fake the initial scope + val fakeMemberScope = + object : MemberScope { + override fun getClassifierNames(): Set = + throw IllegalStateException("not available here") + override fun getFunctionNames(): Set = throw IllegalStateException("not available here") + override fun getVariableNames(): Set = throw IllegalStateException("not available here") + override fun getContributedDescriptors( + filter: (name: String) -> Boolean + ): List = + listOf(this@gather).filter { decl -> filter(decl.name.value) } + } + val scopesWorklist = LinkedList(listOf(fakeMemberScope)) + // initialize place for results + val result = mutableListOf() + + // the work + while (scopesWorklist.isNotEmpty()) { + // work to do in a member scope + val scope = scopesWorklist.remove() + // 1. get all descriptors + val descriptors = scope.getContributedDescriptors { true } + // 2. add the interesting ones to the result + result.addAll(descriptors.filter(predicate)) + // 3. add all new member scopes to the worklist + scopesWorklist.addAll( + descriptors.filterIsInstance().map { it.completeUnsubstitutedScope } + ) + scopesWorklist.addAll( + descriptors.filterIsInstance().mapNotNull { + it.classDescriptor?.completeUnsubstitutedScope + } + ) + } + + return result.toList() +} + +/** Gather all descriptors which satisfy a predicate, going inside every element recursively. */ +fun ModuleDescriptor.gather( + initialPackages: List = listOf(FqName("")), + addSubPackages: Boolean, + predicate: (DeclarationDescriptor) -> Boolean +): List { + // initialize worklists + val packagesWorklist = LinkedList(initialPackages) + val scopesWorklist = LinkedList() + // initialize place for results + val result = mutableListOf() + + // the work + while (true) { + if (scopesWorklist.isNotEmpty()) { + // work to do in a member scope + val scope = scopesWorklist.remove() + // 1. get all descriptors + val descriptors = scope.getContributedDescriptors { true } + // 2. add the interesting ones to the result + result.addAll(descriptors.filter(predicate)) + // 3. add all new member scopes to the worklist + scopesWorklist.addAll( + descriptors.filterIsInstance().map { it.completeUnsubstitutedScope } + ) + scopesWorklist.addAll( + descriptors.filterIsInstance().mapNotNull { + it.classDescriptor?.completeUnsubstitutedScope + } + ) + } else if (packagesWorklist.isNotEmpty()) { + // work to do in a package + val pkg = packagesWorklist.remove() + // 1. add the scope to the worklist + getPackage(pkg.name)?.memberScope?.let { scopesWorklist.add(it) } + // 2. add the subpackages to the worklist + if (addSubPackages) packagesWorklist.addAll(getSubPackagesOf(pkg)) + } else { + break + } + } + + return result.toList() +} + +/** Rename the conditions from one descriptor to the names of another */ +internal fun Solver.renameConditions( + constraints: DeclarationConstraints, + to: DeclarationDescriptor +): DeclarationConstraints { + val fromParams = + (constraints.descriptor as? CallableDescriptor)?.valueParameters?.map { it.name.value } + val toParams = (to as? CallableDescriptor)?.valueParameters?.map { it.name.value } + return if (fromParams != null && toParams != null) { + val renamed = renameDeclarationConstraints(constraints, fromParams.zip(toParams).toMap()) + DeclarationConstraints(to, renamed.pre, renamed.post, renamed.doNotLookAtArgumentsWhen) + } else { + DeclarationConstraints( + to, + constraints.pre, + constraints.post, + constraints.doNotLookAtArgumentsWhen + ) + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt new file mode 100644 index 000000000..90baa885e --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt @@ -0,0 +1,192 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.smt.Solver +import arrow.meta.plugins.analysis.smt.boolAnd +import arrow.meta.plugins.analysis.smt.boolEquivalence +import arrow.meta.plugins.analysis.smt.boolNot +import arrow.meta.plugins.analysis.smt.boolOr +import arrow.meta.plugins.analysis.smt.boolXor +import arrow.meta.plugins.analysis.smt.intEquals +import arrow.meta.plugins.analysis.smt.intGreaterThan +import arrow.meta.plugins.analysis.smt.intGreaterThanOrEquals +import arrow.meta.plugins.analysis.smt.intLessThan +import arrow.meta.plugins.analysis.smt.intLessThanOrEquals +import arrow.meta.plugins.analysis.smt.intMinus +import arrow.meta.plugins.analysis.smt.intNegate +import arrow.meta.plugins.analysis.smt.intPlus +import arrow.meta.plugins.analysis.smt.rationalEquals +import arrow.meta.plugins.analysis.smt.rationalGreaterThan +import arrow.meta.plugins.analysis.smt.rationalGreaterThanOrEquals +import arrow.meta.plugins.analysis.smt.rationalLessThan +import arrow.meta.plugins.analysis.smt.rationalLessThanOrEquals +import arrow.meta.plugins.analysis.smt.rationalMinus +import arrow.meta.plugins.analysis.smt.rationalNegate +import arrow.meta.plugins.analysis.smt.rationalPlus +import arrow.meta.plugins.analysis.types.PrimitiveType +import arrow.meta.plugins.analysis.types.primitiveType +import arrow.meta.plugins.analysis.types.unwrapIfNullable +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.Formula +import org.sosy_lab.java_smt.api.NumeralFormula + +/* + * Most of the information in this file refers to + * https://kotlinlang.org/docs/basic-types.html + */ + +fun Solver.primitiveFormula( + context: ResolutionContext, + resolvedCall: ResolvedCall, + args: List +): Formula? { + val descriptor = resolvedCall.resultingDescriptor + val returnTy = descriptor.returnType?.primitiveType() + val argTys = descriptor.allParameters.map { param -> param.type.primitiveType() } + return when { + descriptor.isComparison() -> comparisonFormula(context, resolvedCall, args) + returnTy == PrimitiveType.BOOLEAN && argTys.all { it == PrimitiveType.BOOLEAN } -> + booleanFormula(descriptor, args) + returnTy == PrimitiveType.INTEGRAL && argTys.all { it == PrimitiveType.INTEGRAL } -> + integralFormula(descriptor, args) + returnTy == PrimitiveType.RATIONAL && argTys.all { it == PrimitiveType.RATIONAL } -> + rationalFormula(descriptor, args) + else -> null + } +} + +private val comparisonNames: List = + listOf( + "kotlin.Any.equals", + "kotlin.Comparable.equals", + "kotlin.Comparable.compareTo", + ">", + ">=", + "<", + "<=", + "==", + "!=" + ) + .map { FqName(it) } + +internal fun CallableDescriptor.isComparison() = + (listOf(this) + overriddenDescriptors).any { comparisonNames.contains(it.fqNameSafe) } + +private fun Solver.comparisonFormula( + context: ResolutionContext, + resolvedCall: ResolvedCall, + args: List +): BooleanFormula? = + resolvedCall.allArgumentExpressions(context).takeIf { it.size == 2 }?.let { + val ty1 = it[0].type.unwrapIfNullable().primitiveType() + val ty2 = it[1].type.unwrapIfNullable().primitiveType() + val op = (resolvedCall.callElement as? BinaryExpression)?.operationToken + when { + ty1 == PrimitiveType.BOOLEAN && ty2 == PrimitiveType.BOOLEAN -> + when (op) { + "==" -> boolEquivalence(args) + "!=" -> boolEquivalence(args)?.let { f -> not(f) } + else -> null + } + ty1 == PrimitiveType.INTEGRAL && ty2 == PrimitiveType.INTEGRAL -> + when (op) { + "==" -> intEquals(args) + "!=" -> intEquals(args)?.let { f -> not(f) } + ">" -> intGreaterThan(args) + ">=" -> intGreaterThanOrEquals(args) + "<" -> intLessThan(args) + "<=" -> intLessThanOrEquals(args) + else -> null + } + ty1 == PrimitiveType.RATIONAL && ty2 == PrimitiveType.RATIONAL -> + when (op) { + "==" -> rationalEquals(args) + "!=" -> rationalEquals(args)?.let { f -> not(f) } + ">" -> rationalGreaterThan(args) + ">=" -> rationalGreaterThanOrEquals(args) + "<" -> rationalLessThan(args) + "<=" -> rationalLessThanOrEquals(args) + else -> null + } + ty1 == null && ty2 == null -> // equality on objects + when (op) { + "==" -> intEquals(args) + else -> null + } + else -> null + } + } + +private fun Solver.booleanFormula( + descriptor: CallableDescriptor, + args: List +): BooleanFormula? = + when (descriptor.fqNameSafe) { + FqName("kotlin.Boolean.not"), FqName("!") -> boolNot(args) + FqName("kotlin.Boolean.and"), FqName("&&") -> boolAnd(args) + FqName("kotlin.Boolean.or"), FqName("||") -> boolOr(args) + FqName("kotlin.Boolean.xor") -> boolXor(args) + else -> null + } + +private fun Solver.integralFormula( + descriptor: CallableDescriptor, + args: List +): NumeralFormula.IntegerFormula? = + when (descriptor.name.value) { + "plus" -> intPlus(args) + "unaryPlus" -> (args.getOrNull(0) as? NumeralFormula.IntegerFormula) + "+" -> + when (args.size) { + 2 -> intPlus(args) + 1 -> (args.getOrNull(0) as? NumeralFormula.IntegerFormula) + else -> throw IllegalArgumentException("+ with weird # of parameters") + } + "minus" -> intMinus(args) + "unaryMinus" -> intNegate(args) + "-" -> + when (args.size) { + 2 -> intMinus(args) + 1 -> intNegate(args) + else -> throw IllegalArgumentException("- with weird # of parameters") + } + // "times", "*" -> intMultiply(args) // not all SMT solvers support multiplication + // "div", "/" -> intDivide(args) // not all SMT solvers support div + "inc", + "++" -> intPlus(args + listOf(integerFormulaManager.makeNumber(1))) + "dec", "--" -> intMinus(args + listOf(integerFormulaManager.makeNumber(1))) + else -> null + } + +private fun Solver.rationalFormula( + descriptor: CallableDescriptor, + args: List +): NumeralFormula.RationalFormula? = + when (descriptor.name.value) { + "plus" -> rationalPlus(args) + "unaryPlus" -> (args.getOrNull(0) as? NumeralFormula.RationalFormula) + "+" -> + when (args.size) { + 2 -> rationalPlus(args) + 1 -> (args.getOrNull(0) as? NumeralFormula.RationalFormula) + else -> throw IllegalArgumentException("+ with weird # of parameters") + } + "minus" -> rationalMinus(args) + "unaryMinus" -> rationalNegate(args) + "-" -> + when (args.size) { + 2 -> rationalMinus(args) + 1 -> rationalNegate(args) + else -> throw IllegalArgumentException("- with weird # of parameters") + } + // "times", "*" -> rationalMultiply(args) // not all SMT solvers support multiplication + // "div", "/" -> rationalDivide(args) // not all SMT solvers support div + "inc", + "++" -> rationalPlus(args + listOf(integerFormulaManager.makeNumber(1))) + "dec", "--" -> rationalMinus(args + listOf(integerFormulaManager.makeNumber(1))) + else -> null + } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt new file mode 100644 index 000000000..95fd6e7ec --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt @@ -0,0 +1,175 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DefaultValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssertExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +enum class SpecialKind { + Pre, + Post, + Invariant, + TrustCall, + TrustBlock, + NotLookArgs +} + +internal val ResolvedCall.specialKind: SpecialKind? + get() = + when (resultingDescriptor.fqNameSafe) { + FqName("arrow.analysis.pre"), FqName("arrow.analysis.RefinementDSLKt.pre") -> SpecialKind.Pre + FqName("kotlin.require") -> SpecialKind.Pre + FqName(AssertExpression.FAKE_ASSERT_NAME) -> SpecialKind.Pre + FqName("arrow.analysis.post"), FqName("arrow.analysis.RefinementDSLKt.post") -> + SpecialKind.Post + FqName("arrow.analysis.invariant"), FqName("arrow.analysis.RefinementDSLKt.invariant") -> + SpecialKind.Invariant + FqName("arrow.analysis.unsafeCall"), FqName("arrow.analysis.RefinementDSLKt.unsafeCall") -> + SpecialKind.TrustCall + FqName("arrow.analysis.unsafeBlock"), FqName("arrow.analysis.RefinementDSLKt.unsafeBlock") -> + SpecialKind.TrustBlock + FqName("arrow.analysis.doNotLookAtArgumentsWhen"), + FqName("arrow.analysis.RefinementDSLKt.doNotLookAtArgumentsWhen") -> SpecialKind.NotLookArgs + else -> null + } + +/** Returns `true` if [this] resolved call is calling [kotlin.require] */ +internal fun ResolvedCall.isRequireCall(): Boolean = + resultingDescriptor.fqNameSafe == FqName("kotlin.require") + +/** Returns `true` if [this] resolved call is calling Java's built-in [assert] */ +internal fun ResolvedCall.isAssertCall(): Boolean = + resultingDescriptor.fqNameSafe == FqName(AssertExpression.FAKE_ASSERT_NAME) + +/** Returns 'true' if the resolved call represents `?:` */ +internal fun ResolvedCall.isElvisOperator(): Boolean = + resultingDescriptor.fqNameSafe == FqName("") + +/** Returns `true` if the function has either a dispatch or an extension receiver */ +internal fun ResolvedCall.hasReceiver() = + this.resultingDescriptor.dispatchReceiverParameter != null || + this.resultingDescriptor.extensionReceiverParameter != null + +/** Returns 'true' if the only receiver is a class */ +internal fun ResolvedCall.hasClassReceiver() = + extensionReceiver == null && dispatchReceiver != null && dispatchReceiver!!.isClassReceiver + +/** Information about an argument in a resolved call */ +data class ArgumentExpression( + val name: String, + val type: Type, + val isVarArg: Boolean, + val isSpread: Boolean, + val expression: List +) + +/** + * Get all argument expressions for [this] call including extension receiver, dispatch receiver, and + * all value arguments + */ +internal fun ResolvedCall.allArgumentExpressions( + context: ResolutionContext +): List = + listOfNotNull( + (dispatchReceiver ?: extensionReceiver)?.type?.let { + ArgumentExpression( + "this", + it, + isVarArg = false, + isSpread = false, + listOfNotNull(getReceiverExpression()) + ) + } + ) + valueArgumentExpressions(context) + +/** + * this is needed because in Java we call 'post' as > post(thing, predicate, message) whereas in + * Kotlin we use it as extension method > thing.post(predicate, message) + */ +internal fun ResolvedCall.getReceiverOrThisNamedArgument(): Expression? = + this.getReceiverExpression() + ?: this.valueArguments + .entries + .firstOrNull { (name, _) -> name.name.value.contains("this") } + ?.value + ?.arguments + ?.getOrNull(0) + ?.argumentExpression + +/** Get all value arguments for [this] call */ +internal fun ResolvedCall.valueArgumentExpressions( + context: ResolutionContext +): List = + valueArguments.mapNotNull { (param, resolvedArg) -> + val containingType = + if (param.type.isTypeParameter() || param.type.isAnyOrNullableAny()) + (param.containingDeclaration?.containingDeclaration as? ClassDescriptor)?.defaultType + ?: context.types.nothingType + else param.type + when { + resolvedArg is DefaultValueArgument && resolvedArg.valueArgument == null -> + param.defaultValue?.let { defaultValue -> + ArgumentExpression( + param.name.value, + containingType, + isVarArg = param.varargElementType != null, + isSpread = false, + listOf(defaultValue) + ) + } + else -> + ArgumentExpression( + param.name.value, + containingType, + isVarArg = param.varargElementType != null, + isSpread = resolvedArg.arguments.singleOrNull()?.isSpread ?: false, + resolvedArg.arguments.mapNotNull { it.argumentExpression } + ) + } + } + +/** Obtains the expression from the argument with a given [argumentName] */ +internal fun ResolvedCall.arg(argumentName: String, context: ResolutionContext): List? = + allArgumentExpressions(context).find { it.name == argumentName }?.expression + +/** + * Obtains the expression from the argument with a given [argumentName], which should not be a + * vararg + */ +internal fun ResolvedCall.singleArg(argumentName: String, context: ResolutionContext): Expression? = + allArgumentExpressions(context).find { it.name == argumentName }?.expression?.singleOrNull() + +/** + * Obtains the [ResolvedValueArgument] information for the argument with the given [argumentName] + */ +internal fun ResolvedCall.resolvedArg(argumentName: String): ResolvedValueArgument? = + valueArguments.firstNotNullOfOrNull { (descriptor, resolvedArg) -> + resolvedArg.takeIf { descriptor.name.value == argumentName } + } + +/** Obtains the information about the argument whose expression is [arg] */ +internal fun ResolvedCall.referencedArg( + arg: Expression? +): Pair? = + valueArguments.toList().firstOrNull { (_, resolvedArg) -> + resolvedArg.arguments.any { valueArg -> valueArg.argumentExpression?.impl() == arg?.impl() } + } + +internal fun Expression.inTrustedEnvironment(context: ResolutionContext): Boolean { + val parents = parents() + // where does the 2 come from? + // - parent 0 -> ValueArgument + // - parent 1 -> ValueArgumentList + // - parent 2 -> potential CallExpression + val trustCall = + parents.getOrNull(2)?.getResolvedCall(context)?.specialKind == SpecialKind.TrustCall + val trustBlock = + parents.any { it.getResolvedCall(context)?.specialKind == SpecialKind.TrustBlock } + return trustCall || trustBlock +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext.kt new file mode 100644 index 000000000..ca92045f0 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext.kt @@ -0,0 +1,27 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Types +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds + +interface ResolutionContext { + val types: Types + fun handleError(error: ErrorIds, element: Element, msg: String): Unit + fun type(typeReference: TypeReference?): Type? + fun Element.constraintsDSLElements(): List + fun descriptorFor(fqName: FqName): List + fun descriptorFor(declaration: Declaration): DeclarationDescriptor? + fun backingPropertyForConstructorParameter( + parameter: ValueParameterDescriptor + ): PropertyDescriptor? + + val module: ModuleDescriptor +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall.kt new file mode 100644 index 000000000..1a86ca673 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall.kt @@ -0,0 +1,21 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface ResolvedCall { + val callElement: Element + fun getReceiverExpression(): Expression? + fun getReturnType(): Type + val dispatchReceiver: ReceiverValue? + val extensionReceiver: ReceiverValue? + val resultingDescriptor: CallableDescriptor + val valueArguments: Map + val typeArguments: Map +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult.kt new file mode 100644 index 000000000..33d7518a6 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +enum class AnalysisResult { + Retry, + Completed, + ParsingError +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated.kt new file mode 100644 index 000000000..dc7a9754b --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated.kt @@ -0,0 +1,25 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName + +interface Annotated { + fun annotations(): Annotations + + val hasPreOrPostAnnotation: Boolean + get() = + annotations().run { + hasAnnotation(FqName("arrow.analysis.Pre")) || hasAnnotation(FqName("arrow.analysis.Post")) + } + + val hasPackageWithLawsAnnotation: Boolean + get() = annotations().hasAnnotation(FqName("arrow.analysis.PackagesWithLaws")) + + val packageWithLawsAnnotation: AnnotationDescriptor? + get() = annotations().findAnnotation(FqName("arrow.analysis.PackagesWithLaws")) + + val hasDoNotLookAtArgumentsAnnotation: Boolean + get() = annotations().hasAnnotation(FqName("arrow.analysis.DoNotLookAtArguments")) +} + +val Annotated.hasInterestingAnnotation: Boolean + get() = hasPreOrPostAnnotation || hasDoNotLookAtArgumentsAnnotation diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor.kt new file mode 100644 index 000000000..9d4436095 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface AnnotationDescriptor { + val allValueArguments: Map + + fun argumentValueAsString(argName: String): String? + fun argumentValueAsArrayOfString(argName: String): List + + val fqName: FqName? + + val type: Type +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations.kt new file mode 100644 index 000000000..c13fa6817 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName + +interface Annotations { + + fun iterable(): Iterable + + val impl: Any + + fun findAnnotation(fqName: FqName): AnnotationDescriptor? + + fun hasAnnotation(fqName: FqName): Boolean + + fun isEmpty(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor.kt new file mode 100644 index 000000000..584007737 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface CallableDescriptor : DeclarationDescriptor { + val allParameters: List + val extensionReceiverParameter: ReceiverParameterDescriptor? + val dispatchReceiverParameter: ReceiverParameterDescriptor? + val typeParameters: List + val returnType: Type? + val valueParameters: List + val overriddenDescriptors: Collection +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor.kt new file mode 100644 index 000000000..cca653a56 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface CallableMemberDescriptor : CallableDescriptor, MemberDescriptor { + val kind: Kind + + enum class Kind { + DECLARATION, + FAKE_OVERRIDE, + DELEGATION, + SYNTHESIZED + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor.kt new file mode 100644 index 000000000..8d089ed5e --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor.kt @@ -0,0 +1,38 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface ClassDescriptor : DeclarationDescriptor, ClassifierDescriptorWithTypeParameters { + + val unsubstitutedMemberScope: MemberScope + val staticScope: MemberScope + val unsubstitutedInnerClassesScope: MemberScope + val completeUnsubstitutedScope: MemberScope + get() = + CombinedMemberScope( + listOf(unsubstitutedMemberScope, staticScope, unsubstitutedInnerClassesScope) + ) + + val constructors: Collection + val companionObjectDescriptor: ClassDescriptor? + val kind: ClassKind + val isCompanionObject: Boolean + val isData: Boolean + val isInline: Boolean + val isFun: Boolean + val isValue: Boolean + val isEnumEntry: Boolean + val thisAsReceiverParameter: ReceiverParameterDescriptor + val unsubstitutedPrimaryConstructor: ConstructorDescriptor? + val sealedSubclasses: Collection + val superTypes: Collection + + enum class ClassKind { + CLASS, + INTERFACE, + ENUM_CLASS, + ENUM_ENTRY, + ANNOTATION_CLASS, + OBJECT + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor.kt new file mode 100644 index 000000000..9264fe8d7 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface ClassifierDescriptor { + val typeConstructor: TypeConstructor + val defaultType: Type +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters.kt new file mode 100644 index 000000000..32f1ce709 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface ClassifierDescriptorWithTypeParameters : + ClassifierDescriptor, DeclarationDescriptorWithVisibility, MemberDescriptor { + val isInner: Boolean + + val declaredTypeParameters: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor.kt new file mode 100644 index 000000000..424c0cc6e --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface ConstructorDescriptor : FunctionDescriptor { + val constructedClass: ClassDescriptor + val isPrimary: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor.kt new file mode 100644 index 000000000..0276f91da --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName + +interface DeclarationDescriptor : Named, Annotated { + val containingDeclaration: DeclarationDescriptor? + val containingPackage: FqName? + fun element(): Element? + val fqNameSafe: FqName + fun impl(): Any +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility.kt new file mode 100644 index 000000000..5429a02bc --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface DeclarationDescriptorWithVisibility : DeclarationDescriptor { + val visibility: Visibility +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument.kt new file mode 100644 index 000000000..71fa7d37a --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument + +interface DefaultValueArgument : ResolvedValueArgument { + val valueArgument: ValueArgument? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument.kt new file mode 100644 index 000000000..1292d8255 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument + +interface ExpressionValueArgument : ResolvedValueArgument { + val valueArgument: ValueArgument? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor.kt new file mode 100644 index 000000000..3239764b6 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface FieldDescriptor : Annotated { + val correspondingProperty: PropertyDescriptor +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor.kt new file mode 100644 index 000000000..78ac31841 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor.kt @@ -0,0 +1,25 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface FunctionDescriptor : CallableMemberDescriptor { + val isOperator: Boolean + val isInfix: Boolean + val isInline: Boolean + val isTailrec: Boolean + val isSuspend: Boolean +} + +/** Removes the indirection from type aliases in a descriptor. */ +val DeclarationDescriptor.withAliasUnwrapped: DeclarationDescriptor + get() = + when (this) { + is FunctionDescriptor -> this.withAliasUnwrapped + else -> this + } + +/** Removes the indirection from type aliases in a descriptor. */ +val FunctionDescriptor.withAliasUnwrapped: FunctionDescriptor + get() = + when (this) { + is TypeAliasConstructorDescriptor -> this.underlyingConstructorDescriptor.withAliasUnwrapped + else -> this + } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor.kt new file mode 100644 index 000000000..274bc36d5 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface LocalVariableDescriptor : VariableDescriptor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor.kt new file mode 100644 index 000000000..82412d769 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface MemberDescriptor : DeclarationDescriptor { + val modality: Modality + val visibility: Visibility + val isExpect: Boolean + val isActual: Boolean + val isExternal: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope.kt new file mode 100644 index 000000000..0922ff091 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope.kt @@ -0,0 +1,23 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name + +interface MemberScope { + fun getClassifierNames(): Set + + fun getFunctionNames(): Set + + fun getVariableNames(): Set + + fun getContributedDescriptors(filter: (name: String) -> Boolean): List +} + +class CombinedMemberScope(private val scopes: Collection) : MemberScope { + override fun getClassifierNames(): Set = scopes.flatMap { it.getClassifierNames() }.toSet() + override fun getFunctionNames(): Set = scopes.flatMap { it.getFunctionNames() }.toSet() + override fun getVariableNames(): Set = scopes.flatMap { it.getVariableNames() }.toSet() + override fun getContributedDescriptors( + filter: (name: String) -> Boolean + ): List = + scopes.flatMap { it.getContributedDescriptors(filter) }.distinctBy { it.impl() } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality.kt new file mode 100644 index 000000000..65d910e7a --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +enum class Modality { + FINAL, + SEALED, + OPEN, + ABSTRACT +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor.kt new file mode 100644 index 000000000..072d1a517 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor.kt @@ -0,0 +1,10 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name + +interface ModuleDescriptor : DeclarationDescriptor { + fun getPackage(pck: String): PackageViewDescriptor? + fun getSubPackagesOf(fqName: FqName): List + val stableName: Name? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named.kt new file mode 100644 index 000000000..424f4e624 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name + +interface Named { + val name: Name +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor.kt new file mode 100644 index 000000000..91dd3d2d1 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface PackageFragmentDescriptor : DeclarationDescriptor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor.kt new file mode 100644 index 000000000..5c36ee64d --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName + +interface PackageViewDescriptor : DeclarationDescriptor { + val memberScope: MemberScope + val fqName: FqName +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor.kt new file mode 100644 index 000000000..33f28c536 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface ParameterDescriptor : ValueDescriptor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor.kt new file mode 100644 index 000000000..ff8c40d5e --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface PropertyAccessorDescriptor : VariableAccessorDescriptor { + override val overriddenDescriptors: Collection +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor.kt new file mode 100644 index 000000000..70b495ffc --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface PropertyDescriptor : VariableDescriptorWithAccessors, CallableMemberDescriptor { + val isSetterProjectedOut: Boolean + val accessors: List + val backingField: FieldDescriptor? + val delegateField: FieldDescriptor? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor.kt new file mode 100644 index 000000000..a902306ec --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface ReceiverParameterDescriptor : ParameterDescriptor { + val value: ReceiverValue +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue.kt new file mode 100644 index 000000000..6bc38cf41 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface ReceiverValue { + val type: Type + val isClassReceiver: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument.kt new file mode 100644 index 000000000..290da38a3 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument + +interface ResolvedValueArgument { + val arguments: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor.kt new file mode 100644 index 000000000..214a2476c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface SimpleFunctionDescriptor : FunctionDescriptor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor.kt new file mode 100644 index 000000000..2aca498d5 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface TypeAliasConstructorDescriptor : ConstructorDescriptor { + val underlyingConstructorDescriptor: ConstructorDescriptor + fun getContainingDeclaration(): TypeAliasDescriptor +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor.kt new file mode 100644 index 000000000..42fbf64a7 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor.kt @@ -0,0 +1,14 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface TypeAliasDescriptor : ClassifierDescriptorWithTypeParameters { + + val underlyingType: Type + + val expandedType: Type + + val classDescriptor: ClassDescriptor? + + val constructors: Collection +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor.kt new file mode 100644 index 000000000..527055790 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor.kt @@ -0,0 +1,11 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface TypeConstructor { + val parameters: List + val supertypes: Collection + val isFinal: Boolean + val isDenotable: Boolean + val declarationDescriptor: ClassifierDescriptor? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor.kt new file mode 100644 index 000000000..8b9e65ca2 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance + +interface TypeParameterDescriptor : ClassifierDescriptor { + val isReified: Boolean + val variance: Variance + val upperBounds: List + + val index: Int + val isCapturedFromOuterDeclaration: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor.kt new file mode 100644 index 000000000..a4ec11f4f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface ValueDescriptor : CallableDescriptor { + val type: Type +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor.kt new file mode 100644 index 000000000..482ac4b5d --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface ValueParameterDescriptor : VariableDescriptor, ParameterDescriptor { + val index: Int + val isCrossinline: Boolean + val isNoinline: Boolean + val varargElementType: Type? + fun declaresDefaultValue(): Boolean + val defaultValue: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor.kt new file mode 100644 index 000000000..857c5efea --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface VariableAccessorDescriptor : FunctionDescriptor { + val correspondingVariable: VariableDescriptorWithAccessors +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor.kt new file mode 100644 index 000000000..fd4ab99fb --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface VariableDescriptor : ValueDescriptor { + val isVar: Boolean + val isConst: Boolean + val isLateInit: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors.kt new file mode 100644 index 000000000..cf9c47d00 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface VariableDescriptorWithAccessors : VariableDescriptor { + val getter: VariableAccessorDescriptor? + + val isDelegated: Boolean + + val setter: VariableAccessorDescriptor? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility.kt new file mode 100644 index 000000000..2c349c6d1 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors + +interface Visibility { + val isPublicAPI: Boolean + val name: String +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated.kt new file mode 100644 index 000000000..d04c0fdc5 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface Annotated : Element { + fun getAnnotations(): List + val annotationEntries: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression.kt new file mode 100644 index 000000000..c0381ece7 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface AnnotatedExpression : Annotated, AnnotationsContainer { + val baseExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation.kt new file mode 100644 index 000000000..928ccba4a --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface Annotation { + val entries: List + val useSiteTarget: AnnotationUseSiteTarget? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry.kt new file mode 100644 index 000000000..d51a8043f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface AnnotationEntry : CallElement { + val typeReference: TypeReference? + val useSiteTarget: AnnotationUseSiteTarget? + val shortName: Name? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget.kt new file mode 100644 index 000000000..9093c7b42 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +enum class AnnotationUseSiteTarget { + FIELD, + FILE, + PROPERTY, + PROPERTY_GETTER, + PROPERTY_SETTER, + RECEIVER, + CONSTRUCTOR_PARAMETER, + SETTER_PARAMETER, + PROPERTY_DELEGATE_FIELD +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer.kt new file mode 100644 index 000000000..37ed913cb --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface AnnotationsContainer : Element diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer.kt new file mode 100644 index 000000000..457010075 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface AnonymousInitializer : Declaration { + val containingDeclaration: Declaration + val body: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression.kt new file mode 100644 index 000000000..9a2c495e9 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ArrayAccessExpression : ReferenceExpression { + val arrayExpression: Expression? + val indexExpressions: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression.kt new file mode 100644 index 000000000..053d242a5 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +// this represents the following Java +// > assert condition ; +// > assert condition : detail ; +interface AssertExpression : Expression { + val condition: Expression + val detail: Expression? + + companion object { + val FAKE_ASSERT_NAME: String = "" + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression.kt new file mode 100644 index 000000000..2a0677cf4 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression.kt @@ -0,0 +1,11 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface AssignmentExpression : OperationExpression { + /** The token as appears in the source code (+, -, ...) */ + val operationToken: String + + /** One of the codes from [org.jetbrains.kotlin.lexer.KtTokens] (PLUS, MINUS, ...) */ + val operationTokenRpr: String + val left: Expression? + val right: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression.kt new file mode 100644 index 000000000..e4e43a970 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression.kt @@ -0,0 +1,11 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface BinaryExpression : OperationExpression { + /** The token as appears in the source code (+, -, ...) */ + val operationToken: String + + /** One of the codes from [org.jetbrains.kotlin.lexer.KtTokens] (PLUS, MINUS, ...) */ + val operationTokenRpr: String + val left: Expression? + val right: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression.kt new file mode 100644 index 000000000..1707375d7 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface BlockExpression : Element, Expression { + val firstStatement: Expression? + val statements: List + val implicitReturnFromLast: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression.kt new file mode 100644 index 000000000..a0b7e71d5 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface BreakExpression : ExpressionWithLabel diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement.kt new file mode 100644 index 000000000..ddf0ab26c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface CallElement : Element { + val calleeExpression: Expression? + val valueArguments: List + val lambdaArguments: List + val typeArguments: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression.kt new file mode 100644 index 000000000..3e421b709 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface CallExpression : CallElement, ReferenceExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration.kt new file mode 100644 index 000000000..644f688c2 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface CallableDeclaration : NamedDeclaration, TypeParameterListOwner { + val valueParameterList: ParameterList? + val valueParameters: List + val receiverTypeReference: TypeReference? + val typeReference: TypeReference? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression.kt new file mode 100644 index 000000000..119135304 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface CallableReferenceExpression : DoubleColonExpression { + val callableReference: SimpleNameExpression +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause.kt new file mode 100644 index 000000000..6d28271bb --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface CatchClause : Element { + val parameterList: ParameterList? + val catchParameter: Parameter? + val catchBody: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class.kt new file mode 100644 index 000000000..b3ad1ffdc --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface Class : ClassOrObject { + fun getProperties(): List + fun isInterface(): Boolean + fun isEnum(): Boolean + fun isData(): Boolean + fun isSealed(): Boolean + fun isInner(): Boolean + fun isInline(): Boolean + fun isValue(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody.kt new file mode 100644 index 000000000..01d275be6 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ClassBody : DeclarationContainer, Element { + val anonymousInitializers: List + val properties: List + val functions: List + val enumEntries: List + val allCompanionObjects: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer.kt new file mode 100644 index 000000000..7b897ddf1 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ClassInitializer : AnonymousInitializer diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression.kt new file mode 100644 index 000000000..d427e9ec0 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ClassLiteralExpression : DoubleColonExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject.kt new file mode 100644 index 000000000..b241f0b49 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ClassOrObject : NamedDeclaration, PureClassOrObject { + fun getAnonymousInitializers(): List + fun isTopLevel(): Boolean + fun getPrimaryConstructorParameterList(): ParameterList? = primaryConstructor?.valueParameterList + fun isAnnotation(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation.kt new file mode 100644 index 000000000..ff63d7181 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation.kt @@ -0,0 +1,10 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface CompilerMessageSourceLocation { + val column: Int + val columnEnd: Int + val line: Int + val lineContent: String? + val lineEnd: Int + val path: String +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression.kt new file mode 100644 index 000000000..008dc6816 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ConstantExpression : Expression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor.kt new file mode 100644 index 000000000..1656feab1 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface Constructor> : Function { + fun getContainingClassOrObject(): ClassOrObject +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression.kt new file mode 100644 index 000000000..c80b7e945 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ConstructorCalleeExpression { + val typeReference: TypeReference? + val constructorReferenceExpression: SimpleNameExpression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall.kt new file mode 100644 index 000000000..297412127 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ConstructorDelegationCall : Element, CallElement { + val isImplicit: Boolean + val isCallToThis: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression.kt new file mode 100644 index 000000000..6b07f0e46 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ConstructorDelegationReferenceExpression : Expression, ReferenceExpression { + val isThis: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression.kt new file mode 100644 index 000000000..7d8745037 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ContinueExpression : ExpressionWithLabel diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration.kt new file mode 100644 index 000000000..53a9841b7 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface Declaration : Expression, ModifierListOwner { + val name: String? + val parents: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer.kt new file mode 100644 index 000000000..af62a41b9 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface DeclarationContainer { + val declarations: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody.kt new file mode 100644 index 000000000..5701a07f8 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface DeclarationWithBody : Declaration { + val bodyExpression: Expression? + fun hasBlockBody(): Boolean + fun hasBody(): Boolean + fun hasDeclaredReturnType(): Boolean + fun body(): Expression? + + val valueParameters: List + val bodyBlockExpression: BlockExpression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer.kt new file mode 100644 index 000000000..1b33add28 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface DeclarationWithInitializer : Declaration { + val initializer: Expression? + fun hasInitializer(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry.kt new file mode 100644 index 000000000..7a8134db7 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface DelegatedSuperTypeEntry : SuperTypeListEntry { + val delegateExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration.kt new file mode 100644 index 000000000..936d164cd --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface DestructuringDeclaration : DeclarationWithInitializer { + val entries: List + val isVar: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry.kt new file mode 100644 index 000000000..2e74eeb84 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface DestructuringDeclarationEntry : VariableDeclaration diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression.kt new file mode 100644 index 000000000..930d3191c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface DoWhileExpression : WhileExpressionBase diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression.kt new file mode 100644 index 000000000..ba21ff00c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface DotQualifiedExpression : QualifiedExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression.kt new file mode 100644 index 000000000..55a346c25 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface DoubleColonExpression : Expression { + val receiverExpression: Expression? + val hasQuestionMarks: Boolean + val isEmptyLHS: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element.kt new file mode 100644 index 000000000..df252ec77 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element.kt @@ -0,0 +1,14 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor + +interface Element : PureElement { + val text: String + fun impl(): Any + fun getResolvedCall(context: ResolutionContext): ResolvedCall? + fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? + fun parents(): List + fun location(): CompilerMessageSourceLocation? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry.kt new file mode 100644 index 000000000..af05cdeb9 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface EnumEntry : Class { + fun hasInitializer(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression.kt new file mode 100644 index 000000000..a34e6fad2 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +interface Expression : Element { + fun type(context: ResolutionContext): Type? + fun lastBlockStatementOrThis(): Expression +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument.kt new file mode 100644 index 000000000..0fcb878a1 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ExpressionLambdaArgument : LambdaArgument diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument.kt new file mode 100644 index 000000000..6626288a1 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ExpressionResolvedValueArgument { + val argumentExpression: Expression? + val isSpread: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName.kt new file mode 100644 index 000000000..0f70fa9b1 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ExpressionValueArgumentName : ValueArgumentName diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel.kt new file mode 100644 index 000000000..c7dfcd71b --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ExpressionWithLabel : Expression { + fun getTargetLabel(): SimpleNameExpression? + fun getLabelName(): String? + fun getLabelNameAsName(): Name? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection.kt new file mode 100644 index 000000000..cbb8b7ccd --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface FinallySection : Element { + val finalExpression: BlockExpression +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression.kt new file mode 100644 index 000000000..99920bf7b --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ForExpression : LoopExpression { + val loopParameter: Parameter? + val destructuringDeclaration: DestructuringDeclaration? + val loopRange: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName.kt new file mode 100644 index 000000000..b8c7d4025 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +data class FqName(val name: String) { + override fun toString(): String = name +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function.kt new file mode 100644 index 000000000..4d6890ec6 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface Function : DeclarationWithBody, CallableDeclaration { + val isLocal: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral.kt new file mode 100644 index 000000000..22eb9180f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface FunctionLiteral : Function { + fun hasParameterSpecification(): Boolean + override val bodyExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression.kt new file mode 100644 index 000000000..063aba212 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface IfExpression : Expression { + val condition: Expression? + val thenExpression: Expression? + val elseExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList.kt new file mode 100644 index 000000000..7ac66783d --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface InitializerList : Element { + val entries: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel.kt new file mode 100644 index 000000000..301302749 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface InstanceExpressionWithLabel : ExpressionWithLabel { + // val instanceReference: ReferenceExpression // unused +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression.kt new file mode 100644 index 000000000..519c8fc8e --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface IsExpression : Expression, OperationExpression { + val leftHandSide: Expression + val typeReference: TypeReference? + override val operationReference: SimpleNameExpression + val isNegated: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression.kt new file mode 100644 index 000000000..e1a372e49 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface LabelReferenceExpression : SimpleNameExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression.kt new file mode 100644 index 000000000..8c3904179 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface LabeledExpression : ExpressionWithLabel { + val baseExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument.kt new file mode 100644 index 000000000..c8ca98474 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface LambdaArgument : ValueArgument { + fun getLambdaExpression(): LambdaExpression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression.kt new file mode 100644 index 000000000..2958e94af --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface LambdaExpression : Expression { + val functionLiteral: FunctionLiteral + val valueParameters: List + val bodyExpression: Expression? + fun hasDeclaredReturnType(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression.kt new file mode 100644 index 000000000..b8b75d473 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface LoopExpression : Expression { + val body: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList.kt new file mode 100644 index 000000000..36be56382 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ModifierList : AnnotationsContainer { + val annotations: List + val annotationEntries: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner.kt new file mode 100644 index 000000000..c9707bf6f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ModifierListOwner : Annotated { + val modifierList: ModifierList? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name.kt new file mode 100644 index 000000000..b2ac7d635 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +data class Name(val value: String) { + override fun toString(): String = value +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression.kt new file mode 100644 index 000000000..28fcf5d10 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface NameReferenceExpression : SimpleNameExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named.kt new file mode 100644 index 000000000..5663ddc0c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface Named { + val nameAsName: Name? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration.kt new file mode 100644 index 000000000..e4618ad11 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface NamedDeclaration : Declaration, Named { + val nameAsSafeName: Name + val fqName: FqName? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction.kt new file mode 100644 index 000000000..368a57477 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface NamedFunction : Function, DeclarationWithInitializer diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression.kt new file mode 100644 index 000000000..b13fad168 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface NullExpression : ConstantExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration.kt new file mode 100644 index 000000000..74b58331f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ObjectDeclaration : ClassOrObject { + fun isCompanion(): Boolean + fun isObjectLiteral(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression.kt new file mode 100644 index 000000000..7b669fa3a --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ObjectLiteralExpression : Expression { + val objectDeclaration: ObjectDeclaration +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression.kt new file mode 100644 index 000000000..a4415fab6 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface OperationExpression : Expression { + val operationReference: SimpleNameExpression +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression.kt new file mode 100644 index 000000000..ec9bf9361 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface OperationReferenceExpression : SimpleNameExpression { + fun isConventionOperator(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter.kt new file mode 100644 index 000000000..05bc316ed --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface Parameter : CallableDeclaration { + fun hasDefaultValue(): Boolean + val defaultValue: Expression? + val isMutable: Boolean + val isVarArg: Boolean + fun hasValOrVar(): Boolean + val destructuringDeclaration: DestructuringDeclaration? + val isLoopParameter: Boolean + val isCatchParameter: Boolean + val ownerFunction: DeclarationWithBody? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList.kt new file mode 100644 index 000000000..d8b1ec0d3 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ParameterList { + val parameters: List + val ownerFunction: DeclarationWithBody? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression.kt new file mode 100644 index 000000000..ad5b0526b --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ParenthesizedExpression : Expression { + val expression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression.kt new file mode 100644 index 000000000..cf008c2ce --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface PostfixExpression : UnaryExpression { + override val baseExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression.kt new file mode 100644 index 000000000..62292cce8 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface PrefixExpression : UnaryExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor.kt new file mode 100644 index 000000000..65208b42d --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface PrimaryConstructor : Constructor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind.kt new file mode 100644 index 000000000..f3bd5e52c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +enum class ProjectionKind { + IN, + OUT, + STAR, + NONE +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property.kt new file mode 100644 index 000000000..95fe08660 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property.kt @@ -0,0 +1,17 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface Property : VariableDeclaration { + val isLocal: Boolean + val isMember: Boolean + val isTopLevel: Boolean + val accessors: List + val getter: PropertyAccessor? + val setter: PropertyAccessor? + fun hasDelegate(): Boolean + val delegate: PropertyDelegate? + fun hasDelegateExpression(): Boolean + val delegateExpression: Expression? + fun hasDelegateExpressionOrInitializer(): Boolean + val delegateExpressionOrInitializer: Expression? + fun hasBody(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor.kt new file mode 100644 index 000000000..3d6e48784 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor.kt @@ -0,0 +1,10 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface PropertyAccessor : DeclarationWithBody, ModifierListOwner, DeclarationWithInitializer { + val isSetter: Boolean + val isGetter: Boolean + val parameterList: ParameterList? + val parameter: Parameter? + val returnTypeReference: TypeReference? + val property: Property +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate.kt new file mode 100644 index 000000000..3f3264efe --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface PropertyDelegate : Element { + val expression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject.kt new file mode 100644 index 000000000..b747b79ad --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject.kt @@ -0,0 +1,19 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface PureClassOrObject : PureElement, DeclarationContainer { + val name: String? + val isLocal: Boolean + + val superTypeListEntries: List + + val companionObjects: List + fun hasExplicitPrimaryConstructor(): Boolean + fun hasPrimaryConstructor(): Boolean + val primaryConstructor: PrimaryConstructor? + val primaryConstructorModifierList: ModifierList? + + val primaryConstructorParameters: List + + val secondaryConstructors: List + val body: ClassBody? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement.kt new file mode 100644 index 000000000..c3febec71 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface PureElement { + val psiOrParent: Element +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression.kt new file mode 100644 index 000000000..5c6f2633f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface QualifiedExpression : Expression { + val receiverExpression: Expression + val selectorExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression.kt new file mode 100644 index 000000000..885a3a4f8 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ReferenceExpression : Expression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression.kt new file mode 100644 index 000000000..66cc1b5f6 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ReturnExpression : ExpressionWithLabel { + val returnedExpression: Expression? + val labeledExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression.kt new file mode 100644 index 000000000..60cd7b39e --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SafeQualifiedExpression : Expression, QualifiedExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor.kt new file mode 100644 index 000000000..63b9002a6 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SecondaryConstructor : Constructor { + fun getDelegationCall(): ConstructorDelegationCall? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType.kt new file mode 100644 index 000000000..cdcbab012 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SelfType : TypeElement { + override val typeArgumentsAsTypes: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression.kt new file mode 100644 index 000000000..5a582a905 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SimpleNameExpression : ReferenceExpression { + fun getReferencedName(): String + fun getReferencedNameAsName(): Name +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression.kt new file mode 100644 index 000000000..42e36710d --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression.kt @@ -0,0 +1,11 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +sealed interface StringTemplateEntry + +data class StringTemplateEntryString(val string: String) : StringTemplateEntry + +data class StringTemplateEntryExpression(val expression: Expression) : StringTemplateEntry + +interface StringTemplateExpression : Expression { + val entries: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression.kt new file mode 100644 index 000000000..2a3ae3dd3 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SuperExpression : InstanceExpressionWithLabel { + val superTypeQualifier: TypeReference? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry.kt new file mode 100644 index 000000000..75cb3bbcd --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SuperTypeCallEntry : SuperTypeListEntry, CallElement diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry.kt new file mode 100644 index 000000000..2cdc9a39f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SuperTypeEntry : SuperTypeListEntry diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList.kt new file mode 100644 index 000000000..9421f3e12 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SuperTypeList : Element { + val entries: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry.kt new file mode 100644 index 000000000..e9a31729f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SuperTypeListEntry { + val typeReference: TypeReference? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression.kt new file mode 100644 index 000000000..2ff973820 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface SynchronizedExpression : Expression { + val subject: Expression + val block: BlockExpression +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression.kt new file mode 100644 index 000000000..4a664510b --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ThisExpression : InstanceExpressionWithLabel diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression.kt new file mode 100644 index 000000000..031bf5562 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ThreePieceForExpression : LoopExpression { + val initializer: List + val condition: Expression? + val update: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression.kt new file mode 100644 index 000000000..5ad6d0307 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ThrowExpression : Expression { + val thrownExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression.kt new file mode 100644 index 000000000..0e6cd7b8d --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TryExpression : Expression { + val tryBlock: BlockExpression + val catchClauses: List + val finallyBlock: FinallySection? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias.kt new file mode 100644 index 000000000..d5d3a6023 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TypeAlias : NamedDeclaration { + fun isTopLevel(): Boolean + fun getTypeReference(): TypeReference? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList.kt new file mode 100644 index 000000000..8399e8c2d --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TypeArgumentList { + val arguments: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression.kt new file mode 100644 index 000000000..1ca68faef --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +enum class TypeCastExpresionKind { + POSITIVE_TYPE_CAST, + QUESTION_TYPE_CAST +} + +interface TypeCastExpression : OperationExpression { + /** The token as appears in the source code (+, -, ...) */ + val operationToken: String + + val left: Expression? + val right: TypeReference? + val kind: TypeCastExpresionKind +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint.kt new file mode 100644 index 000000000..5b2e61591 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TypeConstraint { + val subjectTypeParameterName: SimpleNameExpression? + val boundTypeReference: TypeReference? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList.kt new file mode 100644 index 000000000..0679d4285 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TypeConstraintList { + val constraints: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement.kt new file mode 100644 index 000000000..fd99a803c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TypeElement : Element { + val typeArgumentsAsTypes: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter.kt new file mode 100644 index 000000000..2a19c80e3 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance + +interface TypeParameter { + val variance: Variance + val extendsBounds: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList.kt new file mode 100644 index 000000000..ff9b06129 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TypeParameterList { + val parameters: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner.kt new file mode 100644 index 000000000..492547571 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TypeParameterListOwner : NamedDeclaration { + val typeParameterList: TypeParameterList? + val typeConstraintList: TypeConstraintList? + val typeConstraints: List + val typeParameters: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection.kt new file mode 100644 index 000000000..eca109845 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TypeProjection { + val projectionKind: ProjectionKind + val typeReference: TypeReference? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference.kt new file mode 100644 index 000000000..1d1c0ff39 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface TypeReference : Annotated, AnnotationsContainer { + val typeElement: TypeElement? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression.kt new file mode 100644 index 000000000..6571bb1d8 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface UnaryExpression : Expression, OperationExpression { + val baseExpression: Expression? + override val operationReference: SimpleNameExpression +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument.kt new file mode 100644 index 000000000..21b3151ef --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ValueArgument : ExpressionResolvedValueArgument { + fun getArgumentName(): ValueArgumentName? + fun isNamed(): Boolean + fun isExternal(): Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList.kt new file mode 100644 index 000000000..e1110f6b5 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ValueArgumentList { + val arguments: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName.kt new file mode 100644 index 000000000..0d641dc20 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface ValueArgumentName { + val asName: Name + val referenceExpression: SimpleNameExpression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration.kt new file mode 100644 index 000000000..178002ea6 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface VariableDeclaration : CallableDeclaration, DeclarationWithInitializer { + val isVar: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition.kt new file mode 100644 index 000000000..aefa9b8b3 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface WhenCondition : Element diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange.kt new file mode 100644 index 000000000..6a9a5016c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface WhenConditionInRange : WhenCondition { + val isNegated: Boolean + val rangeExpression: Expression? + val operationReference: OperationReferenceExpression +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern.kt new file mode 100644 index 000000000..89ac5301f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface WhenConditionIsPattern : WhenCondition { + val isNegated: Boolean + val typeReference: TypeReference? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression.kt new file mode 100644 index 000000000..0e48db3fa --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface WhenConditionWithExpression : WhenCondition { + val expression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry.kt new file mode 100644 index 000000000..00111759d --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface WhenEntry : Element { + val isElse: Boolean + val expression: Expression? + val conditions: List +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression.kt new file mode 100644 index 000000000..ba2a1179c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface WhenExpression : Expression { + val entries: List + val subjectVariable: Property? + val subjectExpression: Expression? + val elseExpression: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression.kt new file mode 100644 index 000000000..3bb7e6151 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression.kt @@ -0,0 +1,3 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface WhileExpression : WhileExpressionBase diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase.kt new file mode 100644 index 000000000..f06a17718 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements + +interface WhileExpressionBase : LoopExpression { + val condition: Expression? +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type.kt new file mode 100644 index 000000000..e2d4fa7a7 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type.kt @@ -0,0 +1,40 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor + +interface Type : Comparable { + val descriptor: ClassDescriptor? + val unwrappedNotNullableType: Type + val isMarkedNullable: Boolean + val arguments: List + + fun isBoolean(): Boolean + fun isNullable(): Boolean + fun isSubtypeOf(other: Type): Boolean + fun isEqualTo(other: Type): Boolean + fun isInt(): Boolean + fun isLong(): Boolean + fun isFloat(): Boolean + fun isDouble(): Boolean + fun isTypeParameter(): Boolean + fun isAnyOrNullableAny(): Boolean + fun isByte(): Boolean + fun isShort(): Boolean + fun isUnsignedNumberType(): Boolean + fun isChar(): Boolean + fun isString(): Boolean + + override fun compareTo(other: Type): Int = + when { + this.isSubtypeOf(other) -> -1 + other.isSubtypeOf(this) -> 1 + else -> 0 + } + + fun intersectIfPossible(other: Type): Type? = + when { + other.isSubtypeOf(this) -> other + this.isSubtypeOf(other) -> this + else -> null + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection.kt new file mode 100644 index 000000000..96f0c7b82 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types + +interface TypeProjection { + val projectionKind: Variance + val type: Type + val isStarProjection: Boolean +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types.kt new file mode 100644 index 000000000..7b95a890a --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types + +interface Types { + val nothingType: Type +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance.kt new file mode 100644 index 000000000..e02e1c8cf --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types + +enum class Variance { + In, + Out, + Invariant +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt new file mode 100644 index 000000000..4ea57c85f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt @@ -0,0 +1,395 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check + +import arrow.meta.continuations.ContSeq +import arrow.meta.continuations.cont +import arrow.meta.continuations.doOnlyWhen +import arrow.meta.continuations.doOnlyWhenNotNull +import arrow.meta.continuations.sequence +import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.THIS_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Constructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DelegatedSuperTypeEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeCallEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.CheckData +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.CurrentBranch +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.CurrentVarInfo +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.NoReturn +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ReturnPoints +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.VarInfo +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.noReturn +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.isALaw +import arrow.meta.plugins.analysis.phases.analysis.solver.search.getConstraintsFor +import arrow.meta.plugins.analysis.phases.analysis.solver.search.getImmediateConstraintsFor +import arrow.meta.plugins.analysis.phases.analysis.solver.search.getOverriddenConstraintsFor +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkDefaultValueInconsistency +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkLiskovStrongerPostcondition +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkLiskovWeakerPrecondition +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkPostConditionsImplication +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkPreconditionsInconsistencies +import arrow.meta.plugins.analysis.smt.ObjectFormula +import arrow.meta.plugins.analysis.smt.substituteDeclarationConstraints + +// 2.1: declarations +// ----------------- +/** + * When the solver is in the prover state check this [declaration] body and constraints for + * - pre-condition inconsistencies, + * - whether the body satisfy all the pre-conditions in calls, + * - whether the post-condition really holds. + */ +internal fun SolverState.checkTopLevel( + context: ResolutionContext, + descriptor: DeclarationDescriptor, + declaration: Declaration, + isConstructor: Boolean, + resultName: ObjectFormula, + bodyCheck: (data: CheckData, checkPost: (finalData: CheckData) -> Unit) -> ContSeq +): ContSeq = + continuationBracket.flatMap { + // bring the constraints in (if there are any) + val constraints = + getConstraintsFor(descriptor)?.let { + solver.substituteDeclarationConstraints(it, mapOf(RESULT_VAR_NAME to resultName)) + } + // initialize the check data + val initialVarInfo = + if (descriptor is CallableDescriptor) { + val thisParam = + when (descriptor) { + is ConstructorDescriptor -> + ParamInfo( + solver, + THIS_VAR_NAME, + THIS_VAR_NAME, + descriptor.constructedClass.defaultType, + declaration, + true + ) + else -> + (descriptor.extensionReceiverParameter ?: descriptor.dispatchReceiverParameter)?.let { + ParamInfo(solver, THIS_VAR_NAME, THIS_VAR_NAME, it.type, declaration) + } + } + val valueParams = + descriptor.valueParameters.map { param -> + val element = + (declaration as? DeclarationWithBody)?.valueParameters?.firstOrNull { + it?.name == param.name.value + } + ParamInfo(solver, param.name.value, param.name.value, param.type, element) + } + val returnParam = + descriptor.returnType?.takeIf { descriptor !is ConstructorDescriptor }?.let { + ParamInfo(solver, RESULT_VAR_NAME, RESULT_VAR_NAME, it, declaration) + } + // additional for 'this@info' + val additional = + if (declaration is NamedDeclaration) { + // Add 'this@functionName' + declaration.nameAsName?.let { name -> + VarInfo(solver, "this@$name", THIS_VAR_NAME, declaration) + } + } else null + // introduce non-nullability and invariants of parameters + initialParameters(thisParam, valueParams, returnParam, context) + listOfNotNull(additional) + } else emptyList() + val data = + CheckData( + context, + ReturnPoints.new(declaration, resultName), + CurrentVarInfo(initialVarInfo), + CurrentBranch.new() + ) + + ContSeq.unit + .map { + // check consistency of pre-conditions + val inconsistentPreconditions = + checkPreconditionsInconsistencies(constraints, data.context, declaration) + ensure(!inconsistentPreconditions) + } + .flatMap { checkDefaultParameters(declaration, data) } + .map { + // check Liskov conditions + val liskovOk = checkLiskovConditions(declaration, descriptor, data.context) + ensure(liskovOk) + } + .flatMap { + // check the body + bodyCheck(data) { finalData -> + // and finally check the post-conditions + checkPostConditionsImplication( + constraints, + isConstructor, + finalData.context, + declaration, + finalData.branch.get() + ) + } + } + } + +internal fun SolverState.checkTopLevelDeclarationWithBody( + context: ResolutionContext, + descriptor: DeclarationDescriptor, + declaration: Declaration, + body: Expression? +): ContSeq = + checkTopLevel(context, descriptor, declaration, isConstructor = false, solver.resultVariable) { + data, + checkPost -> + // only check body when we are not in a @Law + doOnlyWhen(!descriptor.isALaw()) { + checkExpressionConstraints(solver.resultVariable, body, data).map { finalState -> + checkPost(finalState.data) + } + } + } + +internal fun SolverState.checkPrimaryConstructor( + context: ResolutionContext, + descriptor: DeclarationDescriptor, + declaration: PrimaryConstructor +): ContSeq = + checkTopLevel(context, descriptor, declaration, isConstructor = true, solver.thisVariable) { + data, + checkPost -> + postPrimaryConstructor( + context, + declaration.getContainingClassOrObject(), + declaration.bodyExpression, + data, + checkPost + ) + } + +internal fun SolverState.checkImplicitPrimaryConstructor( + context: ResolutionContext, + descriptor: DeclarationDescriptor, + klass: ClassOrObject +): ContSeq = + checkTopLevel(context, descriptor, klass, isConstructor = true, solver.thisVariable) { + data, + checkPost -> + postPrimaryConstructor(context, klass, null, data, checkPost) + } + +internal fun SolverState.postPrimaryConstructor( + context: ResolutionContext, + klass: ClassOrObject, + bodyExpression: Expression?, + data: CheckData, + checkPost: (finalData: CheckData) -> Unit +): ContSeq = + ContSeq.unit + .flatMap { + // introduce 'val' and 'var' from the constructor + introduceImplicitProperties(context, klass) + } + .flatMap { + // call the superclass constructors + // (this will ultimately check the Liskov for classes) + checkSuperTypeEntries(context, klass.superTypeListEntries, data) + } + .flatMap { checkExpressionConstraints(solver.thisVariable, bodyExpression, data) } + .flatMap { finalState -> + checkClassDeclarationInConstructorContext( + solver.thisVariable, + klass.declarations, + finalState.data + ) + .onEach { checkPost(finalState.data) } + } + +private fun SolverState.introduceImplicitProperties( + context: ResolutionContext, + klass: ClassOrObject +): ContSeq = cont { + // if we have 'var' or 'var' in the parameters, + // we need to assign them to fields + // when the constructor is primary + klass.primaryConstructorParameters.filter { it.hasValOrVar() }.forEach { param -> + (context.descriptorFor(param) as? ValueParameterDescriptor) + ?.let { context.backingPropertyForConstructorParameter(it) } + ?.let { propertyDescriptor -> + val paramName = param.nameAsName?.value ?: THIS_VAR_NAME + addConstraint( + NamedConstraint( + "definition of property $paramName", + solver.objects { + equal( + solver.makeObjectVariable(paramName), + field(propertyDescriptor, solver.thisVariable) + ) + } + ), + context + ) + } + } +} + +private fun SolverState.checkSuperTypeEntries( + context: ResolutionContext, + superTypeListEntries: List, + data: CheckData +): ContSeq = + superTypeListEntries + .mapNotNull { entry -> + when (entry) { + is DelegatedSuperTypeEntry -> entry.delegateExpression + is SuperTypeCallEntry -> entry.calleeExpression + else -> null + } + } + .map { expr -> + doOnlyWhenNotNull(expr.getResolvedCall(context), Unit) { call -> + checkRegularFunctionCall(solver.thisVariable, call, expr, data) + } + } + .sequence() + .void() + +private fun SolverState.checkClassDeclarationInConstructorContext( + thisRef: ObjectFormula, + declarations: List, + data: CheckData +): ContSeq = + declarations + .map { decl -> + when (decl) { + is Constructor<*> -> ContSeq.unit // do not check any other constructor + is AnonymousInitializer -> checkExpressionConstraints(thisRef, decl.body, data) + is Property -> + doOnlyWhenNotNull(data.context.descriptorFor(decl), NoReturn) { descriptor -> + val result = field(descriptor, solver.makeObjectVariable(THIS_VAR_NAME)) + checkExpressionConstraints(result, decl.stableBody(), data) + } + else -> ContSeq.unit + } + } + .sequence() + .void() + +internal fun SolverState.checkSecondaryConstructor( + context: ResolutionContext, + descriptor: DeclarationDescriptor, + declaration: SecondaryConstructor +): ContSeq = + checkTopLevel(context, descriptor, declaration, isConstructor = true, solver.thisVariable) { + data, + checkPost -> + ContSeq.unit + .flatMap { + // delegate into the primary constructor, if available + doOnlyWhenNotNull(declaration.getDelegationCall(), data.noReturn()) { delegation -> + doOnlyWhenNotNull(delegation.getResolvedCall(context), data.noReturn()) { call -> + doOnlyWhenNotNull(delegation.calleeExpression, data.noReturn()) { calleeExpression -> + checkRegularFunctionCall(solver.thisVariable, call, calleeExpression, data) + } + } + } + } + .flatMap { stateAfterPrimaryConstructorCall -> + checkExpressionConstraints( + solver.thisVariable, + declaration.bodyExpression, + stateAfterPrimaryConstructorCall.data + ) + .map { finalState -> checkPost(finalState.data) } + } + } + +internal fun SolverState.checkEnumEntry( + context: ResolutionContext, + descriptor: DeclarationDescriptor, + entry: EnumEntry +): ContSeq = + checkTopLevel(context, descriptor, entry, isConstructor = false, solver.thisVariable) { + data, + checkPost -> + ContSeq.unit + .flatMap { + // the supertype entries in an enumeration is the enum itself + checkSuperTypeEntries(context, entry.superTypeListEntries, data) + } + .flatMap { + checkClassDeclarationInConstructorContext(solver.thisVariable, entry.declarations, data) + } + .map { checkPost(data) } + } + +/** Check that the constraints respect subtyping, in particular the Liskov Substitution Principle */ +private fun SolverState.checkLiskovConditions( + declaration: Declaration, + descriptor: DeclarationDescriptor, + context: ResolutionContext +): Boolean { + val immediateConstraints = getImmediateConstraintsFor(descriptor) + val overriddenConstraints = getOverriddenConstraintsFor(descriptor) + return if (immediateConstraints != null && overriddenConstraints != null) { + // pre-conditions should be weaker, + // so the immediate ones should be implied by the overridden ones + val liskovPreOk = bracket { + overriddenConstraints.pre.forEach { addConstraint(it, context) } + immediateConstraints.pre.all { checkLiskovWeakerPrecondition(it, context, declaration) } + } + // post-conditions should be stronger, + // so the overridden ones should be implied by the immediate ones + val liskovPostOk = bracket { + immediateConstraints.post.forEach { addConstraint(it, context) } + overriddenConstraints.post.all { checkLiskovStrongerPostcondition(it, context, declaration) } + } + // check that both things are OK + liskovPreOk && liskovPostOk + } else { + true + } +} + +/** Check that the values of default parameters satisfy the preconditions */ +private fun SolverState.checkDefaultParameters( + declaration: Declaration, + data: CheckData +): ContSeq = + when (declaration) { + is DeclarationWithBody -> + scopedBracket { + declaration + .valueParameters + .filterNotNull() + .mapNotNull { param -> + val name = param.name + val defaultValue = param.defaultValue + if (name != null && defaultValue != null) { + checkExpressionConstraints(name, defaultValue, data) + } else { + null + } + } + .sequence() + .map { + val inconsistentDefaults = checkDefaultValueInconsistency(data.context, declaration) + ensure(!inconsistentDefaults) + } + } + else -> cont {} + } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt new file mode 100644 index 000000000..a6e2e0c05 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt @@ -0,0 +1,155 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check + +import arrow.meta.continuations.ContSeq +import arrow.meta.continuations.doOnlyWhen +import arrow.meta.continuations.doOnlyWhenNotNull +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeAlias +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages +import arrow.meta.plugins.analysis.phases.analysis.solver.hasImplicitPrimaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState + +/* [NOTE: which do we use continuations?] + * It might look odd that we create continuations when checking + * the body, instead of simply performing the steps. + * + * The reason to do so is to have the ability to decide whether + * and how to execute the "remainder of the analysis". For example: + * - if we find a `return`, we ought to stop, since no further + * statement is executed; + * - if we are in a condition, the "remainder of the analysis" + * ought to be executed more than once; in fact once per possible + * execution flow. + * + * What makes the problem complicated, and brings in continuations, + * is that these decisions may have to be made within an argument: + * + * ``` + * f(if (x > 0) 3 else 2) + * ``` + * + * yet they must affect the global ongoing computations. Continuations + * allow us to do so by saying that checking `if (x > 0) 3 else 2` + * is the current computation, and checking `f(...)` the "remainder". + * Thus, the conditional `if` can duplicate the check of the "remainder". + */ + +/** When the solver is in the prover state check this [declaration] body constraints */ +public fun SolverState.checkDeclarationConstraints( + context: ResolutionContext, + declaration: Declaration, + descriptor: DeclarationDescriptor +) { + if (!hadParseErrors() && declaration.shouldBeAnalyzed() && descriptor.shouldBeAnalyzed()) { + // trace + solverTrace.add("CHECKING ${descriptor.fqNameSafe.name}") + // now go on and check the body + try { + when (declaration) { + is TypeAlias -> ContSeq.unit // type alias have no checks + is PrimaryConstructor -> checkPrimaryConstructor(context, descriptor, declaration) + is SecondaryConstructor -> checkSecondaryConstructor(context, descriptor, declaration) + is EnumEntry -> checkEnumEntry(context, descriptor, declaration) + is ClassOrObject -> + doOnlyWhen( + declaration.hasImplicitPrimaryConstructor() && !descriptor.hasPackageWithLawsAnnotation + ) { + descriptor as ClassDescriptor + checkImplicitPrimaryConstructor( + context, + descriptor.constructors.single { it.isPrimary }, + declaration + ) + } + is Property -> + when { + declaration.stableBody() != null -> + checkTopLevelDeclarationWithBody( + context, + descriptor, + declaration, + declaration.stableBody() + ) + declaration.delegate != null -> + checkTopLevelDeclarationWithBody( + context, + descriptor, + declaration, + declaration.delegate?.expression + ) + declaration.getter != null || declaration.setter != null -> { + // no body, maybe we have getter and setter + descriptor as PropertyDescriptor + ContSeq.unit + .map { + doOnlyWhenNotNull(declaration.getter, Unit) { getterDecl -> + doOnlyWhenNotNull(descriptor.getter, Unit) { getterDescr -> + checkTopLevelDeclarationWithBody( + context, + getterDescr, + getterDecl, + getterDecl.body() + ) + } + } + } + .map { + doOnlyWhenNotNull(declaration.setter, Unit) { setterDecl -> + doOnlyWhenNotNull(descriptor.setter, Unit) { setterDescr -> + checkTopLevelDeclarationWithBody( + context, + setterDescr, + setterDecl, + setterDecl.body() + ) + } + } + } + } + else -> ContSeq.unit + } + else -> + checkTopLevelDeclarationWithBody( + context, + descriptor, + declaration, + declaration.stableBody() + ) + }.drain() + } catch (e: IllegalStateException) { + val msg = ErrorMessages.Exception.illegalState(solverTrace) + context.handleError(ErrorIds.Exception.IllegalState, declaration, msg) + } catch (e: Exception) { + val msg = ErrorMessages.Exception.otherException(e) + context.handleError(ErrorIds.Exception.OtherException, declaration, msg) + } + // trace + solverTrace.add("FINISH ${descriptor.fqNameSafe.name}") + } +} + +/** + * Only elements which are not + * - inside another "callable declaration" (function, property, etc.) (b/c this is not yet + * supported) + * - or constructors (b/c they are handled at the level of class) + */ +private fun Declaration.shouldBeAnalyzed() = !(this.parents.any { it is CallableDeclaration }) + +private fun DeclarationDescriptor.shouldBeAnalyzed() = + when (this) { + is MemberDescriptor -> !isExpect && !isExternal + else -> true + } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt new file mode 100644 index 000000000..9d24055ac --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt @@ -0,0 +1,1966 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check + +import arrow.core.Either +import arrow.core.left +import arrow.core.right +import arrow.meta.continuations.ContSeq +import arrow.meta.continuations.asContSeq +import arrow.meta.continuations.cont +import arrow.meta.continuations.doOnlyWhenNotNull +import arrow.meta.continuations.nested +import arrow.meta.continuations.sequence +import arrow.meta.plugins.analysis.phases.analysis.solver.ArgumentExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.SpecialKind +import arrow.meta.plugins.analysis.phases.analysis.solver.THIS_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.LocalVariableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotatedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssignmentExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BreakExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableReferenceExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CatchClause +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ContinueExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithInitializer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoWhileExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoubleColonExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionWithLabel +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FinallySection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ForExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Function +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IfExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IsExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LabeledExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LoopExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NullExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParenthesizedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.QualifiedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SafeQualifiedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntryString +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SynchronizedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThreePieceForExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThrowExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpresionKind +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.VariableDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionIsPattern +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionWithExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhileExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.CheckData +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.Condition +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ControlFlowFn +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ExplicitBlockReturn +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ExplicitLoopReturn +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ExplicitReturn +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ExplicitThrowReturn +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.LoopPlace +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.MissingElseBlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.NoReturn +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.SimpleCondition +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.StateAfter +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.SubjectCondition +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.VarInfo +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.noReturn +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.topLevelExpressionToFormula +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages +import arrow.meta.plugins.analysis.phases.analysis.solver.getReceiverOrThisNamedArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.hasReceiver +import arrow.meta.plugins.analysis.phases.analysis.solver.inTrustedEnvironment +import arrow.meta.plugins.analysis.phases.analysis.solver.isElvisOperator +import arrow.meta.plugins.analysis.phases.analysis.solver.isField +import arrow.meta.plugins.analysis.phases.analysis.solver.referencedArg +import arrow.meta.plugins.analysis.phases.analysis.solver.search.getConstraintsFor +import arrow.meta.plugins.analysis.phases.analysis.solver.search.primitiveConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.search.typeInvariants +import arrow.meta.plugins.analysis.phases.analysis.solver.singleArg +import arrow.meta.plugins.analysis.phases.analysis.solver.specialKind +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import arrow.meta.plugins.analysis.phases.analysis.solver.state.addAndCheckConsistency +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkCallPostConditionsInconsistencies +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkCallPreConditionsImplication +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkConditionsInconsistencies +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkInvariant +import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkInvariantConsistency +import arrow.meta.plugins.analysis.phases.analysis.solver.valueArgumentExpressions +import arrow.meta.plugins.analysis.smt.ObjectFormula +import arrow.meta.plugins.analysis.smt.renameObjectVariables +import arrow.meta.plugins.analysis.smt.substituteDeclarationConstraints +import arrow.meta.plugins.analysis.smt.substituteObjectVariables +import arrow.meta.plugins.analysis.types.PrimitiveType +import arrow.meta.plugins.analysis.types.asFloatingLiteral +import arrow.meta.plugins.analysis.types.asIntegerLiteral +import arrow.meta.plugins.analysis.types.primitiveType +import arrow.meta.plugins.analysis.types.unwrapIfNullable +import org.apache.commons.text.StringEscapeUtils +import org.sosy_lab.java_smt.api.BooleanFormula + +// 2.2: expressions +// ---------------- + +internal fun SolverState.checkExpressionConstraints( + associatedVarName: String, + expression: Expression?, + data: CheckData +): ContSeq = + checkExpressionConstraints(solver.makeObjectVariable(associatedVarName), expression, data) + +internal fun SolverState.checkExpressionConstraintsWithNewName( + prefix: String, + expression: Expression?, + data: CheckData +): ContSeq = + checkExpressionConstraints(newName(data.context, prefix, expression), expression, data) + +/** + * Produces a continuation that when invoked recursively checks an [expression] set of constraints + */ +internal fun SolverState.checkExpressionConstraints( + associatedVarName: ObjectFormula, + expression: Expression?, + data: CheckData +): ContSeq = + ContSeq.unit + .map { + if (expression != null) + solverTrace.add("BEGIN ${expression.text.take(50)} ${expression.javaClass.name}") + } + .flatMap { + when (expression) { + // these two simply recur into their underlying expressions + is ParenthesizedExpression -> + checkExpressionConstraints(associatedVarName, expression.expression, data) + is AnnotatedExpression -> + checkExpressionConstraints(associatedVarName, expression.baseExpression, data) + is SynchronizedExpression -> + checkExpressionConstraintsWithNewName("subject", expression.subject, data) + .checkReturnInfo { stateAfter -> + checkExpressionConstraints(associatedVarName, expression.block, stateAfter.data) + } + is BlockExpression -> + inScope(data) { // new variables are local to that block + checkBlockExpression( + associatedVarName, + expression.statements, + expression.implicitReturnFromLast, + data + ) + } + is ReturnExpression -> checkReturnConstraints(expression, data) + is BreakExpression, is ContinueExpression -> { + val withLabel = expression as ExpressionWithLabel + cont { StateAfter(ExplicitLoopReturn(withLabel.getLabelName()), data) } + } + is CallableReferenceExpression -> + data.noReturn { + // for now we do nothing with function references + } + is LambdaExpression -> checkLambda(expression, data) + is ThrowExpression -> checkThrowConstraints(expression, data) + is NullExpression -> checkNullExpression(associatedVarName, data) + is StringTemplateExpression -> checkStringTemplate(associatedVarName, expression, data) + is ConstantExpression -> checkConstantExpression(associatedVarName, expression, data) + is ThisExpression -> + // both 'this' and 'this@name' are available in the variable info + checkNameExpression(associatedVarName, expression.text, data) + is SimpleNameExpression -> { + val resolvedCall = expression.getResolvedCall(data.context) + when (resolvedCall?.resultingDescriptor) { + is CallableMemberDescriptor -> + checkCallExpression(associatedVarName, expression, resolvedCall, data) + is ValueDescriptor -> + checkNameExpression(associatedVarName, expression.getReferencedName(), data) + else -> data.noReturn {} // this should not happen + } + } + is LabeledExpression -> checkLabeledExpression(associatedVarName, expression, data) + is IfExpression -> + checkConditional(associatedVarName, null, expression.computeConditions(), data) + is WhenExpression -> + checkConditional( + associatedVarName, + expression.subjectExpression, + expression.computeConditions(), + data + ) + is LoopExpression -> checkLoopExpression(expression, data) + is FinallySection -> + // use a "fake" block with a single expression + checkBlockExpression(associatedVarName, listOf(expression), false, data) + is TryExpression -> checkTryExpression(associatedVarName, expression, data) + is TypeCastExpression -> + checkAsOperator(associatedVarName, expression.kind, expression.left, expression, data) + is IsExpression -> { + val subject = expression.leftHandSide + val subjectName = solver.makeObjectVariable(newName(data.context, "is", subject)) + checkExpressionConstraints(subjectName, subject, data).checkReturnInfo { stateAfter -> + cont { + checkIsExpression( + associatedVarName, + expression.isNegated, + expression.typeReference, + subjectName, + data + ) + stateAfter + } + } + } + is AssignmentExpression -> checkAssignmentExpression(expression, data) + is BinaryExpression -> checkBinaryExpression(associatedVarName, expression, data) + is Function -> checkFunctionDeclarationExpression(expression, data) + is Declaration -> + // we get additional info about the subject, but it's irrelevant here + checkNonFunctionDeclarationExpression(expression, data).map { it.second } + is Expression -> fallThrough(associatedVarName, expression, data) + else -> data.noReturn {} + } + } + .onEach { + if (expression != null) + solverTrace.add("END ${expression.text.take(50)} ${expression.javaClass.name}") + } + +private fun SolverState.fallThrough( + associatedVarName: ObjectFormula, + expression: Expression, + data: CheckData +): ContSeq = + when (val call = expression.getResolvedCall(data.context)) { + // fall-through: treat as a call + is ResolvedCall -> checkCallExpression(associatedVarName, expression, call, data) + // otherwise, report as unsupported + else -> + when (val variable = expression.getVariableDescriptor(data.context)) { + is VariableDescriptor -> { + val receiverExpr = + when (expression) { + is QualifiedExpression -> expression.receiverExpression + is DoubleColonExpression -> expression.receiverExpression + else -> null + } + checkVariableAsFunctionCall(associatedVarName, variable, receiverExpr, expression, data) + } + else -> + data.noReturn { + val msg = ErrorMessages.Unsupported.unsupportedExpression(expression) + data.context.handleError(ErrorIds.Unsupported.UnsupportedExpression, expression, msg) + } + } + } + +private fun Declaration.isVar(): Boolean = + when (this) { + is VariableDeclaration -> this.isVar + else -> false + } + +/** + * Checks each statement in a block expression in order. We need our own function because only the + * *last* statement is the one assigned as the "return value" of the block. + */ +private fun SolverState.checkBlockExpression( + associatedVarName: ObjectFormula, + expressions: List, + implicitReturnFromLast: Boolean, + data: CheckData +): ContSeq = + when { + expressions.isEmpty() -> data.noReturn {} + // special case for finally { } + expressions.firstOrNull() is FinallySection -> { + val first = expressions.first() as FinallySection + val remainder = expressions.drop(1) + checkBlockExpression(associatedVarName, remainder, implicitReturnFromLast, data).onEach { + stateAfterRest -> + // override the return of the finally with the return of the try or catch + doOnlyWhenNotNull(first.finalExpression, data) { finalExpression -> + checkExpressionConstraintsWithNewName("finally", finalExpression, data).map { + stateAfterRest + } + } + } + } + expressions.size == 1 && + implicitReturnFromLast -> // this is the last element, so it's the return value of the + // expression + checkExpressionConstraints(associatedVarName, expressions[0], data) + else -> { + val first = expressions.first() + val remainder = expressions.drop(1) + // we need to carefully thread the data in the state, + // since it holds the information about variables + checkExpressionConstraintsWithNewName("stmt", first, data).checkReturnInfo { stateAfter -> + checkBlockExpression(associatedVarName, remainder, implicitReturnFromLast, stateAfter.data) + } + } + } + +/** Checks a block which introduces a label or scope. */ +private fun SolverState.checkLabeledExpression( + associatedVarName: ObjectFormula, + expression: LabeledExpression, + data: CheckData +): ContSeq { + val labelName = expression.getLabelName()!! + // add the return point to the list and recur + val updatedData = data.addReturnPoint(labelName, associatedVarName) + return checkExpressionConstraints(associatedVarName, expression.baseExpression, updatedData) + .map { stateAfter -> + // if we have reached the point where the label was introduced, + // then we are done with the block, and we can keep going + val r = stateAfter.returnInfo + if (r is ExplicitBlockReturn && r.returnPoint == labelName) { + stateAfter.withReturn(NoReturn) + } else { + stateAfter + } + } +} + +/** + * Checks a 'return' or 'return@label' statement. At the end it aborts the current computation, + * because after a return there's nothing else to be checked. + */ +private fun SolverState.checkReturnConstraints( + expression: ReturnExpression, + data: CheckData +): ContSeq { + // figure out the right variable to assign + // - if 'return@label', find the label in the recorded return points + // - otherwise, it should be the top-most one + val label = expression.getLabelName() + val returnVarName = + label.let { data.returnPoints.namedReturnPointVariableNames[it] } + ?: data.returnPoints.topMostReturnPointVariableName.second + // assign it, and signal that we explicitly return + return checkExpressionConstraints(returnVarName, expression.returnedExpression, data).map { + stateAfter -> + stateAfter.withReturn(ExplicitBlockReturn(label)) + } +} + +/** Checks a 'throw', by simply returning the type of the exception */ +private fun SolverState.checkThrowConstraints( + expression: ThrowExpression, + data: CheckData +): ContSeq { + return checkExpressionConstraintsWithNewName("throw", expression.thrownExpression, data).map { + stateAfter -> + stateAfter.withReturn( + expression.thrownExpression?.type(data.context)?.let { ty -> ExplicitThrowReturn(ty) } + ?: ExplicitThrowReturn(null) + ) + } +} + +/** + * Produces a continuation that when invoked recursively checks the call [resolvedCall] starting + * from its arguments + */ +private fun SolverState.checkCallExpression( + associatedVarName: ObjectFormula, + expression: Expression, + resolvedCall: ResolvedCall, + data: CheckData +): ContSeq { + val specialKind = resolvedCall.specialKind + val specialControlFlow = controlFlowAnyFunction(data.context, resolvedCall) + return when { + specialKind == SpecialKind.Pre || + specialKind == SpecialKind.NotLookArgs -> // ignore calls to 'pre' or not looking at args + data.noReturn {} + specialKind == SpecialKind.Post -> // ignore post arguments + checkExpressionConstraints( + associatedVarName, + resolvedCall.getReceiverOrThisNamedArgument(), + data + ) + specialKind == SpecialKind.Invariant -> // ignore invariant arguments + checkExpressionConstraints( + associatedVarName, + resolvedCall.getReceiverOrThisNamedArgument(), + data + ) + specialKind == SpecialKind.TrustCall || specialKind == SpecialKind.TrustBlock -> { + val arg = resolvedCall.valueArgumentExpressions(data.context).getOrNull(0) + checkExpressionConstraints(associatedVarName, arg?.expression?.singleOrNull(), data) + } + specialControlFlow != null -> + checkControlFlowFunctionCall(associatedVarName, expression, specialControlFlow, data) + resolvedCall.isElvisOperator() -> + doOnlyWhenNotNull(resolvedCall.singleArg("left", data.context), data.noReturn()) { left -> + doOnlyWhenNotNull(resolvedCall.singleArg("right", data.context), data.noReturn()) { right -> + checkElvisOperator(associatedVarName, left, right, data) + } + } + else -> checkRegularFunctionCall(associatedVarName, resolvedCall, expression, data) + } +} + +/** + * Special treatment for special control flow functions ([also], [apply], [let], [run], [with]) + * https://kotlinlang.org/docs/scope-functions.html#function-selection + */ +private fun controlFlowAnyFunction( + context: ResolutionContext, + resolvedCall: ResolvedCall +): ControlFlowFn? { + val thisElement = + resolvedCall.singleArg("this", context) ?: resolvedCall.singleArg("receiver", context) + val blockElement = resolvedCall.singleArg("block", context) as? LambdaExpression + val bodyElement = blockElement?.bodyExpression + return if (blockElement != null && bodyElement != null) { + if (thisElement != null) { + when (resolvedCall.resultingDescriptor.fqNameSafe) { + FqName("kotlin.also") -> { + val argumentName = blockElement.valueParameters.getOrNull(0)?.nameAsName?.value ?: "it" + ControlFlowFn( + thisElement, + bodyElement, + argumentName, + ControlFlowFn.ReturnBehavior.RETURNS_ARGUMENT + ) + } + FqName("kotlin.apply") -> + ControlFlowFn( + thisElement, + bodyElement, + "this", + ControlFlowFn.ReturnBehavior.RETURNS_ARGUMENT + ) + FqName("kotlin.let") -> { + val argumentName = blockElement.valueParameters.getOrNull(0)?.nameAsName?.value ?: "it" + ControlFlowFn( + thisElement, + bodyElement, + argumentName, + ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT + ) + } + FqName("kotlin.run") -> + ControlFlowFn( + thisElement, + bodyElement, + "this", + ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT + ) + FqName("kotlin.with") -> + ControlFlowFn( + thisElement, + bodyElement, + "this", + ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT + ) + else -> null + } + } else { + when (resolvedCall.resultingDescriptor.fqNameSafe) { + // 'run' can also be called without a receiver + // https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/run.html + FqName("kotlin.run") -> + ControlFlowFn( + null /* thisElement == null */, + bodyElement, + "this", + ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT + ) + else -> null + } + } + } else { + null + } +} + +/** Checks special control flow functions ([also], [apply], [let], [run]) */ +private fun SolverState.checkControlFlowFunctionCall( + associatedVarName: ObjectFormula, + wholeExpr: Expression, + info: ControlFlowFn, + data: CheckData +): ContSeq { + val thisName = + when (info.returnBehavior) { + ControlFlowFn.ReturnBehavior.RETURNS_ARGUMENT -> associatedVarName + ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT -> + solver.makeObjectVariable(newName(data.context, THIS_VAR_NAME, info.target)) + } + val returnName = + when (info.returnBehavior) { + ControlFlowFn.ReturnBehavior.RETURNS_ARGUMENT -> + solver.makeObjectVariable(newName(data.context, "ret", info.target)) + ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT -> associatedVarName + } + return checkReceiverWithPossibleSafeDot( + associatedVarName, + wholeExpr, + null, + thisName, + info.target, + data + ) { newData -> + inScope(newData) { + // add the name to the context, + // being careful not overriding any existing name + val newVarInfo: VarInfo? = + info.target?.let { + val smtName = newName(newData.context, info.argumentName, info.target) + // add the constraint to make the parameter equal + val formula = solver.objects { equal(solver.makeObjectVariable(smtName), thisName) } + addConstraint(NamedConstraint("introduce argument for lambda", formula), data.context) + VarInfo(solver, info.argumentName, smtName, info.target, null) + } + // check the body in this new context + checkExpressionConstraints( + returnName, + info.body, + newData.addVarInfos(listOfNotNull(newVarInfo)) + ) + } + } +} + +/** Checks any function call which is not a special case */ +internal fun SolverState.checkRegularFunctionCall( + associatedVarName: ObjectFormula, + resolvedCall: ResolvedCall, + expression: Expression, + data: CheckData +): ContSeq { + val receiverExpr = resolvedCall.getReceiverExpression() + val referencedArg = resolvedCall.referencedArg(receiverExpr) + val receiverName = + solver.makeObjectVariable(newName(data.context, THIS_VAR_NAME, receiverExpr, referencedArg)) + return checkReceiverWithPossibleSafeDot( + associatedVarName, + expression, + resolvedCall, + receiverName, + receiverExpr, // + data + ) { dataAfterReceiver -> + val callConstraints = + getConstraintsFor(resolvedCall) ?: primitiveConstraints(data.context, resolvedCall) + val doNotLook = callConstraints?.doNotLookAtArgumentsWhen.orEmpty() + ContSeq { + if (doNotLook.isNotEmpty()) yield(true) + yield(false) + } + .flatMap { r -> continuationBracket.map { r } } + .flatMap { doNotLookCase -> + if (doNotLookCase) { + // case when we do not have to look at arguments + // 1. introduce the facts when we do not go + val renamedNotLook = + doNotLook.map { c -> + NamedConstraint( + c.msg, + solver.substituteObjectVariables(c.formula, mapOf(THIS_VAR_NAME to receiverName)) + ) + } + addAndCheckConsistency(renamedNotLook, data.context) { /* do nothing on failure */} + val dataAfterNotLook = + dataAfterReceiver.addBranch(renamedNotLook.map(NamedConstraint::formula)) + // 2. introduce the postconditions + checkCallableDescriptor( + associatedVarName, + resolvedCall.resultingDescriptor, + callConstraints, + emptyList(), // this assumes that the post-condition does not mention arguments + preconditionsCheck = {}, + resolvedCall.hasReceiver(), + receiverName, + resolvedCall.getReturnType(), + expression, + dataAfterNotLook + ) + } else { + // introduce the fact that we are looking at the arguments, if present + val dataAfterNotLook = + if (doNotLook.isNotEmpty()) { + val renamedNotLook = + doNotLook.map { c -> + NamedConstraint( + "! ${c.msg}", + solver.not( + solver.substituteObjectVariables( + c.formula, + mapOf(THIS_VAR_NAME to receiverName) + ) + ) + ) + } + addAndCheckConsistency(renamedNotLook, data.context) { /* do nothing on failure */} + dataAfterReceiver.addBranch(renamedNotLook.map(NamedConstraint::formula)) + } else dataAfterReceiver + // regular case, check the arguments and move on normally + checkCallArguments(resolvedCall, dataAfterNotLook).flatMap { + (returnOrContinue, dataAfterArgs) -> + returnOrContinue.fold( + { r -> cont { StateAfter(r, dataAfterArgs) } }, + { argVars -> + checkCallableDescriptor( + associatedVarName, + resolvedCall.resultingDescriptor, + callConstraints, + argVars, + preconditionsCheck = { reworkedConstraints -> + whenNotTrusted(expression, data) { + checkCallPreConditionsImplication( + reworkedConstraints, + dataAfterArgs.context, + expression, + resolvedCall, + dataAfterArgs.branch.get() + ) + } + }, + resolvedCall.hasReceiver(), + receiverName, + resolvedCall.getReturnType(), + expression, + dataAfterArgs + ) + } + ) + } + } + } + } +} + +internal fun SolverState.checkVariableAsFunctionCall( + associatedVarName: ObjectFormula, + descriptor: VariableDescriptor, + receiverExpr: Expression?, + expression: Expression, + data: CheckData +): ContSeq { + val receiverName = solver.makeObjectVariable(newName(data.context, THIS_VAR_NAME, receiverExpr)) + val callConstraints = getConstraintsFor(descriptor) + return checkCallableDescriptor( + associatedVarName, + descriptor, + callConstraints, + emptyList(), + preconditionsCheck = {}, + receiverExpr != null, + receiverName, + descriptor.type, + expression, + data + ) +} + +/** Checks something similar to a function call, which could also be a variable reference */ +private fun SolverState.checkCallableDescriptor( + associatedVarName: ObjectFormula, + descriptor: CallableDescriptor, + obtainedConstraints: DeclarationConstraints?, + argVars: List, + preconditionsCheck: (DeclarationConstraints?) -> Unit, + hasReceiver: Boolean, + receiverName: ObjectFormula, + returnType: Type, + expression: Expression, + data: CheckData +): ContSeq = + ContSeq.unit.map { + // rename with the arguments + val callConstraints = + obtainedConstraints?.let { declInfo -> + val completeRenaming = + argVars.toMap() + (RESULT_VAR_NAME to associatedVarName) + (THIS_VAR_NAME to receiverName) + solver.substituteDeclarationConstraints(declInfo, completeRenaming) + } + // check any preconditions + preconditionsCheck(callConstraints) + // add a constraint for fields: result == field(name, value) + if (descriptor.isField()) { + val fieldConstraint = + solver.ints { + val argName = if (hasReceiver) receiverName else argVars[0].assignedSmtVariable + NamedConstraint( + "${expression.text} == ${descriptor.fqNameSafe.name}($argName)", + equal(associatedVarName, field(descriptor, argName)) + ) + } + addConstraint(fieldConstraint, data.context) + } + // if the result is not null + if (!returnType.isNullable()) { + addConstraint( + NamedConstraint("$associatedVarName is not null", solver.isNotNull(associatedVarName)), + data.context + ) + } + // there's no point in continuing if we are in an inconsistent position + val inconsistentPostConditions = + checkCallPostConditionsInconsistencies( + callConstraints, + data.context, + expression, + data.branch.get() + ) + ensure(!inconsistentPostConditions) + data.noReturn() + } + +/** Handles the possibility of a function call being done with ?. */ +private fun SolverState.checkReceiverWithPossibleSafeDot( + associatedVarName: ObjectFormula, + wholeExpr: Expression, + resolvedCall: ResolvedCall?, + receiverName: ObjectFormula, + receiverExpr: Expression?, + data: CheckData, + block: (CheckData) -> ContSeq +): ContSeq = + when { + (receiverExpr != null) && (receiverExpr.impl() == wholeExpr.impl()) -> { + // this happens in some weird cases, just keep going + solverTrace.add("weird case") + block(data) + } + (receiverExpr == null) && (resolvedCall?.hasReceiver() == true) -> + // special case, no receiver, but implicitly it's 'this' + checkNameExpression(receiverName, "this", data).flatMap { stateAfter -> + block(stateAfter.data) + } + else -> + checkExpressionConstraints(receiverName, receiverExpr, data).checkReturnInfo { + stateAfterReceiver -> + val dataAfterReceiver = stateAfterReceiver.data + // here comes a trick: when the method is access with the "safe dot" ?. + // we need to create two different "branches", + // one for the case in which the value is null, one for when it isn't + // x?.f(..) <=> if (x == null) null else x.f(..) + // we do so by yielding 'true' and 'false' in that case, + // and only 'true' when we use a "regular dot" . + ContSeq { + if (wholeExpr is SafeQualifiedExpression) yield(false) + yield(true) + } + .flatMap { r -> continuationBracket.map { r } } + .flatMap { definitelyNotNull -> + solverTrace.add("?. case $definitelyNotNull") + if (!definitelyNotNull) { // the null case of ?. + ContSeq.unit.map { + val nullReceiver = + NamedConstraint("$receiverName is null (?.)", solver.isNull(receiverName)) + val nullResult = + NamedConstraint( + "$associatedVarName is null (?.)", + solver.isNull(associatedVarName) + ) + val inconsistent = + checkConditionsInconsistencies( + listOf(nullReceiver, nullResult), + dataAfterReceiver.context, + receiverExpr!!, + dataAfterReceiver.branch.get(), + reportIfInconsistent = false + ) + ensure(!inconsistent) + dataAfterReceiver.addBranch(solver.isNull(receiverName)).noReturn() + } + } else { // the non-null case of ?., or simply regular . + doOnlyWhenNotNull(receiverExpr, dataAfterReceiver.noReturn()) { rcv -> + ContSeq.unit.map { + val notNullCstr = + NamedConstraint( + "$receiverName is not null (?.)", + solver.isNotNull(receiverName) + ) + val inconsistent = + checkConditionsInconsistencies( + listOf(notNullCstr), + data.context, + rcv, + dataAfterReceiver.branch.get(), + reportIfInconsistent = false + ) + ensure(!inconsistent) + dataAfterReceiver.addBranch(solver.isNotNull(receiverName)).noReturn() + } + } + .flatMap { stateAfterNotNullReceiver -> block(stateAfterNotNullReceiver.data) } + } + } + } + } + +/** + * Checks leftExpr ?: rightExpr This is very similar to [checkReceiverWithPossibleSafeDot], but it's + * hard to abstract between both due to small details + */ +private fun SolverState.checkElvisOperator( + associatedVarName: ObjectFormula, + leftExpr: Expression, + rightExpr: Expression, + data: CheckData +): ContSeq { + val leftName = newName(data.context, "left", leftExpr) + val left = solver.makeObjectVariable(leftName) + return checkExpressionConstraints(leftName, leftExpr, data).checkReturnInfo { stateAfterLeft -> + ContSeq { + yield(false) + yield(true) + } + .flatMap { r -> continuationBracket.map { r } } + .flatMap { definitelyNotNull -> + if (!definitelyNotNull) { // the null case of ?: + ContSeq.unit + .map { + val nullLeft = NamedConstraint("$leftName is null (?:)", solver.isNull(left)) + val inconsistent = + checkConditionsInconsistencies( + listOf(nullLeft), + data.context, + leftExpr, + data.branch.get(), + reportIfInconsistent = false + ) + ensure(!inconsistent) + } + .flatMap { + // then the result is whatever we get from the right + checkExpressionConstraints( + associatedVarName, + rightExpr, + stateAfterLeft.data.addBranch(solver.isNull(left)) + ) + } + } else { // the non-null case of ?: + ContSeq.unit + .map { + val notNullLeft = NamedConstraint("$leftName is not null", solver.isNotNull(left)) + val resultIsLeft = + NamedConstraint( + "$leftName is result of ?:", + solver.objects { equal(left, associatedVarName) } + ) + val inconsistent = + checkConditionsInconsistencies( + listOf(notNullLeft, resultIsLeft), + data.context, + leftExpr, + data.branch.get(), + reportIfInconsistent = false + ) + ensure(!inconsistent) + } + .map { stateAfterLeft.data.addBranch(solver.isNotNull(left)).noReturn() } + } + } + } +} + +private fun SolverState.checkAsOperator( + associatedVarName: ObjectFormula, + kind: TypeCastExpresionKind, + leftExpr: Expression?, + whole: Expression, + data: CheckData +): ContSeq { + val leftName = newName(data.context, "left", leftExpr) + val left = solver.makeObjectVariable(leftName) + return checkExpressionConstraints(leftName, leftExpr, data).checkReturnInfo { stateAfterLeft -> + ContSeq { + if (kind == TypeCastExpresionKind.QUESTION_TYPE_CAST) yield(true) + yield(false) + } + .flatMap { r -> continuationBracket.map { r } } + .flatMap { asFails -> + if (asFails) { + // one possibility is that 'as?' fails, regardless of what 'left' is + val formulaNullResult = solver.isNull(associatedVarName) + val nullResult = NamedConstraint("$associatedVarName is null (as?)", formulaNullResult) + ContSeq.unit + .map { + val inconsistent = + checkConditionsInconsistencies( + listOf(nullResult), + data.context, + whole, + data.branch.get(), + reportIfInconsistent = false + ) + ensure(!inconsistent) + } + .map { stateAfterLeft.data.addBranch(formulaNullResult).noReturn() } + } else { + // if 'as' does not fail, then the result is equal to 'left' + val formulaEqualsLeft = solver.objects { equal(left, associatedVarName) } + val resultEqualsLeft = NamedConstraint("$associatedVarName is $left", formulaEqualsLeft) + ContSeq.unit + .map { + val inconsistent = + checkConditionsInconsistencies( + listOf(resultEqualsLeft), + data.context, + whole, + data.branch.get(), + reportIfInconsistent = false + ) + ensure(!inconsistent) + } + .map { stateAfterLeft.data.addBranch(formulaEqualsLeft).noReturn() } + } + } + } +} + +internal data class CallArgumentsInfo( + val returnOrVariables: Either>, + val data: CheckData +) { + internal companion object { + fun init(data: CheckData) = CallArgumentsInfo(emptyList().right(), data) + } +} + +internal data class CallVarArgumentsInfo( + val returnOrVariables: Either>, + val data: CheckData +) { + internal companion object { + fun init(data: CheckData) = CallVarArgumentsInfo(emptyList().right(), data) + } +} + +internal data class CallArgumentVariable( + val parameterName: String, + val assignedSmtVariable: ObjectFormula +) + +private fun List.toMap() = associate { (name, smt) -> name to smt } + +/** + * Recursively perform check on arguments, including extension receiver and dispatch receiver + * + * [NOTE: argument renaming] this function creates a new name for each argument, based on the formal + * parameter name; this creates a renaming for the original constraints + */ +private fun SolverState.checkCallArguments( + resolvedCall: ResolvedCall, + data: CheckData +): ContSeq { + // why is this so complicated? + // in theory, we just need to run checkExpressionConstraints over each argument + // (in fact, the original implementation just did that, and then called .sequence()) + // alas, Kotlin allows arguments to include 'return' (yes, really!) + // so we need to check after each step whether a ExplicitReturn has been generated + // and in that case we stop the check of any more arguments + // (stopping there is important, since introducing additional constraints from + // other arguments may not be right in the general case) + + // version for varargs + fun accVarArg( + upToNow: ContSeq, + expr: Expression + ): ContSeq = + upToNow.flatMap { (result, data) -> + result.fold( + { r -> cont { CallVarArgumentsInfo(r.left(), data) } }, + { argsUpToNow -> + val referencedElement = resolvedCall.referencedArg(expr) + val argUniqueName = + solver.makeObjectVariable(newName(data.context, "vararg", expr, referencedElement)) + checkExpressionConstraints(argUniqueName, expr, data).checkReturnInfo({ r, s -> + CallVarArgumentsInfo(r.left(), s.data) + }) { s -> + cont { CallVarArgumentsInfo((argsUpToNow + listOf(argUniqueName)).right(), s.data) } + } + } + ) + } + + // version for regular parameters + fun acc( + upToNow: ContSeq, + current: ArgumentExpression + ): ContSeq = + upToNow.flatMap { (result, data) -> + result.fold( + { r -> cont { CallArgumentsInfo(r.left(), data) } }, + { argsUpToNow -> + val (name, ty, isVarArg, isSpread, maybeMultipleExpr) = current + if (isVarArg && !isSpread) { + maybeMultipleExpr.fold(cont { CallVarArgumentsInfo.init(data) }, ::accVarArg).flatMap { + (returnOrVar, data) -> + returnOrVar.fold( + { r -> cont { CallArgumentsInfo(r.left(), data) } }, + { _ -> // we don't really care about the names of the generated variables + cont { + // record the length of the array + val allArgsUniqueName = + solver.makeObjectVariable(newName(data.context, name, null)) + ty.getField("size")?.let { sizeDecl -> + solver + .ints { + equal( + solver.intValue(field(sizeDecl, allArgsUniqueName)), + makeNumber(maybeMultipleExpr.size.toLong()) + ) + } + .let { addConstraint(NamedConstraint("vararg length", it), data.context) } + } + // return as usual + CallArgumentsInfo( + (argsUpToNow + listOf(CallArgumentVariable(name, allArgsUniqueName))).right(), + data + ) + } + } + ) + } + } else { + val expr = maybeMultipleExpr.singleOrNull() + val referencedElement = resolvedCall.referencedArg(expr) + val argUniqueName = + solver.makeObjectVariable(newName(data.context, name, expr, referencedElement)) + checkExpressionConstraints(argUniqueName, expr, data).checkReturnInfo({ r, s -> + CallArgumentsInfo(r.left(), s.data) + }) { s -> + cont { + CallArgumentsInfo( + (argsUpToNow + listOf(CallArgumentVariable(name, argUniqueName))).right(), + s.data + ) + } + } + } + } + ) + } + + return resolvedCall + .valueArgumentExpressions(data.context) + .fold(cont { CallArgumentsInfo.init(data) }, ::acc) +} + +private fun SolverState.checkNullExpression( + associatedVarName: ObjectFormula, + data: CheckData +): ContSeq = + data.noReturn { + addConstraint( + NamedConstraint("$associatedVarName is null (== null)", solver.isNull(associatedVarName)), + data.context + ) + } + +/** + * This function produces a constraint that makes the desired variable name equal to the value + * encoded in the constant and adds it to the [SolverState.prover] constraints. + */ +private fun SolverState.checkConstantExpression( + associatedVarName: ObjectFormula, + expression: ConstantExpression, + data: CheckData +): ContSeq = + data.noReturn { + val type = expression.type(data.context)?.unwrapIfNullable() + when (type?.primitiveType()) { + PrimitiveType.BOOLEAN -> + expression.text.toBooleanStrictOrNull()?.let { + solver.booleans { + if (it) solver.boolValue(associatedVarName) + else not(solver.boolValue(associatedVarName)) + } + } + PrimitiveType.INTEGRAL -> + expression.text.asIntegerLiteral()?.let { + solver.ints { equal(solver.intValue(associatedVarName), makeNumber(it)) } + } + PrimitiveType.RATIONAL -> + expression.text.asFloatingLiteral()?.let { + solver.rationals { equal(solver.decimalValue(associatedVarName), makeNumber(it)) } + } + PrimitiveType.STRING -> { + // record the length of the string + StringEscapeUtils.unescapeJava(expression.text.trim('"'))?.let { stringLiteral -> + type.getField("length")?.let { lengthDecl -> + solver.ints { + equal( + solver.intValue(field(lengthDecl, associatedVarName)), + makeNumber(stringLiteral.length.toLong()) + ) + } + } + } + } + else -> null + }?.let { + addConstraint( + NamedConstraint( + "${expression.text} checkConstantExpression $associatedVarName ${expression.text}", + it + ), + data.context + ) + addConstraint( + NamedConstraint("${expression.text} is not null", solver.isNotNull(associatedVarName)), + data.context + ) + } + } + +private fun SolverState.checkStringTemplate( + associatedVarName: ObjectFormula, + expression: StringTemplateExpression, + data: CheckData +): ContSeq = + expression + .entries + .filterIsInstance() + .map { checkExpressionConstraints("str", it.expression, data) } + .sequence() + .flatMap { + data.noReturn { + val type = expression.type(data.context)?.unwrapIfNullable() + val minimalLength = + expression.entries.filterIsInstance().sumOf { + StringEscapeUtils.unescapeJava(it.string.trim('"')).length + } + type?.getField("length")?.let { lengthDecl -> + addConstraint( + NamedConstraint( + "$associatedVarName minimal length", + solver.ints { + greaterOrEquals( + solver.intValue(field(lengthDecl, associatedVarName)), + makeNumber(minimalLength.toLong()) + ) + } + ), + data.context + ) + } + addConstraint( + NamedConstraint("${expression.text} is not null", solver.isNotNull(associatedVarName)), + data.context + ) + } + } + +private fun Type.getField(fieldName: String): DeclarationDescriptor? = + descriptor?.unsubstitutedMemberScope + ?.getContributedDescriptors { it == fieldName } + ?.singleOrNull { it.name.value == fieldName && it.isField() } + +private fun SolverState.checkAssignmentExpression( + expression: AssignmentExpression, + data: CheckData +): ContSeq { + + // in cases in which we don't do anything special + // we simply look at the rhs to check for problems + // there, but without assigning it at all + fun onlyRhs(): ContSeq = checkExpressionConstraints("rhs", expression.right, data) + + // early termination if we cannot resolve the left side + val left = expression.left ?: return onlyRhs() + val leftCall = left.getResolvedCall(data.context) + val leftReceiver = leftCall?.getReceiverExpression() + return when (val leftDescr = leftCall?.resultingDescriptor) { + is LocalVariableDescriptor -> { + when { + leftDescr.isVar -> { // assignment to mutable variable + // we introduce a new name because we don't want to introduce + // any additional information about the variable, + // we should only have that declared in the invariant + val refName = leftDescr.name.toString() + val newName = newName(data.context, refName, left) + val invariant = data.varInfo.get(refName)?.invariant + checkBodyAgainstInvariants(expression, newName, invariant, expression.right, data).map { + it.second + } // and then we forget about the new name + } + // no more cases, since by the Kotlin and Java rules + // 'val's / 'final var's must be initialized at declaration time + else -> null + } + } + is PropertyDescriptor -> { + when { + // nothing for variables from properties or fields + leftDescr.isVar -> null + // the interesting case is when we are initializing + // a variable in a constructor + leftDescr.dispatchReceiverParameter != null && + leftDescr.isField() && + (leftReceiver == null || leftReceiver is ThisExpression) -> { + // here we are + data.varInfo.get(THIS_VAR_NAME)?.let { info -> + checkExpressionConstraints( + field(leftDescr, solver.makeObjectVariable(info.smtName)), + expression.right, + data + ) + } + } + else -> null + } + } + else -> null + } + ?: onlyRhs() +} + +/** Check special binary cases, and make the other fall-through */ +private fun SolverState.checkBinaryExpression( + associatedVarName: ObjectFormula, + expression: BinaryExpression, + data: CheckData +): ContSeq { + val operator = expression.operationTokenRpr + val left = expression.left + val right = expression.right + return when { + // this is x == null, or x != null + (operator == "EQEQ" || operator == "EXCLEQ") && right is NullExpression -> { + val newName = solver.makeObjectVariable(newName(data.context, "checkNull", left)) + checkExpressionConstraints(newName, left, data).checkReturnInfo { stateAfter -> + cont { + when (operator) { + "EQEQ" -> solver.isNull(newName) + "EXCLEQ" -> solver.isNotNull(newName) + else -> null + }?.let { + val cstr = solver.booleans { equivalence(solver.boolValue(associatedVarName), it) } + addConstraint( + NamedConstraint("$associatedVarName is null?", cstr), + stateAfter.data.context + ) + } + stateAfter + } + } + } + else -> fallThrough(associatedVarName, expression, data) + } +} + +/** + * Checks (x is Something) expressions We do not track types, so in theory this should not affect + * our analysis However, in the specific case in which 'Something' is not nullable we can also + * ensure that 'x' is not null This is different from 'x != null' in that we do not generate + * associatedVarName <=> not (null x) But rather associatedVarName ==> not (null x) + */ +private fun SolverState.checkIsExpression( + associatedVarName: ObjectFormula, + isNegated: Boolean, + typeReference: TypeReference?, + subjectName: ObjectFormula, + data: CheckData +) { + if (!isNegated) { + val invariants = + (data.context.type(typeReference)?.let { typeInvariants(it, subjectName, data.context) }) + // in the worst case, we know that it is not null + ?: listOf(NamedConstraint("$associatedVarName is not null", solver.isNotNull(subjectName))) + invariants.forEach { cstr -> + val constraint = + NamedConstraint( + "$associatedVarName => ${cstr.msg}", + solver.booleanFormulaManager.implication( + solver.boolValue(associatedVarName), + cstr.formula + ) + ) + addConstraint(constraint, data.context) + } + } +} + +/** Checks the body of a lambda expression, but does nothing in particular with it */ +internal fun SolverState.checkLambda(expr: LambdaExpression, data: CheckData): ContSeq { + val itParam = + expr.type(data.context)?.takeIf { expr.valueParameters.isEmpty() }?.singleFunctionArgument() + return checkFunctionBody( + expr, + null, + expr.valueParameters, + itParam, + expr.functionLiteral.typeReference, + expr.bodyExpression, + data + ) +} + +/** Checks whether we have a type (x: A) -> B, and returns the A */ +internal fun Type.singleFunctionArgument() = + this.takeIf { it.descriptor?.fqNameSafe == FqName("kotlin.Function1") } + ?.arguments + ?.getOrNull(0) + ?.type + +/** Checks the body of a local function, but does nothing in particular with it */ +private fun SolverState.checkFunctionDeclarationExpression( + declaration: Function, + data: CheckData +): ContSeq = + checkFunctionBody( + declaration, + declaration.receiverTypeReference, + declaration.valueParameters, + null, + declaration.typeReference, + declaration.stableBody(), + data + ) + +/** Shared code between lambda expressions and local function declarations */ +internal fun SolverState.checkFunctionBody( + wholeExpr: Expression, + receiverType: TypeReference?, + valueParameters: List, + itType: Type?, + resultType: TypeReference?, + body: Expression?, + data: CheckData +): ContSeq = + // We need to introduce new arguments + // and a new return point + inScope(data) { + scopedBracket { + // add information about parameters + val thisParam = + receiverType?.let { + val thisSmtName = newName(data.context, THIS_VAR_NAME, wholeExpr) + ParamInfo(THIS_VAR_NAME, thisSmtName, data.context.type(it), wholeExpr) + } + val itParam = + itType?.let { + val smtName = newName(data.context, "it", wholeExpr) + ParamInfo("it", smtName, itType, wholeExpr) + } + val valueParams = + valueParameters.mapNotNull { param -> + param.name?.let { name -> + val smtName = newName(data.context, name, param) + ParamInfo(name, smtName, param.type(data.context), param) + } + } + listOfNotNull(itParam) + val resultSmtName = newName(data.context, RESULT_VAR_NAME, wholeExpr) + val resultParam = + resultType?.let { + ParamInfo(RESULT_VAR_NAME, resultSmtName, data.context.type(it), wholeExpr) + } + val newParams = initialParameters(thisParam, valueParams, resultParam, data.context) + val newData = + data + .addVarInfos(newParams) // add new names from arguments + .replaceTopMostReturnPoint( + null, + solver.makeObjectVariable(resultSmtName) + ) // add the new return point + data.noReturn { + // and now go and check the body + checkExpressionConstraints(resultSmtName, body, newData) + .drain() // execute until the end, so any bracket is closed + } + } + } + +/** + * This function produces a continuation that makes the desired variable name equal to the value + * encoded in the named expression. + */ +private fun SolverState.checkNonFunctionDeclarationExpression( + declaration: Declaration, + data: CheckData +): ContSeq> = + doOnlyWhenNotNull(declaration.stableBody(), Pair(null, data.noReturn())) { body -> + val declName = + when (declaration) { + // use the given name if available + is NamedDeclaration -> declaration.nameAsSafeName.value + else -> newName(data.context, "decl", body) + } + // we need to create a new one to prevent shadowing + val smtName = newName(data.context, declName, body) + // find out whether we have an invariant + val invariant = obtainInvariant(body, data) + // assert the invariant if found and check its consistency + doOnlyWhenNotNull(invariant, Unit) { (invBody, invFormula: BooleanFormula) -> + ContSeq.unit.map { + val renamed = solver.renameObjectVariables(invFormula, mapOf(RESULT_VAR_NAME to smtName)) + val inconsistentInvariant = + checkInvariantConsistency( + NamedConstraint("invariant in $declName", renamed), + data.context, + invBody, + data.branch.get() + ) + ensure(!inconsistentInvariant) + } + } + .flatMap { + // this gives back a new temporary name for the body + checkBodyAgainstInvariants(declaration, declName, invariant?.second, body, data) + } + .map { (newVarName, stateAfter) -> + // if it's not a var, we state it's equal to the one + // we've introduced while checking the invariants + // this means the solver can use everything it may + // gather about it + if (!declaration.isVar()) { + solver.objects { + addConstraint( + NamedConstraint( + "$declName $smtName = $newVarName", + equal(solver.makeObjectVariable(smtName), solver.makeObjectVariable(newVarName)) + ), + data.context + ) + } + } + // update the list of variables in scope + val newData = + stateAfter.data.addVarInfo(solver, declName, smtName, declaration, invariant?.second) + // and then keep going + Pair(newVarName, stateAfter.withData(newData)) + } + } + +/** Checks the possible invariants of a declaration, and its body. */ +private fun SolverState.checkBodyAgainstInvariants( + element: Element, + declName: String, + invariant: BooleanFormula?, + body: Expression?, + data: CheckData +): ContSeq> { + val newName = newName(data.context, declName, body) + return checkExpressionConstraints(newName, body, data) + .onEach { + whenNotTrusted(body, data) { + invariant?.let { + val renamed = solver.renameObjectVariables(it, mapOf(RESULT_VAR_NAME to newName)) + checkInvariant( + NamedConstraint("assignment to `${element.text}`", renamed), + data.context, + element, + data.branch.get() + ) + } + } + } + .map { r -> Pair(newName, r) } +} + +private fun SolverState.obtainInvariant( + expression: Expression, + data: CheckData +): Pair? = + expression + .getResolvedCall(data.context) + ?.takeIf { it.specialKind == SpecialKind.Invariant } + ?.singleArg("predicate", data.context) + ?.let { expr: Expression -> + topLevelExpressionToFormula(expr, data.context, emptyList(), true)?.let { formula -> + expr to formula + } + } + +/** + * This function produces a continuation that makes the desired variable name equal to the value + * encoded in the named expression and adds the resulting boolean formula to the + * [SolverState.prover] constraints. + */ +private fun SolverState.checkNameExpression( + associatedVarName: ObjectFormula, + referencedName: String, + data: CheckData +): ContSeq = + data.noReturn { + // use the SMT name recorded in the variable info + data.varInfo.get(referencedName)?.let { + val constraint = + solver.objects { equal(associatedVarName, solver.makeObjectVariable(it.smtName)) } + addConstraint( + NamedConstraint("$associatedVarName = ${it.smtName} (name)", constraint), + data.context + ) + } + } + +private fun Expression.computeConditions(): List = + when (this) { + is IfExpression -> + thenExpression?.let { thenExpr -> + val elseExpr = elseExpression ?: MissingElseBlockExpression(this, thenExpr) + listOf( + SimpleCondition(condition!!, false, thenExpr, thenExpr), + SimpleCondition(null, true, elseExpr, elseExpr) + ) + } + ?: emptyList() + is WhenExpression -> { + val subject = subjectExpression + entries.flatMap { entry -> + if (entry.conditions.isEmpty()) { + listOf(SimpleCondition(null, entry.isElse, entry.expression!!, entry)) + } else { + entry.conditions.toList().mapNotNull { cond -> + when { + subject != null -> SubjectCondition(cond, entry.isElse, entry.expression!!, entry) + cond is WhenConditionWithExpression -> + SimpleCondition(cond.expression!!, entry.isElse, entry.expression!!, entry) + else -> null + } + } + } + } + } + else -> emptyList() + } + +/** Check `if` and `when` expressions. */ +private fun SolverState.checkConditional( + associatedVarName: ObjectFormula, + subject: Expression?, + branches: List, + data: CheckData +): ContSeq { + val newSubjectVar = solver.makeObjectVariable(newName(data.context, "subject", subject)) + // this handles the cases of when with a subject, and with 'val x = subject' + return when (subject) { + is Declaration -> + checkNonFunctionDeclarationExpression(subject, data).map { (actualSubjectVar, stateAfter) -> + Pair( + actualSubjectVar?.let { solver.makeObjectVariable(it) } ?: newSubjectVar, + stateAfter.data + ) + } + else -> + checkExpressionConstraints(newSubjectVar, subject, data).map { stateAfter -> + Pair(newSubjectVar, stateAfter.data) + } + } + .flatMap { (subjectVar, newData) -> + branches + .map { cond -> + val conditionVar = newName(data.context, "cond", cond.condition) + // introduce the condition + (cond.condition?.let { + introduceCondition(solver.makeObjectVariable(conditionVar), subjectVar, cond, newData) + } + ?: newData.noReturn { + // if we have no condition, it's equivalent to true + addConstraint( + NamedConstraint( + "check condition branch $conditionVar", + solver.makeBooleanObjectVariable(conditionVar) + ), + newData.context + ) + }) + .map { returnInfo -> Pair(Pair(returnInfo, cond), conditionVar) } + } + .nested() + } + .flatMap { conditionInformation -> + yesNo(conditionInformation).asContSeq().flatMap { (returnAndCond, correspondingVars) -> + val (stateAfter, cond) = returnAndCond + when (stateAfter.returnInfo) { + is ExplicitReturn -> // weird case: a return in a condition + cont { stateAfter } + else -> + continuationBracket + .map { + // assert the variables and check that we are consistent + val inconsistentEnvironment = + checkConditionsInconsistencies( + correspondingVars, + data.context, + cond.whole, + data.branch.get(), + reportIfInconsistent = true + ) + // it only makes sense to continue if we are not consistent + ensure(!inconsistentEnvironment) + } + .flatMap { + val newData = stateAfter.data.addBranch(correspondingVars.map { it.formula }) + // check the body + checkExpressionConstraints(associatedVarName, cond.body, newData) + } + } + } + } +} + +private fun SolverState.introduceCondition( + conditionVar: ObjectFormula, + subjectVar: ObjectFormula, + cond: Condition, + data: CheckData +): ContSeq = + when (cond) { + is SimpleCondition -> checkExpressionConstraints(conditionVar, cond.predicate, data) + is SubjectCondition -> + when (val check = cond.check) { + is WhenConditionWithExpression -> + if (check.expression is NullExpression) { + data.noReturn { + val complete = + solver.booleans { + equivalence(solver.boolValue(conditionVar), solver.isNull(subjectVar)) + } + addConstraint( + NamedConstraint("$subjectVar is null (condition)", complete), + data.context + ) + } + } else { + val patternName = newName(data.context, "pattern", check.expression) + checkExpressionConstraints(patternName, check.expression, data).map { + when (check.expression?.type(data.context)?.primitiveType()) { + PrimitiveType.BOOLEAN -> + solver.booleans { + equivalence( + solver.boolValue(subjectVar), + solver.makeBooleanObjectVariable(patternName) + ) + } + PrimitiveType.INTEGRAL -> + solver.ints { + equal( + solver.intValue(subjectVar), + solver.makeIntegerObjectVariable(patternName) + ) + } + PrimitiveType.RATIONAL -> + solver.rationals { + equal( + solver.decimalValue(subjectVar), + solver.makeDecimalObjectVariable(patternName) + ) + } + else -> null + }?.let { + val complete = solver.booleans { equivalence(solver.boolValue(conditionVar), it) } + addConstraint( + NamedConstraint("$subjectVar equals $patternName (condition)", complete), + data.context + ) + } + data.noReturn() + } + } + is WhenConditionIsPattern -> + data.noReturn { + checkIsExpression(conditionVar, check.isNegated, check.typeReference, subjectVar, data) + } + else -> data.noReturn {} + } + } + +/** + * Given a list of names for condition variables, create the boolean conditions for each branch. + * + * For example, given [a, b, c], it generates: + * - a + * - not a, b + * - not a, not b, c + */ +private fun SolverState.yesNo( + conditionVars: List> +): List>> { + fun go( + currents: List>, + acc: List + ): List>> = + if (currents.isEmpty()) { + emptyList() + } else { + solver.booleans { + val varName = solver.makeBooleanObjectVariable(currents[0].second) + val nextValue = acc + listOf(NamedConstraint("$varName", varName)) + val nextAcc = acc + listOf(NamedConstraint("!($varName)", not(varName))) + listOf(Pair(currents[0].first, nextValue)) + go(currents.drop(1), nextAcc) + } + } + return go(conditionVars, emptyList()) +} + +private fun SolverState.checkLoopExpression( + expression: LoopExpression, + data: CheckData +): ContSeq = + when (expression) { + is ForExpression -> checkForExpression(expression.loopParameter, expression.body, data) + is ThreePieceForExpression -> + inScope(data) { + val initVar = solver.makeObjectVariable(newName(data.context, "initializer", expression)) + checkBlockExpression(initVar, expression.initializer, false, data).flatMap { after -> + doOnlyWhenNotNull(expression.condition, data.noReturn()) { + checkWhileExpression(it, expression.body, emptyList(), after.data) + } + } + } + is WhileExpression -> + doOnlyWhenNotNull(expression.condition, data.noReturn()) { + checkWhileExpression(it, expression.body, emptyList(), data) + } + is DoWhileExpression -> { + // remember that do { t } while (condition) + // is equivalent to { t }; while (condition) { t } + checkExpressionConstraintsWithNewName("firstIter", expression.body, data).flatMap { + doOnlyWhenNotNull(expression.condition, data.noReturn()) { + // do not change the data, since the block goes out of scope + checkWhileExpression(it, expression.body, emptyList(), data) + } + } + } + else -> data.noReturn {} // this should not happen + } + +private fun SolverState.checkForExpression( + loopParameter: Parameter?, + body: Expression?, + data: CheckData +): ContSeq = + ContSeq { + yield(LoopPlace.INSIDE_LOOP) + yield(LoopPlace.AFTER_LOOP) + } + .flatMap { + when (it) { + LoopPlace.INSIDE_LOOP -> + inScope(data) { + continuationBracket.flatMap { + val paramName = loopParameter?.nameAsName?.value + val newData = + if (loopParameter != null && paramName != null) { + val smtName = newName(data.context, paramName, loopParameter) + data.addVarInfo(solver, paramName, smtName, loopParameter, null) + } else data + checkLoopBody(body, emptyList(), newData) + } + } + // in this case we know nothing + // after the loop finishes + LoopPlace.AFTER_LOOP -> data.noReturn {} + } + } + +private fun SolverState.checkWhileExpression( + condition: Expression, + body: Expression?, + afterBody: List, + data: CheckData +): ContSeq { + val condName = newName(data.context, "cond", condition) + return checkExpressionConstraints(condName, body, data) + .flatMap { + ContSeq { + yield(LoopPlace.INSIDE_LOOP) + yield(LoopPlace.AFTER_LOOP) + } + } + .flatMap { + val objVar = solver.makeBooleanObjectVariable(condName) + when (it) { + LoopPlace.INSIDE_LOOP -> + inScope(data) { + continuationBracket.flatMap { + // inside the loop the condition is true + checkConditionsInconsistencies( + listOf(NamedConstraint("inside the loop, condition is true", objVar)), + data.context, + condition, + data.branch.get(), + reportIfInconsistent = true + ) + checkLoopBody(body, afterBody, data.addBranch(objVar)) + } + } + // after the loop the condition is false + LoopPlace.AFTER_LOOP -> + cont { + val notVar = solver.booleanFormulaManager.not(objVar) + checkConditionsInconsistencies( + listOf(NamedConstraint("loop is finished, condition is false", notVar)), + data.context, + condition, + data.branch.get(), + reportIfInconsistent = true + ) + // add (not condition) to the data + data.addBranch(notVar).noReturn() + } + } + } +} + +private fun SolverState.checkLoopBody( + body: Expression?, + afterBody: List, + data: CheckData +): ContSeq { + return checkExpressionConstraintsWithNewName("loop", body, data).flatMap { stateAfter -> + // check the additional updates (used when describing "three-piece" for loops) + val afterBodyVar = solver.makeObjectVariable(newName(data.context, "afterBody", body)) + checkBlockExpression(afterBodyVar, afterBody, false, stateAfter.data).map { + // only keep working on this branch + // if we had a 'return' inside + // otherwise the other branch is enough + // if we decide to abort we need to 'pop', + // because the one from 'bracket' won't run + when (stateAfter.returnInfo) { + is ExplicitBlockReturn -> stateAfter + is ExplicitReturn -> abort() + is NoReturn -> abort() + } + } + } +} + +/** + * Check try/catch/finally blocks This is a very rough check, in which we assume the worst-case + * scenario: + * - when you get to a 'catch' you have *no* information about the 'try' at all + * - all the 'catch' blocks may potentially execute + */ +private fun SolverState.checkTryExpression( + associatedVarName: ObjectFormula, + expression: TryExpression, + data: CheckData +): ContSeq = + inScope(data) { + ContSeq { + yield(expression.tryBlock) + yieldAll(expression.catchClauses) + } + .flatMap { r -> continuationBracket.map { r } } + .flatMap { + when (it) { + is BlockExpression -> // the try + checkExpressionConstraints(associatedVarName, it, data).flatMap { stateAfter -> + when (stateAfter.returnInfo) { + // if we had a throw, this will eventually end in a catch + is ExplicitThrowReturn -> + // is the thrown exception something in our own catch? + if (doesAnyCatchMatch( + stateAfter.returnInfo.exceptionType, + expression.catchClauses, + data + ) + ) + ContSeq { abort() } // then there's no point in keep looking here + else cont { stateAfter } // otherwise, bubble up the exception + else -> cont { stateAfter } + } + } + is CatchClause -> { // the catch + doOnlyWhenNotNull(it.catchParameter, data.noReturn()) { param -> + doOnlyWhenNotNull(param.nameAsName?.value, data.noReturn()) { paramName -> + // introduce the name of the parameter + val smtName = newName(data.context, paramName, param) + // and then go on and check the body + checkExpressionConstraints( + associatedVarName, + it.catchBody, + data.addVarInfo(solver, paramName, smtName, param) + ) + } + } + } + else -> ContSeq { abort() } + } + } + .onEach { stateAfterTryOrCatch -> + // override the return of the finally with the return of the try or catch + doOnlyWhenNotNull(expression.finallyBlock, data) { finally -> + checkExpressionConstraintsWithNewName("finally", finally.finalExpression, data).map { + stateAfterTryOrCatch + } + } + } + } + +/** + * Checks whether the type obtain from an explicit 'throw' matches any of the types in the 'catch' + * clauses + */ +internal fun doesAnyCatchMatch( + throwType: Type?, + clauses: List, + data: CheckData +): Boolean = + clauses.any { clause -> + val catchType = clause.catchParameter?.type(data.context) + if (throwType != null && catchType != null) { + throwType.isSubtypeOf(catchType) + } else { + false + } + } + +/** Find the corresponding "body" of a declaration */ +internal fun Declaration.stableBody(): Expression? = + when (this) { + is VariableDeclaration -> initializer + is DeclarationWithBody -> bodyExpression ?: bodyBlockExpression + is DeclarationWithInitializer -> initializer + else -> null + } + +private fun ContSeq.checkReturnInfo( + r: (r: ExplicitReturn, s: StateAfter) -> A, + f: (StateAfter) -> ContSeq +): ContSeq = + this.flatMap { stateAfter -> + when (stateAfter.returnInfo) { + is ExplicitReturn -> cont { r(stateAfter.returnInfo, stateAfter) } + else -> f(stateAfter) + } + } + +private fun ContSeq.checkReturnInfo( + f: (StateAfter) -> ContSeq +): ContSeq = this.checkReturnInfo({ _, stateAfter -> stateAfter }, f) + +private fun inScope(data: CheckData, f: () -> ContSeq): ContSeq = + f().map { it.withData(data) } + +private fun whenNotTrusted(expression: Expression?, data: CheckData, toDo: () -> Unit) { + if (expression == null || !expression.inTrustedEnvironment(data.context)) { + toDo() + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Parameters.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Parameters.kt new file mode 100644 index 000000000..e8e696347 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Parameters.kt @@ -0,0 +1,48 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.VarInfo +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.search.fieldEqualitiesInvariants +import arrow.meta.plugins.analysis.phases.analysis.solver.search.typeInvariants +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import arrow.meta.plugins.analysis.smt.Solver + +data class ParamInfo( + val name: String, + val smtName: String, + val type: Type?, + val element: Element?, + val thisFromConstructor: Boolean = false +) { + companion object { + public operator fun invoke( + solver: Solver, + name: String, + smtName: String, + type: Type?, + element: Element?, + thisFromConstructor: Boolean = false + ): ParamInfo = ParamInfo(name, solver.escape(smtName), type, element, thisFromConstructor) + } +} + +/** Record the information about parameters and introduce the corresponding invariants */ +internal fun SolverState.initialParameters( + thisParam: ParamInfo?, + valueParams: List, + result: ParamInfo?, + context: ResolutionContext +): List { + val things = listOfNotNull(thisParam) + valueParams + listOfNotNull(result) + return things.mapNotNull { param -> + param.type?.let { ty -> + val invariants: (Type, String, ResolutionContext) -> List = + if (param.thisFromConstructor) this::fieldEqualitiesInvariants else this::typeInvariants + invariants(ty, param.smtName, context).forEach { addConstraint(it, context) } + } + param.element?.let { element -> VarInfo.unsafeCreate(param.name, param.smtName, element) } + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData.kt new file mode 100644 index 000000000..12237e9f2 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData.kt @@ -0,0 +1,35 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.smt.ObjectFormula +import arrow.meta.plugins.analysis.smt.Solver +import org.sosy_lab.java_smt.api.BooleanFormula + +data class CheckData( + val context: ResolutionContext, + val returnPoints: ReturnPoints, + val varInfo: CurrentVarInfo, + val branch: CurrentBranch +) { + fun addReturnPoint(scope: String, variableName: ObjectFormula) = + this.copy(returnPoints = returnPoints.addAndReplaceTopMost(scope, variableName)) + + fun replaceTopMostReturnPoint(scope: String?, variableName: ObjectFormula) = + this.copy(returnPoints = returnPoints.replaceTopMost(scope, variableName)) + + fun addVarInfo( + solver: Solver, + name: String, + smtName: String, + origin: Element, + invariant: BooleanFormula? = null + ): CheckData = this.copy(varInfo = varInfo.add(solver, name, smtName, origin, invariant)) + + fun addVarInfos(vars: List): CheckData = this.copy(varInfo = varInfo.add(vars)) + + fun addBranch(constraint: BooleanFormula): CheckData = this.copy(branch = branch.add(constraint)) + + fun addBranch(constraint: List): CheckData = + this.copy(branch = branch.add(constraint)) +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition.kt new file mode 100644 index 000000000..c03f843f3 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition.kt @@ -0,0 +1,56 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenCondition +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +/** Data type used to handle `if` and `when` without subject uniformly. */ +sealed class Condition( + val condition: Element?, + val isElse: Boolean, + val body: Expression, + val whole: Element +) + +class SimpleCondition( + val predicate: Expression?, + isElse: Boolean, + body: Expression, + whole: Element +) : Condition(predicate, isElse, body, whole) + +class SubjectCondition( + val check: WhenCondition?, + isElse: Boolean, + body: Expression, + whole: Element +) : Condition(check, isElse, body, whole) + +// wrapping for missing else +class MissingElseBlockExpression(val whole: Expression, val thenExpression: Expression) : + BlockExpression { + override val firstStatement: Expression? + get() = null + override val statements: List + get() = emptyList() + override val implicitReturnFromLast: Boolean + get() = false + override val text: String + get() = "" + + override fun impl(): Any = whole.impl() + override val psiOrParent: Element = this + override fun parents(): List = thenExpression.parents() + + override fun getResolvedCall(context: ResolutionContext): ResolvedCall? = null + override fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? = null + override fun location(): CompilerMessageSourceLocation? = whole.location() + override fun type(context: ResolutionContext): Type? = thenExpression.type(context) + override fun lastBlockStatementOrThis(): Expression = this +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn.kt new file mode 100644 index 000000000..b5ba47375 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn.kt @@ -0,0 +1,23 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression + +/** + * Describes the characteristics of a call to special control flow functions namely [also], [apply], + * [let], [run], [with] https://kotlinlang.org/docs/scope-functions.html#function-selection + */ +data class ControlFlowFn( + val target: Expression?, + val body: Expression, + val argumentName: String, + val returnBehavior: ReturnBehavior +) { + /** Describes whether functions return their argument or whatever is done in a block */ + enum class ReturnBehavior { + /** Return what was given as argument, usually after applying a function T -> Unit */ + RETURNS_ARGUMENT, + + /** Return whatever the enclosing block returns */ + RETURNS_BLOCK_RESULT + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch.kt new file mode 100644 index 000000000..e09663e6a --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +import org.sosy_lab.java_smt.api.BooleanFormula + +typealias Branch = List + +class CurrentBranch(private val branches: List) { + + fun get(): Branch = branches + + fun add(constraint: BooleanFormula) = CurrentBranch(branches + constraint) + + fun add(constraints: List) = CurrentBranch(branches + constraints) + + companion object { + fun new(): CurrentBranch = CurrentBranch(emptyList()) + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo.kt new file mode 100644 index 000000000..6704c077d --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo.kt @@ -0,0 +1,24 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.smt.Solver +import org.sosy_lab.java_smt.api.BooleanFormula + +data class CurrentVarInfo(private val varInfo: List) { + + fun get(name: String): VarInfo? = varInfo.firstOrNull { it.name == name } + + fun add( + solver: Solver, + name: String, + smtName: String, + origin: Element, + invariant: BooleanFormula? = null + ): CurrentVarInfo = this.add(listOf(VarInfo(solver, name, smtName, origin, invariant))) + + fun add(vars: List): CurrentVarInfo = CurrentVarInfo(vars + varInfo) + + companion object { + fun new(): CurrentVarInfo = CurrentVarInfo(emptyList()) + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace.kt new file mode 100644 index 000000000..21fe71366 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace.kt @@ -0,0 +1,6 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +enum class LoopPlace { + INSIDE_LOOP, + AFTER_LOOP +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return.kt new file mode 100644 index 000000000..818abf828 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return.kt @@ -0,0 +1,24 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +/** Ways to return from a block */ +sealed interface Return + +/** This encompasses all possible was to exit a block: 'return', 'break', 'continue' */ +sealed interface ExplicitReturn : Return + +/** The block exited via its last statement, or has not exited yet */ +object NoReturn : Return + +// 2.0: data for the checks +// ------------------------ + +/** Explicit 'return', maybe with a name */ +data class ExplicitBlockReturn(val returnPoint: String?) : ExplicitReturn + +/** 'break' or 'continue' inside a loop */ +data class ExplicitLoopReturn(val returnPoint: String?) : ExplicitReturn + +/** 'throw' */ +data class ExplicitThrowReturn(val exceptionType: Type?) : ExplicitReturn diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints.kt new file mode 100644 index 000000000..aba73be0c --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints.kt @@ -0,0 +1,38 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Named +import arrow.meta.plugins.analysis.smt.ObjectFormula + +/** Maps return points to the SMT variables representing that place. */ +data class ReturnPoints( + val topMostReturnPointVariableName: Pair, + val namedReturnPointVariableNames: Map +) { + + fun addAndReplaceTopMost(newScopeName: String, newVariableName: ObjectFormula) = + this.replaceTopMost(newScopeName, newVariableName).add(newScopeName, newVariableName) + + fun replaceTopMost(newScopeName: String?, newVariableName: ObjectFormula) = + ReturnPoints(Pair(newScopeName, newVariableName), namedReturnPointVariableNames) + + private fun add(returnPoint: String, variableName: ObjectFormula) = + ReturnPoints( + topMostReturnPointVariableName, + namedReturnPointVariableNames + (returnPoint to variableName) + ) + + companion object { + private fun new(scope: String?, variableName: ObjectFormula): ReturnPoints = + when (scope) { + null -> ReturnPoints(Pair(scope, variableName), emptyMap()) + else -> ReturnPoints(Pair(scope, variableName), mapOf(scope to variableName)) + } + + fun new(scope: Element, variableName: ObjectFormula): ReturnPoints = + when (scope) { + is Named -> new(scope.nameAsName?.value, variableName) + else -> new(null, variableName) + } + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter.kt new file mode 100644 index 000000000..25a1dc3e4 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter.kt @@ -0,0 +1,23 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +import arrow.meta.continuations.ContSeq +import arrow.meta.continuations.cont + +/** + * Describes the state of the analysis after a check: + * - whether the computation should end and how + * - the new information about variables and branches + */ +data class StateAfter(val returnInfo: Return, val data: CheckData) { + fun withReturn(newReturnInfo: Return): StateAfter = this.copy(returnInfo = newReturnInfo) + + fun withData(oldData: CheckData): StateAfter = this.copy(data = oldData) +} + +fun CheckData.noReturn() = StateAfter(NoReturn, this) + +/** Execute some operation but keep the overall state the same */ +fun CheckData.noReturn(f: () -> Unit): ContSeq = cont { + f() + noReturn() +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo.kt new file mode 100644 index 000000000..2a3296c6e --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo.kt @@ -0,0 +1,36 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.check.model + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.smt.Solver +import org.sosy_lab.java_smt.api.BooleanFormula + +/** + * For each variable, we keep two pieces of data: + * - the name it was declared with + * - the element it came from + * - invariants which may have been declared + */ +data class VarInfo +private constructor( + val name: String, + val smtName: String, + val origin: Element, + val invariant: BooleanFormula? = null +) { + companion object { + public operator fun invoke( + solver: Solver, + name: String, + smtName: String, + origin: Element, + invariant: BooleanFormula? = null + ): VarInfo = VarInfo(name, solver.escape(smtName), origin, invariant) + + public fun unsafeCreate( + name: String, + smtName: String, + origin: Element, + invariant: BooleanFormula? = null + ): VarInfo = VarInfo(name, smtName, origin, invariant) + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt new file mode 100644 index 000000000..631a55459 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt @@ -0,0 +1,234 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.collect + +import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.SpecialKind +import arrow.meta.plugins.analysis.phases.analysis.solver.allArgumentExpressions +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ExpressionValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.LocalVariableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotatedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionLambdaArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IfExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NameReferenceExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NullExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParenthesizedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionWithExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages +import arrow.meta.plugins.analysis.phases.analysis.solver.isField +import arrow.meta.plugins.analysis.phases.analysis.solver.primitiveFormula +import arrow.meta.plugins.analysis.phases.analysis.solver.resolvedArg +import arrow.meta.plugins.analysis.phases.analysis.solver.specialKind +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import arrow.meta.plugins.analysis.smt.ObjectFormula +import arrow.meta.plugins.analysis.smt.Solver +import arrow.meta.plugins.analysis.smt.boolAnd +import arrow.meta.plugins.analysis.smt.boolAndList +import arrow.meta.plugins.analysis.smt.boolOr +import arrow.meta.plugins.analysis.smt.boolOrList +import arrow.meta.plugins.analysis.smt.isFieldCall +import arrow.meta.plugins.analysis.smt.isSingleVariable +import arrow.meta.plugins.analysis.types.PrimitiveType +import arrow.meta.plugins.analysis.types.asFloatingLiteral +import arrow.meta.plugins.analysis.types.asIntegerLiteral +import arrow.meta.plugins.analysis.types.primitiveType +import arrow.meta.plugins.analysis.types.unwrapIfNullable +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.Formula +import org.sosy_lab.java_smt.api.FormulaType + +/** + * Transform a [Expression] into a [Formula], wrapping with additional 'bool' fields when required + * + * This is the function to be used when turning an expression in a formula anywhere in the analysis + */ +internal fun SolverState.topLevelExpressionToFormula( + ex: Expression?, + context: ResolutionContext, + parameters: List, + allowAnyReference: Boolean +): BooleanFormula? = + expressionToFormula(ex, context, parameters, allowAnyReference)?.let { + when (it) { + is BooleanFormula -> it + is ObjectFormula -> solver.boolValue(it) + else -> null + } + } + +/** Transform a [Expression] into a [Formula] */ +private fun SolverState.expressionToFormula( + ex: Expression?, + context: ResolutionContext, + parameters: List, + allowAnyReference: Boolean +): Formula? { + val argCall = ex?.getResolvedCall(context) + val recur = { v: Expression? -> expressionToFormula(v, context, parameters, allowAnyReference) } + return when { + // just recur + ex is ParenthesizedExpression -> recur(ex.expression) + ex is AnnotatedExpression -> recur(ex.baseExpression) + ex is LambdaExpression -> recur(ex.bodyExpression) + // basic blocks + ex is BlockExpression -> + ex.statements.mapNotNull { recur(it) as? BooleanFormula }.let { conditions -> + solver.boolAndList(conditions) + } + ex is ConstantExpression -> ex.type(context)?.let { ty -> solver.makeConstant(ty, ex) } + ex is ThisExpression -> // reference to this + solver.makeObjectVariable("this") + ex is NameReferenceExpression && ex.isResultReference(context) -> + solver.makeObjectVariable(RESULT_VAR_NAME) + ex is NameReferenceExpression && argCall?.resultingDescriptor is ParameterDescriptor -> + if (allowAnyReference || parameters.any { it.nameAsName == ex.getReferencedNameAsName() }) { + solver.makeObjectVariable(ex.getReferencedName()) + } else { + val msg = ErrorMessages.Parsing.unexpectedReference(ex.getReferencedName()) + context.handleError(ErrorIds.Parsing.UnexpectedReference, ex, msg) + null + } + ex is NameReferenceExpression && argCall?.resultingDescriptor is LocalVariableDescriptor -> + if (allowAnyReference) { + solver.makeObjectVariable(ex.getReferencedName()) + } else { + val msg = ErrorMessages.Parsing.unexpectedReference(ex.getReferencedName()) + context.handleError(ErrorIds.Parsing.UnexpectedReference, ex, msg) + null + } + ex is IfExpression -> { + val cond = recur(ex.condition) as? BooleanFormula + val thenBranch = recur(ex.thenExpression) + val elseBranch = recur(ex.elseExpression) + if (cond != null && thenBranch != null && elseBranch != null) { + solver.ifThenElse(cond, thenBranch, elseBranch) + } else { + null + } + } + ex is WhenExpression && ex.subjectExpression == null -> + ex.entries.foldRight(null) { entry, acc -> + val conditions: List = + when { + entry.isElse -> listOf(solver.booleanFormulaManager.makeTrue()) + else -> + entry.conditions.map { cond -> + when (cond) { + is WhenConditionWithExpression -> recur(cond.expression) as? BooleanFormula + else -> null + } + } + } + val body = recur(entry.expression) + when { + body == null || conditions.any { it == null } -> return@foldRight null // error case + acc != null -> solver.ifThenElse(solver.boolOrList(conditions.filterNotNull()), body, acc) + entry.isElse -> body + else -> null + } + } + // special cases which do not always resolve well + ex is BinaryExpression && ex.operationTokenRpr == "EQEQ" && ex.right is NullExpression -> + ex.left?.let { recur(it) as? ObjectFormula }?.let { solver.isNull(it) } + ex is BinaryExpression && ex.operationTokenRpr == "EXCLEQ" && ex.right is NullExpression -> + ex.left?.let { recur(it) as? ObjectFormula }?.let { solver.isNotNull(it) } + ex is BinaryExpression && ex.operationTokenRpr == "ANDAND" -> + recur(ex.left)?.let { leftFormula -> + recur(ex.right)?.let { rightFormula -> solver.boolAnd(listOf(leftFormula, rightFormula)) } + } + ex is BinaryExpression && ex.operationTokenRpr == "OROR" -> + recur(ex.left)?.let { leftFormula -> + recur(ex.right)?.let { rightFormula -> solver.boolOr(listOf(leftFormula, rightFormula)) } + } + // fall-through case + argCall != null -> { + val args = + argCall.allArgumentExpressions(context).flatMap { (_, ty, _, _, e) -> + e.map { Pair(ty, recur(it)) } + } + val wrappedArgs = + args.takeIf { args.all { it.second != null } }?.map { (ty, e) -> solver.wrap(e!!, ty) } + wrappedArgs?.let { solver.primitiveFormula(context, argCall, it) } + ?: fieldFormula(argCall.resultingDescriptor, args) + } + else -> null + } +} + +private fun Solver.wrap(formula: Formula, type: Type): Formula = + when { + // only wrap variables and 'field(name, thing)' + !formulaManager.isSingleVariable(formula) && !isFieldCall(formula) -> formula + formula is ObjectFormula -> { + val unwrapped = if (type.isMarkedNullable) type.unwrappedNotNullableType else type + when (unwrapped.primitiveType()) { + PrimitiveType.INTEGRAL -> intValue(formula) + PrimitiveType.RATIONAL -> decimalValue(formula) + PrimitiveType.BOOLEAN -> boolValue(formula) + else -> formula + } + } + else -> formula + } + +private fun SolverState.fieldFormula( + descriptor: CallableDescriptor, + args: List> +): ObjectFormula? = + descriptor.takeIf { it.isField() }?.let { + // create a field, the 'this' may be missing + val thisExpression = + (args.getOrNull(0)?.second as? ObjectFormula) ?: solver.makeObjectVariable("this") + field(descriptor, thisExpression) + } + +/** + * Turns a named constant expression into a smt [Formula] represented as a constant declared in the + * correct theory given this [type]. + * + * For example if [type] refers to [Int] the constant smt value will have as formula type + * [FormulaType.IntegerType] + */ +private fun Solver.makeConstant(type: Type, ex: ConstantExpression): Formula? = + when (type.unwrapIfNullable().primitiveType()) { + PrimitiveType.INTEGRAL -> + ex.text.asIntegerLiteral()?.let { integerFormulaManager.makeNumber(it) } + PrimitiveType.RATIONAL -> + ex.text.asFloatingLiteral()?.let { rationalFormulaManager.makeNumber(it) } + PrimitiveType.BOOLEAN -> booleanFormulaManager.makeBoolean(ex.text.toBooleanStrict()) + else -> null + } + +internal fun Element.isResultReference(bindingContext: ResolutionContext): Boolean = + getPostOrInvariantParent(bindingContext)?.let { parent -> + val expArg = parent.resolvedArg("predicate") as? ExpressionValueArgument + val lambdaArg = + (expArg?.valueArgument as? ExpressionLambdaArgument)?.getLambdaExpression() + ?: (expArg?.valueArgument as? ExpressionResolvedValueArgument)?.argumentExpression as? + LambdaExpression + val params = + lambdaArg?.functionLiteral?.valueParameters?.map { it.text }.orEmpty() + listOf("it") + this.text in params.distinct() + } + ?: false + +internal fun Element.getPostOrInvariantParent(bindingContext: ResolutionContext): ResolvedCall? = + this.parents().mapNotNull { it.getResolvedCall(bindingContext) }.firstOrNull { call -> + val kind = call.specialKind + kind == SpecialKind.Post || kind == SpecialKind.Invariant + } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt new file mode 100644 index 000000000..dbd775a5b --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt @@ -0,0 +1,202 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.collect + +import arrow.meta.plugins.analysis.phases.analysis.solver.allArgumentExpressions +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.withAliasUnwrapped +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DotQualifiedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Function +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NameReferenceExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages +import arrow.meta.plugins.analysis.phases.analysis.solver.isALaw +import arrow.meta.plugins.analysis.phases.analysis.solver.isCompatibleWith +import arrow.meta.plugins.analysis.phases.analysis.solver.isLawsType +import arrow.meta.plugins.analysis.phases.analysis.solver.isLooselyCompatibleWith +import arrow.meta.plugins.analysis.phases.analysis.solver.renameConditions +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState + +/** + * Depending on the source of the [descriptor] we might need to attach the information to different + * places. The main case is when you declare a @Law, in which case you have to look for the proper + * place. + */ +internal fun SolverState.addConstraints( + descriptor: DeclarationDescriptor, + preConstraints: ArrayList, + postConstraints: ArrayList, + notLookConstraints: ArrayList, + bindingContext: ResolutionContext +) { + val lawSubject = + findDescriptorFromRemoteLaw(descriptor, bindingContext) + ?: findDescriptorFromLocalLaw(descriptor, bindingContext) + if (lawSubject is CallableDescriptor && lawSubject.fqNameSafe == FqName("arrow.analysis.post")) + throw Exception("trying to attach to post, this is wrong!") + if (lawSubject != null) { + val renamed = + solver.renameConditions( + DeclarationConstraints(descriptor, preConstraints, postConstraints, notLookConstraints), + lawSubject.withAliasUnwrapped + ) + callableConstraints.add( + renamed.descriptor, + ArrayList(renamed.pre), + ArrayList(renamed.post), + ArrayList(renamed.doNotLookAtArgumentsWhen) + ) + } + callableConstraints.add(descriptor, preConstraints, postConstraints, notLookConstraints) +} + +/** Finds the target of a particular law by looking up its [arrow.analysis.Subject] annotation */ +private fun findDescriptorFromRemoteLaw( + descriptor: DeclarationDescriptor, + context: ResolutionContext +): DeclarationDescriptor? = + descriptor.annotations().findAnnotation(FqName("arrow.analysis.Subject"))?.let { lawSubject -> + val name = lawSubject.argumentValueAsString("fqName") + val result = name?.let { context.obtainDeclaration(FqName(it), descriptor) } + result.also { + if (it == null) { + if (name == null) + throw Exception(ErrorMessages.Parsing.subjectWithoutName(descriptor.fqNameSafe.name)) + else + throw Exception( + ErrorMessages.Parsing.couldNotResolveSubject(name, descriptor.fqNameSafe.name) + ) + } + } + } + +private fun ResolutionContext.obtainDeclaration( + fqName: FqName, + compatibleWith: DeclarationDescriptor +): DeclarationDescriptor? { + val current = descriptorFor(fqName) + // the type either strictly checks + // or we need to look for the best match + return current.firstOrNull { it.isCompatibleWith(compatibleWith) } + ?: current.filter { it.isLooselyCompatibleWith(compatibleWith) }.minWithOrNull { o1, o2 -> + when { + o1.isLooselyCompatibleWith(o2) -> -1 + o2.isLooselyCompatibleWith(o1) -> 1 + else -> 0 + } + } +} + +/** + * Finds the target of a particular law by looking at its last return, if marked with a + * [arrow.analysis.Law] annotation. + */ +public fun SolverState.findDescriptorFromLocalLaw( + descriptor: DeclarationDescriptor, + bindingContext: ResolutionContext +): DeclarationDescriptor? { + if (!descriptor.isALaw()) return null + + if (descriptor !is CallableDescriptor) return null + + val lawCall = + (descriptor.element() as? Function)?.let { + getReturnedExpressionWithoutPostcondition(it, bindingContext) + } + if (lawCall == null) { + descriptor.element()?.let { elt -> + val msg = ErrorMessages.Parsing.lawMustCallFunction() + bindingContext.handleError(ErrorIds.Laws.LawMustCallFunction, elt, msg) + signalParseErrors() + } + return null + } + + val parameters = descriptor.allParameters.filter { !it.type.descriptor.isLawsType() } + val arguments = lawCall.allArgumentExpressions(bindingContext).map { it.expression } + val check = + parameters.zip(arguments).all { (param, arg) -> + (param is ReceiverParameterDescriptor && + (arg.isEmpty() || arg.singleOrNull() is ThisExpression)) || + (param is ValueParameterDescriptor && + arg.singleOrNull() is NameReferenceExpression && + (arg.single() as NameReferenceExpression).getReferencedNameAsName() == param.name) + } + if (!check) { + descriptor.element()?.let { elt -> + val msg = ErrorMessages.Parsing.lawMustHaveParametersInOrder() + bindingContext.handleError(ErrorIds.Laws.LawMustHaveParametersInOrder, elt, msg) + signalParseErrors() + } + return null + } + + return lawCall.resultingDescriptor +} + +private fun getReturnedExpressionWithoutPostcondition( + function: Function, + bindingContext: ResolutionContext +): ResolvedCall? { + val lastElementWithoutReturn = + when (val lastElement = function.body()?.lastBlockStatementOrThis()) { + is ReturnExpression -> lastElement.returnedExpression + else -> lastElement + } + // remove outer layer of postcondition + val veryLast = + when (lastElementWithoutReturn) { + is DotQualifiedExpression -> { + val selector = lastElementWithoutReturn.selectorExpression + val callee = (selector as? CallExpression)?.calleeExpression + if (callee != null && callee.text == "post") { + lastElementWithoutReturn.receiverExpression + } else { + null + } + } + else -> null + } + ?: lastElementWithoutReturn + + return veryLast?.getResolvedCall(bindingContext) +} + +/** + * This function is the one really adding the constraints to the list, keeping into consideration + * possible duplicate [FqName]s. + */ +private fun MutableMap>.add( + descriptor: DeclarationDescriptor, + pre: ArrayList, + post: ArrayList, + doNotLookAtArgumentsWhen: ArrayList +) { + val fqName = descriptor.fqNameSafe + // create a new one if not existent + if (!containsKey(fqName)) this[fqName] = mutableListOf() + val list = this[fqName]!! + // see if there's any compatible + when (val ix = list.indexOfFirst { it.descriptor.isCompatibleWith(descriptor) }) { + -1 -> list.add(DeclarationConstraints(descriptor, pre, post, doNotLookAtArgumentsWhen)) + else -> { + val previous = list[ix] + list[ix] = + DeclarationConstraints( + descriptor, + previous.pre + pre, + previous.post + post, + previous.doNotLookAtArgumentsWhen + doNotLookAtArgumentsWhen + ) + } + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt new file mode 100644 index 000000000..de31d25e2 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt @@ -0,0 +1,147 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.collect + +import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnalysisResult +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.hasInterestingAnnotation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.gather +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import org.sosy_lab.java_smt.api.BooleanFormula + +/** + * Collects constraints by harvesting annotations. There are two sources: local declarations, and + * the entire CLASSPATH. + */ +public fun SolverState.collectConstraintsFromAnnotations( + localDeclarations: List, + module: ModuleDescriptor, + bindingTrace: ResolutionContext +): Pair> { + // check local declarations for @Laws + collectFromLocalDeclarations(localDeclarations, bindingTrace) + // check rest of the CLASSPATH for @Laws + collectFromClasspath(module, bindingTrace) + + return if (hadParseErrors()) { + Pair(AnalysisResult.ParsingError, emptySet()) + } else { + // figure out which is the set of local elements + // whose packages should be added in the hints + val interesting = + localDeclarations + .flatMap { it.gather { callableConstraints.containsKey(it.fqNameSafe) } } + .mapNotNull { it.containingPackage } + .toSet() + Pair(AnalysisResult.Retry, interesting) + } +} + +private fun SolverState.collectFromLocalDeclarations( + localDeclarations: List, + bindingTrace: ResolutionContext +) { + localDeclarations.flatMap { it.gather { it.hasInterestingAnnotation } }.forEach { + addConstraintsFromAnnotations(it, bindingTrace) + } +} + +private fun SolverState.collectFromClasspath( + module: ModuleDescriptor, + bindingTrace: ResolutionContext +) { + val collectEntireClasspath = + System.getProperty("ARROW_ANALYSIS_COLLECT_ENTIRE_CLASSPATH", "false").toBooleanStrictOrNull() + ?: false + if (collectEntireClasspath) { + module.gather(addSubPackages = true) { it.hasInterestingAnnotation } + } else { + // usual case: figure out the right packages from the hints + val packagesWithLaws = + module + .gather( + initialPackages = listOf(FqName("arrow.analysis.hints")), + addSubPackages = false + ) { it.hasPackageWithLawsAnnotation } + .flatMap { + it.packageWithLawsAnnotation?.argumentValueAsArrayOfString("packages").orEmpty() + } + .map { FqName(it) } + module.gather(packagesWithLaws, addSubPackages = false) { it.hasInterestingAnnotation } + } + .forEach { addConstraintsFromAnnotations(it, bindingTrace) } +} + +internal fun SolverState.addConstraintsFromAnnotations( + descriptor: DeclarationDescriptor, + bindingContext: ResolutionContext +) { + val constraints = + descriptor.annotations().iterable().mapNotNull { ann -> + when (ann.fqName) { + FqName("arrow.analysis.Pre") -> "pre" + FqName("arrow.analysis.Post") -> "post" + FqName("arrow.analysis.DoNotLookAtArguments") -> "doNotLookAtArgumentsWhen" + else -> null + }?.let { element -> parseFormula(element, ann, descriptor) } + } + if (constraints.isNotEmpty()) { + val preConstraints = arrayListOf() + val postConstraints = arrayListOf() + val notLookConstraints = arrayListOf() + constraints.forEach { (call, formula) -> + if (call == "pre") preConstraints.addAll(formula) + if (call == "post") postConstraints.addAll(formula) + if (call == "doNotLookAtArgumentsWhen") notLookConstraints.addAll(formula) + } + addConstraints(descriptor, preConstraints, postConstraints, notLookConstraints, bindingContext) + } +} + +/** Parse constraints from annotations. */ +private fun SolverState.parseFormula( + element: String, + annotation: AnnotationDescriptor, + descriptor: DeclarationDescriptor +): Pair> { + val dependencies = annotation.argumentValueAsArrayOfString("dependencies") + val formulae = annotation.argumentValueAsArrayOfString("formulae") + val messages = annotation.argumentValueAsArrayOfString("messages") + return element to + messages.zip(formulae).map { (msg, formula) -> + NamedConstraint(msg, parseFormula(descriptor, formula, dependencies.toList())) + } +} + +/** Parse constraints from annotations. */ +internal fun SolverState.parseFormula( + descriptor: DeclarationDescriptor, + formula: String, + dependencies: List +): BooleanFormula { + val VALUE_TYPE = "Int" + val FIELD_TYPE = "Int" + // build the parameters environment + val params = + (descriptor as? CallableDescriptor)?.let { function -> + function.valueParameters.joinToString(separator = "\n") { param -> + "(declare-fun ${param.name} () $VALUE_TYPE)" + } + } + ?: "" + // build the dependencies + val deps = dependencies.joinToString(separator = "\n") { "(declare-fun $it () $FIELD_TYPE)" } + // build the rest of the environment + val rest = + """ + (declare-fun this () $VALUE_TYPE) + (declare-fun $RESULT_VAR_NAME () $VALUE_TYPE) + """.trimIndent() + val fullString = "$params\n$deps\n$rest\n(assert $formula)" + return solver.parse(fullString) +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt new file mode 100644 index 000000000..d81bc8fbf --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt @@ -0,0 +1,287 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.collect + +import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.SpecialKind +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Constructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithInitializer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages +import arrow.meta.plugins.analysis.phases.analysis.solver.hasImplicitPrimaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.isAssertCall +import arrow.meta.plugins.analysis.phases.analysis.solver.isRequireCall +import arrow.meta.plugins.analysis.phases.analysis.solver.singleArg +import arrow.meta.plugins.analysis.phases.analysis.solver.specialKind +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import arrow.meta.plugins.analysis.smt.Solver +import arrow.meta.plugins.analysis.smt.extractSingleVariable +import kotlin.collections.ArrayList +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.Formula +import org.sosy_lab.java_smt.api.FunctionDeclaration +import org.sosy_lab.java_smt.api.visitors.FormulaTransformationVisitor + +/** + * Gather constraints from the local module by inspecting + * - Custom DSL elements (pre and post) + * - Ad-hoc constraints over third party types TODO + */ +public fun Declaration.collectConstraintsFromDSL( + solverState: SolverState, + context: ResolutionContext, + descriptor: DeclarationDescriptor +) { + if (this is ClassOrObject && + hasImplicitPrimaryConstructor() && + getAnonymousInitializers().isNotEmpty() && + !descriptor.hasPackageWithLawsAnnotation + ) { + descriptor as ClassDescriptor + val (preConstraints, postConstraints) = + null.constraintsFromConstructor( + solverState, + context, + getPrimaryConstructorParameterList()?.parameters.orEmpty(), + this + ) + if (preConstraints.isNotEmpty() || postConstraints.isNotEmpty()) { + solverState.addConstraints( + descriptor.constructors.single(), + preConstraints, + postConstraints, + arrayListOf(), + context + ) + } + } else { + when (this) { + is Constructor<*> -> + constraintsFromConstructor( + solverState, + context, + valueParameters, + getContainingClassOrObject() + ) + is DeclarationWithBody -> + constraintsFromFunctionLike(solverState, context, valueParameters.filterNotNull()) + is DeclarationWithInitializer -> + constraintsFromFunctionLike(solverState, context, emptyList()) + else -> Triple(arrayListOf(), arrayListOf(), arrayListOf()) + }.let { (preConstraints, postConstraints, notLookConstraints) -> + if (preConstraints.isNotEmpty() || + postConstraints.isNotEmpty() || + notLookConstraints.isNotEmpty() + ) { + solverState.addConstraints( + descriptor, + preConstraints, + postConstraints, + notLookConstraints, + context + ) + } + } + } +} + +/** + * Obtain all the function calls and corresponding formulae to 'pre', 'post', and 'require' This + * function is used by more specific instances like [constraintsFromConstructor] and + * [constraintsFromFunctionLike] + */ +private fun Declaration.constraintsFromGenericDeclaration( + solverState: SolverState, + context: ResolutionContext, + parameters: List +): List> = + context.run { + constraintsDSLElements().mapNotNull { it.elementToConstraint(solverState, context, parameters) } + } + +/** Gather constraints for anything which is not a constructor */ +private fun Declaration.constraintsFromFunctionLike( + solverState: SolverState, + context: ResolutionContext, + parameters: List +): Triple, ArrayList, ArrayList> { + val preConstraints = arrayListOf() + val postConstraints = arrayListOf() + val notLookConstraints = arrayListOf() + constraintsFromGenericDeclaration(solverState, context, parameters).forEach { (call, formula) -> + when (call.specialKind) { + SpecialKind.Pre -> preConstraints.add(formula) + SpecialKind.Post -> postConstraints.add(formula) + SpecialKind.NotLookArgs -> notLookConstraints.add(formula) + else -> {} // do nothing + } + } + return Triple(preConstraints, postConstraints, notLookConstraints) +} + +/** + * Constructors have some additional requirements, namely the pre- and post-conditions of init + * blocks should be added to their own list + */ +private fun > Constructor?.constraintsFromConstructor( + solverState: SolverState, + context: ResolutionContext, + parameters: List, + containingClassOrObject: ClassOrObject +): Triple, ArrayList, ArrayList> { + val preConstraints = arrayListOf() + val postConstraints = arrayListOf() + (containingClassOrObject.getAnonymousInitializers() + listOfNotNull(this)) + .flatMap { it.constraintsFromGenericDeclaration(solverState, context, parameters) } + .forEach { (call, formula) -> + val isRequireOrAssert = call.isRequireCall() || call.isAssertCall() + if (call.specialKind == SpecialKind.Pre) { + rewritePrecondition( + solverState, + context, + parameters, + !isRequireOrAssert, + call, + formula.formula + ) + ?.let { preConstraints.add(NamedConstraint(formula.msg, it)) } + } + // in constructors 'require' and 'assert' have a double duty + if (call.specialKind == SpecialKind.Post || isRequireOrAssert) { + rewritePostcondition(solverState, formula.formula).let { + postConstraints.add(NamedConstraint(formula.msg, it)) + } + } + } + return Triple(preConstraints, postConstraints, arrayListOf()) +} + +/** Turn references to 'field(x, this)' into references to parameter 'x' */ +private fun rewritePrecondition( + solverState: SolverState, + context: ResolutionContext, + parameters: List, + raiseErrorWhenUnexpected: Boolean, + call: ResolvedCall, + formula: BooleanFormula +): BooleanFormula? { + val mgr = solverState.solver.formulaManager + var errorSignaled = false + val result = + mgr.transformRecursively( + formula, + object : FormulaTransformationVisitor(mgr) { + override fun visitFunction( + f: Formula?, + args: MutableList?, + fn: FunctionDeclaration<*>? + ): Formula = + if (fn?.name == Solver.FIELD_FUNCTION_NAME) { + val fieldName = args?.getOrNull(0)?.let { mgr.extractSingleVariable(it) } + val thisName = args?.getOrNull(1)?.let { mgr.extractSingleVariable(it) } + val paramName = + parameters + .firstOrNull { param -> + fieldName?.endsWith(".${param.nameAsName?.value}") + ?: (param.nameAsName?.value == fieldName) + } + ?.nameAsName + ?.value + if (fieldName != null && thisName == "this") { + if (paramName != null) { + solverState.solver.makeObjectVariable(paramName) + } else { + // error case, we have a reference to a field + // which is not coming from an argument + errorSignaled = true + if (raiseErrorWhenUnexpected) { + val msg = ErrorMessages.Parsing.unexpectedFieldInitBlock(fieldName) + context.handleError( + ErrorIds.Parsing.UnexpectedFieldInitBlock, + call.callElement, + msg + ) + } + super.visitFunction(f, args, fn) + } + } else { + super.visitFunction(f, args, fn) + } + } else { + super.visitFunction(f, args, fn) + } + } + ) + return result.takeIf { !errorSignaled } +} + +/** Turn references to 'this' into references to '$result' */ +private fun rewritePostcondition( + solverState: SolverState, + formula: BooleanFormula +): BooleanFormula { + val mgr = solverState.solver.formulaManager + return mgr.transformRecursively( + formula, + object : FormulaTransformationVisitor(mgr) { + override fun visitFreeVariable(f: Formula?, name: String?): Formula = + if (name == "this") { + solverState.solver.makeObjectVariable(RESULT_VAR_NAME) + } else { + super.visitFreeVariable(f, name) + } + } + ) +} + +/** Turns an [Element] into a formula */ +private fun Element.elementToConstraint( + solverState: SolverState, + context: ResolutionContext, + parameters: List +): Pair? { + val call = getResolvedCall(context) + val kind = call?.specialKind + return if (kind == SpecialKind.Pre || kind == SpecialKind.Post || kind == SpecialKind.NotLookArgs + ) { + val predicateArg = call.singleArg("predicate", context) ?: call.singleArg("value", context) + val result = solverState.topLevelExpressionToFormula(predicateArg, context, parameters, false) + if (result == null) { + val msg = ErrorMessages.Parsing.errorParsingPredicate(predicateArg) + if (call.isRequireCall() || call.isAssertCall()) { + // for built-ins only issue a warning + context.handleError(ErrorIds.Parsing.WarningParsingPredicate, this, msg) + } else { + context.handleError(ErrorIds.Parsing.ErrorParsingPredicate, this, msg) + solverState.signalParseErrors() + } + null + } else { + val msgBody = call.singleArg("msg", context) ?: call.singleArg("lazyMessage", context) + when (msgBody) { + is LambdaExpression -> + when (val body = msgBody.bodyExpression) { + is BlockExpression -> body.firstStatement?.text?.trim('"') + is Element -> body.text.trim('"') + else -> msgBody.text + } + is ConstantExpression -> msgBody.text.trim('"') + is Element -> msgBody.text + else -> predicateArg?.text + }?.let { call to NamedConstraint(it, result) } + } + } else { + null + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints.kt new file mode 100644 index 000000000..b0aad35b9 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints.kt @@ -0,0 +1,10 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.collect.model + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor + +data class DeclarationConstraints( + val descriptor: DeclarationDescriptor, + val pre: List, + val post: List, + val doNotLookAtArgumentsWhen: List +) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint.kt new file mode 100644 index 000000000..e38a174bc --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint.kt @@ -0,0 +1,5 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.collect.model + +import org.sosy_lab.java_smt.api.BooleanFormula + +data class NamedConstraint(val msg: String, val formula: BooleanFormula) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt new file mode 100644 index 000000000..92bc6a4c2 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt @@ -0,0 +1,262 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.errors + +enum class SeverityLevel { + Error, + Warning, + Info, + Unsupported +} + +sealed interface ErrorIds { + + val name: String + val id: String + get() = name + val shortDescription: String + val fullDescription: String? + get() = null + val level: SeverityLevel + get() = SeverityLevel.Error + + enum class Parsing : ErrorIds { + ErrorParsingPredicate, + WarningParsingPredicate, + UnexpectedReference, + UnexpectedFieldInitBlock; + + override val shortDescription: String + get() = "The predicate could not be translated into a SMT formula" + + override val fullDescription: String + get() = + """ + The corresponding predicate -- in `pre`, `post`, or `invariant` blocks -- could not be + translated to a SMT formula, that is, it is not supported by the solver used + internally by the analysis. For example, we cannot translate method calls to SMT: + + ```kotlin + fun f(xs: List[String]): String { + pre({ !xs.get(0).isEmpty() }) { ... } + ... + } + ``` + + The compiler won't catch these errors in its own analysis phase (like it would do with a + type error), since this is perfectly good code. However, it seems desirable for the + programmer to know that a particular language feature cannot be used in these blocks. + """.trimIndent() + } + + enum class Laws : ErrorIds { + LawMustCallFunction, + LawMustHaveParametersInOrder, + SubjectWithoutName, + CouldNotResolveSubject; + + override val shortDescription: String + get() = "Incorrect definition of a law" + + override val fullDescription: String + get() = + """ + The definition of a law by means of a `@Law` annotation does not satisfy the requirements: + + - It must call **exactly one** function at the end, + - The call must use the parameters **in order**. + """.trimIndent() + } + + enum class Unsupported : ErrorIds { + UnsupportedExpression; + + override val shortDescription: String + get() = "This element is not (yet) supported" + + override val level: SeverityLevel + get() = SeverityLevel.Unsupported + } + + enum class Unsatisfiability : ErrorIds { + UnsatCallPre { + override val shortDescription: String + get() = "A pre-condition for a (method, property, function) is are not satisfied" + + override val fullDescription: String + get() = + """ + The required pre-conditions for a (method, property, function) call are not satisfied. + For example: + + ```kotlin + val wrong = 1 / 0 // does not satisfy '0 != 0' in Int.div law + ``` + """.trimIndent() + }, + UnsatBodyPost { + override val shortDescription: String + get() = "A post-condition declared in the function body does not hold" + + override val fullDescription: String + get() = + """ + The post-condition declared in a function body cannot be proven true. + For example: + + ```kotlin + fun f(x: Int): Int { + pre(x >= 0) { "non-negative" } + val r = x + x + return r.post({ it > 1 }) { "greater than 1" } + // does not satisfy 'x + x > 1' + } + ``` + """.trimIndent() + }, + UnsatInvariants { + override val shortDescription: String + get() = "The invariant declared for a mutable variable is not satisfied by a value" + + override val fullDescription: String + get() = + """ + The invariant declared for a mutable variable is not satisfied a value, + either the first one or in a new assignment. For example: + + ```kotlin + fun g(): Int { + var r = 1.invariant({ it > 0 }) { "it > 0" } + r = 0 // does not satisfy '0 > 0' + ... + } + ``` + """.trimIndent() + } + } + + enum class Inconsistency : ErrorIds { + InconsistentBodyPre { + override val fullDescription: String + get() = + """ + The set of pre-conditions given to the function leaves no possible way to call the function. + For example: + + ```kotlin + fun h(x: Int): Int { + pre({ x > 0 }) { "greater than 0" } + pre({ x < 0 }) { "smaller than 0" } + // no value can be both < 0 and > 0 + ... + } + ``` + """.trimIndent() + }, + InconsistentDefaultValues { + override val fullDescription: String + get() = + """ + The default values do not satisfy the pre-conditions. + For example: + + ```kotlin + fun h(x: Int = 0): Int { + pre({ x > 0 }) { "greater than 0" } + ... + } + ``` + """.trimIndent() + }, + InconsistentConditions { + override val fullDescription: String + get() = + """ + The body of a branch is never executed, because the condition it hangs upon conflicts + with the rest of the information about the function. + This may arise, for example, if a condition goes against a pre-condition: + + ```kotlin + fun i(x: Int): Int { + pre({ x > 0 }) { "greater than 0" } + if (x == 0) { + // 'x > 0' and 'x == 0' are incompatible + // so this branch is unreachable + } else { + ... + } + } + ``` + """.trimIndent() + + override val level: SeverityLevel + get() = SeverityLevel.Warning + }, + InconsistentCallPost { + override val fullDescription: String + get() = + """ + The post-conditions gathered after calling a function imply + that this function could not be called at all. + _This is really uncommon in practice_. + """.trimIndent() + + override val level: SeverityLevel + get() = SeverityLevel.Warning + }, + InconsistentInvariants { + override val fullDescription: String + get() = + """ + There is no way in which the invariant attached to a declaration may be satisfied. + For example: + + ```kotlin + fun j(x: Int): Int { + pre({ x > 0 }) { "greater than 0" } + var v = 3.invariant ({ v > x && v < 0 }) { "v > x && v < 0" } + } + + ``` + """.trimIndent() + }; + + override val shortDescription: String + get() = "Inconsistent set of conditions (usually means unreachable code)" + } + + enum class Liskov : ErrorIds { + NotWeakerPrecondition { + override val shortDescription: String + get() = "The pre-condition is not weaker than its parent's" + + override val fullDescription: String + get() = + """ + The pre-condition of an overriden method must be **weaker** than + the one declared in its parent. This guarantees that we can + always replace a call to the parent with a call to the child + (Liskov Substitution Principle). + """.trimIndent() + }, + NotStrongerPostcondition { + override val shortDescription: String + get() = "The post-condition is not stronger than its parent's" + + override val fullDescription: String + get() = + """ + The post-condition of an overriden method must be **stronger** than + the one declared in its parent. This guarantees that we can + always replace a call to the parent with a call to the child + (Liskov Substitution Principle). + """.trimIndent() + } + } + + enum class Exception : ErrorIds { + IllegalState, + OtherException; + + override val shortDescription: String + get() = "Internal error during analysis" + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt new file mode 100644 index 000000000..9b66dca55 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt @@ -0,0 +1,347 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.errors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.Branch +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.smt.Solver +import arrow.meta.plugins.analysis.smt.utils.KotlinPrinter +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.Model + +/** + * # Errors in Arrow Analysis + * + * There are broadly three kinds of errors that may arise from Arrow Analysis. This files gives an + * overview of the information tracked in each case, which shall form the basis for top-quality + * error messages. + * + * Additional information + * + * During the analysis, a different SMT variable name is assigned to each subexpression. + * + * For example, we may have: + * ```kotlin + * f(g(2), h()) + * // a -> 2 + * // b -> g(2) + * // c -> h() + * // d -> f(g(2), h()) + * ``` + * We can leverage this information to write better error messages. If we have a constraint which + * states b > 0, we can replace it with g(2) > 0. + */ +object ErrorMessages { + + /** + * These errors arise from `pre`, `post`, or `invariant` blocks which cannot be translated into + * SMT formulae. + * + * For example, we cannot translate method calls to SMT: + * + * ```kotlin + * fun f(xs: List[String]): String { + * pre({ !xs.get(0).isEmpty() }) { ... } + * ... + * } + * ``` + * + * The Kotlin compiler won't catch these errors in its own analysis phase (like it would do with a + * type error), since this is perfectly good Kotlin code. However, it seems desirable for the + * programmer to know that a particular language feature cannot be used in these blocks. + */ + object Parsing { + internal fun errorParsingPredicate(predicateArg: Expression?): String = + "could not parse predicate: ${predicateArg?.text}" + + internal fun unexpectedReference(reference: String?): String = + "unexpected reference: $reference" + + internal fun unexpectedFieldInitBlock(fieldName: String?): String = + if (fieldName == null) { + "unexpected field name in init block" + } else { + "unexpected field name in init block: $fieldName" + } + + internal fun lawMustCallFunction(): String = "a @Law must include a call to another function" + + internal fun lawMustHaveParametersInOrder(): String = + "the call in a @Law must use the arguments in order" + + internal fun subjectWithoutName(fqName: String) = "the subject from law `$fqName` is missing" + + internal fun couldNotResolveSubject(fqName: String, lawName: String) = + "could not resolve subject `$fqName` from law `$lawName`" + } + + /** + * These are warning which are attached to those elements which are not supported by the analysis + * (yet). + */ + object Unsupported { + internal fun unsupportedExpression(element: Element): String = + "unsupported expression (${element::class.simpleName})" + } + + /** + * These errors embody the idea that "something should have been true, but it is not." There are + * three cases in which this may arise. + * + * ### Information available + * + * See [arrow.meta.plugins.analysis.phases.analysis.solver.checkImplicationOf] for the code which + * produces the errors. + * + * - The _one_ constraint name and Boolean formula which could not be satisfied. + * - A _counter-example_ (also called a _model_), which is an assignment of values to + * variableswhich show a specific instance in which the constraint is false. + * - In the `f` function above in the `UnsatBodyPost` epigraph, one such counter-example is `x == + * 0`, since in that case `0 + 0 > 1` is false. + * - By looking at the values of the model for the arguments, we can derive one specific trace for + * which the function fails. + */ + object Unsatisfiability { + + /** + * `UnsatCallPre` (attached to the argument): The required pre-conditions for a (method, + * property, function) call are not satisfied. + * + * For example: + * + * ```kotlin + * val wrong = 1 / 0 // does not satisfy '0 != 0' in Int.div law + * ``` + */ + internal fun Solver.unsatCallPre( + callPreCondition: NamedConstraint, + resolvedCall: ResolvedCall, + branch: Branch, + model: Model + ): String = + """|pre-condition `${callPreCondition.msg}` is not satisfied in `${resolvedCall.callElement.text}` + | -> unsatisfiable constraint: `${callPreCondition.formula.dumpKotlinLike()}` + | -> ${template(callPreCondition, this)} + | -> ${branch(branch)} + """.trimMargin() + + /** + * (attached to the return value) + * + * the post-condition declared in a function body is not true. + * + * For example: + * + * ```kotlin + * fun f(x: Int): Int { + * pre(x >= 0) { "non-negative" } + * val r = x + x + * return r.post({ it > 1 }) { "greater than 1" } + * // does not satisfy 'x + x > 1' + * } + * ``` + */ + internal fun KotlinPrinter.unsatBodyPost( + declaration: Declaration, + postCondition: NamedConstraint, + branch: Branch + ): String = + """|declaration `${declaration.name}` fails to satisfy the post-condition: ${postCondition.formula.dumpKotlinLike()} + | -> ${branch(branch)} + """.trimMargin() + + /** + * (attached to the new value): the invariant declared for a mutable variable is not satisfied + * by the new value. + * + * For example: + * + * ```kotlin + * fun g(): Int { + * var r = 1.invariant({ it > 0 }) { "it > 0" } + * r = 0 // does not satisfy '0 > 0' + * ... + * } + * + * ``` + */ + internal fun Solver.unsatInvariants( + expression: Element, + constraint: NamedConstraint, + branch: Branch, + model: Model + ): String = + """|invariants are not satisfied in `${expression.text}` + | -> unsatisfiable constraint: `${constraint.formula.dumpKotlinLike()}` + | -> ${branch(branch)} + """.trimMargin() + } + + /** + * These errors embody the idea that "there's no possible way in which we may end up in this + * situation." Usually this means that the code is somehow unreachable. There are four cases in + * which this may arise. + * + * ## Information available + * + * See [arrow.meta.plugins.analysis.phases.analysis.solver.addAndCheckConsistency] for the code + * which produces the errors. + * + * The last set of constraints which was added to the SMT solver. This is not very useful when + * considering the next item. An unsatisfiable core, which is a subset of the formulas added to + * the solver since the beginning of the process, and which summarize the incompatibility. During + * the whole analysis of i lots of constraints are added, but the real problem is between x > 0 + * and x == 0. + */ + object Inconsistency { + + /** + * The set of pre-conditions given to the function leaves no possible way to call the function. + * + * For example: + * + * ```kotlin + * fun h(x: Int): Int { + * pre({ x > 0 }) { "greater than 0" } + * pre({ x < 0 }) { "smaller than 0" } + * // no value can be both < 0 and > 0 + * ... + * } + * + * ``` + */ + internal fun KotlinPrinter.inconsistentBodyPre( + declaration: Declaration, + unsatCore: List + ): String = + "${declaration.name} has inconsistent pre-conditions: ${unsatCore.joinToString { it.dumpKotlinLike() }}" + + /** + * The default values do not satisfy the pre-conditions. + * + * For example: + * + * ```kotlin + * fun h(x: Int = 0): Int { + * pre({ x > 0 }) { "greater than 0" } + * ... + * } + * + * ``` + */ + internal fun KotlinPrinter.inconsistentDefaultValues( + declaration: Declaration, + unsatCore: List + ): String = "${declaration.name} has inconsistent default values: ${unsatCore.dumpKotlinLike()}" + + /** + * (attached to a particular condition): the body of a branch is never executed, because the + * condition it hangs upon conflicts with the rest of the information about the function. + * + * For example, if a condition goes against a pre-condition: + * + * ```kotlin + * fun i(x: Int): Int { + * pre({ x > 0 }) { "greater than 0" } + * if (x == 0) { + * // 'x > 0' and 'x == 0' are incompatible + * // so this branch is unreachable + * } else { + * ... + * } + * } + * + * ``` + */ + internal fun KotlinPrinter.inconsistentConditions( + unsatCore: List, + branch: Branch + ): String = + """|unreachable code due to conflicting conditions: ${unsatCore.dumpKotlinLike()} + | -> ${branch(branch)} + """.trimMargin() + + /** + * (attached to the function call): the post-conditions gathered after calling a function imply + * that this function could not be called at all. _This is really uncommon in practice_. + */ + internal fun KotlinPrinter.inconsistentCallPost( + unsatCore: List, + branch: Branch + ): String = + """|unreachable code due to post-conditions: ${unsatCore.dumpKotlinLike()} + | -> ${branch(branch)} + """.trimMargin() + + /** + * (attached to a local declaration): there is no way in which the invariant attached to a + * declaration may be satisfied. + * + * For example: + * + * ```kotlin + * fun j(x: Int): Int { + * pre({ x > 0 }) { "greater than 0" } + * var v = 3.invariant ({ v > x && v < 0 }) { "v > x && v < 0" } + * } + * + * ``` + */ + internal fun KotlinPrinter.inconsistentInvariants( + it: List, + branch: Branch + ): String = + """|invariants are inconsistent: ${it.dumpKotlinLike()} + | -> ${branch(branch)} + """.trimMargin() + } + + object Liskov { + internal fun KotlinPrinter.notWeakerPrecondition(constraint: NamedConstraint): String = + """|pre-condition `${constraint.msg}` is not weaker than those from overridden members + | -> problematic constraint: `${constraint.formula.dumpKotlinLike()}` + """.trimMargin() + + internal fun KotlinPrinter.notStrongerPostcondition(constraint: NamedConstraint): String = + """|post-condition `${constraint.msg}` from overridden member is not satisfied + | -> problematic constraint: `${constraint.formula.dumpKotlinLike()}` + """.trimMargin() + } + + object Exception { + internal fun illegalState(trace: List): String = + "illegal state during analysis:\n" + + trace.joinToString(separator = System.lineSeparator()) { " -> $it" } + + internal fun otherException(e: kotlin.Exception): String = + "exception during analysis: ${e.javaClass.name}\n${e.message}\n${e.stackTraceToString()}" + } + + internal fun template(constraint: NamedConstraint, solver: Solver): String = + solver.run { + val showVariables = extractVariables(constraint.formula) + showVariables + .mapNotNull { mirroredElement(it.key) } + .takeIf { it.isNotEmpty() } + ?.joinToString(separator = System.lineSeparator()) { referencedElement -> + val el = referencedElement.element + val argsMapping = referencedElement.reference + argsMapping?.let { (param, resolvedArg) -> + val paramPsi = param.element() + val location = paramPsi?.let { paramPsi.location() } + "`${el.text}` bound to param `${param.name}` in `${param.containingDeclaration?.fqNameSafe}` ${location?.link() ?: ""}" + } + ?: "" + } + ?.takeIf { it.isNotEmpty() } + ?: "" + } + + internal fun KotlinPrinter.branch(conditions: Branch): String = + if (conditions.isEmpty()) "main function body" else "in branch: ${conditions.dumpKotlinLike()}" + + private fun CompilerMessageSourceLocation.link(): String = "at $path: ($line, $column):" +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt new file mode 100644 index 000000000..9c3c96ee2 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt @@ -0,0 +1,260 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.search + +import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.THIS_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.withAliasUnwrapped +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationContainer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.isComparison +import arrow.meta.plugins.analysis.phases.analysis.solver.isCompatibleWith +import arrow.meta.plugins.analysis.phases.analysis.solver.overriddenDescriptors +import arrow.meta.plugins.analysis.phases.analysis.solver.primitiveFormula +import arrow.meta.plugins.analysis.phases.analysis.solver.renameConditions +import arrow.meta.plugins.analysis.phases.analysis.solver.singleFieldGroups +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import arrow.meta.plugins.analysis.phases.analysis.solver.state.asField +import arrow.meta.plugins.analysis.smt.ObjectFormula +import arrow.meta.plugins.analysis.smt.substituteObjectVariables +import arrow.meta.plugins.analysis.types.PrimitiveType +import arrow.meta.plugins.analysis.types.primitiveType +import arrow.meta.plugins.analysis.types.unwrapIfNullable +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.NumeralFormula + +/** + * Looks up in the solver state previously collected constraints and returns the constraints + * associated to this [resolvedCall] resulting descriptor if any + */ +public fun SolverState.getConstraintsFor(resolvedCall: ResolvedCall): DeclarationConstraints? = + getConstraintsFor(resolvedCall.resultingDescriptor) + +/** + * Looks up in the solver state previously collected constraints and returns the constraints + * associated to this [descriptor], or any of the declaration it has overridden, if any + */ +public fun SolverState.getConstraintsFor( + descriptor: DeclarationDescriptor +): DeclarationConstraints? = + getImmediateConstraintsFor(descriptor) ?: getOverriddenConstraintsFor(descriptor) + +/** + * Looks up in the solver state previously collected constraints for the given [descriptor], but not + * for their possible parents + */ +internal fun SolverState.getImmediateConstraintsFor( + descriptor: DeclarationDescriptor +): DeclarationConstraints? = + callableConstraints[descriptor.withAliasUnwrapped.fqNameSafe] + ?.firstOrNull { d -> d.descriptor.isCompatibleWith(descriptor) } + ?.takeIf { d -> + d.pre.isNotEmpty() || d.post.isNotEmpty() || d.doNotLookAtArgumentsWhen.isNotEmpty() + } + +/** + * The invariants are found in either: + * - the primary constructor (for Kotlin) + * - the intersection of all constructors (for Java) + */ +internal fun SolverState.getPostInvariantsForType(type: ClassDescriptor): List? = + when (val primary = type.unsubstitutedPrimaryConstructor) { + is ConstructorDescriptor -> getConstraintsFor(primary)?.post + else -> + type + .constructors + .map { secondary -> getConstraintsFor(secondary)?.post } + .takeIf { list -> list.isNotEmpty() && list.all { it != null } } + ?.filterNotNull() // this is a bit redundant, but won't compile otherwise + ?.reduce(::intersectNameds) + ?.toList() + } + +internal fun intersectNameds(one: List, other: List) = + one.filter { oneElement -> + other.any { otherElement -> + oneElement.msg == otherElement.msg && + oneElement.formula.toString() == otherElement.formula.toString() + } + } + +/** Obtain the invariants associated with a certain type */ +internal fun SolverState.typeInvariants( + type: Type, + resultName: String, + context: ResolutionContext +): List = typeInvariants(type, solver.makeObjectVariable(resultName), context) + +internal fun SolverState.typeInvariants( + type: Type, + result: ObjectFormula, + context: ResolutionContext +): List { + // invariants from the type + val invariants = + type.descriptor?.let { getPostInvariantsForType(it) }?.let { constraints -> + // replace $result by new name + constraints.map { + NamedConstraint( + "${it.msg} (invariant from $type)", + solver.substituteObjectVariables(it.formula, mapOf(RESULT_VAR_NAME to result)) + ) + } + } + ?: emptyList() + // invariants from property code + val fieldEqs = fieldEqualitiesInvariants(type, result, context) + // invariants about nullability + val isNotNull = + if (!type.isNullable()) { + listOf(NamedConstraint("$result is not null", solver.isNotNull(result))) + } else { + emptyList() + } + return invariants + fieldEqs + isNotNull +} + +internal fun SolverState.fieldEqualitiesInvariants( + type: Type, + resultName: String, + context: ResolutionContext +): List = + fieldEqualitiesInvariants(type, solver.makeObjectVariable(resultName), context) + +/** + * Obtains the invariants related to inter-definition of fields and properties See + * [singleFieldGroups] + */ +internal fun SolverState.fieldEqualitiesInvariants( + type: Type, + result: ObjectFormula, + context: ResolutionContext +): List = + (type.descriptor?.element() as? DeclarationContainer).singleFieldGroups(context).flatMap { set -> + when (set.size) { + 0 -> throw IllegalStateException("empty field group") + else -> { + val lst = set.toList() + val first = lst[0] + val rest = lst.drop(1) + rest.map { + NamedConstraint( + "${it.fqNameSafe.asField} is ${first.fqNameSafe.asField}", + solver.objects { equal(field(it, result), field(first, result)) } + ) + } + } + } + } + +/** + * Looks up in the solver state previously collected constraints for every declaration the + * [descriptor] may have overridden + */ +internal fun SolverState.getOverriddenConstraintsFor( + descriptor: DeclarationDescriptor +): DeclarationConstraints? = + descriptor + .withAliasUnwrapped + .overriddenDescriptors() + ?.mapNotNull { overriddenDescriptor -> getConstraintsFor(overriddenDescriptor) } + ?.takeIf { it.isNotEmpty() } + ?.map { + // rename the argument names and similar things + solver.renameConditions(it, descriptor) + } + ?.let { overriddenConstraints -> + // and finally put all the pre- and post-conditions together + DeclarationConstraints( + descriptor, + overriddenConstraints.flatMap { it.pre }, + overriddenConstraints.flatMap { it.post }, + overriddenConstraints.flatMap { it.doNotLookAtArgumentsWhen } + ) + } + +/** Special primitive constraints */ +internal fun SolverState.primitiveConstraints( + context: ResolutionContext, + call: ResolvedCall, +): DeclarationConstraints? { + val descriptor = call.resultingDescriptor + val returnTy = + if (descriptor.isComparison()) PrimitiveType.BOOLEAN + else descriptor.returnType?.unwrapIfNullable()?.primitiveType() + // inference doesn't give us the correct type from call sometimes, + // so look also at the given expression and intersect the types + val dispatch = + listOfNotNull(descriptor.extensionReceiverParameter, descriptor.dispatchReceiverParameter) + .map { param -> + val tyFromArg = call.getReceiverExpression()?.type(context) + val tyFromParam = param.type.unwrapIfNullable() + val chosenTy = tyFromArg?.intersectIfPossible(tyFromParam) ?: tyFromParam + chosenTy.primitiveType()?.let { ty -> Pair(THIS_VAR_NAME, ty) } + } + val argTys = + dispatch + + descriptor.valueParameters.map { param -> + val tyFromArg = + call + .valueArguments + .filterKeys { it.name == param.name } + .values + .singleOrNull() + ?.arguments + ?.singleOrNull() + ?.argumentExpression + ?.type(context) + val tyFromParam = param.type.unwrapIfNullable() + val chosenTy = tyFromArg?.intersectIfPossible(tyFromParam) ?: tyFromParam + chosenTy.primitiveType()?.let { ty -> Pair(param.name.value, ty) } + } + return if (returnTy == null || argTys.any { it == null }) { + null + } else { + val innerArgs = + argTys.map { + val name = it!!.first + when (it.second) { + PrimitiveType.BOOLEAN -> solver.makeBooleanObjectVariable(name) + PrimitiveType.INTEGRAL -> solver.makeIntegerObjectVariable(name) + PrimitiveType.RATIONAL -> solver.makeDecimalObjectVariable(name) + else -> solver.makeObjectVariable(name) + } + } + solver.primitiveFormula(context, call, innerArgs)?.let { formula -> + when (returnTy) { + PrimitiveType.BOOLEAN -> + solver.booleans { + equivalence( + solver.makeBooleanObjectVariable(RESULT_VAR_NAME), + formula as BooleanFormula + ) + } + PrimitiveType.INTEGRAL -> + solver.ints { + equal( + solver.makeIntegerObjectVariable(RESULT_VAR_NAME), + formula as NumeralFormula.IntegerFormula + ) + } + PrimitiveType.RATIONAL -> + solver.rationals { + equal( + solver.makeIntegerObjectVariable(RESULT_VAR_NAME), + formula as NumeralFormula.RationalFormula + ) + } + else -> solver.objects { equal(solver.resultVariable, formula as ObjectFormula) } + }?.let { + val named = NamedConstraint("checkCallArguments(${descriptor.fqNameSafe})", it) + DeclarationConstraints(descriptor, emptyList(), listOf(named), emptyList()) + } + } + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt new file mode 100644 index 000000000..4d2569e59 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt @@ -0,0 +1,272 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.state + +import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.Branch +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentBodyPre +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentCallPost +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentConditions +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentDefaultValues +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentInvariants +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Liskov.notStrongerPostcondition +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Liskov.notWeakerPrecondition +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Unsatisfiability.unsatBodyPost +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Unsatisfiability.unsatCallPre +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Unsatisfiability.unsatInvariants +import arrow.meta.plugins.analysis.smt.fieldNames +import arrow.meta.plugins.analysis.smt.substituteVariable +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.Model + +// SMT SOLVER INTERACTION +// ====================== +// these two functions ultimately call the SMT solver, +// and report errors as desired + +internal fun SolverState.checkInconsistency( + message: (unsatCore: List) -> Unit +): Boolean { + val unsat = prover.isUnsat + if (unsat) { + message(prover.unsatCore) + solverTrace.add("UNSAT! (inconsistent)") + } + return unsat +} + +internal fun SolverState.addAndCheckConsistency( + constraints: Iterable, + context: ResolutionContext, + message: (unsatCore: List) -> Unit +): Boolean { + constraints.forEach { addConstraint(it, context) } + additionalFieldConstraints(constraints, context).forEach { addConstraint(it, context) } + return checkInconsistency(message) +} + +internal fun SolverState.checkImplicationOf( + constraint: NamedConstraint, + context: ResolutionContext, + message: (model: Model) -> Unit +): Boolean = checkImplicationOf(constraint, true, context, message) + +internal fun SolverState.checkImplicationOf( + constraint: NamedConstraint, + addFieldConstraints: Boolean, + context: ResolutionContext, + message: (model: Model) -> Unit +): Boolean = bracket { + solver.booleans { + addConstraint(NamedConstraint("!(${constraint.msg})", not(constraint.formula)), context) + } + if (addFieldConstraints) + additionalFieldConstraints(listOf(constraint), context).forEach { addConstraint(it, context) } + val unsat = prover.isUnsat + if (!unsat) { + message(prover.model) + solverTrace.add("SAT! (not implied)") + } + !unsat +} + +internal fun SolverState.additionalFieldConstraints( + formulae: Iterable, + context: ResolutionContext +): Set = + solver + .formulaManager + .fieldNames(formulae.map { it.formula }) + .flatMap { (fieldName, appliedTo) -> + val fqName = FqName(fieldName) + val descriptor = context.descriptorFor(fqName).getOrNull(0) + val constraints = singleConstraintsFromFqName(fqName) + if (descriptor != null && + constraints != null && + constraints.pre.isEmpty() && + constraints.post.size == 1 + ) { + setOf( + NamedConstraint( + constraints.post[0].msg, + solver.substituteVariable( + constraints.post[0].formula, + mapOf(RESULT_VAR_NAME to field(descriptor, appliedTo), "this" to appliedTo) + ) + ) + ) + } else { + emptySet() + } + } + .toSet() + +/** This obtains the *single* constraint related to a particular FqName */ +internal fun SolverState.singleConstraintsFromFqName(name: FqName): DeclarationConstraints? = + callableConstraints[name]?.takeIf { it.size == 1 }?.first() + +// PRODUCE ERRORS FROM INTERACTION +// =============================== + +internal fun SolverState.checkDefaultValueInconsistency( + context: ResolutionContext, + declaration: Declaration +): Boolean = + solver.run { + checkInconsistency { unsatCore -> + val msg = inconsistentDefaultValues(declaration, unsatCore) + context.handleError(ErrorIds.Inconsistency.InconsistentDefaultValues, declaration, msg) + } + } + +/** + * Checks that this [declaration] does not contain logical inconsistencies in its preconditions. For + * example: + * - `(x > 0)` + * - `(x < 0)` + * + * If any inconsistencies are found report them through the [context] trace diagnostics + */ +internal fun SolverState.checkPreconditionsInconsistencies( + constraints: DeclarationConstraints?, + context: ResolutionContext, + declaration: Declaration +): Boolean = + solver.run { + constraints?.pre?.let { + addAndCheckConsistency(it, context) { unsatCore -> + val msg = inconsistentBodyPre(declaration, unsatCore) + context.handleError(ErrorIds.Inconsistency.InconsistentBodyPre, declaration, msg) + } + } + ?: false // if there are no preconditions, they are consistent + } + +/** + * Checks that this [declaration] constraints post conditions hold according to the declaration body + * in the current solver state + */ +internal fun SolverState.checkPostConditionsImplication( + constraints: DeclarationConstraints?, + isConstructor: Boolean, + context: ResolutionContext, + declaration: Declaration, + branch: Branch +) { + solver.run { + constraints?.post?.forEach { postCondition -> + checkImplicationOf(postCondition, !isConstructor, context) { + val msg = unsatBodyPost(declaration, postCondition, branch) + context.handleError(ErrorIds.Unsatisfiability.UnsatBodyPost, declaration, msg) + } + } + } +} + +/** Checks the pre-conditions in [callConstraints] hold for [resolvedCall] */ +internal fun SolverState.checkCallPreConditionsImplication( + callConstraints: DeclarationConstraints?, + context: ResolutionContext, + expression: Expression, + resolvedCall: ResolvedCall, + branch: Branch +) = + solver.run { + callConstraints?.pre?.forEach { callPreCondition -> + checkImplicationOf(callPreCondition, context) { model -> + val msg = unsatCallPre(callPreCondition, resolvedCall, branch, model) + context.handleError(ErrorIds.Unsatisfiability.UnsatCallPre, expression, msg) + } + } + } + +/** Checks the post-conditions in [callConstraints] hold for [resolvedCall] */ +internal fun SolverState.checkCallPostConditionsInconsistencies( + callConstraints: DeclarationConstraints?, + context: ResolutionContext, + expression: Expression, + branch: Branch +): Boolean = + solver.run { + callConstraints?.post?.let { + addAndCheckConsistency(it, context) { unsatCore -> + val msg = inconsistentCallPost(unsatCore, branch) + context.handleError(ErrorIds.Inconsistency.InconsistentCallPost, expression, msg) + } + } + ?: false + } + +/** Add the [formulae] to the set and checks that it remains consistent */ +internal fun SolverState.checkConditionsInconsistencies( + formulae: List, + context: ResolutionContext, + expression: Element, + branch: Branch, + reportIfInconsistent: Boolean +): Boolean = + solver.run { + addAndCheckConsistency(formulae, context) { unsatCore -> + if (reportIfInconsistent) { + val msg = inconsistentConditions(unsatCore, branch) + context.handleError(ErrorIds.Inconsistency.InconsistentConditions, expression, msg) + } + } + } + +internal fun SolverState.checkInvariantConsistency( + constraint: NamedConstraint, + context: ResolutionContext, + expression: Element, + branch: Branch +): Boolean = + solver.run { + addAndCheckConsistency(listOf(constraint), context) { + val msg = inconsistentInvariants(it, branch) + context.handleError(ErrorIds.Inconsistency.InconsistentInvariants, expression, msg) + } + } + +internal fun SolverState.checkInvariant( + constraint: NamedConstraint, + context: ResolutionContext, + expression: Element, + branch: Branch +): Boolean = + solver.run { + checkImplicationOf(constraint, context) { model -> + val msg = unsatInvariants(expression, constraint, branch, model) + context.handleError(ErrorIds.Unsatisfiability.UnsatInvariants, expression, msg) + } + } + +internal fun SolverState.checkLiskovWeakerPrecondition( + constraint: NamedConstraint, + context: ResolutionContext, + expression: Element +): Boolean = + solver.run { + checkImplicationOf(constraint, context) { + val msg = notWeakerPrecondition(constraint) + context.handleError(ErrorIds.Liskov.NotWeakerPrecondition, expression, msg) + } + } + +internal fun SolverState.checkLiskovStrongerPostcondition( + constraint: NamedConstraint, + context: ResolutionContext, + expression: Element +): Boolean = + solver.run { + checkImplicationOf(constraint, context) { + val msg = notStrongerPostcondition(constraint) + context.handleError(ErrorIds.Liskov.NotStrongerPostcondition, expression, msg) + } + } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState.kt new file mode 100644 index 000000000..e6c3dc477 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState.kt @@ -0,0 +1,143 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.state + +import arrow.meta.continuations.ContSeq +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.search.typeInvariants +import arrow.meta.plugins.analysis.sarif.ReportedError +import arrow.meta.plugins.analysis.sarif.sarifFileContent +import arrow.meta.plugins.analysis.smt.ObjectFormula +import arrow.meta.plugins.analysis.smt.Solver +import arrow.meta.plugins.analysis.smt.fieldNames +import arrow.meta.plugins.analysis.smt.utils.FieldProvider +import arrow.meta.plugins.analysis.smt.utils.NameProvider +import arrow.meta.plugins.analysis.smt.utils.ReferencedElement +import java.io.Writer +import java.util.Locale +import org.sosy_lab.java_smt.api.ProverEnvironment +import org.sosy_lab.java_smt.api.SolverContext + +data class SolverState( + private val baseDirectory: String, + private val outputFileCreator: (String) -> Writer, + val names: NameProvider = NameProvider(), + val solver: Solver = Solver(names), + val prover: ProverEnvironment = + solver.newProverEnvironment( + SolverContext.ProverOptions.GENERATE_MODELS, + SolverContext.ProverOptions.GENERATE_UNSAT_CORE + ), + val callableConstraints: MutableMap> = mutableMapOf(), + val solverTrace: MutableList = mutableListOf(), + val fieldProvider: FieldProvider = FieldProvider(solver, prover), + private val reportedErrors: MutableSet = mutableSetOf(), +) { + + fun notifySarifReport(id: ErrorIds, element: Element, msg: String) { + reportedErrors.add(ReportedError(id.id, id, element, msg, emptyList())) + } + + private var parseErrors = false + + fun signalParseErrors() { + parseErrors = true + } + + fun hadParseErrors(): Boolean = parseErrors + + inline fun bracket(f: () -> A): A { + solverTrace.add("PUSH") + prover.push() + val result = f() + prover.pop() + solverTrace.add("POP") + return result + } + + /** This signals that the rest of the computation happens inside a push/pop bracket */ + val continuationBracket: ContSeq = ContSeq { bracket { yield(Unit) } } + + /** This signals that part of the computation happens inside a push/pop bracket */ + fun scopedBracket(cont: () -> ContSeq) = + ContSeq.unit + .map { + solverTrace.add("PUSH (scoped)") + prover.push() + } + .flatMap { cont() } + .onEach { + prover.pop() + solverTrace.add("POP (scoped)") + } + + fun addConstraint(constraint: NamedConstraint, context: ResolutionContext) { + prover.addConstraint(constraint.formula) + // introduce the field names + solver.formulaManager.fieldNames(constraint.formula).map { (fieldName, _) -> + context.descriptorFor(FqName(fieldName)).getOrNull(0)?.let { descriptor -> + fieldProvider.introduce(descriptor) + } + } + solverTrace.add("${constraint.msg} : ${constraint.formula}") + } + + fun newName(context: ResolutionContext, prefix: String, element: Element?): String = + newName(context, prefix, element, null) + + fun newName( + context: ResolutionContext, + prefix: String, + element: Element?, + reference: Pair? + ): String { + val type = (element as? Expression)?.type(context) + val info = element?.let { ReferencedElement(it, reference, type) } + val newName = names.recordNewName(prefix, info) + if (type != null && !type.isNullable()) { + typeInvariants(type, newName, context).forEach { addConstraint(it, context) } + } + return newName + } + + fun field(field: DeclarationDescriptor, formula: ObjectFormula): ObjectFormula { + fieldProvider.introduce(field) + return solver.field(field.fqNameSafe.asField, formula) + } + + fun notifyModuleProcessed(moduleDescriptor: ModuleDescriptor) { + updateSarifFile(moduleDescriptor) + } + + private fun updateSarifFile(moduleDescriptor: ModuleDescriptor) { + if (reportedErrors.isNotEmpty()) { + val content = sarifFileContent(baseDirectory, "1.0.0", reportedErrors.toList()) + val moduleName = moduleDescriptor.name.toString().trim('<', '>').ifBlank { "default" } + val sarifFile = outputFileCreator("reports/sarif/arrow.analysis.${moduleName}.sarif") + sarifFile.write(content) + sarifFile.flush() + } + } +} + +val FqName.asField: String + get() { + val parts = this.name.split('.') + return if (parts.isEmpty()) { + this.name + } else { + var lastPart = parts.last() + if (lastPart.startsWith("get")) { + lastPart = lastPart.drop(3).replaceFirstChar { it.lowercase(Locale.getDefault()) } + } + return (parts.dropLast(1) + listOf(lastPart)).joinToString(separator = ".") + } + } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/ReportedError.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/ReportedError.kt new file mode 100644 index 000000000..fab90dcfc --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/ReportedError.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.sarif + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds + +data class ReportedError( + val id: String, + val errorsId: ErrorIds, + val element: Element, + val msg: String, + val references: List +) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/SarifReporter.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/SarifReporter.kt new file mode 100644 index 000000000..685b3b23f --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/SarifReporter.kt @@ -0,0 +1,121 @@ +package arrow.meta.plugins.analysis.sarif + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.SeverityLevel +import io.github.detekt.sarif4k.ArtifactLocation +import io.github.detekt.sarif4k.Level +import io.github.detekt.sarif4k.Location +import io.github.detekt.sarif4k.Message +import io.github.detekt.sarif4k.MultiformatMessageString +import io.github.detekt.sarif4k.PhysicalLocation +import io.github.detekt.sarif4k.Region +import io.github.detekt.sarif4k.ReportingDescriptor +import io.github.detekt.sarif4k.ResultKind +import io.github.detekt.sarif4k.Run +import io.github.detekt.sarif4k.SarifSchema210 +import io.github.detekt.sarif4k.SarifSerializer +import io.github.detekt.sarif4k.Tool +import io.github.detekt.sarif4k.ToolComponent +import io.github.detekt.sarif4k.Version +import kotlin.io.path.Path + +fun sarifFileContent( + baseDir: String, + analysisVersion: String, + errors: List +): String { + val sarifSchema210 = + SarifSchema210( + schema = + "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", + version = Version.The210, + runs = + listOf( + Run( + tool = + Tool( + driver = + ToolComponent( + downloadURI = "https://arrow-kt.io/docs/meta/analysis/", + fullName = "Arrow Analysis", + informationURI = "https://arrow-kt.io/docs/meta/analysis/", + language = "en", + name = "Arrow Analysis", + rules = + errors + .map(ReportedError::errorsId) + .distinctBy(ErrorIds::id) + .map(ErrorIds::toDescriptor), + organization = "arrow-kt", + semanticVersion = analysisVersion, + version = analysisVersion + ) + ), + results = toResults(baseDir, errors) + ) + ) + ) + return SarifSerializer.toJson(sarifSchema210) +} + +private fun ErrorIds.toDescriptor(): ReportingDescriptor = + ReportingDescriptor( + id = "arrow.analysis.$id", + name = name, + shortDescription = MultiformatMessageString(text = shortDescription), + fullDescription = + when (val d = fullDescription) { + null -> MultiformatMessageString(text = shortDescription) + else -> MultiformatMessageString(markdown = d, text = d) + }, + helpURI = "https://arrow-kt.io/docs/meta/analysis/${id}.html" + ) + +fun toResults(baseDir: String, errors: List): List = + errors.map { it.toResult(baseDir) } + +private fun SeverityLevel.toResultLevel(): Level = + when (this) { + SeverityLevel.Error -> Level.Error + SeverityLevel.Warning -> Level.Warning + SeverityLevel.Info -> Level.Note + SeverityLevel.Unsupported -> Level.None + } + +private fun SeverityLevel.toResultKind(): ResultKind = + when (this) { + SeverityLevel.Unsupported -> ResultKind.NotApplicable + else -> ResultKind.Fail + } + +private fun ReportedError.toResult(baseDir: String) = + io.github.detekt.sarif4k.Result( + ruleID = "arrow.analysis.$id", + kind = errorsId.level.toResultKind(), + level = errorsId.level.toResultLevel(), + locations = + (listOf(element.location()) + references.map { it.location() }) + .mapNotNull { it?.toLocation(baseDir) } + .toSet() + .toList(), + message = Message(text = msg) + ) + +private fun rel(baseDir: String, path: String): String { + val p = Path(path) + return if (p.isAbsolute) Path(baseDir).relativize(p).toString() else path +} + +private fun CompilerMessageSourceLocation.toLocation(baseDir: String): Location = + Location( + physicalLocation = + PhysicalLocation( + region = + Region( + startLine = line.toLong(), + startColumn = column.toLong(), + ), + artifactLocation = ArtifactLocation(uri = rel(baseDir, path)) + ) + ) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Booleans.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Booleans.kt new file mode 100644 index 000000000..29a9f95bf --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Booleans.kt @@ -0,0 +1,106 @@ +package arrow.meta.plugins.analysis.smt + +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.Formula + +internal fun Solver.boolNot(args: List): BooleanFormula? = booleans { + if (args.size == 1 && args[0] is BooleanFormula) { + val theOne = args[0] as BooleanFormula + not(theOne) + } else null +} + +internal fun Solver.boolEquivalence(args: List): BooleanFormula? = booleans { + if (args.size == 2) { + val (left, right) = args + if (left is BooleanFormula && right is BooleanFormula) { + equivalence(left, right) + } else null + } else null +} + +internal fun Solver.boolImplication(args: List): BooleanFormula? = booleans { + if (args.size == 2) { + val (left, right) = args + if (left is BooleanFormula && right is BooleanFormula) { + implication(left, right) + } else null + } else null +} + +internal fun Solver.boolAnd(args: List): BooleanFormula? = booleans { + if (args.size == 2) { + val (left, right) = args + if (left is BooleanFormula && right is BooleanFormula) { + and(left, right) + } else null + } else null +} + +internal fun Solver.boolAndList(args: List): BooleanFormula? = + when (args.size) { + 0 -> null + 1 -> args[0] + else -> booleans { and(args) } + } + +internal fun Solver.implication(args: List): BooleanFormula? = booleans { + if (args.size == 2) { + val (left, right) = args + if (left is BooleanFormula && right is BooleanFormula) { + implication(left, right) + } else null + } else null +} + +internal fun Solver.boolOr(args: List): BooleanFormula? = booleans { + if (args.size == 2) { + val (left, right) = args + if (left is BooleanFormula && right is BooleanFormula) { + or(left, right) + } else null + } else null +} + +internal fun Solver.boolOrList(args: List): BooleanFormula = + when (args.size) { + 0 -> booleanFormulaManager.makeFalse() + 1 -> args[0] + else -> booleans { or(args) } + } + +internal fun Solver.boolXor(args: List): BooleanFormula? = booleans { + if (args.size == 2) { + val (left, right) = args + if (left is BooleanFormula && right is BooleanFormula) { + xor(left, right) + } else null + } else null +} + +internal fun Solver.ifThenElse(args: List): Formula? = booleans { + if (args.size == 3) { + val (cond, f1, f2) = args + if (cond is BooleanFormula && f1 is BooleanFormula && f2 is BooleanFormula) { + ifThenElse(cond, f1, f2) + } else null + } else null +} + +internal fun Solver.isTrue(args: List): Boolean? = booleans { + if (args.size == 1) { + val cond = args.first() + if (cond is BooleanFormula) { + isTrue(cond) + } else null + } else null +} + +internal fun Solver.isFalse(args: List): Boolean? = booleans { + if (args.size == 1) { + val cond = args.first() + if (cond is BooleanFormula) { + isFalse(cond) + } else null + } else null +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/FormulaExtensions.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/FormulaExtensions.kt new file mode 100644 index 000000000..d583f4677 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/FormulaExtensions.kt @@ -0,0 +1,161 @@ +package arrow.meta.plugins.analysis.smt + +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import org.sosy_lab.java_smt.api.Formula +import org.sosy_lab.java_smt.api.FormulaManager +import org.sosy_lab.java_smt.api.FunctionDeclaration +import org.sosy_lab.java_smt.api.visitors.DefaultFormulaVisitor +import org.sosy_lab.java_smt.api.visitors.FormulaTransformationVisitor +import org.sosy_lab.java_smt.api.visitors.TraversalProcess +import org.sosy_lab.java_smt.basicimpl.FunctionDeclarationImpl + +fun Solver.substituteVariable(formula: T, mapping: Map): T = + try { + formulae { + val subst = mapping.mapKeys { entry -> makeVariable(getFormulaType(entry.value), entry.key) } + substituteWithFix(formula, subst) + } + } catch (e: Exception) { + throw java.lang.IllegalArgumentException("substituting $formula with $mapping", e) + } + +internal fun Solver.renameObjectVariables( + formula: T, + mapping: Map +): T = + try { + formulae { + val subst = + mapping.map { (k, v) -> Pair(makeObjectVariable(k), makeObjectVariable(v)) }.toMap() + substituteWithFix(formula, subst) + } + } catch (e: Exception) { + throw java.lang.IllegalArgumentException("renaming $formula with $mapping", e) + } + +internal fun Solver.substituteObjectVariables( + formula: T, + mapping: Map +): T = + try { + formulae { + val subst = mapping.map { (k, v) -> Pair(makeObjectVariable(k), v) }.toMap() + substituteWithFix(formula, subst) + } + } catch (e: Exception) { + throw java.lang.IllegalArgumentException("substituting $formula with $mapping", e) + } + +fun Solver.renameDeclarationConstraints( + decl: DeclarationConstraints, + mapping: Map +): DeclarationConstraints { + fun go(c: NamedConstraint) = NamedConstraint(c.msg, renameObjectVariables(c.formula, mapping)) + return DeclarationConstraints( + decl.descriptor, + decl.pre.map(::go), + decl.post.map(::go), + decl.doNotLookAtArgumentsWhen.map(::go) + ) +} + +fun Solver.substituteDeclarationConstraints( + decl: DeclarationConstraints, + mapping: Map +): DeclarationConstraints { + fun go(c: NamedConstraint) = NamedConstraint(c.msg, substituteObjectVariables(c.formula, mapping)) + return DeclarationConstraints( + decl.descriptor, + decl.pre.map(::go), + decl.post.map(::go), + decl.doNotLookAtArgumentsWhen.map(::go) + ) +} + +fun FormulaManager.fieldNames(f: Formula): Set> { + val names = mutableSetOf>() + val visitor = + object : DefaultFormulaVisitor() { + override fun visitDefault(f: Formula?): TraversalProcess = TraversalProcess.CONTINUE + override fun visitFunction( + f: Formula?, + args: MutableList?, + fn: FunctionDeclaration<*>? + ): TraversalProcess { + val secondArg = args?.getOrNull(1) as? ObjectFormula + if (fn?.name == Solver.FIELD_FUNCTION_NAME && secondArg != null) { + args.getOrNull(0)?.let { fieldNames -> + names.addAll(extractVariables(fieldNames).keys.map { Pair(it, secondArg) }) + } + } + return TraversalProcess.CONTINUE + } + } + visitRecursively(f, visitor) + return names +} + +fun FormulaManager.fieldNames(f: Iterable): Set> = + f.flatMap { fieldNames(it) }.toSet() + +fun FormulaManager.isSingleVariable(f: Formula): Boolean { + val visitor = + object : DefaultFormulaVisitor() { + override fun visitDefault(f: Formula?): Boolean = false + override fun visitFreeVariable(f: Formula?, name: String?): Boolean = true + } + return visit(f, visitor) +} + +fun Solver.isFieldCall(f: Formula): Boolean { + val visitor = + object : DefaultFormulaVisitor() { + override fun visitDefault(f: Formula?): Boolean = false + override fun visitFunction( + f: Formula?, + args: MutableList?, + functionDeclaration: FunctionDeclaration<*>? + ): Boolean = functionDeclaration?.name == Solver.FIELD_FUNCTION_NAME + } + return visit(f, visitor) +} + +fun FormulaManager.extractSingleVariable(formula: Formula): String? = + extractVariables(formula).takeIf { it.size == 1 }?.toList()?.getOrNull(0)?.first + +// our version of substitute, needed to work around +// a bug with SMTInterpol +fun Solver.substituteWithFix(pF: T, pFromToMapping: Map): T = + transformRecursively( + pF, + object : FormulaTransformationVisitor(this) { + override fun visitFreeVariable(f: Formula, name: String): Formula = replace(f) + + override fun visitFunction( + f: Formula, + newArgs: List, + functionDeclaration: FunctionDeclaration<*> + ): Formula = pFromToMapping[f] ?: makeApplicationSafe(functionDeclaration, newArgs) + + private fun replace(f: Formula): Formula = pFromToMapping[f] ?: f + + private fun makeApplicationSafe(fn: FunctionDeclaration<*>, args: List) = + try { + makeApplication(fn, args) + } catch (e: IndexOutOfBoundsException) { + fn as FunctionDeclarationImpl<*, *> + val newFn = + FunctionDeclarationImpl.of( + fn.name, + fn.kind, + fn.argumentTypes.take(2), + fn.type, + fn.solverDeclaration + ) + // this happens sometimes in SMTInterpol, + // so we try to fix it by using the function with each 2 arguments + args.reduce { acc, f -> makeApplication(newFn, listOf(acc, f)) } + } + } + ) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Ints.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Ints.kt new file mode 100644 index 000000000..62dd89aa9 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Ints.kt @@ -0,0 +1,77 @@ +package arrow.meta.plugins.analysis.smt + +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.Formula +import org.sosy_lab.java_smt.api.NumeralFormula + +private fun List.numeric(): List = + filterIsInstance() + +internal fun Solver.intEquals(args: List): BooleanFormula? = ints { + if (args.size == 2) { + val (left, right) = args.numeric() + equal(left, right) + } else null +} + +internal fun Solver.intPlus(args: List): NumeralFormula.IntegerFormula? = ints { + if (args.size == 2) { + val (left, right) = args.numeric() + add(left, right) + } else null +} + +internal fun Solver.intNegate(args: List): NumeralFormula.IntegerFormula? = ints { + if (args.size == 1) { + negate(args.numeric().first()) + } else null +} + +internal fun Solver.intMinus(args: List): NumeralFormula.IntegerFormula? = ints { + if (args.size == 2) { + val (left, right) = args.numeric() + subtract(left, right) + } else null +} + +internal fun Solver.intDivide(args: List): NumeralFormula.IntegerFormula? = ints { + if (args.size == 2) { + val (left, right) = args.numeric() + divide(left, right) + } else null +} + +internal fun Solver.intMultiply(args: List): NumeralFormula.IntegerFormula? = ints { + if (args.size == 2) { + val (left, right) = args.numeric() + multiply(left, right) + } else null +} + +internal fun Solver.intGreaterThan(args: List): BooleanFormula? = ints { + if (args.size == 2) { + val (left, right) = args.numeric() + greaterThan(left, right) + } else null +} + +internal fun Solver.intGreaterThanOrEquals(args: List): BooleanFormula? = ints { + if (args.size == 2) { + val (left, right) = args.numeric() + greaterOrEquals(left, right) + } else null +} + +internal fun Solver.intLessThan(args: List): BooleanFormula? = ints { + if (args.size == 2) { + val (left, right) = args.numeric() + lessThan(left, right) + } else null +} + +internal fun Solver.intLessThanOrEquals(args: List): BooleanFormula? = ints { + if (args.size == 2) { + val (left, right) = args.numeric() + lessOrEquals(left, right) + } else null +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt new file mode 100644 index 000000000..9acd0ae00 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt @@ -0,0 +1,81 @@ +package arrow.meta.plugins.analysis.smt + +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.Formula +import org.sosy_lab.java_smt.api.NumeralFormula + +private fun List.rational(): List = + filterIsInstance() + +internal fun Solver.rationalEquals(args: List): BooleanFormula? = rationals { + if (args.size == 2) { + val (left, right) = args.rational() + equal(left, right) + } else null +} + +internal fun Solver.rationalPlus(args: List): NumeralFormula.RationalFormula? = rationals { + if (args.size == 2) { + val (left, right) = args.rational() + add(left, right) + } else null +} + +internal fun Solver.rationalNegate(args: List): NumeralFormula.RationalFormula? = + rationals { + if (args.size == 1) { + negate(args.rational().first()) + } else null +} + +internal fun Solver.rationalMinus(args: List): NumeralFormula.RationalFormula? = + rationals { + if (args.size == 2) { + val (left, right) = args.rational() + subtract(left, right) + } else null +} + +internal fun Solver.rationalDivide(args: List): NumeralFormula.RationalFormula? = + rationals { + if (args.size == 2) { + val (left, right) = args.rational() + divide(left, right) + } else null +} + +internal fun Solver.rationalMultiply(args: List): NumeralFormula.RationalFormula? = + rationals { + if (args.size == 2) { + val (left, right) = args.rational() + multiply(left, right) + } else null +} + +internal fun Solver.rationalGreaterThan(args: List): BooleanFormula? = rationals { + if (args.size == 2) { + val (left, right) = args.rational() + greaterThan(left, right) + } else null +} + +internal fun Solver.rationalGreaterThanOrEquals(args: List): BooleanFormula? = rationals { + if (args.size == 2) { + val (left, right) = args.rational() + greaterOrEquals(left, right) + } else null +} + +internal fun Solver.rationalLessThan(args: List): BooleanFormula? = rationals { + if (args.size == 2) { + val (left, right) = args.rational() + lessThan(left, right) + } else null +} + +internal fun Solver.rationalLessThanOrEquals(args: List): BooleanFormula? = rationals { + if (args.size == 2) { + val (left, right) = args.rational() + lessOrEquals(left, right) + } else null +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt new file mode 100644 index 000000000..df4d5f4f3 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt @@ -0,0 +1,186 @@ +package arrow.meta.plugins.analysis.smt + +import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME +import arrow.meta.plugins.analysis.phases.analysis.solver.THIS_VAR_NAME +import arrow.meta.plugins.analysis.smt.utils.DefaultKotlinPrinter +import arrow.meta.plugins.analysis.smt.utils.KotlinPrinter +import arrow.meta.plugins.analysis.smt.utils.NameProvider +import org.sosy_lab.java_smt.SolverContextFactory +import org.sosy_lab.java_smt.api.ArrayFormulaManager +import org.sosy_lab.java_smt.api.BitvectorFormulaManager +import org.sosy_lab.java_smt.api.BooleanFormula +import org.sosy_lab.java_smt.api.BooleanFormulaManager +import org.sosy_lab.java_smt.api.FloatingPointFormulaManager +import org.sosy_lab.java_smt.api.FormulaManager +import org.sosy_lab.java_smt.api.FormulaType +import org.sosy_lab.java_smt.api.FunctionDeclaration +import org.sosy_lab.java_smt.api.IntegerFormulaManager +import org.sosy_lab.java_smt.api.NumeralFormula +import org.sosy_lab.java_smt.api.QuantifiedFormulaManager +import org.sosy_lab.java_smt.api.RationalFormulaManager +import org.sosy_lab.java_smt.api.SLFormulaManager +import org.sosy_lab.java_smt.api.SolverContext +import org.sosy_lab.java_smt.api.UFManager + +typealias ObjectFormula = NumeralFormula.IntegerFormula + +typealias FieldFormula = NumeralFormula.IntegerFormula + +val ObjectFormulaType = FormulaType.IntegerType +val FieldFormulaType = FormulaType.IntegerType + +class Solver(context: SolverContext, nameProvider: NameProvider) : + SolverContext by context, + FormulaManager by context.formulaManager, + BooleanFormulaManager by context.formulaManager.booleanFormulaManager, + KotlinPrinter by DefaultKotlinPrinter(context.formulaManager, nameProvider) { + + fun ints(f: IntegerFormulaManager.() -> A): A = f(integerFormulaManager) + + fun objects(f: IntegerFormulaManager.() -> A): A = f(integerFormulaManager) + + fun booleans(f: BooleanFormulaManager.() -> A): A = f(booleanFormulaManager) + + fun rationals(f: RationalFormulaManager.() -> A): A = f(rationalFormulaManager) + + fun floatingPoint(f: FloatingPointFormulaManager.() -> A): A = f(floatingPointFormulaManager) + + fun bitvectors(f: BitvectorFormulaManager.() -> A): A = f(bitvectorFormulaManager) + + fun arrays(f: ArrayFormulaManager.() -> A): A = f(arrayFormulaManager) + + fun quantified(f: QuantifiedFormulaManager.() -> A): A = f(quantifiedFormulaManager) + + fun separationLogic(f: SLFormulaManager.() -> A): A = f(slFormulaManager) + + fun uninterpretedFunctions(f: UFManager.() -> A): A = f(ufManager) + + fun formulae(f: FormulaManager.() -> A): A = f(formulaManager) + + val intValueFun: FunctionDeclaration = + ufManager.declareUF(INT_VALUE_NAME, FormulaType.IntegerType, ObjectFormulaType) + + val boolValueFun: FunctionDeclaration = + ufManager.declareUF(BOOL_VALUE_NAME, FormulaType.BooleanType, ObjectFormulaType) + + val decimalValueFun: FunctionDeclaration = + ufManager.declareUF(DECIMAL_VALUE_NAME, FormulaType.RationalType, ObjectFormulaType) + + val fieldFun: FunctionDeclaration = + ufManager.declareUF(FIELD_FUNCTION_NAME, ObjectFormulaType, FieldFormulaType, ObjectFormulaType) + + val isNullFn: FunctionDeclaration = + ufManager.declareUF(IS_NULL_FUNCTION_NAME, FormulaType.BooleanType, ObjectFormulaType) + + fun intValue(formula: ObjectFormula): NumeralFormula.IntegerFormula = uninterpretedFunctions { + callUF(intValueFun, formula) + } + + fun boolValue(formula: ObjectFormula): BooleanFormula = uninterpretedFunctions { + callUF(boolValueFun, formula) + } + + fun decimalValue(formula: ObjectFormula): NumeralFormula.RationalFormula = + uninterpretedFunctions { + callUF(decimalValueFun, formula) + } + + fun field(fieldName: String, formula: ObjectFormula): ObjectFormula = uninterpretedFunctions { + callUF(fieldFun, integerFormulaManager.makeVariable(fieldName), formula) + } + + fun isNull(formula: ObjectFormula): BooleanFormula = uninterpretedFunctions { + callUF(isNullFn, formula) + } + + fun isNotNull(formula: ObjectFormula): BooleanFormula = booleans { not(isNull(formula)) } + + fun makeObjectVariable(varName: String): ObjectFormula = objects { this.makeVariable(varName) } + + fun makeBooleanObjectVariable(varName: String): BooleanFormula = + boolValue(makeObjectVariable(varName)) + + fun makeIntegerObjectVariable(varName: String): NumeralFormula.IntegerFormula = + intValue(makeObjectVariable(varName)) + + fun makeDecimalObjectVariable(varName: String): NumeralFormula.RationalFormula = + decimalValue(makeObjectVariable(varName)) + + val resultVariable = makeObjectVariable(RESULT_VAR_NAME) + val thisVariable = makeObjectVariable(THIS_VAR_NAME) + + private val forbiddenNames: List = + listOf( + // From SMTLIB docs + "div", + "mod", + "abs", + "select", + "store", + "true", + "false", + "not", + "and", + "or", + "xor", + "distinct", + "ite", + // from our own internal names + INT_VALUE_NAME, + BOOL_VALUE_NAME, + DECIMAL_VALUE_NAME, + FIELD_FUNCTION_NAME, + IS_NULL_FUNCTION_NAME + ) + + override fun escape(name: String): String = + when { + name in forbiddenNames -> "$name##" + else -> name + }.let { formulaManager.escape(it) } + + companion object { + + operator fun invoke(nameProvider: NameProvider): Solver = + Solver( + SolverContextFactory.createSolverContext(SolverContextFactory.Solvers.SMTINTERPOL), + nameProvider + ) + + val INT_VALUE_NAME = "int" + val BOOL_VALUE_NAME = "bool" + val DECIMAL_VALUE_NAME = "dec" + val FIELD_FUNCTION_NAME = "field" + val IS_NULL_FUNCTION_NAME = "null" + } +} + +// val initZ3: Unit = //initializes first the turnkey distribution to enable z3 dynamic loading +// +// //tricks java smt lib by injecting the turnkey z3 unpackaded location as part of the java libs +// //before java smt loads it +// run { +// //initializes first the turnkey distribution to enable z3 dynamic loading +// val z3 = Native.getFullVersion() +// println(z3) +// //tricks java smt lib by injecting the turnkey z3 unpackaded location as part of the java libs +// //before java smt loads it +// val z3TurnKeyDistribution: File? = System.getProperty("java.io.tmpdir")?.let { +// File(it).listFiles().orEmpty().filter { +// it.name.contains("z3-turnkey") +// }.firstOrNull() +// } +// val nativePath = NativeLibraries.getNativeLibraryPath().toFile() +// if (nativePath.exists()) { +// nativePath.mkdirs() +// } +// z3TurnKeyDistribution?.listFiles()?.orEmpty()?.forEach { +// try { +// if (it.exists()) { +// // it.copyTo(File(nativePath, it.name), true) +// } +// } catch (ex: IOException) { +// println(ex.message) +// } +// } +// } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FieldProvider.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FieldProvider.kt new file mode 100644 index 000000000..a12c780fa --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FieldProvider.kt @@ -0,0 +1,74 @@ +package arrow.meta.plugins.analysis.smt.utils + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.overriddenDescriptors +import arrow.meta.plugins.analysis.phases.analysis.solver.state.asField +import arrow.meta.plugins.analysis.smt.Solver +import org.sosy_lab.java_smt.api.ProverEnvironment + +class FieldProvider( + private val solver: Solver, + private val prover: ProverEnvironment, + internal val basicFields: MutableMap, + private var current: Long +) { + + fun introduce(descriptor: DeclarationDescriptor): Long { + val name = descriptor.fqNameSafe.asField + + // shortcut, if it's there, just return it + if (basicFields.containsKey(name)) return basicName(name) + + val overridden = descriptor.overriddenDescriptors().orEmpty() + val topOverriden = overridden.filter { it.overriddenDescriptors().isNullOrEmpty() } + return when (topOverriden.size) { + 0 -> { + // it's basic! + // it's OK to save since otherwise it would have + // been found in the initial check + save(name) + basicName(name) + } + 1 -> { + // first introduce all of the upper descriptors + overridden.reversed().forEach { introduce(it) } + // now the map contains the basic one + // assert that they are equal + derivedName(name, topOverriden[0].fqNameSafe.asField) + } + else -> { + // weird case: + // we have more than one "top most" elements + // in this case, we just override *none* + // and take it as basic + save(name) + basicName(name) + } + } + } + + private fun basicName(name: String): Long { + val index = basicFields.getValue(name) + val constraint = solver.ints { equal(makeVariable(name), makeNumber(index)) } + prover.addConstraint(constraint) + return index + } + + private fun derivedName(name: String, topName: String): Long { + val index = basicFields.getValue(topName) + val constraint = solver.ints { equal(makeVariable(name), makeVariable(topName)) } + prover.addConstraint(constraint) + return index + } + + private fun save(name: String): Long { + current += 1 + basicFields[name] = current + return current + } + + companion object { + operator fun invoke(solver: Solver, prover: ProverEnvironment): FieldProvider = + FieldProvider(solver, prover, mutableMapOf(), 0) + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt new file mode 100644 index 000000000..4d868db8a --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt @@ -0,0 +1,163 @@ +package arrow.meta.plugins.analysis.smt.utils + +import arrow.meta.plugins.analysis.smt.Solver +import org.sosy_lab.java_smt.api.Formula +import org.sosy_lab.java_smt.api.FormulaManager +import org.sosy_lab.java_smt.api.FunctionDeclaration +import org.sosy_lab.java_smt.api.FunctionDeclarationKind +import org.sosy_lab.java_smt.api.visitors.DefaultFormulaVisitor + +interface KotlinPrinter { + fun Formula.dumpKotlinLike(): String + fun Formula.dumpKotlinLikeOrRemove(): String? + fun mirroredElement(name: String): ReferencedElement? + + fun List.dumpKotlinLike(): String = + mapNotNull { it.dumpKotlinLikeOrRemove() }.joinToString() +} + +internal class DefaultKotlinPrinter( + private val fmgr: FormulaManager, + private val nameProvider: NameProvider +) : KotlinPrinter { + + override fun mirroredElement(name: String): ReferencedElement? = + nameProvider.mirroredElement(name) + + override fun Formula.dumpKotlinLike(): String { + val str = StringBuilder() + fmgr.visit( + this, + KotlinPrintVisitor(fmgr, str, nameProvider, parensContext = false, negatedContext = false) + ) + return str.toString() + } + + override fun Formula.dumpKotlinLikeOrRemove(): String? = dumpKotlinLike().takeIf { it != "true" } + + private data class KotlinPrintVisitor( + private val fmgr: FormulaManager, + private val out: StringBuilder, + private val nameProvider: NameProvider, + private val parensContext: Boolean, + private val negatedContext: Boolean + ) : DefaultFormulaVisitor() { + + override fun visitDefault(pF: Formula): Void? { + if (negatedContext) out.append('!') + + val text = nameProvider.mirroredElement(pF.toString())?.element?.text ?: pF.toString() + val needsParens = (parensContext || negatedContext) && text.contains(' ') + if (needsParens) out.append('(') + out.append(text) + if (needsParens) out.append(')') + + return null + } + + private enum class Render { + Negation, + Postfix, + Equality, + Binary, + Hidden, + Field, + Unsupported + } + + private fun FunctionDeclaration<*>.toKotlin(): Triple = + when (kind) { + FunctionDeclarationKind.NOT -> Triple(Render.Negation, "!", null) + FunctionDeclarationKind.AND -> Triple(Render.Binary, "&&", null) + FunctionDeclarationKind.OR -> Triple(Render.Binary, "||", null) + FunctionDeclarationKind.SUB -> Triple(Render.Binary, "-", null) + FunctionDeclarationKind.ADD -> Triple(Render.Binary, "+", null) + FunctionDeclarationKind.DIV -> Triple(Render.Binary, "/", null) + FunctionDeclarationKind.MUL -> Triple(Render.Binary, "*", null) + FunctionDeclarationKind.LT -> Triple(Render.Binary, "<", ">=") + FunctionDeclarationKind.LTE -> Triple(Render.Equality, "<=", ">") + FunctionDeclarationKind.GT -> Triple(Render.Binary, ">", "<=") + FunctionDeclarationKind.GTE -> Triple(Render.Equality, ">=", "<") + FunctionDeclarationKind.EQ -> Triple(Render.Equality, "==", "!=") + FunctionDeclarationKind.UF -> + when (name) { + Solver.INT_VALUE_NAME -> Triple(Render.Hidden, "", null) + Solver.BOOL_VALUE_NAME -> Triple(Render.Hidden, "", null) + Solver.DECIMAL_VALUE_NAME -> Triple(Render.Hidden, "", null) + Solver.FIELD_FUNCTION_NAME -> Triple(Render.Field, name, null) + Solver.IS_NULL_FUNCTION_NAME -> Triple(Render.Postfix, " == null", " != null") + else -> Triple(Render.Unsupported, "[unsupported UF: $name]", null) + } + else -> Triple(Render.Unsupported, "[unsupported: $this]", null) + } + + override fun visitFunction( + pF: Formula, + pArgs: List, + pFunctionDeclaration: FunctionDeclaration<*> + ): Void? { + val (render, name, negatedName) = pFunctionDeclaration.toKotlin() + when (render) { + Render.Hidden, Render.Unsupported -> { + pArgs.forEach { arg -> fmgr.visit(arg, this) } + } + Render.Negation -> { + fmgr.visit(pArgs[0], this.copy(negatedContext = !negatedContext)) + } + Render.Equality -> { + val leftStringBuilder = StringBuilder() + fmgr.visit( + pArgs[0], + this.copy(out = leftStringBuilder, parensContext = true, negatedContext = false) + ) + val rightStringBuilder = StringBuilder() + fmgr.visit( + pArgs[1], + this.copy(out = rightStringBuilder, parensContext = true, negatedContext = false) + ) + + if (leftStringBuilder.toString() == rightStringBuilder.toString()) { + out.append(if (negatedContext) "false" else "true") + } else { + if (parensContext) out.append('(') + out.append(leftStringBuilder) + out.append(' ') + out.append(if (negatedContext) negatedName else name) + out.append(' ') + out.append(rightStringBuilder) + if (parensContext) out.append(')') + } + } + else -> { + val mustBeNegated = negatedContext && negatedName == null + val needsParens = parensContext || mustBeNegated + val nameToShow = if (negatedContext && negatedName != null) negatedName else name + + if (mustBeNegated) out.append('!') + if (needsParens) out.append('(') + when (render) { + Render.Postfix -> { + fmgr.visit(pArgs[0], this.copy(parensContext = false, negatedContext = false)) + out.append(nameToShow) + } + Render.Binary -> { + fmgr.visit(pArgs[0], this.copy(parensContext = true, negatedContext = false)) + out.append(' ') + out.append(nameToShow) + out.append(' ') + fmgr.visit(pArgs[1], this.copy(parensContext = true, negatedContext = false)) + } + Render.Field -> { + fmgr.visit(pArgs[1], this.copy(parensContext = false, negatedContext = false)) + out.append(".") + out.append(pArgs[0].toString().substringAfterLast(".")) + } + else -> {} // taken care of above + } + if (needsParens) out.append(')') + } + } + return null + } + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/NameProvider.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/NameProvider.kt new file mode 100644 index 000000000..3bf556207 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/NameProvider.kt @@ -0,0 +1,29 @@ +package arrow.meta.plugins.analysis.smt.utils + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.atomic.AtomicReference + +data class ReferencedElement( + val element: Element, + val reference: Pair?, + val type: Type? +) + +class NameProvider { + private val counter = AtomicReference(0) + + private val assignedNames: ConcurrentHashMap = ConcurrentHashMap() + + fun mirroredElement(assignedName: String): ReferencedElement? = assignedNames[assignedName] + + fun recordNewName(prefix: String, mirroredElement: ReferencedElement?): String { + val n = counter.getAndUpdate { it + 1 } + val newName = "${prefix}$n" + if (mirroredElement != null) assignedNames[newName] = mirroredElement + return newName + } +} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/Literals.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/Literals.kt new file mode 100644 index 000000000..33f1e3186 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/Literals.kt @@ -0,0 +1,24 @@ +package arrow.meta.plugins.analysis.types + +import java.math.BigDecimal +import java.math.BigInteger + +/** + * Parse integer literal according to Kotlin's grammar + * https://kotlinlang.org/docs/reference/grammar.html#literalConstant + */ +fun String.asIntegerLiteral(): BigInteger? = + replace("_", "").trimEnd('u', 'U', 'l', 'L').run { + when { + startsWith("0x", ignoreCase = true) -> drop(2).toBigIntegerOrNull(16) + startsWith("0b", ignoreCase = true) -> drop(2).toBigIntegerOrNull(2) + else -> toBigIntegerOrNull() + } + } + +/** + * Parse floating literal according to Kotlin's grammar + * https://kotlinlang.org/docs/reference/grammar.html#RealLiteral + */ +fun String.asFloatingLiteral(): BigDecimal? = + replace("_", "").trimEnd('f', 'F').toBigDecimalOrNull() diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/PrimitiveType.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/PrimitiveType.kt new file mode 100644 index 000000000..3881f2d3b --- /dev/null +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/PrimitiveType.kt @@ -0,0 +1,35 @@ +package arrow.meta.plugins.analysis.types + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +enum class PrimitiveType { + BOOLEAN, + INTEGRAL, + RATIONAL, + CHAR, + STRING +} + +fun Type.unwrapIfNullable(): Type = + if (isMarkedNullable || isNullable()) unwrappedNotNullableType else this + +fun Type.primitiveType(): PrimitiveType? = + when { + isBoolean() -> PrimitiveType.BOOLEAN + isByte() -> PrimitiveType.INTEGRAL + isShort() -> PrimitiveType.INTEGRAL + isInt() -> PrimitiveType.INTEGRAL + isLong() -> PrimitiveType.INTEGRAL + isUnsignedNumberType() -> PrimitiveType.INTEGRAL + isDouble() -> PrimitiveType.RATIONAL + isFloat() -> PrimitiveType.RATIONAL + isChar() -> PrimitiveType.CHAR + isString() -> PrimitiveType.STRING + else -> + when (this.descriptor?.fqNameSafe) { + FqName("java.math.BigInteger") -> PrimitiveType.INTEGRAL + FqName("java.math.BigDecimal") -> PrimitiveType.RATIONAL + else -> null + } + } diff --git a/arrow-libs/analysis/analysis/example/build.gradle.kts b/arrow-libs/analysis/analysis/example/build.gradle.kts new file mode 100644 index 000000000..cf098ca76 --- /dev/null +++ b/arrow-libs/analysis/analysis/example/build.gradle.kts @@ -0,0 +1,52 @@ +@file:Suppress("DSL_SCOPE_VIOLATION") + +plugins { + id(libs.plugins.kotlin.multiplatform.get().pluginId) + alias(libs.plugins.arrowGradleConfig.kotlin) +} + +version = property("projects.analysis_version").toString() + +kotlin { + explicitApi = null + + sourceSets { + commonMain { + dependencies { + implementation(libs.kotlin.stdlibCommon) + api(projects.arrowAnalysisLaws) + api(projects.arrowAnalysisTypes) + } + } + + named("jvmMain") { + dependencies { + implementation(libs.kotlin.stdlibJDK8) + } + } + + named("jsMain") { + dependencies { + implementation(libs.kotlin.stdlibJS) + } + } + } +} + +dependencies { + kotlinCompilerClasspath(projects.arrowAnalysisKotlinPlugin) +} + +tasks.compileKotlinJvm { + kotlinOptions { + freeCompilerArgs = listOf( + "-Xplugin=$rootDir/plugins/analysis/kotlin-plugin/build/libs/arrow-analysis-kotlin-plugin-$version.jar", + "-P", "plugin:arrow.meta.plugin.compiler.analysis:generatedSrcOutputDir=$buildDir/generated/meta", + "-P", "plugin:arrow.meta.plugin.compiler.analysis:baseDir=${project.rootProject.rootDir.path}" + ) + } +} + +// disable publication +tasks.withType().configureEach { enabled = false } +tasks.withType().configureEach { enabled = false } diff --git a/arrow-libs/analysis/analysis/example/gradle.properties b/arrow-libs/analysis/analysis/example/gradle.properties new file mode 100644 index 000000000..176e0301f --- /dev/null +++ b/arrow-libs/analysis/analysis/example/gradle.properties @@ -0,0 +1,6 @@ +# Maven publishing configuration +POM_NAME=Arrow Analysis Kotlin Example +POM_ARTIFACT_ID=arrow-analysis-kotlin-example +POM_PACKAGING=jar + +pom.name=Arrow Analysis Kotlin Example diff --git a/arrow-libs/analysis/analysis/example/src/commonMain/kotlin/arrow/analysis/BadExample.kt b/arrow-libs/analysis/analysis/example/src/commonMain/kotlin/arrow/analysis/BadExample.kt new file mode 100644 index 000000000..c575c0e61 --- /dev/null +++ b/arrow-libs/analysis/analysis/example/src/commonMain/kotlin/arrow/analysis/BadExample.kt @@ -0,0 +1,89 @@ +package arrow.analysis + +import kotlin.jvm.JvmInline + +// uncomment code to fail gradle build +// fun bar(x: Int): Int = 1 / x +fun bar(x: Int): Int { + pre(x > 0) { "x positive" } + return 1 / x +} +// val other: Int = emptyList().get(1) + +fun increment(x: Int): Int { + pre(x > 0) { "value must be positive" } + return (x + 1).post({ it > 0 }) { "result is positive" } +} + +val example = increment(increment(1)) + +@JvmInline +value class Positive(val value: Int) { + init { + require(value > 0) + } +} + +val positiveExample = Positive(1) + +fun Positive.add(other: Positive) = Positive(this.value + other.value) + +/* +fun nope(x: Int): Int { + pre(x >= 0) { "value >= 0" } + return (x + 1).post({ it > 1 }) { "result > 1" } +} + +fun nope2(x: Int): Int { + pre(x > 0) { "x must be positive" } + return if (x < 0) 1 else 2 +} +*/ + +// fun List.mappyWrong() = map { increment(it) } +fun List.mappyOk() = map { increment(it.value) } + +fun mappy(xs: List) = xs.mapNotNull { if (it > 0) Positive(it) else null }.mappyOk() + +@JvmInline +value class NonEmptyList(val value: List) { + init { + require(value.isNotEmpty()) { "not empty" } + } +} + +fun List.myGet(index: Int): A { + pre(index >= 0 && index < this.size) { "index within bounds" } + return this.get(index) +} + +fun List.firstOr(default: A): A = if (this.size > 0) this.myGet(0) else default + +fun absoluteValue(n: Int): Int = + when { + n < 0 -> -n + n == 0 -> 0 + else -> n + }.post({ it >= 0 }) { "result >= 0" } + +fun double(n: Int): Int { + pre(n > 0) { "n positive" } + val z = n + n + val r = z + 1 + return r.post({ it > 0 }) { "result positive" } +} + +fun double2(n: Int): Int { + pre(n > 0) { "n positive" } + return (n + n).let { it + 1 }.post({ it > 0 }) { "result positive" } +} + +fun List.count(): Int { + var count = 0.invariant({ it >= 0 }) { "z >= 0" } + for (elt in this) { + count = count + 1 + } + return count.post({ it >= 0 }) { "result >= 0" } +} + +fun List.isSingle() = all { it == first() } diff --git a/arrow-libs/analysis/analysis/java-example/build.gradle.kts b/arrow-libs/analysis/analysis/java-example/build.gradle.kts new file mode 100644 index 000000000..5caf7cc78 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-example/build.gradle.kts @@ -0,0 +1,37 @@ +@file:Suppress("DSL_SCOPE_VIOLATION") + +plugins { + `java-library` +} + +version = property("projects.analysis_version").toString() + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } +} + +dependencies { + implementation(libs.kotlin.stdlibCommon) + implementation(libs.kotlin.stdlibJDK8) + implementation(projects.arrowAnalysisTypes) + // compileOnly(projects.arrowAnalysisLaws) + compileOnly(projects.arrowAnalysisJavaPlugin) + compileOnly(projects.arrowAnalysisCommon) + annotationProcessor(projects.arrowAnalysisJavaPlugin) +} + +tasks.withType { + javaCompiler.set(javaToolchains.compilerFor { + languageVersion.set(JavaLanguageVersion.of(11)) + }) + options.compilerArgs.addAll(listOf( + "-parameters", + "-Xplugin:ArrowAnalysisJavaPlugin baseDir=${project.rootProject.rootDir.path}" + )) +} + +// disable publication +tasks.withType().configureEach { enabled = false } +tasks.withType().configureEach { enabled = false } diff --git a/arrow-libs/analysis/analysis/java-example/gradle.properties b/arrow-libs/analysis/analysis/java-example/gradle.properties new file mode 100644 index 000000000..93dcd591a --- /dev/null +++ b/arrow-libs/analysis/analysis/java-example/gradle.properties @@ -0,0 +1,6 @@ +# Maven publishing configuration +POM_NAME=Arrow Analysis Java Example +POM_ARTIFACT_ID=arrow-analysis-java-example +POM_PACKAGING=jar + +pom.name=Arrow Analysis Java Example diff --git a/arrow-libs/analysis/analysis/java-example/src/main/java/Example.java b/arrow-libs/analysis/analysis/java-example/src/main/java/Example.java new file mode 100644 index 000000000..2296a6eca --- /dev/null +++ b/arrow-libs/analysis/analysis/java-example/src/main/java/Example.java @@ -0,0 +1,9 @@ +import static arrow.analysis.RefinementDSLKt.post; +import static arrow.analysis.RefinementDSLKt.pre; + +public class Example { + public int f(int x) { + pre(x > 0, () -> "x must be positive"); + return post(x + 1, r -> r > 0, () -> "result is positive"); + } +} diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts new file mode 100644 index 000000000..a0b652589 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts @@ -0,0 +1,47 @@ +@file:Suppress("DSL_SCOPE_VIOLATION") + +plugins { + id(libs.plugins.kotlin.jvm.get().pluginId) + `java-gradle-plugin` + alias(libs.plugins.arrowGradleConfig.kotlin) + alias(libs.plugins.arrowGradleConfig.publish) +} + +version = property("projects.analysis_version").toString() + +tasks.processResources { + duplicatesStrategy = DuplicatesStrategy.WARN + filesMatching("**/analysis.plugin.properties") { + filter { it.replace("%analysisPluginVersion%", "$version") } + } +} + +dependencies { + api(projects.arrowGradlePluginCommons) + runtimeOnly(libs.classgraph) + + // Necessary during plugin execution to be found and added for compilation + api(projects.arrowMeta) + api(projects.arrowAnalysisJavaPlugin) +} + +gradlePlugin { + plugins { + create("arrow") { + id = "io.arrow-kt.analysis.java" + displayName = "Arrow Analysis Java Gradle Plugin" + implementationClass = "arrow.meta.plugin.gradle.AnalysisJavaGradlePlugin" + } + } +} + +pluginBundle { + website = "https://arrow-kt.io/docs/meta" + vcsUrl = "https://github.com/arrow-kt/arrow-meta" + description = "Functional companion to Kotlin's Compiler" + tags = listOf("kotlin", "compiler", "arrow", "plugin", "meta") +} + +tasks.test { + systemProperty("arrow.meta.generate.source.dir", project.buildDir.absolutePath) +} diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/gradle.properties b/arrow-libs/analysis/analysis/java-gradle-plugin/gradle.properties new file mode 100644 index 000000000..8ad839a96 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-gradle-plugin/gradle.properties @@ -0,0 +1,6 @@ +# Maven publishing configuration +POM_NAME=Arrow Analysis Java Gradle Plugin +POM_ARTIFACT_ID=arrow-analysis-java-gradle-plugin +POM_PACKAGING=jar + +pom.name=Arrow Analysis Java Gradle Plugin diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin.kt b/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin.kt new file mode 100644 index 000000000..a4d157ca0 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin.kt @@ -0,0 +1,34 @@ +package arrow.meta.plugin.gradle + +import java.util.* +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.tasks.compile.JavaCompile + +public class AnalysisJavaGradlePlugin : Plugin { + private val groupId: String = "io.arrow-kt" + + override fun apply(project: Project) { + // get the version from the analysis.plugin.properties file + val properties = Properties() + properties.load(this.javaClass.getResourceAsStream("analysis.plugin.properties")) + val version = properties.getProperty("analysisPluginVersion") + + project.afterEvaluate { p -> + // add libraries + p.dependencies.add("compileOnly", "$groupId:arrow-analysis-types:$version") + p.dependencies.add("compileOnly", "$groupId:arrow-analysis-laws:$version") + // the annotation processor must be present + p.dependencies.add("annotationProcessor", "$groupId:arrow-analysis-java-plugin:$version") + // add the plug-in which uses the result of the processor + p.tasks.withType(JavaCompile::class.java) { task -> + task.options.compilerArgs.addAll( + listOf( + "-parameters", // IMPORTANT! otherwise we have no parameter names + "-Xplugin:ArrowAnalysisJavaPlugin generatedSrcOutputDir=${p.buildDir} baseDir=${p.rootProject.rootDir.path}" + ) + ) + } + } + } +} diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.java.properties b/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.java.properties new file mode 100644 index 000000000..5e74d3d1a --- /dev/null +++ b/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.java.properties @@ -0,0 +1 @@ +implementation-class=arrow.meta.plugin.gradle.AnalysisJavaGradlePlugin \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties b/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties new file mode 100644 index 000000000..31f336e35 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties @@ -0,0 +1 @@ +analysisPluginVersion=%analysisPluginVersion% diff --git a/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts new file mode 100644 index 000000000..16b61b374 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts @@ -0,0 +1,30 @@ +@file:Suppress("DSL_SCOPE_VIOLATION") + +plugins { + id(libs.plugins.kotlin.jvm.get().pluginId) + alias(libs.plugins.arrowGradleConfig.publish) +} + +version = property("projects.analysis_version").toString() + +kotlin { + explicitApi = null +} + +dependencies { + compileOnly(libs.kotlin.stdlibJDK8) + implementation(projects.arrowMeta) + implementation(projects.arrowAnalysisTypes) + implementation(projects.arrowAnalysisCommon) + api(files(org.gradle.internal.jvm.Jvm.current().toolsJar)) + + testImplementation(libs.kotlin.stdlibJDK8) + testImplementation(libs.junit) + testImplementation(libs.javaCompileTesting) + testImplementation(projects.arrowMetaTest) + testRuntimeOnly(projects.arrowMeta) + testRuntimeOnly(projects.arrowAnalysisTypes) + testRuntimeOnly(projects.arrowAnalysisJavaPlugin) + testRuntimeOnly(projects.arrowAnalysisTypes) + testRuntimeOnly(libs.arrowCore) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/gradle.properties b/arrow-libs/analysis/analysis/java-plugin/gradle.properties new file mode 100644 index 000000000..e6cdaf6bb --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/gradle.properties @@ -0,0 +1,6 @@ +# Maven publishing configuration +POM_NAME=Arrow Analysis Java Compiler Plugin +POM_ARTIFACT_ID=arrow-analysis-java-plugin +POM_PACKAGING=jar + +pom.name=Arrow Analysis Java Compiler Plugin diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisContext.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisContext.kt new file mode 100644 index 000000000..5570d229d --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisContext.kt @@ -0,0 +1,56 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java + +import com.sun.source.tree.CompilationUnitTree +import com.sun.tools.javac.api.BasicJavacTask +import com.sun.tools.javac.code.Symtab +import com.sun.tools.javac.comp.Modules +import com.sun.tools.javac.tree.JCTree +import com.sun.tools.javac.tree.TreeCopier +import com.sun.tools.javac.tree.TreeMaker +import com.sun.tools.javac.util.Context +import com.sun.tools.javac.util.JCDiagnostic +import com.sun.tools.javac.util.JavacMessages +import com.sun.tools.javac.util.Log +import com.sun.tools.javac.util.Names +import javax.lang.model.util.Elements +import javax.lang.model.util.Types + +public open class AnalysisContextWithoutResolver( + public val context: Context, + public val types: Types, + public val elements: Elements +) { + public val logger: Log = Log.instance(context) + public val messages: JavacMessages = + JavacMessages.instance(context).apply { add { AnalysisMessages() } } + public val diagnostics: JCDiagnostic.Factory = JCDiagnostic.Factory(messages, "arrow-analysis") + public val symbolTable: Symtab = Symtab.instance(context) + public val modules: Modules = Modules.instance(context) + public val names: Names = Names.instance(context) + + public fun copy(t: JCTree): JCTree { + val maker = TreeMaker.instance(context) + val copier = TreeCopier(maker) + return copier.copy(t) + } + + public companion object { + public operator fun invoke(task: BasicJavacTask): AnalysisContextWithoutResolver = + AnalysisContextWithoutResolver(task.context, task.types, task.elements) + } +} + +public class AnalysisContext( + context: Context, + types: Types, + elements: Elements, + public val unit: CompilationUnitTree, + public val resolver: Resolver +) : AnalysisContextWithoutResolver(context, types, elements) { + public companion object { + public operator fun invoke(task: BasicJavacTask, unit: CompilationUnitTree): AnalysisContext = + AnalysisContext(task.context, task.types, task.elements, unit, Resolver(task, unit)) + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt new file mode 100644 index 000000000..03115f633 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt @@ -0,0 +1,235 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java + +import arrow.meta.plugins.analysis.java.ast.JavaResolutionContext +import arrow.meta.plugins.analysis.java.ast.addAnn +import arrow.meta.plugins.analysis.java.ast.annArrays +import arrow.meta.plugins.analysis.java.ast.annStrings +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaFunctionDescriptor +import arrow.meta.plugins.analysis.java.ast.elements.JavaElement +import arrow.meta.plugins.analysis.java.ast.elements.JavaMethod +import arrow.meta.plugins.analysis.java.ast.elements.OurTreeVisitor +import arrow.meta.plugins.analysis.java.ast.elements.visitRecursively +import arrow.meta.plugins.analysis.java.ast.hintsPackage +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.modelCautious +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.check.checkDeclarationConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.collectConstraintsFromAnnotations +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.collectConstraintsFromDSL +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.findDescriptorFromLocalLaw +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.isALaw +import arrow.meta.plugins.analysis.phases.analysis.solver.search.getConstraintsFor +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import arrow.meta.plugins.analysis.smt.fieldNames +import com.sun.source.tree.CompilationUnitTree +import com.sun.source.tree.MethodTree +import com.sun.source.tree.Tree +import com.sun.source.util.JavacTask +import com.sun.source.util.Plugin +import com.sun.source.util.TaskEvent +import com.sun.tools.javac.api.BasicJavacTask +import com.sun.tools.javac.main.JavaCompiler +import com.sun.tools.javac.tree.JCTree +import com.sun.tools.javac.util.Pair +import java.util.LinkedList +import javax.lang.model.element.Element +import javax.tools.JavaFileManager +import javax.tools.StandardLocation + +/* +javac does not guarantee any order between the different files in a project, +only that for each file you'll get a set of events PARSE, ENTER, ANALYZE, GENERATE. +This is not great, because we need to process the methods in the ANALYZE stage, +or otherwise the function calls cannot be resolved to their origins +(so we don't know whether a certain call is indeed to our `pre` function or to any +other function with the same name). Furthermore, we need to make the (SMT) checks +in the ANALYZE stage too, because in the GENERATE phase most of the nice structure +in the code has already been lowered (for example, lambdas have already been +turned into classes). + +javac does guarantee, though, that annotation processors will be run before any +other PARSE events, so this seems a way out this mess. Alas, at that point the +function calls cannot be resolved yet (people often say that annotation processors +don't have access to the function body, which is not entirely correct, but in any +case the information we need is not there.) + +Our solution is really dirty, but it works. We introduce an annotation processor +[AnalysisJavaProcessor] whose only task is to gather the elements that are read by +the compiler, but does nothing at that point. Then, once we are past the ANALYZE +stage (but before GENERATE), we process that list. javac uses a lot of mutability, +and in particular the bodies of the functions we gathered will now contain all the +information we need! Our final hack is to introduce an [executeOnce] function to +ensure that the processing only happens once in the entire run of the analyzer. +*/ + +public class AnalysisJavaPlugin : Plugin { + override fun getName(): String = NAME + + private var stage1And2Done = false + + override fun init(mtask: JavacTask?, vararg argsAsString: String?) { + (mtask as? BasicJavacTask)?.let { task -> + val baseDir = parseArgs(argsAsString).getOrDefault("baseDir", System.getProperty("user.dir")) + val createOutputFile = { s: String -> + val manager = task.context.get(JavaFileManager::class.java) + manager.getFileForOutput(StandardLocation.SOURCE_OUTPUT, "", s, null).openWriter() + } + val solverState = SolverState(baseDir, createOutputFile) + + task.after(TaskEvent.Kind.ANALYZE) { _, unit: CompilationUnitTree -> + task.context.get(AnalysisJavaProcessorKey)?.let { todo -> + val ctx = AnalysisContext(task, unit) + val resolutionContext = JavaResolutionContext(solverState, ctx) + + if (!stage1And2Done) { + stage1And2Done = true + // stage 1: collect constraints from DSL + solverState.collectFromDsl(todo, ctx, resolutionContext) + // stage 2: collect constraints from annotations + solverState.collectFromAnnotations(todo, ctx, resolutionContext) + } + // stage 3: check the constraints + solverState.checkConstraints(unit, ctx, resolutionContext) + solverState.notifyModuleProcessed(ctx.modules.defaultModule.model(ctx)) + } + } + } + } + + private fun parseArgs(args: Array): Map = + args + .filterNotNull() + .mapNotNull { + if (it.contains('=')) { + val r = it.split('=') + kotlin.Pair(r[0], r[1]) + } else { + null + } + } + .toMap() + + private fun SolverState.collectFromDsl( + todo: List, + ctx: AnalysisContext, + resolutionContext: JavaResolutionContext + ) { + val obtainedPackages = mutableListOf() + todo.forEach { descriptor -> + ctx + .resolver + .tree(descriptor) + ?.visitRecursively( + object : OurTreeVisitor(Unit) { + override fun visitMethod(node: MethodTree, p: Unit?) { + val decl: JavaMethod = node.model(ctx) + ctx.resolver.resolve(node)?.let { elt -> + val descr: JavaFunctionDescriptor = elt.model(ctx) + // stage 1a: collect the constraints + decl.collectConstraintsFromDSL(this@collectFromDsl, resolutionContext, descr) + // stage 1b: add the corresponding annotations + getConstraintsFor(descr)?.let { constraints -> + addConstraintsToDescriptor(node, descr, constraints, ctx, resolutionContext) + obtainedPackages.add(descr.containingPackage) + } + } + } + } + ) + } + // stage 1c: write the final annotation + if (obtainedPackages.isNotEmpty()) { + val compiler = JavaCompiler.instance(ctx.context) + val (klassEnv, klass) = ctx.hintsPackage(obtainedPackages) + compiler.generate(LinkedList(listOf(Pair(klassEnv, klass)))) + } + } + + private fun SolverState.addConstraintsToDescriptor( + node: MethodTree, + descr: JavaFunctionDescriptor, + constraints: DeclarationConstraints, + ctx: AnalysisContext, + resolutionContext: JavaResolutionContext + ) = + (node.modifiers as? JCTree.JCModifiers)?.let { modifiers -> + addConstraints(modifiers, "arrow.analysis.Pre", constraints.pre, ctx) + addConstraints(modifiers, "arrow.analysis.Post", constraints.post, ctx) + if (descr.isALaw()) { + findDescriptorFromLocalLaw(descr, resolutionContext)?.let { subject -> + addSubjectConstraint(modifiers, subject.fqNameSafe.name, ctx) + } + } + } + + private fun SolverState.addConstraints( + modifiers: JCTree.JCModifiers, + type: String, + constraints: List, + ctx: AnalysisContext + ) { + if (constraints.isNotEmpty()) { + modifiers.addAnn { + ctx.annArrays( + type, + constraints.map { it.msg }, + constraints.map { it.formula.toString() }, + constraints.flatMap { + solver.formulaManager.fieldNames(it.formula).map { fld -> fld.first }.toSet() + } + ) + } + } + } + + private fun addSubjectConstraint( + modifiers: JCTree.JCModifiers, + subject: String, + ctx: AnalysisContext + ): Unit = modifiers.addAnn { ctx.annStrings("arrow.analysis.Subject", subject) } + + private fun SolverState.collectFromAnnotations( + todo: List, + ctx: AnalysisContext, + resolutionContext: JavaResolutionContext + ): Unit = + ctx.elements.allModuleElements.forEach { module -> + collectConstraintsFromAnnotations( + todo.map { it.model(ctx) }, + module.model(ctx), + resolutionContext + ) + } + + private fun SolverState.checkConstraints( + unit: CompilationUnitTree, + ctx: AnalysisContext, + resolutionContext: JavaResolutionContext + ) { + if (!hadParseErrors()) { + unit.visitRecursively( + object : OurTreeVisitor(Unit) { + override fun defaultAction(node: Tree, p: Unit?) { + val decl: JavaElement? = node.modelCautious(ctx) + if (decl is Declaration) { + ctx.resolver.resolve(node)?.let { elt -> + val descr: JavaDescriptor = elt.model(ctx) + checkDeclarationConstraints(resolutionContext, decl, descr) + } + } + } + } + ) + } + } + + public companion object { + public const val NAME: String = "ArrowAnalysisJavaPlugin" + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaProcessor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaProcessor.kt new file mode 100644 index 000000000..23796bbc5 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaProcessor.kt @@ -0,0 +1,52 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java + +import com.sun.tools.javac.processing.JavacProcessingEnvironment +import com.sun.tools.javac.util.Context +import javax.annotation.processing.Completion +import javax.annotation.processing.ProcessingEnvironment +import javax.annotation.processing.Processor +import javax.annotation.processing.RoundEnvironment +import javax.lang.model.SourceVersion +import javax.lang.model.element.AnnotationMirror +import javax.lang.model.element.Element +import javax.lang.model.element.ExecutableElement +import javax.lang.model.element.TypeElement + +// The ultimate HACK: all elements of this class are equal across ClassLoaders!! +// This is needed for the next step to actually find the list of elements +public object AnalysisJavaProcessorKey : Context.Key>() { + override fun equals(other: Any?): Boolean { + return other?.javaClass?.name == "arrow.meta.plugins.analysis.java.AnalysisJavaProcessorKey" + } + override fun hashCode(): Int = 12345 +} + +public class AnalysisJavaProcessor : Processor { + + public val todo: MutableList = mutableListOf() + + override fun getSupportedOptions(): MutableSet = mutableSetOf() + override fun getSupportedAnnotationTypes(): MutableSet = mutableSetOf("*") + override fun getSupportedSourceVersion(): SourceVersion = SourceVersion.latestSupported() + + override fun init(processingEnv: ProcessingEnvironment) { + (processingEnv as? JavacProcessingEnvironment)?.context?.put(AnalysisJavaProcessorKey, todo) + } + + override fun process( + annotations: MutableSet, + roundEnv: RoundEnvironment + ): Boolean { + todo.addAll(roundEnv.rootElements) + return false + } + + override fun getCompletions( + element: Element?, + annotation: AnnotationMirror?, + member: ExecutableElement?, + userText: String? + ): MutableIterable = mutableListOf() +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisMessages.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisMessages.kt new file mode 100644 index 000000000..1aef00109 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisMessages.kt @@ -0,0 +1,50 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java + +import java.util.ListResourceBundle + +@Suppress("unused") +public class AnalysisMessages : ListResourceBundle() { + + public companion object { + public const val InconsistentBodyPre: String = "inconsistent_body_pre" + public const val UnsatBodyPost: String = "unsat_body_post" + public const val UnsatCallPre: String = "unsat_call_pre" + public const val InconsistentCallPost: String = "inconsistent_call_post" + public const val InconsistentConditions: String = "inconsistent_conditions" + public const val InconsistentInvariants: String = "inconsistent_invariants" + public const val UnsatInvariants: String = "unsat_invariants" + public const val LiskovProblem: String = "liskov_problem" + public const val ErrorParsingPredicate: String = "error_parsing_predicate" + public const val WarningParsingPredicate: String = "warning_parsing_predicate" + public const val UnsupportedElement: String = "unsupported_element" + public const val AnalysisException: String = "analysis_exception" + + public val Errors: List = + listOf( + InconsistentBodyPre, + UnsatBodyPost, + UnsatCallPre, + InconsistentInvariants, + UnsatInvariants, + LiskovProblem, + ErrorParsingPredicate, + AnalysisException + ) + + public val Warnings: List = + listOf( + InconsistentCallPost, + InconsistentConditions, + UnsupportedElement, + WarningParsingPredicate + ) + } + + // "err" and "warn" come from [DiagnosticType.key] + override fun getContents(): Array> = + (Errors.map> { arrayOf("arrow-analysis.err.$it", "{0}") } + + Warnings.map> { arrayOf("arrow-analysis.warn.$it", "{0}") }) + .toTypedArray() +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/Resolver.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/Resolver.kt new file mode 100644 index 000000000..880dd6a09 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/Resolver.kt @@ -0,0 +1,50 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java + +import com.sun.source.tree.CompilationUnitTree +import com.sun.source.tree.Tree +import com.sun.source.util.TreePath +import com.sun.source.util.Trees +import javax.lang.model.element.Element +import javax.lang.model.type.TypeMirror +import javax.tools.JavaCompiler + +public class Resolver(task: JavaCompiler.CompilationTask, private val unit: CompilationUnitTree) { + private val trees: Trees = Trees.instance(task) + + public val topElement: Element + get() = trees.getElement(TreePath(unit)) + + public fun path(tree: Tree): TreePath = TreePath.getPath(unit, tree) + public fun resolve(tree: Tree): Element? = trees.getElement(path(tree)) + public fun resolveType(tree: Tree): TypeMirror? = trees.getTypeMirror(path(tree)) + public fun tree(element: Element): Tree? = trees.getTree(element) + public fun parent(tree: Tree): Tree? = path(tree).parentPath.leaf + + public fun positionOf(tree: Tree): Pair = + trees.sourcePositions.getStartPosition(unit, tree) to + trees.sourcePositions.getEndPosition(unit, tree) + + public fun parentTrees(tree: Tree): Iterable { + val result = mutableListOf() + var current = path(tree).parentPath + while (current != null) { + result.add(current.leaf) + current = current.parentPath + } + return result.toList() + } + + // this is faster than calling map over parentTrees, + // because then we need to reconstruct each TreePath + public fun parentElements(tree: Tree): Iterable { + val result = mutableListOf() + var current = path(tree).parentPath + while (current != null) { + result.add(trees.getElement(current)) + current = current.parentPath + } + return result.toList() + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/TaskListener.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/TaskListener.kt new file mode 100644 index 000000000..991a902b7 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/TaskListener.kt @@ -0,0 +1,45 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java + +import com.sun.source.tree.CompilationUnitTree +import com.sun.source.util.JavacTask +import com.sun.source.util.TaskEvent +import com.sun.source.util.TaskListener + +public abstract class PerKindTaskListener : TaskListener { + override fun finished(e: TaskEvent?): Unit { + when (e?.kind) { + TaskEvent.Kind.PARSE -> afterParse(e) + TaskEvent.Kind.ENTER -> afterEnter(e) + TaskEvent.Kind.ANALYZE -> afterAnalyze(e) + TaskEvent.Kind.GENERATE -> afterGenerate(e) + else -> {} + } + } + + public fun afterParse(e: TaskEvent): Unit {} + public fun afterEnter(e: TaskEvent): Unit {} + public fun afterAnalyze(e: TaskEvent): Unit {} + public fun afterGenerate(e: TaskEvent): Unit {} +} + +public fun JavacTask.before(kind: TaskEvent.Kind, run: (TaskEvent, CompilationUnitTree) -> Unit) { + addTaskListener( + object : TaskListener { + override fun started(e: TaskEvent?) { + if (e?.kind == kind) run(e, e.compilationUnit) + } + } + ) +} + +public fun JavacTask.after(kind: TaskEvent.Kind, run: (TaskEvent, CompilationUnitTree) -> Unit) { + addTaskListener( + object : TaskListener { + override fun finished(e: TaskEvent?): Unit { + if (e?.kind == kind) run(e, e.compilationUnit) + } + } + ) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/AnnotationUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/AnnotationUtils.kt new file mode 100644 index 000000000..d9e370e01 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/AnnotationUtils.kt @@ -0,0 +1,113 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import com.sun.tools.javac.code.Flags +import com.sun.tools.javac.code.Scope +import com.sun.tools.javac.code.Symbol +import com.sun.tools.javac.comp.AttrContext +import com.sun.tools.javac.comp.Env +import com.sun.tools.javac.tree.JCTree +import com.sun.tools.javac.tree.TreeMaker +import java.util.UUID + +public fun JCTree.JCModifiers.addAnn(ann: JCTree.JCAnnotation) { + this.annotations = this.annotations.prepend(ann) +} + +public fun JCTree.JCModifiers.addAnn(ann: () -> JCTree.JCAnnotation) { + addAnn(ann()) +} + +public fun AnalysisContext.annStrings(type: String, vararg args: String): JCTree.JCAnnotation { + val factory = TreeMaker.instance(context) + return factory.Annotation(ty(type), args.map { factory.Literal(it) }.javac()) +} + +public fun AnalysisContext.annArrays(type: String, vararg args: List): JCTree.JCAnnotation { + val factory = TreeMaker.instance(context) + return factory.Annotation( + ty(type), + args + .map { strings -> factory.NewArray(null, null, strings.map { factory.Literal(it) }.javac()) } + .javac() + ) +} + +private fun AnalysisContext.ty(type: String): JCTree.JCExpression { + val factory = TreeMaker.instance(context) + return factory.Type(symbolTable.getClass(modules.defaultModule, names.fromString(type)).type) +} + +public fun AnalysisContext.hintsPackage( + hints: List +): Pair, JCTree.JCClassDecl> { + val factory = TreeMaker.instance(context) + + // we need to set up the symbols correctly + // this has been hacked by inspecting the debug trace + symbolTable.unnamedModule.opens = emptyJavacList() + val pkgName = + Symbol.PackageSymbol(names.fromString("arrow.analysis.hints"), symbolTable.unnamedModule) + val pkg = factory.PackageDecl(emptyJavacList(), factory.Ident(pkgName)) + val klass = hintsClass(hints) + val klassName = Symbol.ClassSymbol(Flags.PUBLIC.toLong(), klass.simpleName, pkgName) + klassName.members_field = Scope.WriteableScope.create(klassName) + klass.sym = klassName + val unit = factory.TopLevel(javacList(pkg, klass)) + + // hack taken from [com.sun.tools.javac.comp.Enter] + val predefClassDef = + factory.ClassDef( + factory.Modifiers(Flags.PUBLIC.toLong()), + symbolTable.predefClass.name, + emptyJavacList(), + null, + emptyJavacList(), + emptyJavacList() + ) + predefClassDef.sym = symbolTable.predefClass + + val unitEnv = Env(unit, AttrContext()) + val pkgEnv = Env(pkg, AttrContext()) + pkgEnv.toplevel = unit + pkgEnv.outer = unitEnv + pkgEnv.enclClass = predefClassDef + val klassEnv = Env(klass, AttrContext()) + klassEnv.toplevel = unit + klassEnv.outer = unitEnv + klassEnv.enclClass = predefClassDef + + return Pair(klassEnv, klass) +} + +public fun AnalysisContext.hintsClass(hints: List): JCTree.JCClassDecl { + val factory = TreeMaker.instance(context) + val annotations = + annStrings("arrow.analysis.PackagesWithLaws", *hints.map { it.name }.toTypedArray()) + val modifiers = factory.Modifiers(Flags.PUBLIC.toLong(), javacList(annotations)) + val uuid = UUID.randomUUID().toString().replace('-', '_') + val className = "hints_$uuid" + return factory.ClassDef( + modifiers, + names.fromString(className), + emptyJavacList(), + null, + emptyJavacList(), + emptyJavacList() + ) +} + +private fun emptyJavacList(): com.sun.tools.javac.util.List = javacList() + +private inline fun Collection.javac(): com.sun.tools.javac.util.List = + javacList(this) + +private inline fun javacList( + elements: Collection +): com.sun.tools.javac.util.List = javacList(*elements.toTypedArray()) + +private fun javacList(vararg elements: A): com.sun.tools.javac.util.List = + com.sun.tools.javac.util.List.from(elements) diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt new file mode 100644 index 000000000..fe08055ed --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt @@ -0,0 +1,244 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaClassDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaConstructorDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaEnumConstantDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaFieldDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaLocalVariableDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaModuleDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaPackageDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaParameterDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaSimpleFunctionDescriptor +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaTypeParameterDescriptor +import arrow.meta.plugins.analysis.java.ast.elements.JavaAssert +import arrow.meta.plugins.analysis.java.ast.elements.JavaAssignment +import arrow.meta.plugins.analysis.java.ast.elements.JavaBinary +import arrow.meta.plugins.analysis.java.ast.elements.JavaBlock +import arrow.meta.plugins.analysis.java.ast.elements.JavaBreak +import arrow.meta.plugins.analysis.java.ast.elements.JavaCall +import arrow.meta.plugins.analysis.java.ast.elements.JavaCase +import arrow.meta.plugins.analysis.java.ast.elements.JavaCatch +import arrow.meta.plugins.analysis.java.ast.elements.JavaClass +import arrow.meta.plugins.analysis.java.ast.elements.JavaConstructor +import arrow.meta.plugins.analysis.java.ast.elements.JavaConstructorCall +import arrow.meta.plugins.analysis.java.ast.elements.JavaContinue +import arrow.meta.plugins.analysis.java.ast.elements.JavaDoWhile +import arrow.meta.plugins.analysis.java.ast.elements.JavaElement +import arrow.meta.plugins.analysis.java.ast.elements.JavaEmptyBlock +import arrow.meta.plugins.analysis.java.ast.elements.JavaEnhancedFor +import arrow.meta.plugins.analysis.java.ast.elements.JavaFor +import arrow.meta.plugins.analysis.java.ast.elements.JavaIdentifier +import arrow.meta.plugins.analysis.java.ast.elements.JavaIf +import arrow.meta.plugins.analysis.java.ast.elements.JavaInstanceOf +import arrow.meta.plugins.analysis.java.ast.elements.JavaLabeled +import arrow.meta.plugins.analysis.java.ast.elements.JavaLambda +import arrow.meta.plugins.analysis.java.ast.elements.JavaLiteral +import arrow.meta.plugins.analysis.java.ast.elements.JavaMemberReference +import arrow.meta.plugins.analysis.java.ast.elements.JavaMemberSelect +import arrow.meta.plugins.analysis.java.ast.elements.JavaMethod +import arrow.meta.plugins.analysis.java.ast.elements.JavaNull +import arrow.meta.plugins.analysis.java.ast.elements.JavaParenthesized +import arrow.meta.plugins.analysis.java.ast.elements.JavaReturn +import arrow.meta.plugins.analysis.java.ast.elements.JavaSingleBlock +import arrow.meta.plugins.analysis.java.ast.elements.JavaSuper +import arrow.meta.plugins.analysis.java.ast.elements.JavaSwitch +import arrow.meta.plugins.analysis.java.ast.elements.JavaSynchronized +import arrow.meta.plugins.analysis.java.ast.elements.JavaTernaryConditional +import arrow.meta.plugins.analysis.java.ast.elements.JavaThis +import arrow.meta.plugins.analysis.java.ast.elements.JavaTry +import arrow.meta.plugins.analysis.java.ast.elements.JavaTypeCast +import arrow.meta.plugins.analysis.java.ast.elements.JavaTypeReference +import arrow.meta.plugins.analysis.java.ast.elements.JavaUnary +import arrow.meta.plugins.analysis.java.ast.elements.JavaVariable +import arrow.meta.plugins.analysis.java.ast.elements.JavaWhile +import arrow.meta.plugins.analysis.java.ast.types.JavaType +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import com.sun.source.tree.AnnotatedTypeTree +import com.sun.source.tree.ArrayTypeTree +import com.sun.source.tree.AssertTree +import com.sun.source.tree.AssignmentTree +import com.sun.source.tree.BinaryTree +import com.sun.source.tree.BlockTree +import com.sun.source.tree.BreakTree +import com.sun.source.tree.CaseTree +import com.sun.source.tree.CatchTree +import com.sun.source.tree.ClassTree +import com.sun.source.tree.CompilationUnitTree +import com.sun.source.tree.ConditionalExpressionTree +import com.sun.source.tree.ContinueTree +import com.sun.source.tree.DirectiveTree +import com.sun.source.tree.DoWhileLoopTree +import com.sun.source.tree.EmptyStatementTree +import com.sun.source.tree.EnhancedForLoopTree +import com.sun.source.tree.ErroneousTree +import com.sun.source.tree.ExpressionStatementTree +import com.sun.source.tree.ForLoopTree +import com.sun.source.tree.IdentifierTree +import com.sun.source.tree.IfTree +import com.sun.source.tree.ImportTree +import com.sun.source.tree.InstanceOfTree +import com.sun.source.tree.IntersectionTypeTree +import com.sun.source.tree.LabeledStatementTree +import com.sun.source.tree.LambdaExpressionTree +import com.sun.source.tree.LiteralTree +import com.sun.source.tree.MemberReferenceTree +import com.sun.source.tree.MemberSelectTree +import com.sun.source.tree.MethodInvocationTree +import com.sun.source.tree.MethodTree +import com.sun.source.tree.ModifiersTree +import com.sun.source.tree.ModuleTree +import com.sun.source.tree.NewClassTree +import com.sun.source.tree.PackageTree +import com.sun.source.tree.ParameterizedTypeTree +import com.sun.source.tree.ParenthesizedTree +import com.sun.source.tree.PrimitiveTypeTree +import com.sun.source.tree.ReturnTree +import com.sun.source.tree.SwitchTree +import com.sun.source.tree.SynchronizedTree +import com.sun.source.tree.Tree +import com.sun.source.tree.TryTree +import com.sun.source.tree.TypeCastTree +import com.sun.source.tree.TypeParameterTree +import com.sun.source.tree.UnaryTree +import com.sun.source.tree.UnionTypeTree +import com.sun.source.tree.VariableTree +import com.sun.source.tree.WhileLoopTree +import com.sun.source.tree.WildcardTree +import javax.lang.model.element.Element +import javax.lang.model.element.ElementKind +import javax.lang.model.element.ExecutableElement +import javax.lang.model.element.ModuleElement +import javax.lang.model.element.PackageElement +import javax.lang.model.element.TypeElement +import javax.lang.model.element.TypeParameterElement +import javax.lang.model.element.VariableElement +import javax.lang.model.type.TypeKind +import javax.lang.model.type.TypeMirror + +public fun A.model(ctx: AnalysisContext): B = + when (this) { + is ModuleElement -> JavaModuleDescriptor(ctx, this) as B + is PackageElement -> JavaPackageDescriptor(ctx, this) as B + is VariableElement -> + when (this.kind) { + ElementKind.PARAMETER, ElementKind.EXCEPTION_PARAMETER -> + JavaParameterDescriptor(ctx, this) as B + ElementKind.LOCAL_VARIABLE -> JavaLocalVariableDescriptor(ctx, this) as B + ElementKind.FIELD -> JavaFieldDescriptor(ctx, this) as B + ElementKind.ENUM_CONSTANT -> JavaEnumConstantDescriptor(ctx, this) as B + else -> throw IllegalArgumentException("incorrect VariableElement case") + } + is ExecutableElement -> + when (this.kind) { + ElementKind.METHOD -> JavaSimpleFunctionDescriptor(ctx, this) as B + ElementKind.CONSTRUCTOR -> JavaConstructorDescriptor(ctx, this) as B + ElementKind.STATIC_INIT, ElementKind.INSTANCE_INIT -> TODO("not yet supported") + else -> throw IllegalArgumentException("incorrect ExecutableElement case") + } + is TypeElement -> JavaClassDescriptor(ctx, this) as B + is TypeParameterElement -> JavaTypeParameterDescriptor(ctx, this) as B + else -> JavaDescriptor(ctx, this) as B + } + +public fun < + A : Tree, + B : arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element> A.modelCautious( + ctx: AnalysisContext +): B? = + when (this) { + is CompilationUnitTree, is PackageTree, is ModuleTree, is DirectiveTree, is ImportTree -> null + is ModifiersTree -> null + else -> this.model(ctx) + } + +public fun < + A : Tree, + B : arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element> A.model( + ctx: AnalysisContext +): B = + when (this) { + is ArrayTypeTree, + is ParameterizedTypeTree, + is TypeParameterTree, + is PrimitiveTypeTree, + is IntersectionTypeTree, + is UnionTypeTree, + is AnnotatedTypeTree, + is WildcardTree -> JavaTypeReference(ctx, this) as B + is MethodTree -> + if (ctx.resolver.resolve(this)?.kind == ElementKind.CONSTRUCTOR) + JavaConstructor(ctx, this) as B + else JavaMethod(ctx, this) as B + is VariableTree -> JavaVariable(ctx, this) as B + // expressions + is ParenthesizedTree -> JavaParenthesized(ctx, this) as B + is ConditionalExpressionTree -> JavaTernaryConditional(ctx, this) as B + is ErroneousTree -> JavaElement(ctx, this) as B // nothing special + is LiteralTree -> + when (this.value) { + null -> JavaNull(ctx, this) as B + else -> JavaLiteral(ctx, this) as B + } + is UnaryTree -> JavaUnary(ctx, this) as B + is BinaryTree -> JavaBinary(ctx, this) as B + is IdentifierTree -> + when (this.name) { + ctx.names._this -> JavaThis(ctx, this) as B + ctx.names._super -> JavaSuper(ctx, this) as B + else -> JavaIdentifier(ctx, this) as B + } + is LambdaExpressionTree -> JavaLambda(ctx, this) as B + is NewClassTree -> JavaConstructorCall(ctx, this) as B + is MethodInvocationTree -> JavaCall(ctx, this) as B + is TypeCastTree -> JavaTypeCast(ctx, this) as B + is InstanceOfTree -> JavaInstanceOf(ctx, this) as B + is TryTree -> JavaTry(ctx, this) as B + is CatchTree -> JavaCatch(ctx, this) as B + is MemberReferenceTree -> JavaMemberReference(ctx, this) as B + is MemberSelectTree -> JavaMemberSelect(ctx, this) as B + // statements + is ReturnTree -> JavaReturn(ctx, this) as B + is ContinueTree -> JavaContinue(ctx, this) as B + is BreakTree -> JavaBreak(ctx, this) as B + is DoWhileLoopTree -> JavaDoWhile(ctx, this) as B + is WhileLoopTree -> JavaWhile(ctx, this) as B + is ForLoopTree -> JavaFor(ctx, this) as B + is EnhancedForLoopTree -> JavaEnhancedFor(ctx, this) as B + is IfTree -> JavaIf(ctx, this) as B + is SwitchTree -> JavaSwitch(ctx, this) as B + is CaseTree -> JavaCase(ctx, this) as B + is LabeledStatementTree -> JavaLabeled(ctx, this) as B + is AssignmentTree -> JavaAssignment(ctx, this) as B + is AssertTree -> JavaAssert(ctx, this) as B + is ClassTree -> JavaClass(ctx, this) as B + is SynchronizedTree -> JavaSynchronized(ctx, this) as B + is EmptyStatementTree -> JavaEmptyBlock(ctx, this) as B + is ExpressionStatementTree -> JavaSingleBlock(ctx, this) as B + is BlockTree -> JavaBlock(ctx, this) as B + // compilation elements + is CompilationUnitTree -> + throw IllegalArgumentException("compilation unit trees cannot be converted") + is PackageTree -> throw IllegalArgumentException("package trees cannot be converted") + is ModuleTree -> throw IllegalArgumentException("module trees cannot be converted") + is DirectiveTree -> throw IllegalArgumentException("module directive trees cannot be converted") + is ImportTree -> throw IllegalArgumentException("import trees cannot be converted") + is ModifiersTree -> + throw IllegalArgumentException( + "modifiers trees cannot be converted, annotations should be handled in elements" + ) + else -> JavaElement(ctx, this) as B + } + +public fun A.model(ctx: AnalysisContext): JavaType = JavaType(ctx, this) + +public fun A.modelCautious(ctx: AnalysisContext): JavaType? = + if (this.kind == TypeKind.NONE) null else this.model(ctx) + +public fun javax.lang.model.element.Name.name(): Name = Name(this.toString()) + +public fun javax.lang.model.element.Name.fqName(): FqName = FqName(this.toString()) diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt new file mode 100644 index 000000000..2f37a058f --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt @@ -0,0 +1,177 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.AnalysisMessages +import arrow.meta.plugins.analysis.java.ast.elements.JavaElement +import arrow.meta.plugins.analysis.java.ast.elements.JavaTypeReference +import arrow.meta.plugins.analysis.java.ast.elements.OurTreeVisitor +import arrow.meta.plugins.analysis.java.ast.elements.visitRecursively +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Types +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import com.sun.source.tree.AssertTree +import com.sun.source.tree.MethodInvocationTree +import com.sun.tools.javac.code.Lint +import com.sun.tools.javac.code.Symbol +import com.sun.tools.javac.main.JavaCompiler +import com.sun.tools.javac.tree.JCTree +import com.sun.tools.javac.util.DiagnosticSource +import com.sun.tools.javac.util.JCDiagnostic + +public class JavaResolutionContext( + private val state: SolverState?, + private val ctx: AnalysisContext +) : ResolutionContext { + override val types: Types = + object : Types { + override val nothingType: Type = ctx.symbolTable.botType.model(ctx) + } + + override val module: ModuleDescriptor + get() = ctx.elements.getModuleOf(ctx.resolver.topElement).model(ctx) + + override fun type(typeReference: TypeReference?): Type? = + when (typeReference) { + is JavaTypeReference -> ctx.resolver.resolveType(typeReference.underlyingTree)?.model(ctx) + else -> null + } + + override fun Element.constraintsDSLElements(): List { + if (this !is JavaElement) return emptyList() + + val elements = mutableListOf() + this.impl() + .visitRecursively( + object : OurTreeVisitor(Unit) { + override fun visitMethodInvocation(node: MethodInvocationTree, p: Unit?) { + node.methodSelect?.toString()?.let { calleeText -> + if (calleeText == "pre" || + calleeText.endsWith(".pre") || + calleeText == "post" || + calleeText.endsWith(".post") || + calleeText == "doNotLookAtArgumentsWhen" || + calleeText.endsWith(".doNotLookAtArgumentsWhen") + ) + elements.add(node.model(ctx)) + } + } + + override fun visitAssert(node: AssertTree, p: Unit?) { + elements.add(node.model(ctx)) + } + } + ) + + return elements.toList() + } + + override fun handleError(error: ErrorIds, element: Element, msg: String): Unit { + when (error) { + ErrorIds.Exception.IllegalState -> reportAnalysisException(element, msg) + ErrorIds.Exception.OtherException -> reportAnalysisException(element, msg) + ErrorIds.Inconsistency.InconsistentBodyPre -> reportInconsistentBodyPre(element, msg) + ErrorIds.Inconsistency.InconsistentDefaultValues -> reportInconsistentBodyPre(element, msg) + ErrorIds.Inconsistency.InconsistentConditions -> reportInconsistentConditions(element, msg) + ErrorIds.Inconsistency.InconsistentCallPost -> reportInconsistentCallPost(element, msg) + ErrorIds.Inconsistency.InconsistentInvariants -> reportInconsistentInvariants(element, msg) + ErrorIds.Liskov.NotWeakerPrecondition -> reportLiskovProblem(element, msg) + ErrorIds.Liskov.NotStrongerPostcondition -> reportLiskovProblem(element, msg) + ErrorIds.Parsing.ErrorParsingPredicate -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Parsing.WarningParsingPredicate -> reportWarningsParsingPredicate(element, msg) + ErrorIds.Parsing.UnexpectedReference -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Parsing.UnexpectedFieldInitBlock -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Laws.LawMustCallFunction -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Laws.LawMustHaveParametersInOrder -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Laws.SubjectWithoutName -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Laws.CouldNotResolveSubject -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Unsatisfiability.UnsatCallPre -> reportUnsatCallPre(element, msg) + ErrorIds.Unsatisfiability.UnsatBodyPost -> reportUnsatBodyPost(element, msg) + ErrorIds.Unsatisfiability.UnsatInvariants -> reportUnsatInvariants(element, msg) + ErrorIds.Unsupported.UnsupportedExpression -> reportUnsupported(element, msg) + } + state?.notifySarifReport(error, element, msg) + } + + // not available in Java until we have records + override fun backingPropertyForConstructorParameter( + parameter: ValueParameterDescriptor + ): PropertyDescriptor? = null + + override fun descriptorFor(fqName: FqName): List = + JavaCompiler.instance(ctx.context) + .resolveBinaryNameOrIdent(fqName.name) + .takeIf { it.exists() } + ?.let> { listOf(it.model(ctx)) } + .orEmpty() + + override fun descriptorFor(declaration: Declaration): DeclarationDescriptor? = + (declaration as? JavaElement)?.let { ctx.resolver.resolve(it.impl())?.model(ctx) } + + private val diagnosticSource: DiagnosticSource + get() = + ctx.unit?.let { DiagnosticSource(it.sourceFile, ctx.logger) } ?: DiagnosticSource.NO_SOURCE + + private fun report(element: Element, builder: (JCTree) -> JCDiagnostic) { + (element as? JavaElement)?.let { elt -> + (elt.impl() as? JCTree)?.let { ctx.logger.report(builder(it)) } + } + } + + private fun reportError(element: Element, key: String, msg: String): Unit = + report(element) { + ctx.diagnostics.error(JCDiagnostic.DiagnosticFlag.MANDATORY, diagnosticSource, it, key, msg) + } + + private fun reportWarning(element: Element, key: String, msg: String): Unit = + report(element) { + ctx.diagnostics.warning(Lint.LintCategory.PROCESSING, diagnosticSource, it, key, msg) + } + + private fun reportErrorsParsingPredicate(element: Element, msg: String): Unit = + reportError(element, AnalysisMessages.ErrorParsingPredicate, msg) + + private fun reportWarningsParsingPredicate(element: Element, msg: String): Unit = + reportWarning(element, AnalysisMessages.WarningParsingPredicate, msg) + + private fun reportUnsatCallPre(element: Element, msg: String): Unit = + reportError(element, AnalysisMessages.UnsatCallPre, msg) + + private fun reportInconsistentBodyPre(declaration: Element, msg: String): Unit = + reportError(declaration, AnalysisMessages.InconsistentBodyPre, msg) + + private fun reportUnsatBodyPost(declaration: Element, msg: String): Unit = + reportError(declaration, AnalysisMessages.UnsatBodyPost, msg) + + fun reportInconsistentCallPost(expression: Element, msg: String): Unit = + reportWarning(expression, AnalysisMessages.InconsistentCallPost, msg) + + fun reportInconsistentConditions(expression: Element, msg: String): Unit = + reportWarning(expression, AnalysisMessages.InconsistentConditions, msg) + + fun reportInconsistentInvariants(expression: Element, msg: String): Unit = + reportError(expression, AnalysisMessages.InconsistentInvariants, msg) + + fun reportUnsatInvariants(expression: Element, msg: String): Unit = + reportError(expression, AnalysisMessages.UnsatInvariants, msg) + + fun reportLiskovProblem(expression: Element, msg: String): Unit = + reportError(expression, AnalysisMessages.LiskovProblem, msg) + + fun reportUnsupported(expression: Element, msg: String): Unit = + reportWarning(expression, AnalysisMessages.UnsupportedElement, msg) + + fun reportAnalysisException(element: Element, msg: String): Unit = + reportError(element, AnalysisMessages.AnalysisException, msg) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt new file mode 100644 index 000000000..f17a5737d --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt @@ -0,0 +1,42 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import javax.lang.model.element.AnnotationMirror +import javax.lang.model.element.AnnotationValue + +public class JavaAnnotationDescriptor( + private val ctx: AnalysisContext, + private val impl: AnnotationMirror +) : AnnotationDescriptor { + private val inside: Map + get() = + ctx + .elements + .getElementValuesWithDefaults(impl) + .map { (k, v) -> k.simpleName.toString() to v } + .toMap() + + override val allValueArguments: Map + get() = inside.mapKeys { (k, _) -> Name(k) }.mapValues { (_, v) -> v.value } + + override fun argumentValueAsString(argName: String): String? = + inside.get(argName)?.value as? String + + override fun argumentValueAsArrayOfString(argName: String): List = + (inside.get(argName)?.value as? List<*>) + ?.filterIsInstance() + ?.mapNotNull { it.value as? String } + .orEmpty() + + override val fqName: FqName + get() = FqName(impl.annotationType.asElement().fqName) + override val type: Type + get() = impl.annotationType.model(ctx) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations.kt new file mode 100644 index 000000000..46729cdfb --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations.kt @@ -0,0 +1,22 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import javax.lang.model.element.AnnotationMirror + +public class JavaAnnotations( + private val ctx: AnalysisContext, + override val impl: List +) : Annotations { + override fun isEmpty(): Boolean = impl.isEmpty() + override fun iterable(): Iterable = + impl.map { JavaAnnotationDescriptor(ctx, it) } + + override fun findAnnotation(fqName: FqName): AnnotationDescriptor? = + iterable().firstOrNull { it.fqName == fqName } + override fun hasAnnotation(fqName: FqName): Boolean = findAnnotation(fqName) != null +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor.kt new file mode 100644 index 000000000..b939e3145 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor.kt @@ -0,0 +1,76 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.types.JavaTypeConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import javax.lang.model.element.Element +import javax.lang.model.element.ElementKind +import javax.lang.model.element.Modifier +import javax.lang.model.element.NestingKind +import javax.lang.model.element.TypeElement +import javax.lang.model.type.TypeKind + +public class JavaClassDescriptor(private val ctx: AnalysisContext, private val impl: TypeElement) : + ClassDescriptor, JavaMemberDescriptor(ctx, impl) { + + private fun memberScope(predicate: (Element) -> Boolean): JavaMemberScope = + JavaMemberScope(ctx, impl.enclosedElements.filter(predicate)) + + override val unsubstitutedMemberScope: MemberScope + get() = memberScope { it !is TypeElement && !it.modifiers.contains(Modifier.STATIC) } + override val staticScope: MemberScope + get() = memberScope { it !is TypeElement && it.modifiers.contains(Modifier.STATIC) } + override val unsubstitutedInnerClassesScope: MemberScope + get() = memberScope { it is TypeElement } + + override val constructors: Collection + get() = + impl.enclosedElements.filter { it.kind == ElementKind.CONSTRUCTOR }.map { it.model(ctx) } + + override val kind: ClassDescriptor.ClassKind = + when { + impl.nestingKind == NestingKind.ANONYMOUS -> ClassDescriptor.ClassKind.OBJECT + impl.kind == ElementKind.ENUM -> ClassDescriptor.ClassKind.ENUM_CLASS + impl.kind == ElementKind.INTERFACE -> ClassDescriptor.ClassKind.INTERFACE + ctx.types.isSubtype(impl.asType(), ctx.symbolTable.annotationType) -> + ClassDescriptor.ClassKind.ANNOTATION_CLASS + else -> ClassDescriptor.ClassKind.CLASS + } + + override val superTypes: Collection + get() = + (listOfNotNull(impl.superclass.takeIf { it.kind != TypeKind.NONE }) + impl.interfaces).map { + it.model(ctx) + } + override val declaredTypeParameters: List + get() = impl.typeParameters.map { it.model(ctx) } + + override val typeConstructor: TypeConstructor + get() = JavaTypeConstructor(ctx, impl) + override val defaultType: Type + get() = ctx.types.getDeclaredType(impl).model(ctx) + override val thisAsReceiverParameter: ReceiverParameterDescriptor + get() = JavaReceiverParameterDescriptor(ctx, impl.asType(), impl.enclosingElement) + + override val isCompanionObject: Boolean = false + override val isData: Boolean = false + override val isInline: Boolean = false + override val isFun: Boolean + get() = ctx.types.isSubtype(impl.asType(), ctx.symbolTable.functionalInterfaceType) + override val isValue: Boolean = false + override val isEnumEntry: Boolean = false + override val isInner: Boolean = impl.nestingKind == NestingKind.MEMBER + + override val companionObjectDescriptor: ClassDescriptor? = null + override val sealedSubclasses: Collection = emptyList() + override val unsubstitutedPrimaryConstructor: ConstructorDescriptor? = null +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor.kt new file mode 100644 index 000000000..82f4d4bd9 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor.kt @@ -0,0 +1,24 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor +import com.sun.tools.javac.code.Symbol +import javax.lang.model.element.ElementKind +import javax.lang.model.element.ExecutableElement + +public class JavaConstructorDescriptor( + private val ctx: AnalysisContext, + private val impl: ExecutableElement +) : ConstructorDescriptor, JavaFunctionDescriptor(ctx, impl) { + init { + require(impl.kind == ElementKind.CONSTRUCTOR) + } + + override val constructedClass: ClassDescriptor + get() = (impl as? Symbol.MethodSymbol)?.owner?.model(ctx)!! + override val isPrimary: Boolean = false +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor.kt new file mode 100644 index 000000000..bb86a7d11 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor.kt @@ -0,0 +1,31 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import javax.lang.model.element.Element + +public open class JavaDescriptor(private val ctx: AnalysisContext, private val impl: Element) : + DeclarationDescriptor { + override fun impl(): Element = impl + + override val containingDeclaration: DeclarationDescriptor + get() = impl.enclosingElement.model(ctx) + override val containingPackage: FqName + get() = FqName(impl.enclosingElement.fqName) + + override val fqNameSafe: FqName = FqName(impl.fqName) + override val name: Name = impl.simpleName.name() + + override fun element(): + arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element? = + ctx.resolver.tree(impl)?.model(ctx) + + override fun annotations(): Annotations = JavaAnnotations(ctx, impl.annotationMirrors) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtils.kt new file mode 100644 index 000000000..bbb3806d6 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtils.kt @@ -0,0 +1,54 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import javax.lang.model.element.Element +import javax.lang.model.element.ExecutableElement +import javax.lang.model.element.QualifiedNameable +import javax.lang.model.element.TypeElement +import javax.lang.model.element.TypeParameterElement +import javax.lang.model.element.VariableElement + +public val Element.fqName: String + get() { + val elts = mutableListOf() + var current: Element? = this + while (current != null) { + if (current is QualifiedNameable) { + elts.add(0, current.qualifiedName.toString()) + current = null + } else { + val simple = current.simpleName + if (simple != null) { + elts.add(0, simple.toString()) + } else { + elts.add(0, "") + } + current = current.enclosingElement + } + } + return elts.filter { it.isNotEmpty() }.joinToString(separator = ".") + } + +public val Element.enclosingClass: TypeElement? + get() = + when (val encl = this.enclosingElement) { + null -> null + is TypeElement -> encl + else -> encl.enclosingClass + } + +public val Element.typeParametersFromEverywhere: List + get() = + when (this) { + is ExecutableElement -> typeParameters + is TypeElement -> typeParameters + else -> emptyList() + } + +public val Element.parametersFromEverywhere: List + get() = + when (this) { + is ExecutableElement -> parameters + else -> emptyList() + } diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor.kt new file mode 100644 index 000000000..2f278fceb --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor.kt @@ -0,0 +1,70 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.types.JavaTypeConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import javax.lang.model.element.Element +import javax.lang.model.element.ElementKind +import javax.lang.model.element.Modifier +import javax.lang.model.element.TypeElement +import javax.lang.model.element.VariableElement + +public class JavaEnumConstantDescriptor( + private val ctx: AnalysisContext, + private val impl: VariableElement +) : ClassDescriptor, JavaMemberDescriptor(ctx, impl) { + + private val enclosingType = impl.enclosingElement.asType() + + private fun memberScope(predicate: (Element) -> Boolean): JavaMemberScope = + JavaMemberScope( + ctx, + impl.enclosingElement.enclosedElements.filter { + it.kind != ElementKind.ENUM_CONSTANT && predicate(it) + } + ) + + override val unsubstitutedMemberScope: MemberScope + get() = memberScope { it !is TypeElement && !it.modifiers.contains(Modifier.STATIC) } + override val staticScope: MemberScope + get() = memberScope { it !is TypeElement && it.modifiers.contains(Modifier.STATIC) } + override val unsubstitutedInnerClassesScope: MemberScope + get() = memberScope { it is TypeElement } + + override val constructors: Collection = emptyList() + + override val kind: ClassDescriptor.ClassKind = ClassDescriptor.ClassKind.ENUM_ENTRY + + override val superTypes: Collection + get() = listOf(enclosingType.model(ctx)) + override val declaredTypeParameters: List = emptyList() + + override val typeConstructor: TypeConstructor + get() = JavaTypeConstructor(ctx, impl.enclosingElement as TypeElement) + override val defaultType: Type + get() = enclosingType.model(ctx) + override val thisAsReceiverParameter: ReceiverParameterDescriptor + get() = JavaReceiverParameterDescriptor(ctx, enclosingType, impl.enclosingElement) + + override val isCompanionObject: Boolean = false + override val isData: Boolean = false + override val isInline: Boolean = false + override val isFun: Boolean + get() = ctx.types.isSubtype(impl.asType(), ctx.symbolTable.functionalInterfaceType) + override val isValue: Boolean = false + override val isEnumEntry: Boolean = false + override val isInner: Boolean = true + + override val companionObjectDescriptor: ClassDescriptor? = null + override val sealedSubclasses: Collection = emptyList() + override val unsubstitutedPrimaryConstructor: ConstructorDescriptor? = null +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor.kt new file mode 100644 index 000000000..a4acd7d47 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor.kt @@ -0,0 +1,64 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.types.JavaType +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FieldDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyAccessorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableAccessorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import com.sun.tools.javac.code.Symbol +import javax.lang.model.element.ElementKind +import javax.lang.model.element.Modifier +import javax.lang.model.element.VariableElement + +public class JavaFieldDescriptor( + private val ctx: AnalysisContext, + private val impl: VariableElement +) : PropertyDescriptor, JavaMemberDescriptor(ctx, impl) { + init { + require(impl.kind == ElementKind.FIELD) + } + + override val isVar: Boolean = !impl.modifiers.contains(Modifier.FINAL) + override val isConst: Boolean = impl.constantValue != null + + override val type: JavaType + get() = + when (impl) { + is Symbol -> impl.type.model(ctx) + else -> throw IllegalStateException("this element should be a symbol") + } + + // fields in Java never override those in parent classes + override val overriddenDescriptors: Collection = emptyList() + + override val isSetterProjectedOut: Boolean = false + override val accessors: List = emptyList() + override val backingField: FieldDescriptor? = null + override val delegateField: FieldDescriptor? = null + override val getter: VariableAccessorDescriptor? = null + override val isDelegated: Boolean = false + override val setter: VariableAccessorDescriptor? = null + override val isLateInit: Boolean = false + override val kind: CallableMemberDescriptor.Kind = CallableMemberDescriptor.Kind.DECLARATION + + override val allParameters: List = emptyList() + override val extensionReceiverParameter: ReceiverParameterDescriptor? = null + override val dispatchReceiverParameter: ReceiverParameterDescriptor? + get() = + if (impl.modifiers.contains(Modifier.STATIC)) null + else JavaReceiverParameterDescriptor(ctx, impl.enclosingClass!!.asType(), impl) + override val typeParameters: List = emptyList() + override val returnType: Type = type + override val valueParameters: List = emptyList() +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt new file mode 100644 index 000000000..695e0994b --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt @@ -0,0 +1,71 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.modelCautious +import arrow.meta.plugins.analysis.java.ast.types.allSupertypes +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FunctionDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import com.sun.tools.javac.code.Symbol +import javax.lang.model.element.ElementKind +import javax.lang.model.element.ExecutableElement +import javax.lang.model.type.TypeKind + +public open class JavaFunctionDescriptor( + private val ctx: AnalysisContext, + private val impl: ExecutableElement +) : FunctionDescriptor, JavaMemberDescriptor(ctx, impl) { + + override val isOperator: Boolean = false + override val isInfix: Boolean = false + override val isInline: Boolean = false + override val isTailrec: Boolean = false + override val isSuspend: Boolean = false + override val kind: CallableMemberDescriptor.Kind = CallableMemberDescriptor.Kind.DECLARATION + + override val extensionReceiverParameter: ReceiverParameterDescriptor? = null + override val dispatchReceiverParameter: ReceiverParameterDescriptor? + get() = + when (impl.kind) { + ElementKind.METHOD -> { + (impl as Symbol.MethodSymbol).owner.asType()?.let { + if (it.kind == null || it.kind == TypeKind.NONE) null + else JavaReceiverParameterDescriptor(ctx, it, impl) + } + } + else -> null + } + override val typeParameters: List + get() = impl.typeParameters.map { it.model(ctx) } + override val returnType: Type? + get() = impl.returnType?.modelCautious(ctx) + override val valueParameters: List + get() = impl.parameters.map { it.model(ctx) } + override val allParameters: List + get() = listOfNotNull(dispatchReceiverParameter) + valueParameters + + override val overriddenDescriptors: Collection + get() = + when (val klass = impl.enclosingClass) { + null -> emptyList() + else -> + klass.asType().allSupertypes(ctx).flatMap { parent -> + ctx + .types + .asElement(parent) + ?.enclosedElements + .orEmpty() + .filterIsInstance() + .filter { methodInParent -> ctx.elements.overrides(impl, methodInParent, klass) } + .map { it.model(ctx) } + } + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor.kt new file mode 100644 index 000000000..60acd51f3 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor.kt @@ -0,0 +1,15 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.LocalVariableDescriptor +import javax.lang.model.element.ElementKind +import javax.lang.model.element.VariableElement + +public class JavaLocalVariableDescriptor(ctx: AnalysisContext, impl: VariableElement) : + LocalVariableDescriptor, JavaVariableDescriptor(ctx, impl) { + init { + require(impl.kind == ElementKind.LOCAL_VARIABLE) + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor.kt new file mode 100644 index 000000000..80e67708f --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor.kt @@ -0,0 +1,36 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Modality +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility +import javax.lang.model.element.Element +import javax.lang.model.element.ElementKind +import javax.lang.model.element.Modifier + +public open class JavaMemberDescriptor(ctx: AnalysisContext, private val impl: Element) : + MemberDescriptor, JavaDescriptor(ctx, impl) { + + override val modality: Modality + get() = + when { + impl.modifiers.contains(Modifier.FINAL) -> Modality.FINAL + impl.modifiers.contains(Modifier.ABSTRACT) || impl.kind == ElementKind.INTERFACE -> + Modality.ABSTRACT + else -> Modality.OPEN + } + + override val visibility: Visibility + get() = + object : Visibility { + override val isPublicAPI: Boolean = impl.modifiers.contains(Modifier.PUBLIC) + // this is the same as the simple name + override val name: String = impl.simpleName.toString() + } + + override val isExpect: Boolean = false + override val isActual: Boolean = false + override val isExternal: Boolean = false +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope.kt new file mode 100644 index 000000000..e11a044d1 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope.kt @@ -0,0 +1,31 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import javax.lang.model.element.Element +import javax.lang.model.element.ExecutableElement +import javax.lang.model.element.TypeElement +import javax.lang.model.element.VariableElement + +public class JavaMemberScope( + private val ctx: AnalysisContext, + private val enclosedElements: Collection +) : MemberScope { + override fun getClassifierNames(): Set = getNames() + override fun getFunctionNames(): Set = getNames() + override fun getVariableNames(): Set = getNames() + + private inline fun getNames(): Set = + enclosedElements.filterIsInstance().map { it.simpleName.name() }.toSet() + + override fun getContributedDescriptors( + filter: (name: String) -> Boolean + ): List = + enclosedElements.filter { filter(it.simpleName.toString()) }.map { it.model(ctx) } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt new file mode 100644 index 000000000..c7d18eb0a --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt @@ -0,0 +1,31 @@ +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageViewDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import javax.lang.model.element.ModuleElement +import javax.lang.model.element.PackageElement + +public class JavaModuleDescriptor( + private val ctx: AnalysisContext, + private val impl: ModuleElement +) : JavaDescriptor(ctx, impl), ModuleDescriptor { + override fun getPackage(pck: String): PackageViewDescriptor? = + impl + .enclosedElements + .filterIsInstance() + .firstOrNull { it.fqName == pck } + ?.model(ctx) + + override fun getSubPackagesOf(fqName: FqName): List = + impl + .enclosedElements + .filterIsInstance() + .filter { it.fqName.startsWith(fqName.name + ".") } + .map { it.model(ctx) } + + override val stableName: Name = Name(impl.simpleName.toString()) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor.kt new file mode 100644 index 000000000..fdfa50149 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor.kt @@ -0,0 +1,20 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageFragmentDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageViewDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import javax.lang.model.element.PackageElement + +public class JavaPackageDescriptor( + private val ctx: AnalysisContext, + private val impl: PackageElement +) : PackageViewDescriptor, PackageFragmentDescriptor, JavaDescriptor(ctx, impl) { + override val fqName: FqName + get() = FqName(impl.fqName) + override val memberScope: MemberScope + get() = JavaMemberScope(ctx, impl.enclosedElements) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor.kt new file mode 100644 index 000000000..40f07147f --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor.kt @@ -0,0 +1,27 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import javax.lang.model.element.ElementKind +import javax.lang.model.element.VariableElement + +public class JavaParameterDescriptor(ctx: AnalysisContext, private val impl: VariableElement) : + ValueParameterDescriptor, JavaVariableDescriptor(ctx, impl) { + init { + require(impl.kind == ElementKind.PARAMETER || impl.kind == ElementKind.EXCEPTION_PARAMETER) + } + + override val index: Int + get() = impl.enclosingElement.parametersFromEverywhere.indexOf(impl) + + override val isCrossinline: Boolean = false + override val isNoinline: Boolean = false + override val varargElementType: Type? = null + + override fun declaresDefaultValue(): Boolean = impl.constantValue != null + override val defaultValue: Expression? = null // TODO: implement this!! +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor.kt new file mode 100644 index 000000000..de39c541c --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor.kt @@ -0,0 +1,57 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import javax.lang.model.type.TypeMirror + +public class JavaReceiverParameterDescriptor( + private val ctx: AnalysisContext, + private val ty: TypeMirror, + private val enclosing: javax.lang.model.element.Element +) : ReceiverParameterDescriptor { + override fun impl(): TypeMirror = ty + + override val name: Name = Name("this") + override val fqNameSafe: FqName = FqName("this") + + override val type: Type + get() = ty.model(ctx) + override val value: ReceiverValue + get() = + object : ReceiverValue { + override val type: Type = this@JavaReceiverParameterDescriptor.type + override val isClassReceiver: Boolean + get() = false // TODO check this later + } + override val allParameters: List = emptyList() + override val extensionReceiverParameter: ReceiverParameterDescriptor? = null + override val dispatchReceiverParameter: ReceiverParameterDescriptor? = null + override val typeParameters: List = emptyList() + override val returnType: Type + get() = type + override val valueParameters: List = emptyList() + override val overriddenDescriptors: Collection = emptyList() + + override val containingDeclaration: DeclarationDescriptor + get() = enclosing.model(ctx) + + override val containingPackage: FqName? + get() = containingDeclaration.containingPackage + + override fun element(): Element? = null + override fun annotations(): Annotations = JavaAnnotations(ctx, emptyList()) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor.kt new file mode 100644 index 000000000..30af9b329 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor.kt @@ -0,0 +1,15 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.SimpleFunctionDescriptor +import javax.lang.model.element.ElementKind +import javax.lang.model.element.ExecutableElement + +public class JavaSimpleFunctionDescriptor(ctx: AnalysisContext, impl: ExecutableElement) : + SimpleFunctionDescriptor, JavaFunctionDescriptor(ctx, impl) { + init { + require(impl.kind == ElementKind.METHOD) + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor.kt new file mode 100644 index 000000000..8ee098dc8 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor.kt @@ -0,0 +1,32 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.types.JavaTypeParameterConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance +import javax.lang.model.element.TypeParameterElement + +public class JavaTypeParameterDescriptor( + private val ctx: AnalysisContext, + private val impl: TypeParameterElement +) : TypeParameterDescriptor, JavaMemberDescriptor(ctx, impl) { + + override val upperBounds: List + get() = impl.bounds.map { it.model(ctx) } + override val index: Int + get() = impl.enclosingElement.typeParametersFromEverywhere.indexOf(impl) + + override val isReified: Boolean = false + override val variance: Variance = Variance.Invariant + override val isCapturedFromOuterDeclaration: Boolean = false + + override val typeConstructor: TypeConstructor + get() = JavaTypeParameterConstructor(ctx, impl) + override val defaultType: Type + get() = impl.asType().model(ctx) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor.kt new file mode 100644 index 000000000..fb72fb8b3 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor.kt @@ -0,0 +1,35 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import com.sun.tools.javac.code.Symbol +import javax.lang.model.element.VariableElement + +public open class JavaValueDescriptor( + private val ctx: AnalysisContext, + private val impl: VariableElement +) : ValueDescriptor, JavaMemberDescriptor(ctx, impl) { + + override val type: Type + get() = + when (impl) { + is Symbol -> impl.type.model(ctx) + else -> throw IllegalStateException("this element should be a symbol") + } + override val allParameters: List = emptyList() + override val extensionReceiverParameter: ReceiverParameterDescriptor? = null + override val dispatchReceiverParameter: ReceiverParameterDescriptor? = null + override val typeParameters: List = emptyList() + override val returnType: Type? = null + override val valueParameters: List = emptyList() + override val overriddenDescriptors: Collection = emptyList() +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt new file mode 100644 index 000000000..42ed0ebcb --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt @@ -0,0 +1,21 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.descriptors + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor +import javax.lang.model.element.ElementKind +import javax.lang.model.element.VariableElement + +public open class JavaVariableDescriptor(ctx: AnalysisContext, private val impl: VariableElement) : + VariableDescriptor, JavaValueDescriptor(ctx, impl) { + + override val isVar: Boolean + get() = + when (impl.kind) { + ElementKind.LOCAL_VARIABLE, ElementKind.FIELD -> true + else -> false + } + override val isConst: Boolean = impl.constantValue != null + override val isLateInit: Boolean = false +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAsIs.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAsIs.kt new file mode 100644 index 000000000..f25e03f3e --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAsIs.kt @@ -0,0 +1,43 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IsExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpresionKind +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import com.sun.source.tree.InstanceOfTree +import com.sun.source.tree.TypeCastTree + +public class JavaTypeCast(private val ctx: AnalysisContext, private val impl: TypeCastTree) : + TypeCastExpression, JavaElement(ctx, impl) { + override val left: Expression + get() = impl.expression.model(ctx) + override val right: TypeReference + get() = impl.type.model(ctx) + override val operationToken: String + get() = "as" + override val operationReference: SimpleNameExpression + get() = JavaFakeReference("as", this) + + // Java does not have nullable as + override val kind: TypeCastExpresionKind + get() = TypeCastExpresionKind.POSITIVE_TYPE_CAST +} + +public class JavaInstanceOf(private val ctx: AnalysisContext, private val impl: InstanceOfTree) : + IsExpression, JavaElement(ctx, impl) { + override val leftHandSide: Expression + get() = impl.expression.model(ctx) + override val typeReference: TypeReference? + get() = JavaTypeReference(ctx, impl.type) + override val operationReference: SimpleNameExpression + get() = JavaFakeReference("instanceof", this) + + // Java does not have negated instanceof + override val isNegated: Boolean = false +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssert.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssert.kt new file mode 100644 index 000000000..4301763d5 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssert.kt @@ -0,0 +1,138 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.descriptors.JavaAnnotations +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssertExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import com.sun.source.tree.AssertTree +import javax.lang.model.type.TypeMirror + +public class JavaAssert(private val ctx: AnalysisContext, private val impl: AssertTree) : + AssertExpression, JavaElement(ctx, impl) { + override fun getResolvedCall(context: ResolutionContext): ResolvedCall = + JavaAssertFakeCall(ctx, impl) + override val condition: Expression + get() = impl.condition.model(ctx) + override val detail: Expression? + get() = impl.detail?.model(ctx) +} + +public class JavaAssertFakeCall(private val ctx: AnalysisContext, private val impl: AssertTree) : + ResolvedCall { + override val callElement: Element + get() = impl.model(ctx) + override val typeArguments: Map + get() = emptyMap() + + private val fakeDescriptor: JavaAssertFakeDescriptor = + JavaAssertFakeDescriptor(ctx, impl.detail != null) + override val resultingDescriptor: CallableDescriptor + get() = fakeDescriptor + + override val valueArguments: Map + get() = + if (impl.detail != null) { + mapOf( + fakeDescriptor.predicateParameter to + JavaExpressionValueArgument(ctx, impl.condition, fakeDescriptor.predicateParameter), + fakeDescriptor.messageParameter to + JavaExpressionValueArgument(ctx, impl.detail, fakeDescriptor.messageParameter) + ) + } else { + mapOf( + fakeDescriptor.predicateParameter to + JavaExpressionValueArgument(ctx, impl.condition, fakeDescriptor.predicateParameter) + ) + } + + override fun getReturnType(): Type = ctx.symbolTable.voidType.model(ctx) + + override fun getReceiverExpression(): Expression? = null + override val dispatchReceiver: ReceiverValue? = null + override val extensionReceiver: ReceiverValue? = null +} + +public class JavaAssertFakeDescriptor( + private val ctx: AnalysisContext, + private val withDetail: Boolean +) : CallableDescriptor { + override fun impl(): Any = this + + override val fqNameSafe: FqName = FqName(AssertExpression.FAKE_ASSERT_NAME) + override val name: Name = Name(AssertExpression.FAKE_ASSERT_NAME) + + override val extensionReceiverParameter: ReceiverParameterDescriptor? = null + override val dispatchReceiverParameter: ReceiverParameterDescriptor? = null + override val typeParameters: List = emptyList() + override val returnType: Type = ctx.symbolTable.voidType.model(ctx) + + public val predicateParameter: ValueParameterDescriptor = + JavaAssertFakeParameter(ctx, 0, "predicate", ctx.symbolTable.booleanType, this) + public val messageParameter: ValueParameterDescriptor = + JavaAssertFakeParameter(ctx, 1, "msg", ctx.symbolTable.stringType, this) + + override val valueParameters: List = + if (withDetail) listOf(predicateParameter, messageParameter) else listOf(predicateParameter) + override val allParameters: List = valueParameters + + override fun annotations(): Annotations = JavaAnnotations(ctx, emptyList()) + override val overriddenDescriptors: Collection = emptyList() + override val containingDeclaration: DeclarationDescriptor? = null + override val containingPackage: FqName? = null + override fun element(): Element? = null +} + +public class JavaAssertFakeParameter( + private val ctx: AnalysisContext, + public override val index: Int, + name: String, + private val typeMirror: TypeMirror, + override val containingDeclaration: DeclarationDescriptor +) : ValueParameterDescriptor { + override fun impl(): Any = this + + override val type: Type + get() = typeMirror.model(ctx) + override val returnType: Type + get() = type + override val fqNameSafe: FqName = FqName(name) + override val name: Name = Name(name) + + override val isCrossinline: Boolean = false + override val isNoinline: Boolean = false + override val varargElementType: Type? = null + override fun declaresDefaultValue(): Boolean = false + override val defaultValue: Expression? = null + override val isVar: Boolean = false + override val isConst: Boolean = false + override val isLateInit: Boolean = false + + override val allParameters: List = emptyList() + override val extensionReceiverParameter: ReceiverParameterDescriptor? = null + override val dispatchReceiverParameter: ReceiverParameterDescriptor? = null + override val typeParameters: List = emptyList() + override val valueParameters: List = emptyList() + override val overriddenDescriptors: Collection = emptyList() + + override val containingPackage: FqName? = null + override fun element(): Element? = null + override fun annotations(): Annotations = JavaAnnotations(ctx, emptyList()) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment.kt new file mode 100644 index 000000000..40c059438 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment.kt @@ -0,0 +1,84 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssignmentExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import com.sun.source.tree.AssignmentTree +import com.sun.source.tree.CompoundAssignmentTree +import com.sun.source.tree.Tree +import com.sun.tools.javac.tree.JCTree + +public class JavaAssignment(private val ctx: AnalysisContext, private val impl: AssignmentTree) : + AssignmentExpression, JavaElement(ctx, impl) { + override val left: Expression + get() = impl.variable.model(ctx) + override val right: Expression + get() = impl.expression.model(ctx) + + // these three come from the Kotlin representation + override val operationToken: String = "=" + override val operationTokenRpr: String = "EQ" + override val operationReference: SimpleNameExpression + get() = JavaFakeReference("=", this) +} + +// the compound assignments "var op= exp" +// are translated as "var = var op exp" +public class JavaCompoundAssignment( + private val ctx: AnalysisContext, + private val impl: CompoundAssignmentTree +) : AssignmentExpression, JavaElement(ctx, impl) { + override val left: Expression + get() = impl.variable.model(ctx) + override val right: Expression + get() = JavaCompoundAssignmentRHS(ctx, impl) + + // these three come from the Kotlin representation + override val operationToken: String = "=" + override val operationTokenRpr: String = "EQ" + override val operationReference: SimpleNameExpression + get() = JavaFakeReference("=", this) +} + +public class JavaCompoundAssignmentRHS( + private val ctx: AnalysisContext, + private val impl: CompoundAssignmentTree +) : BinaryExpression, JavaElement(ctx, impl) { + + private val operatorName: String = compoundkindNames[impl.kind] ?: "UNKNOWN" + override val operationReference: SimpleNameExpression + get() = JavaFakeReference(ctx.elements.getName(operatorName).toString(), this) + + override val operationToken: String + get() = + when (impl) { + is JCTree.JCAssignOp -> impl.operator.name.toString() + else -> operatorName + } + override val operationTokenRpr: String + get() = operatorName + override val left: Expression + get() = impl.variable.model(ctx) + override val right: Expression + get() = impl.expression.model(ctx) +} + +internal val compoundkindNames: Map = + mapOf( + Tree.Kind.MULTIPLY_ASSIGNMENT to "MUL", + Tree.Kind.DIVIDE_ASSIGNMENT to "DIV", + Tree.Kind.REMAINDER_ASSIGNMENT to "REM", + Tree.Kind.PLUS_ASSIGNMENT to "PLUS", + Tree.Kind.MINUS_ASSIGNMENT to "MINUS", + Tree.Kind.LEFT_SHIFT_ASSIGNMENT to "SHIFTL", // invented + Tree.Kind.RIGHT_SHIFT_ASSIGNMENT to "SHIFTR", // invented + Tree.Kind.UNSIGNED_RIGHT_SHIFT_ASSIGNMENT to "USHIFTR", // invented + Tree.Kind.AND_ASSIGNMENT to "BITAND", + Tree.Kind.OR_ASSIGNMENT to "BITOR", + Tree.Kind.XOR_ASSIGNMENT to "BITXOR", + ) diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaBlock.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaBlock.kt new file mode 100644 index 000000000..4bf186b74 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaBlock.kt @@ -0,0 +1,33 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import com.sun.source.tree.BlockTree +import com.sun.source.tree.EmptyStatementTree +import com.sun.source.tree.ExpressionStatementTree +import com.sun.source.tree.Tree + +public open class JavaBlockParent( + private val ctx: AnalysisContext, + private val elements: List, + owner: Tree +) : BlockExpression, JavaElement(ctx, owner) { + override val statements: List + get() = elements.map { it.model(ctx) } + override val firstStatement: Expression? + get() = statements.firstOrNull() + override val implicitReturnFromLast: Boolean = false +} + +public class JavaBlock(ctx: AnalysisContext, impl: BlockTree) : + BlockExpression, JavaBlockParent(ctx, impl.statements, impl) {} + +public class JavaSingleBlock(ctx: AnalysisContext, impl: ExpressionStatementTree) : + BlockExpression, JavaBlockParent(ctx, listOf(impl.expression), impl) {} + +public class JavaEmptyBlock(ctx: AnalysisContext, impl: EmptyStatementTree) : + BlockExpression, JavaBlockParent(ctx, emptyList(), impl) {} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaCall.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaCall.kt new file mode 100644 index 000000000..57103978e --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaCall.kt @@ -0,0 +1,123 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionLambdaArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.OperationExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.UnaryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument +import com.sun.source.tree.BinaryTree +import com.sun.source.tree.MemberSelectTree +import com.sun.source.tree.MethodInvocationTree +import com.sun.source.tree.NewClassTree +import com.sun.source.tree.Tree +import com.sun.source.tree.UnaryTree +import com.sun.tools.javac.tree.JCTree + +public class JavaCall(private val ctx: AnalysisContext, private val impl: MethodInvocationTree) : + CallExpression, JavaElement(ctx, impl) { + override val calleeExpression: Expression? + get() = this.getResolvedCall()?.getReceiverExpression() + override val typeArguments: List + get() = impl.typeArguments.mapNotNull { JavaTypeProjection(ctx, it) } + override val valueArguments: List + get() = this.getResolvedCall()?.valueArguments?.flatMap { it.value.arguments }.orEmpty() + // Java does not have final block arguments + override val lambdaArguments: List + get() = emptyList() +} + +public class JavaConstructorCall(private val ctx: AnalysisContext, private val impl: NewClassTree) : + CallExpression, JavaElement(ctx, impl) { + override val calleeExpression: Expression? = null + override val typeArguments: List + get() = impl.typeArguments.mapNotNull { JavaTypeProjection(ctx, it) } + override val valueArguments: List + get() = this.getResolvedCall()?.valueArguments?.flatMap { it.value.arguments }.orEmpty() + // Java does not have final block arguments + override val lambdaArguments: List + get() = emptyList() +} + +public class JavaMemberSelect( + private val ctx: AnalysisContext, + private val impl: MemberSelectTree +) : CallExpression, JavaElement(ctx, impl) { + override val calleeExpression: Expression? + get() = impl.expression?.model(ctx) + override val typeArguments: List + get() = emptyList() + override val valueArguments: List + get() = emptyList() + // Java does not have final block arguments + override val lambdaArguments: List + get() = emptyList() +} + +public open class JavaOperation(private val ctx: AnalysisContext, impl: Tree) : + OperationExpression, JavaElement(ctx, impl) { + protected val operatorName: String = kindNames[impl.kind] ?: "UNKNOWN" + override val operationReference: SimpleNameExpression + get() = JavaFakeReference(ctx.elements.getName(operatorName).toString(), this) +} + +public class JavaUnary(private val ctx: AnalysisContext, private val impl: UnaryTree) : + UnaryExpression, JavaOperation(ctx, impl) { + override val baseExpression: Expression + get() = impl.expression.model(ctx) +} + +public class JavaBinary(private val ctx: AnalysisContext, private val impl: BinaryTree) : + BinaryExpression, JavaOperation(ctx, impl) { + override val operationToken: String + get() = + when (impl) { + is JCTree.JCOperatorExpression -> impl.operator.name.toString() + else -> operatorName + } + override val operationTokenRpr: String + get() = operatorName + override val left: Expression + get() = impl.leftOperand.model(ctx) + override val right: Expression + get() = impl.rightOperand.model(ctx) +} + +// for the names look at [org.jetbrains.kotlin.lexer.KtTokens] +internal val kindNames: Map = + mapOf( + Tree.Kind.POSTFIX_INCREMENT to "PLUSPLUS", + Tree.Kind.POSTFIX_DECREMENT to "MINUSMINUS", + Tree.Kind.PREFIX_INCREMENT to "PLUSPLUS", + Tree.Kind.PREFIX_DECREMENT to "MINUSMINUS", + Tree.Kind.UNARY_PLUS to "PLUS", + Tree.Kind.UNARY_MINUS to "MINUS", + Tree.Kind.BITWISE_COMPLEMENT to "BITEXCL", // invented + Tree.Kind.LOGICAL_COMPLEMENT to "EXCL", + Tree.Kind.MULTIPLY to "MUL", + Tree.Kind.DIVIDE to "DIV", + Tree.Kind.REMAINDER to "REM", + Tree.Kind.PLUS to "PLUS", + Tree.Kind.MINUS to "MINUS", + Tree.Kind.LEFT_SHIFT to "SHIFTL", // invented + Tree.Kind.RIGHT_SHIFT to "SHIFTR", // invented + Tree.Kind.UNSIGNED_RIGHT_SHIFT to "USHIFTR", // invented + Tree.Kind.LESS_THAN to "LT", + Tree.Kind.LESS_THAN_EQUAL to "LTEQ", + Tree.Kind.GREATER_THAN to "GT", + Tree.Kind.GREATER_THAN_EQUAL to "GTEQ", + Tree.Kind.EQUAL_TO to "EQEQ", + Tree.Kind.NOT_EQUAL_TO to "EXCLEQ", + Tree.Kind.AND to "BITAND", + Tree.Kind.OR to "BITOR", + Tree.Kind.XOR to "BITXOR", + Tree.Kind.CONDITIONAL_AND to "ANDAND", + Tree.Kind.CONDITIONAL_OR to "OROR" + ) diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt new file mode 100644 index 000000000..1d4973d03 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt @@ -0,0 +1,111 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.modelCautious +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Class +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedFunction +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry +import com.sun.source.tree.BlockTree +import com.sun.source.tree.ClassTree +import com.sun.source.tree.MethodTree +import com.sun.source.tree.Tree + +public class JavaInstanceInitializer( + private val ctx: AnalysisContext, + private val impl: BlockTree, + override val containingDeclaration: Declaration +) : AnonymousInitializer, JavaElement(ctx, impl) { + override val body: Expression + get() = impl.model(ctx) + override val name: String? + get() = null + override val parents: List + get() = listOf(containingDeclaration) + containingDeclaration.parents +} + +public class JavaClass(private val ctx: AnalysisContext, private val impl: ClassTree) : + Class, JavaElement(ctx, impl) { + + override val parents: List + get() = ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } + override val name: String + get() = impl.name.toString() + override val nameAsSafeName: Name + get() = Name(name) + override val fqName: FqName + get() = FqName(impl.fqName(ctx)) + override val nameAsName: Name + get() = nameAsSafeName + + override val superTypeListEntries: List + get() = (listOfNotNull(impl.extendsClause) + impl.implementsClause).map { it.model(ctx) } + + // instance initializers are blocks which appear at random + override val declarations: List + get() = + impl.members.map { + when (it) { + is BlockTree -> JavaInstanceInitializer(ctx, it, this) + else -> it.model(ctx) + } + } + override fun getAnonymousInitializers(): List = + declarations.filterIsInstance() + + override val body: ClassBody + get() = + object : ClassBody, JavaElement(ctx, impl) { + override val anonymousInitializers: List = emptyList() + override val properties: List = emptyList() + override val functions: List = + this@JavaClass.declarations.mapNotNull { it as? JavaMethod }.filter { + it !is JavaConstructor + } + override val enumEntries: List = emptyList() // TODO + override val allCompanionObjects: List = emptyList() + override val declarations: List = this@JavaClass.declarations + } + + // Java does not have many Kotlin niceties + override fun getProperties(): List = emptyList() + override val companionObjects: List = emptyList() + + // we map all Java constructors as "secondary" + override fun hasExplicitPrimaryConstructor(): Boolean = false + override fun hasPrimaryConstructor(): Boolean = false + override val primaryConstructor: PrimaryConstructor? = null + override val primaryConstructorModifierList: ModifierList? = null + override val primaryConstructorParameters: List = emptyList() + + override val secondaryConstructors: List + get() = declarations.filterIsInstance() + + override fun isAnnotation(): Boolean = impl.kind == Tree.Kind.ANNOTATION_TYPE + override fun isInterface(): Boolean = impl.kind == Tree.Kind.INTERFACE + override fun isEnum(): Boolean = impl.kind == Tree.Kind.ENUM + override fun isData(): Boolean = false + override fun isSealed(): Boolean = false + override fun isInner(): Boolean = ctx.resolver.parentTrees(impl).any { it is ClassTree } + override fun isInline(): Boolean = false + override fun isValue(): Boolean = false + override fun isTopLevel(): Boolean = !isInner() + override val isLocal: Boolean + get() = ctx.resolver.parentTrees(impl).any { it is MethodTree } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaConditional.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaConditional.kt new file mode 100644 index 000000000..b224b2da3 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaConditional.kt @@ -0,0 +1,62 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IfExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenCondition +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenExpression +import com.sun.source.tree.CaseTree +import com.sun.source.tree.ConditionalExpressionTree +import com.sun.source.tree.ExpressionTree +import com.sun.source.tree.IfTree +import com.sun.source.tree.SwitchTree +import com.sun.source.tree.Tree + +public abstract class JavaConditional( + private val ctx: AnalysisContext, + impl: Tree, + private val conditionTree: ExpressionTree, + private val thenTree: Tree, + private val elseTree: Tree? +) : IfExpression, JavaElement(ctx, impl) { + override val condition: Expression? + get() = conditionTree.model(ctx) + override val thenExpression: Expression? + get() = thenTree.model(ctx) + override val elseExpression: Expression? + get() = elseTree?.model(ctx) +} + +public class JavaIf(ctx: AnalysisContext, impl: IfTree) : + JavaConditional(ctx, impl, impl.condition, impl.thenStatement, impl.elseStatement) {} + +public class JavaTernaryConditional(ctx: AnalysisContext, impl: ConditionalExpressionTree) : + JavaConditional(ctx, impl, impl.condition, impl.trueExpression, impl.falseExpression) {} + +public class JavaSwitch(private val ctx: AnalysisContext, private val impl: SwitchTree) : + WhenExpression, JavaElement(ctx, impl) { + // no subject variables in Java + override val subjectVariable: Property? = null + override val subjectExpression: Expression + get() = impl.expression.model(ctx) + override val entries: List + get() = impl.cases.map { it.model(ctx) } + override val elseExpression: Expression? + get() = + impl.cases.firstOrNull { it.expression == null }?.model(ctx)?.expression +} + +public class JavaCase(private val ctx: AnalysisContext, private val impl: CaseTree) : + WhenEntry, JavaElement(ctx, impl) { + override val isElse: Boolean + get() = impl.expression == null + override val conditions: List + get() = listOfNotNull(impl.expression?.model(ctx)) + override val expression: Expression + get() = JavaBlockParent(ctx, impl.statements, impl) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaControlStatement.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaControlStatement.kt new file mode 100644 index 000000000..1c5260051 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaControlStatement.kt @@ -0,0 +1,44 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BreakExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ContinueExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import com.sun.source.tree.BreakTree +import com.sun.source.tree.ContinueTree +import com.sun.source.tree.ReturnTree + +public class JavaReturn(private val ctx: AnalysisContext, private val impl: ReturnTree) : + ReturnExpression, JavaElement(ctx, impl) { + override val returnedExpression: Expression? + get() = impl.expression.model(ctx) + + // no return labels in Java + override val labeledExpression: Expression? = null + override fun getTargetLabel(): SimpleNameExpression? = null + override fun getLabelName(): String? = null + override fun getLabelNameAsName(): Name? = null +} + +public class JavaContinue(ctx: AnalysisContext, private val impl: ContinueTree) : + ContinueExpression, JavaElement(ctx, impl) { + override fun getTargetLabel(): SimpleNameExpression = + JavaFakeReference(impl.label.toString(), this) + override fun getLabelName(): String = impl.label.toString() + override fun getLabelNameAsName(): Name = impl.label.name() +} + +public class JavaBreak(ctx: AnalysisContext, private val impl: BreakTree) : + BreakExpression, JavaElement(ctx, impl) { + override fun getTargetLabel(): SimpleNameExpression = + JavaFakeReference(impl.label.toString(), this) + override fun getLabelName(): String = impl.label.toString() + override fun getLabelNameAsName(): Name = impl.label.name() +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElement.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElement.kt new file mode 100644 index 000000000..ef3cd9dcf --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElement.kt @@ -0,0 +1,63 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.modelCautious +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierListOwner +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import com.sun.source.tree.BlockTree +import com.sun.source.tree.Tree +import com.sun.tools.javac.tree.JCTree + +public open class JavaElement(private val ctx: AnalysisContext, private val impl: Tree) : + Expression, ModifierListOwner { + override fun impl(): Tree = impl + + override val text: String + get() = impl.toString() + + public fun getResolvedCall(): ResolvedCall? = impl.resolvedCall(ctx) + override fun getResolvedCall(context: ResolutionContext): ResolvedCall? = getResolvedCall() + + override fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? = null + + override fun parents(): List = + ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } + + override fun location(): CompilerMessageSourceLocation? { + val (start, end) = ctx.resolver.positionOf(impl) + return JavaSourceLocation(ctx.unit, start, end) + } + + override val psiOrParent: Element = this + + public fun type(): Type? = + when (impl) { + is JCTree -> impl.type?.modelCautious(ctx) + else -> null + } + override fun type(context: ResolutionContext): Type? = type() + + override fun lastBlockStatementOrThis(): Expression = + when (impl) { + is BlockTree -> impl.statements.last().model(ctx) + else -> this + } + + override val modifierList: ModifierList? = null // TODO: fix later + + override fun getAnnotations(): List = modifierList?.annotations.orEmpty() + override val annotationEntries: List + get() = modifierList?.annotationEntries.orEmpty() +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtils.kt new file mode 100644 index 000000000..66f2be427 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtils.kt @@ -0,0 +1,46 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import com.sun.source.tree.BinaryTree +import com.sun.source.tree.ClassTree +import com.sun.source.tree.ExpressionTree +import com.sun.source.tree.MethodInvocationTree +import com.sun.source.tree.MethodTree +import com.sun.source.tree.NewClassTree +import com.sun.source.tree.PackageTree +import com.sun.source.tree.Tree +import com.sun.source.tree.UnaryTree + +public val ExpressionTree.argumentsFromEverywhere: List + get() = + when (this) { + is UnaryTree -> listOf(this.expression) + is BinaryTree -> listOf(this.leftOperand, this.rightOperand) + is MethodInvocationTree -> this.arguments + is NewClassTree -> this.arguments + else -> emptyList() + } + +public val ExpressionTree.typeArgumentsFromEverywhere: List + get() = + when (this) { + is MethodInvocationTree -> this.typeArguments + is NewClassTree -> this.typeArguments + else -> emptyList() + } + +public val Tree.name: String? + get() = + when (this) { + is MethodTree -> this.name.toString() + is ClassTree -> this.simpleName.toString() + is PackageTree -> this.packageName.toString() + else -> null + } + +public fun Tree.fqName(ctx: AnalysisContext): String { + val elements = listOf(this) + ctx.resolver.parentTrees(this) + return elements.reversed().mapNotNull { it.name }.joinToString(separator = ".") +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaException.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaException.kt new file mode 100644 index 000000000..28e246368 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaException.kt @@ -0,0 +1,54 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CatchClause +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FinallySection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TryExpression +import com.sun.source.tree.CatchTree +import com.sun.source.tree.Tree +import com.sun.source.tree.TryTree + +public open class JavaTry(private val ctx: AnalysisContext, private val impl: TryTree) : + TryExpression, JavaElement(ctx, impl) { + override val tryBlock: BlockExpression + get() = impl.block.model(ctx) + override val catchClauses: List + get() = TODO("Not yet implemented") + override val finallyBlock: FinallySection? + get() = impl.finallyBlock?.let { JavaFinally(ctx, it, impl) } +} + +public open class JavaFinally( + private val ctx: AnalysisContext, + private val impl: Tree, + private val owner: TryTree +) : FinallySection, JavaElement(ctx, impl) { + override val finalExpression: BlockExpression + get() = + when (val final = impl.model(ctx)) { + is BlockExpression -> final + else -> JavaBlockParent(ctx, listOf(impl), owner) + } +} + +public open class JavaCatch(private val ctx: AnalysisContext, private val impl: CatchTree) : + CatchClause, JavaElement(ctx, impl) { + override val catchParameter: Parameter + get() = JavaParameter(ctx, impl.parameter, null) + override val parameterList: ParameterList? + get() = + object : ParameterList { + override val parameters: List = listOf(catchParameter) + override val ownerFunction: DeclarationWithBody? = null + } + override val catchBody: Expression? + get() = impl.block.model(ctx) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference.kt new file mode 100644 index 000000000..31171f110 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference.kt @@ -0,0 +1,32 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type + +public class JavaFakeReference(private val impl: String, private val parent: Element) : + SimpleNameExpression { + override fun getReferencedName(): String = impl + override fun getReferencedNameAsName(): Name = Name(impl) + + override fun type(context: ResolutionContext): Type? = null + override fun lastBlockStatementOrThis(): Expression = this + + override val text: String = impl + override fun impl(): Any = impl + + override fun getResolvedCall(context: ResolutionContext): ResolvedCall? = null + override fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? = null + override fun parents(): List = listOf(parent) + parent.parents() + override fun location(): CompilerMessageSourceLocation? = null + override val psiOrParent: Element + get() = this +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier.kt new file mode 100644 index 000000000..e3911715f --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier.kt @@ -0,0 +1,45 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NameReferenceExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import com.sun.source.tree.IdentifierTree + +public class JavaIdentifier(ctx: AnalysisContext, private val impl: IdentifierTree) : + NameReferenceExpression, JavaElement(ctx, impl) { + init { + require(impl.name != ctx.names._this) + } + override fun getReferencedName(): String = impl.name.toString() + override fun getReferencedNameAsName(): Name = impl.name.name() +} + +public class JavaThis(ctx: AnalysisContext, impl: IdentifierTree) : + ThisExpression, JavaElement(ctx, impl) { + init { + require(impl.name == ctx.names._this) + } + + override fun getTargetLabel(): SimpleNameExpression? = null + override fun getLabelName(): String? = null + override fun getLabelNameAsName(): Name? = null +} + +public class JavaSuper(ctx: AnalysisContext, impl: IdentifierTree) : + SuperExpression, JavaElement(ctx, impl) { + init { + require(impl.name == ctx.names._super) + } + + override val superTypeQualifier: TypeReference? = null + override fun getTargetLabel(): SimpleNameExpression? = null + override fun getLabelName(): String? = null + override fun getLabelNameAsName(): Name? = null +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled.kt new file mode 100644 index 000000000..0903cb7ae --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled.kt @@ -0,0 +1,23 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LabeledExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import com.sun.source.tree.LabeledStatementTree + +public class JavaLabeled(private val ctx: AnalysisContext, private val impl: LabeledStatementTree) : + LabeledExpression, JavaElement(ctx, impl) { + override val baseExpression: Expression + get() = impl.statement.model(ctx) + + override fun getTargetLabel(): SimpleNameExpression? = null + + override fun getLabelName(): String? = impl.label?.toString() + override fun getLabelNameAsName(): Name? = impl.label?.name() +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLambda.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLambda.kt new file mode 100644 index 000000000..2b5e733a2 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLambda.kt @@ -0,0 +1,86 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.modelCautious +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FunctionLiteral +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import com.sun.source.tree.LambdaExpressionTree + +public class JavaLambda(private val ctx: AnalysisContext, private val impl: LambdaExpressionTree) : + LambdaExpression, FunctionLiteral, DeclarationWithBody, JavaElement(ctx, impl) { + override val functionLiteral: FunctionLiteral + get() = this + + override val name: String? = null + override val nameAsSafeName: Name = Name("") + override val fqName: FqName? = null + override val nameAsName: Name? = null + + override val parents: List + get() = ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } + + override val valueParameters: List + get() = impl.parameters.map { JavaParameter(ctx, it, this) } + override val valueParameterList: ParameterList + get() = + object : ParameterList { + override val parameters: List + get() = this@JavaLambda.valueParameters + override val ownerFunction: DeclarationWithBody + get() = this@JavaLambda + } + + override fun hasParameterSpecification(): Boolean = false + + override val receiverTypeReference: TypeReference? + get() = null + override val typeReference: TypeReference? + get() = null + + override val typeParameters: List + get() = emptyList() + override val typeParameterList: TypeParameterList + get() = + object : TypeParameterList { + override val parameters: List + get() = emptyList() + } + + override val typeConstraints: List + get() = emptyList() + override val typeConstraintList: TypeConstraintList + get() = + object : TypeConstraintList { + override val constraints: List + get() = emptyList() + } + + override fun hasBody(): Boolean = impl.body != null + override fun body(): Expression = impl.body.model(ctx) + override val bodyExpression: Expression + get() = body() + override val bodyBlockExpression: BlockExpression? + get() = body() as? BlockExpression + override fun hasBlockBody(): Boolean = bodyBlockExpression != null + + override val isLocal: Boolean = true + + // Java lambda's cannot do this + override fun hasDeclaredReturnType(): Boolean = false +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral.kt new file mode 100644 index 000000000..ad427e236 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral.kt @@ -0,0 +1,22 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NullExpression +import com.sun.source.tree.LiteralTree + +public class JavaLiteral(ctx: AnalysisContext, impl: LiteralTree) : + ConstantExpression, JavaElement(ctx, impl) { + init { + require(impl.value != null) + } +} + +public class JavaNull(ctx: AnalysisContext, impl: LiteralTree) : + NullExpression, JavaElement(ctx, impl) { + init { + require(impl.value == null) + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLoop.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLoop.kt new file mode 100644 index 000000000..9340b22b1 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLoop.kt @@ -0,0 +1,59 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoWhileExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ForExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThreePieceForExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhileExpression +import com.sun.source.tree.DoWhileLoopTree +import com.sun.source.tree.EnhancedForLoopTree +import com.sun.source.tree.ForLoopTree +import com.sun.source.tree.WhileLoopTree + +public class JavaDoWhile(private val ctx: AnalysisContext, private val impl: DoWhileLoopTree) : + DoWhileExpression, JavaElement(ctx, impl) { + override val condition: Expression + get() = impl.condition.model(ctx) + override val body: Expression + get() = impl.statement.model(ctx) +} + +public class JavaWhile(private val ctx: AnalysisContext, private val impl: WhileLoopTree) : + WhileExpression, JavaElement(ctx, impl) { + override val condition: Expression + get() = impl.condition.model(ctx) + override val body: Expression + get() = impl.statement.model(ctx) +} + +public class JavaEnhancedFor( + private val ctx: AnalysisContext, + private val impl: EnhancedForLoopTree +) : ForExpression, JavaElement(ctx, impl) { + override val loopParameter: Parameter + get() = JavaParameter(ctx, impl.variable, null) + override val destructuringDeclaration: DestructuringDeclaration? + get() = null + override val loopRange: Expression + get() = impl.expression.model(ctx) + override val body: Expression + get() = impl.statement.model(ctx) +} + +public class JavaFor(private val ctx: AnalysisContext, private val impl: ForLoopTree) : + ThreePieceForExpression, JavaElement(ctx, impl) { + override val initializer: List + get() = impl.initializer.map { it.model(ctx) } + override val condition: Expression + get() = impl.condition.model(ctx) + override val update: List + get() = impl.update.map { it.model(ctx) } + override val body: Expression + get() = impl.statement.model(ctx) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference.kt new file mode 100644 index 000000000..202f29421 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference.kt @@ -0,0 +1,23 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableReferenceExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import com.sun.source.tree.MemberReferenceTree + +public class JavaMemberReference( + private val ctx: AnalysisContext, + private val impl: MemberReferenceTree +) : CallableReferenceExpression, JavaElement(ctx, impl) { + override val callableReference: SimpleNameExpression + get() = JavaFakeReference(impl.name.toString(), this) + override val receiverExpression: Expression? + get() = impl.qualifierExpression?.model(ctx) + override val hasQuestionMarks: Boolean = false + override val isEmptyLHS: Boolean + get() = impl.qualifierExpression == null +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMethod.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMethod.kt new file mode 100644 index 000000000..46d02789a --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMethod.kt @@ -0,0 +1,102 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.descriptors.enclosingClass +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.modelCautious +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorDelegationCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedFunction +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import com.sun.source.tree.MethodTree +import javax.lang.model.element.ElementKind +import javax.lang.model.element.ExecutableElement + +public open class JavaMethod(private val ctx: AnalysisContext, private val impl: MethodTree) : + NamedFunction, JavaElement(ctx, impl) { + + override val parents: List + get() = ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } + override val name: String + get() = impl.name.toString() + override val nameAsSafeName: Name + get() = Name(name) + override val fqName: FqName + get() = FqName(impl.fqName(ctx)) + override val nameAsName: Name + get() = nameAsSafeName + + override val isLocal: Boolean + get() = ctx.resolver.parent(impl) is MethodTree + + override val bodyExpression: Expression? + get() = impl.body?.model(ctx) + override fun hasBody(): Boolean = bodyExpression != null + override fun body(): Expression? = bodyExpression + + override fun hasInitializer(): Boolean = bodyExpression != null + override val initializer: Expression? + get() = bodyExpression + + override val bodyBlockExpression: BlockExpression? + get() = bodyExpression as? JavaBlock + override fun hasBlockBody(): Boolean = bodyBlockExpression != null + + override fun hasDeclaredReturnType(): Boolean = impl.returnType != null + override val typeReference: TypeReference? + get() = impl.returnType?.let { JavaTypeReference(ctx, it) } + override val receiverTypeReference: TypeReference? + get() = impl.receiverParameter?.type?.let { JavaTypeReference(ctx, it) } + + override val typeParameters: List + get() = impl.typeParameters.map { JavaTypeParameter(ctx, it) } + override val typeParameterList: TypeParameterList + get() = + object : TypeParameterList { + override val parameters: List = this@JavaMethod.typeParameters + } + + override val valueParameters: List + get() = impl.parameters.map { JavaParameter(ctx, it, this) } + override val valueParameterList: ParameterList + get() = + object : ParameterList { + override val parameters: List = this@JavaMethod.valueParameters + override val ownerFunction: DeclarationWithBody = this@JavaMethod + } + + // not available in Java + override val typeConstraints: List = emptyList() + override val typeConstraintList: TypeConstraintList? = null +} + +public class JavaConstructor(private val ctx: AnalysisContext, impl: MethodTree) : + SecondaryConstructor, JavaMethod(ctx, impl) { + + private val element: ExecutableElement = ctx.resolver.resolve(impl) as ExecutableElement + + init { + require(element.kind == ElementKind.CONSTRUCTOR) + } + + // yep, very unsafe, but we assume everything works smoothly + override fun getContainingClassOrObject(): ClassOrObject = + ctx.resolver.tree(element.enclosingClass!!)!!.model(ctx) + + override fun getDelegationCall(): ConstructorDelegationCall? = null +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable.kt new file mode 100644 index 000000000..693f27f6c --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable.kt @@ -0,0 +1,80 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.java.ast.modelCautious +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.VariableDeclaration +import com.sun.source.tree.VariableTree +import javax.lang.model.element.Modifier + +public open class JavaParameterOrVariable( + private val ctx: AnalysisContext, + private val impl: VariableTree +) : CallableDeclaration, JavaElement(ctx, impl) { + override val text: String + get() = name + + override val parents: List + get() = ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } + override val name: String + get() = impl.name.toString() + override val nameAsSafeName: Name + get() = Name(name) + override val fqName: FqName + get() = FqName(impl.fqName(ctx)) + override val nameAsName: Name + get() = nameAsSafeName + + override val typeReference: TypeReference? + get() = impl.type.model(ctx) + override val receiverTypeReference: TypeReference? = null + override val valueParameters: List = emptyList() + override val valueParameterList: ParameterList? = null + override val typeParameters: List = emptyList() + override val typeParameterList: TypeParameterList? = null + override val typeConstraints: List = emptyList() + override val typeConstraintList: TypeConstraintList? = null +} + +public class JavaVariable(private val ctx: AnalysisContext, private val impl: VariableTree) : + VariableDeclaration, JavaParameterOrVariable(ctx, impl) { + override val isVar: Boolean + get() = !impl.modifiers.flags.contains(Modifier.FINAL) + override val initializer: Expression? + get() = impl.initializer?.model(ctx) + override fun hasInitializer(): Boolean = impl.initializer != null +} + +public class JavaParameter( + private val ctx: AnalysisContext, + private val impl: VariableTree, + public override val ownerFunction: DeclarationWithBody? +) : Parameter, JavaParameterOrVariable(ctx, impl) { + override fun hasDefaultValue(): Boolean = impl.initializer != null + override val defaultValue: Expression? + get() = impl.initializer?.model(ctx) + + override val isMutable: Boolean = false + override val isVarArg: Boolean = false + override fun hasValOrVar(): Boolean = false + override val isLoopParameter: Boolean = false + override val isCatchParameter: Boolean = false + + override val destructuringDeclaration: DestructuringDeclaration? = null +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized.kt new file mode 100644 index 000000000..d2d12a38c --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized.kt @@ -0,0 +1,17 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParenthesizedExpression +import com.sun.source.tree.ParenthesizedTree + +public class JavaParenthesized( + private val ctx: AnalysisContext, + private val impl: ParenthesizedTree +) : ParenthesizedExpression, JavaElement(ctx, impl) { + override val expression: Expression + get() = impl.expression.model(ctx) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt new file mode 100644 index 000000000..c2e471989 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt @@ -0,0 +1,119 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import com.sun.source.tree.Tree +import com.sun.tools.javac.code.Symbol +import com.sun.tools.javac.tree.JCTree + +public class JavaResolvedCall( + private val ctx: AnalysisContext, + private val whole: Tree, + private val method: Symbol, + private val receiver: Tree?, + private val typeArgs: List, + private val arguments: List +) : ResolvedCall { + + override val callElement: Element + get() = whole.model(ctx) + + override fun getReceiverExpression(): JavaElement? = receiver?.model(ctx) + override val dispatchReceiver: ReceiverValue? + get() = + getReceiverExpression()?.let { + object : ReceiverValue { + override val type: Type = it.type()!! + override val isClassReceiver: Boolean + get() = false // TODO check later + } + } + // there are no extension receivers in Java + override val extensionReceiver: ReceiverValue? = null + + override val resultingDescriptor: CallableDescriptor + get() = method.model(ctx) + override fun getReturnType(): Type = whole.model(ctx).type()!! + + override val typeArguments: Map + get() = + resultingDescriptor + .typeParameters + .zip(typeArgs) + .map { (descr, tree) -> descr to ctx.resolver.resolveType(tree)!!.model(ctx) } + .toMap() + override val valueArguments: Map + get() = + resultingDescriptor + .valueParameters + .zip(arguments) + .map { (descr, tree) -> + descr to + when (tree) { + null -> JavaDefaultValueArgument(descr) + else -> JavaExpressionValueArgument(ctx, tree, descr) + } + } + .toMap() +} + +public fun Tree.resolvedCall( + ctx: AnalysisContext, + additionalTypeArgs: List = emptyList(), + additionalArgs: List = emptyList() +): JavaResolvedCall? = + when (this) { + is JCTree.JCMethodInvocation -> // look inside + this.meth?.resolvedCall(ctx, additionalTypeArgs + typeArguments, additionalArgs + arguments) + is JCTree.JCOperatorExpression -> + operator.perform { + JavaResolvedCall( + ctx, + this, + it, + null, + additionalTypeArgs, + additionalArgs + argumentsFromEverywhere + ) + } + is JCTree.JCMemberReference -> + sym.perform { + JavaResolvedCall( + ctx, + this, + it, + qualifierExpression, + additionalTypeArgs + typeArguments, + additionalArgs + ) + } + is JCTree.JCNewClass -> + constructor.perform { + JavaResolvedCall( + ctx, + this, + it, + null, + additionalTypeArgs + typeArguments, + additionalArgs + arguments + ) + } + is JCTree.JCFieldAccess -> + sym.perform { JavaResolvedCall(ctx, this, it, selected, additionalTypeArgs, additionalArgs) } + is JCTree.JCIdent -> + sym.perform { JavaResolvedCall(ctx, this, it, null, additionalTypeArgs, additionalArgs) } + else -> null + } + +private fun Symbol?.perform(f: (Symbol) -> JavaResolvedCall) = + this?.takeIf { it !is Symbol.TypeSymbol }?.let { f(it) } diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedValueArgument.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedValueArgument.kt new file mode 100644 index 000000000..5964e3541 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedValueArgument.kt @@ -0,0 +1,54 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DefaultValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ExpressionValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName +import com.sun.source.tree.Tree + +public class JavaExpressionValueArgument( + private val ctx: AnalysisContext, + private val impl: Tree, + private val descr: ValueParameterDescriptor +) : ExpressionValueArgument { + override val valueArgument: ValueArgument + get() = JavaValueArgument(impl.model(ctx), descr) + override val arguments: List + get() = listOf(valueArgument) +} + +public class JavaDefaultValueArgument(private val descr: ValueParameterDescriptor) : + DefaultValueArgument { + override val valueArgument: ValueArgument? + get() = descr.defaultValue?.let { JavaValueArgument(it, descr) } + override val arguments: List + get() = listOfNotNull(valueArgument) +} + +public open class JavaValueArgument( + private val impl: Expression, + private val descr: ValueParameterDescriptor +) : ValueArgument { + override val argumentExpression: Expression + get() = impl + override fun getArgumentName(): ValueArgumentName = JavaValueArgumentName(descr) + + override fun isNamed(): Boolean = false + override fun isExternal(): Boolean = false + override val isSpread: Boolean = false +} + +public class JavaValueArgumentName(private val descr: ValueParameterDescriptor) : + ValueArgumentName { + override val asName: Name + get() = descr.name + override val referenceExpression: SimpleNameExpression? = null +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation.kt new file mode 100644 index 000000000..144ef505a --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation.kt @@ -0,0 +1,33 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation +import com.sun.source.tree.CompilationUnitTree + +public class JavaSourceLocation( + private val unit: CompilationUnitTree, + private val startPos: Long, + private val endPos: Long +) : CompilerMessageSourceLocation { + override val column: Int + get() = unit.lineMap.getColumnNumber(startPos).toInt() + override val columnEnd: Int + get() = unit.lineMap.getColumnNumber(endPos).toInt() + override val line: Int + get() = unit.lineMap.getLineNumber(startPos).toInt() + override val lineEnd: Int + get() = unit.lineMap.getLineNumber(endPos).toInt() + override val lineContent: String? + get() = null + override val path: String + get() = unit.sourceFile.toUri().path + + public companion object { + public operator fun invoke( + unit: CompilationUnitTree?, + startPos: Long, + endPos: Long + ): JavaSourceLocation? = unit?.let { JavaSourceLocation(it, startPos, endPos) } + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized.kt new file mode 100644 index 000000000..cac8ee9cb --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized.kt @@ -0,0 +1,20 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SynchronizedExpression +import com.sun.source.tree.SynchronizedTree + +public class JavaSynchronized( + private val ctx: AnalysisContext, + private val impl: SynchronizedTree +) : SynchronizedExpression, JavaElement(ctx, impl) { + override val subject: Expression + get() = impl.expression.model(ctx) + override val block: BlockExpression + get() = impl.block.model(ctx) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtils.kt new file mode 100644 index 000000000..000950974 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtils.kt @@ -0,0 +1,436 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import com.sun.source.tree.AnnotatedTypeTree +import com.sun.source.tree.AnnotationTree +import com.sun.source.tree.ArrayAccessTree +import com.sun.source.tree.ArrayTypeTree +import com.sun.source.tree.AssertTree +import com.sun.source.tree.AssignmentTree +import com.sun.source.tree.BinaryTree +import com.sun.source.tree.BlockTree +import com.sun.source.tree.BreakTree +import com.sun.source.tree.CaseTree +import com.sun.source.tree.CatchTree +import com.sun.source.tree.ClassTree +import com.sun.source.tree.CompilationUnitTree +import com.sun.source.tree.CompoundAssignmentTree +import com.sun.source.tree.ConditionalExpressionTree +import com.sun.source.tree.ContinueTree +import com.sun.source.tree.DoWhileLoopTree +import com.sun.source.tree.EmptyStatementTree +import com.sun.source.tree.EnhancedForLoopTree +import com.sun.source.tree.ErroneousTree +import com.sun.source.tree.ExportsTree +import com.sun.source.tree.ExpressionStatementTree +import com.sun.source.tree.ForLoopTree +import com.sun.source.tree.IdentifierTree +import com.sun.source.tree.IfTree +import com.sun.source.tree.ImportTree +import com.sun.source.tree.InstanceOfTree +import com.sun.source.tree.IntersectionTypeTree +import com.sun.source.tree.LabeledStatementTree +import com.sun.source.tree.LambdaExpressionTree +import com.sun.source.tree.LiteralTree +import com.sun.source.tree.MemberReferenceTree +import com.sun.source.tree.MemberSelectTree +import com.sun.source.tree.MethodInvocationTree +import com.sun.source.tree.MethodTree +import com.sun.source.tree.ModifiersTree +import com.sun.source.tree.ModuleTree +import com.sun.source.tree.NewArrayTree +import com.sun.source.tree.NewClassTree +import com.sun.source.tree.OpensTree +import com.sun.source.tree.PackageTree +import com.sun.source.tree.ParameterizedTypeTree +import com.sun.source.tree.ParenthesizedTree +import com.sun.source.tree.PrimitiveTypeTree +import com.sun.source.tree.ProvidesTree +import com.sun.source.tree.RequiresTree +import com.sun.source.tree.ReturnTree +import com.sun.source.tree.SwitchTree +import com.sun.source.tree.SynchronizedTree +import com.sun.source.tree.ThrowTree +import com.sun.source.tree.Tree +import com.sun.source.tree.TreeVisitor +import com.sun.source.tree.TryTree +import com.sun.source.tree.TypeCastTree +import com.sun.source.tree.TypeParameterTree +import com.sun.source.tree.UnaryTree +import com.sun.source.tree.UnionTypeTree +import com.sun.source.tree.UsesTree +import com.sun.source.tree.VariableTree +import com.sun.source.tree.WhileLoopTree +import com.sun.source.tree.WildcardTree +import com.sun.source.util.SimpleTreeVisitor + +public typealias OurTreeVisitor = SimpleTreeVisitor + +public fun Tree.visit(visitor: OurTreeVisitor): R = this.accept(visitor, Unit) + +public fun

Tree.visitRecursively(visitor: TreeVisitor, value: P): Unit = + this.accept(RecursiveTreeVisitor(visitor), value) + +public fun Tree.visitRecursively(visitor: TreeVisitor): Unit = + this.accept(RecursiveTreeVisitor(visitor), Unit) + +public fun Tree?.accept(visitor: TreeVisitor, value: P): R? = + this?.accept(visitor, value) + +public fun Iterable.accept(visitor: TreeVisitor, value: P): List = + this.map { it.accept(visitor, value) } + +public class RecursiveTreeVisitor

(private val underlying: TreeVisitor) : + SimpleTreeVisitor(Unit) { + override fun visitAnnotatedType(node: AnnotatedTypeTree?, p: P) { + node?.annotations?.accept(this, p) + underlying.visitAnnotatedType(node, p) + } + + override fun visitAnnotation(node: AnnotationTree?, p: P) { + node?.annotationType?.accept(this, p) + node?.arguments?.accept(this, p) + underlying.visitAnnotation(node, p) + } + + override fun visitMethodInvocation(node: MethodInvocationTree?, p: P) { + node?.typeArguments?.accept(this, p) + node?.methodSelect?.accept(this, p) + node?.arguments?.accept(this, p) + underlying.visitMethodInvocation(node, p) + } + + override fun visitAssert(node: AssertTree?, p: P) { + node?.condition?.accept(this, p) + node?.detail?.accept(this, p) + underlying.visitAssert(node, p) + } + + override fun visitAssignment(node: AssignmentTree?, p: P) { + node?.variable?.accept(this, p) + node?.expression?.accept(this, p) + underlying.visitAssignment(node, p) + } + + override fun visitCompoundAssignment(node: CompoundAssignmentTree?, p: P) { + node?.variable?.accept(this, p) + node?.expression?.accept(this, p) + underlying.visitCompoundAssignment(node, p) + } + + override fun visitBinary(node: BinaryTree?, p: P) { + node?.leftOperand?.accept(this, p) + node?.rightOperand?.accept(this, p) + underlying.visitBinary(node, p) + } + + override fun visitBlock(node: BlockTree?, p: P) { + node?.statements?.accept(this, p) + underlying.visitBlock(node, p) + } + + override fun visitBreak(node: BreakTree?, p: P) { + underlying.visitBreak(node, p) + } + + override fun visitCase(node: CaseTree?, p: P) { + node?.expression?.accept(this, p) + node?.statements?.accept(this, p) + underlying.visitCase(node, p) + } + + override fun visitCatch(node: CatchTree?, p: P) { + node?.parameter?.accept(this, p) + node?.block?.accept(this, p) + underlying.visitCatch(node, p) + } + + override fun visitClass(node: ClassTree?, p: P) { + node?.modifiers?.accept(this, p) + node?.typeParameters?.accept(this, p) + node?.extendsClause?.accept(this, p) + node?.implementsClause?.accept(this, p) + node?.members?.accept(this, p) + underlying.visitClass(node, p) + } + + override fun visitConditionalExpression(node: ConditionalExpressionTree?, p: P) { + node?.condition?.accept(this, p) + node?.trueExpression?.accept(this, p) + node?.falseExpression?.accept(this, p) + underlying.visitConditionalExpression(node, p) + } + + override fun visitContinue(node: ContinueTree?, p: P) { + underlying.visitContinue(node, p) + } + + override fun visitDoWhileLoop(node: DoWhileLoopTree?, p: P) { + node?.condition?.accept(this, p) + node?.statement?.accept(this, p) + underlying.visitDoWhileLoop(node, p) + } + + override fun visitErroneous(node: ErroneousTree?, p: P) { + node?.errorTrees?.accept(this, p) + underlying.visitErroneous(node, p) + } + + override fun visitExpressionStatement(node: ExpressionStatementTree?, p: P) { + node?.expression?.accept(this, p) + underlying.visitExpressionStatement(node, p) + } + + override fun visitEnhancedForLoop(node: EnhancedForLoopTree?, p: P) { + node?.variable?.accept(this, p) + node?.expression?.accept(this, p) + node?.statement?.accept(this, p) + underlying.visitEnhancedForLoop(node, p) + } + + override fun visitForLoop(node: ForLoopTree?, p: P) { + node?.initializer?.accept(this, p) + node?.condition?.accept(this, p) + node?.update?.accept(this, p) + node?.statement?.accept(this, p) + underlying.visitForLoop(node, p) + } + + override fun visitIdentifier(node: IdentifierTree?, p: P) { + underlying.visitIdentifier(node, p) + } + + override fun visitIf(node: IfTree?, p: P) { + node?.condition?.accept(this, p) + node?.thenStatement?.accept(this, p) + node?.elseStatement?.accept(this, p) + underlying.visitIf(node, p) + } + + override fun visitImport(node: ImportTree?, p: P) { + node?.qualifiedIdentifier?.accept(this, p) + underlying.visitImport(node, p) + } + + override fun visitArrayAccess(node: ArrayAccessTree?, p: P) { + node?.expression?.accept(this, p) + node?.index?.accept(this, p) + underlying.visitArrayAccess(node, p) + } + + override fun visitLabeledStatement(node: LabeledStatementTree?, p: P) { + node?.statement?.accept(this, p) + underlying.visitLabeledStatement(node, p) + } + + override fun visitLiteral(node: LiteralTree?, p: P) { + underlying.visitLiteral(node, p) + } + + override fun visitMethod(node: MethodTree?, p: P) { + node?.modifiers?.accept(this, p) + node?.returnType?.accept(this, p) + node?.typeParameters?.accept(this, p) + node?.parameters?.accept(this, p) + node?.throws?.accept(this, p) + node?.body?.accept(this, p) + underlying.visitMethod(node, p) + } + + override fun visitModifiers(node: ModifiersTree?, p: P) { + node?.annotations?.accept(this, p) + underlying.visitModifiers(node, p) + } + + override fun visitNewArray(node: NewArrayTree?, p: P) { + node?.dimensions?.accept(this, p) + node?.initializers?.accept(this, p) + node?.annotations?.accept(this, p) + node?.dimAnnotations?.forEach { it.accept(this, p) } + underlying.visitNewArray(node, p) + } + + override fun visitNewClass(node: NewClassTree?, p: P) { + node?.typeArguments?.accept(this, p) + node?.identifier?.accept(this, p) + node?.arguments?.accept(this, p) + node?.classBody?.accept(this, p) + underlying.visitNewClass(node, p) + } + + override fun visitLambdaExpression(node: LambdaExpressionTree?, p: P) { + node?.parameters?.accept(this, p) + node?.body?.accept(this, p) + underlying.visitLambdaExpression(node, p) + } + + override fun visitPackage(node: PackageTree?, p: P) { + node?.annotations?.accept(this, p) + node?.packageName?.accept(this, p) + underlying.visitPackage(node, p) + } + + override fun visitParenthesized(node: ParenthesizedTree?, p: P) { + node?.expression?.accept(this, p) + underlying.visitParenthesized(node, p) + } + + override fun visitReturn(node: ReturnTree?, p: P) { + node?.expression?.accept(this, p) + underlying.visitReturn(node, p) + } + + override fun visitMemberSelect(node: MemberSelectTree?, p: P) { + node?.expression?.accept(this, p) + underlying.visitMemberSelect(node, p) + } + + override fun visitMemberReference(node: MemberReferenceTree?, p: P) { + node?.qualifierExpression?.accept(this, p) + node?.typeArguments?.accept(this, p) + underlying.visitMemberReference(node, p) + } + + override fun visitEmptyStatement(node: EmptyStatementTree?, p: P) { + underlying.visitEmptyStatement(node, p) + } + + override fun visitSwitch(node: SwitchTree?, p: P) { + node?.expression?.accept(this, p) + node?.cases?.accept(this, p) + underlying.visitSwitch(node, p) + } + + override fun visitSynchronized(node: SynchronizedTree?, p: P) { + node?.expression?.accept(this, p) + node?.block?.accept(this, p) + underlying.visitSynchronized(node, p) + } + + override fun visitThrow(node: ThrowTree?, p: P) { + node?.expression?.accept(this, p) + underlying.visitThrow(node, p) + } + + override fun visitCompilationUnit(node: CompilationUnitTree?, p: P) { + node?.packageAnnotations?.accept(this, p) + node?.`package`?.accept(this, p) + node?.imports?.accept(this, p) + node?.typeDecls?.accept(this, p) + underlying.visitCompilationUnit(node, p) + } + + override fun visitTry(node: TryTree?, p: P) { + node?.block?.accept(this, p) + node?.catches?.accept(this, p) + node?.finallyBlock?.accept(this, p) + node?.resources?.accept(this, p) + underlying.visitTry(node, p) + } + + override fun visitParameterizedType(node: ParameterizedTypeTree?, p: P) { + node?.type?.accept(this, p) + node?.typeArguments?.accept(this, p) + underlying.visitParameterizedType(node, p) + } + + override fun visitUnionType(node: UnionTypeTree?, p: P) { + node?.typeAlternatives?.accept(this, p) + underlying.visitUnionType(node, p) + } + + override fun visitIntersectionType(node: IntersectionTypeTree?, p: P) { + node?.bounds?.accept(this, p) + underlying.visitIntersectionType(node, p) + } + + override fun visitArrayType(node: ArrayTypeTree?, p: P) { + node?.type?.accept(this, p) + underlying.visitArrayType(node, p) + } + + override fun visitTypeCast(node: TypeCastTree?, p: P) { + node?.expression?.accept(this, p) + node?.type?.accept(this, p) + underlying.visitTypeCast(node, p) + } + + override fun visitPrimitiveType(node: PrimitiveTypeTree?, p: P) { + underlying.visitPrimitiveType(node, p) + } + + override fun visitTypeParameter(node: TypeParameterTree?, p: P) { + node?.bounds?.accept(this, p) + underlying.visitTypeParameter(node, p) + } + + override fun visitInstanceOf(node: InstanceOfTree?, p: P) { + node?.expression?.accept(this, p) + node?.type?.accept(this, p) + underlying.visitInstanceOf(node, p) + } + + override fun visitUnary(node: UnaryTree?, p: P) { + node?.expression?.accept(this, p) + underlying.visitUnary(node, p) + } + + override fun visitVariable(node: VariableTree?, p: P) { + node?.modifiers?.accept(this, p) + node?.nameExpression?.accept(this, p) + node?.type?.accept(this, p) + node?.initializer?.accept(this, p) + underlying.visitVariable(node, p) + } + + override fun visitWhileLoop(node: WhileLoopTree?, p: P) { + node?.condition?.accept(this, p) + node?.statement?.accept(this, p) + underlying.visitWhileLoop(node, p) + } + + override fun visitWildcard(node: WildcardTree?, p: P) { + node?.bound?.accept(this, p) + underlying.visitWildcard(node, p) + } + + override fun visitModule(node: ModuleTree?, p: P) { + node?.annotations?.accept(this, p) + node?.name?.accept(this, p) + node?.directives?.accept(this, p) + underlying.visitModule(node, p) + } + + override fun visitExports(node: ExportsTree?, p: P) { + node?.packageName?.accept(this, p) + node?.moduleNames?.accept(this, p) + underlying.visitExports(node, p) + } + + override fun visitOpens(node: OpensTree?, p: P) { + node?.packageName?.accept(this, p) + node?.moduleNames?.accept(this, p) + underlying.visitOpens(node, p) + } + + override fun visitProvides(node: ProvidesTree?, p: P) { + node?.serviceName?.accept(this, p) + node?.implementationNames?.accept(this, p) + underlying.visitProvides(node, p) + } + + override fun visitRequires(node: RequiresTree?, p: P) { + node?.moduleName?.accept(this, p) + underlying.visitRequires(node, p) + } + + override fun visitUses(node: UsesTree?, p: P) { + node?.serviceName?.accept(this, p) + underlying.visitUses(node, p) + } + + override fun visitOther(node: Tree?, p: P) { + underlying.visitOther(node, p) + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElements.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElements.kt new file mode 100644 index 000000000..43e8b2e52 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElements.kt @@ -0,0 +1,49 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeElement +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import com.sun.source.tree.ArrayTypeTree +import com.sun.source.tree.ParameterizedTypeTree +import com.sun.source.tree.Tree + +public class JavaTypeReference +private constructor(private val ctx: AnalysisContext, private val impl: Tree) : + TypeReference, JavaElement(ctx, impl) { + override val typeElement: TypeElement + get() = JavaTypeElement(ctx, impl) + + public val underlyingTree: Tree + get() = impl + + public companion object { + public operator fun invoke(ctx: AnalysisContext, impl: Tree): JavaTypeReference? = + when (impl.kind) { + Tree.Kind.ARRAY_TYPE, + Tree.Kind.PARAMETERIZED_TYPE, + Tree.Kind.TYPE_PARAMETER, + Tree.Kind.PRIMITIVE_TYPE, + Tree.Kind.ANNOTATED_TYPE, + Tree.Kind.ANNOTATION_TYPE, + Tree.Kind.UNION_TYPE, + Tree.Kind.INTERSECTION_TYPE, + Tree.Kind.EXTENDS_WILDCARD, + Tree.Kind.SUPER_WILDCARD, + Tree.Kind.UNBOUNDED_WILDCARD -> JavaTypeReference(ctx, impl) + else -> null + } + } +} + +public class JavaTypeElement(private val ctx: AnalysisContext, private val impl: Tree) : + TypeElement, JavaElement(ctx, impl) { + override val typeArgumentsAsTypes: List + get() = + when (impl) { + is ArrayTypeTree -> listOfNotNull(JavaTypeReference(ctx, impl.type)) + is ParameterizedTypeTree -> impl.typeArguments.mapNotNull { JavaTypeReference(ctx, it) } + else -> emptyList() + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter.kt new file mode 100644 index 000000000..88f02a1e3 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter.kt @@ -0,0 +1,19 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance +import com.sun.source.tree.TypeParameterTree + +public class JavaTypeParameter( + private val ctx: AnalysisContext, + private val impl: TypeParameterTree +) : TypeParameter { + override val variance: Variance = Variance.Invariant + override val extendsBounds: List + get() = impl.bounds.map { it.model(ctx) } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection.kt new file mode 100644 index 000000000..33a5bb940 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection.kt @@ -0,0 +1,22 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.elements + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ProjectionKind +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import com.sun.source.tree.Tree + +public class JavaTypeProjection(private val ctx: AnalysisContext, private val impl: Tree) : + TypeProjection { + override val projectionKind: ProjectionKind = + when (impl.kind) { + Tree.Kind.EXTENDS_WILDCARD -> ProjectionKind.OUT + Tree.Kind.SUPER_WILDCARD -> ProjectionKind.IN + Tree.Kind.UNBOUNDED_WILDCARD -> ProjectionKind.STAR + else -> ProjectionKind.NONE + } + override val typeReference: TypeReference? + get() = JavaTypeReference(ctx, impl) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaType.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaType.kt new file mode 100644 index 000000000..478b51f31 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaType.kt @@ -0,0 +1,69 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.types + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.TypeProjection +import javax.lang.model.type.ArrayType +import javax.lang.model.type.DeclaredType +import javax.lang.model.type.TypeMirror +import javax.lang.model.type.TypeVariable + +public class JavaType(private val ctx: AnalysisContext, internal val ty: TypeMirror) : Type { + override val descriptor: ClassDescriptor? + get() = + ty.visit( + object : OurTypeVisitor(null) { + override fun visitDeclared(t: DeclaredType?, p: Unit?): ClassDescriptor? = + t?.asElement()?.model(ctx) + } + ) + + override fun isNullable(): Boolean = false + override val unwrappedNotNullableType: Type = this + override val isMarkedNullable: Boolean = false + + override val arguments: List + get() = + ty.visit( + object : OurTypeVisitor>(emptyList()) { + override fun visitArray(t: ArrayType?, p: Unit?): List = + listOfNotNull(t?.componentType).map { JavaTypeProjection(ctx, it) } + override fun visitDeclared(t: DeclaredType?, p: Unit?): List = + t?.typeArguments?.map { JavaTypeProjection(ctx, it) }.orEmpty() + } + ) + + private fun isEqualTo(other: TypeMirror): Boolean = ctx.types.isSameType(ty, other) + + override fun isBoolean(): Boolean = isEqualTo(ctx.symbolTable.booleanType) + override fun isInt(): Boolean = isEqualTo(ctx.symbolTable.intType) + override fun isLong(): Boolean = isEqualTo(ctx.symbolTable.longType) + override fun isFloat(): Boolean = isEqualTo(ctx.symbolTable.floatType) + override fun isDouble(): Boolean = isEqualTo(ctx.symbolTable.doubleType) + override fun isByte(): Boolean = isEqualTo(ctx.symbolTable.byteType) + override fun isShort(): Boolean = isEqualTo(ctx.symbolTable.shortType) + override fun isUnsignedNumberType(): Boolean = false // TODO + override fun isChar(): Boolean = isEqualTo(ctx.symbolTable.charType) + override fun isString(): Boolean = isEqualTo(ctx.symbolTable.stringType) + override fun isAnyOrNullableAny(): Boolean = isEqualTo(ctx.symbolTable.objectType) + + override fun isSubtypeOf(other: Type): Boolean { + if (other !is JavaType) return false + return ctx.types.isSubtype(ty, other.ty) + } + override fun isEqualTo(other: Type): Boolean { + if (other !is JavaType) return false + return ctx.types.isSameType(ty, other.ty) + } + + override fun isTypeParameter(): Boolean = + ty.visit( + object : OurTypeVisitor(false) { + override fun visitTypeVariable(t: TypeVariable?, p: Unit?): Boolean = true + } + ) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor.kt new file mode 100644 index 000000000..9bb77272f --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor.kt @@ -0,0 +1,29 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.types + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import javax.lang.model.element.Modifier +import javax.lang.model.element.TypeElement +import javax.lang.model.type.TypeKind + +public class JavaTypeConstructor(private val ctx: AnalysisContext, private val impl: TypeElement) : + TypeConstructor { + override val parameters: List + get() = impl.typeParameters.map { it.model(ctx) } + override val supertypes: Collection + get() = + (listOfNotNull(impl.superclass.takeIf { it.kind != TypeKind.NONE }) + impl.interfaces).map { + it.model(ctx) + } + override val isFinal: Boolean + get() = impl.modifiers.contains(Modifier.FINAL) + override val isDenotable: Boolean = true + override val declarationDescriptor: ClassifierDescriptor + get() = impl.model(ctx) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor.kt new file mode 100644 index 000000000..9a0d46b11 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor.kt @@ -0,0 +1,26 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.types + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.java.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import javax.lang.model.element.Modifier +import javax.lang.model.element.TypeParameterElement + +public class JavaTypeParameterConstructor( + private val ctx: AnalysisContext, + private val impl: TypeParameterElement +) : TypeConstructor { + override val parameters: List = emptyList() + override val supertypes: Collection + get() = impl.bounds.map { it.model(ctx) } + override val isFinal: Boolean + get() = impl.modifiers.contains(Modifier.FINAL) + override val isDenotable: Boolean = true + override val declarationDescriptor: ClassifierDescriptor + get() = impl.model(ctx) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection.kt new file mode 100644 index 000000000..2e7306efd --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection.kt @@ -0,0 +1,24 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.types + +import arrow.meta.plugins.analysis.java.AnalysisContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.TypeProjection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance +import javax.lang.model.type.TypeMirror +import javax.lang.model.type.WildcardType + +public class JavaTypeProjection(private val ctx: AnalysisContext, private val ty: TypeMirror) : + TypeProjection { + override val projectionKind: Variance = Variance.Invariant + override val type: Type + get() = JavaType(ctx, ty) + override val isStarProjection: Boolean + get() = + ty.visit( + object : OurTypeVisitor(false) { + override fun visitWildcard(t: WildcardType?, p: Unit?): Boolean = true + } + ) +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtils.kt new file mode 100644 index 000000000..bb15ac345 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtils.kt @@ -0,0 +1,14 @@ +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") + +package arrow.meta.plugins.analysis.java.ast.types + +import arrow.meta.plugins.analysis.java.AnalysisContext +import javax.lang.model.type.TypeMirror +import javax.lang.model.util.SimpleTypeVisitor9 + +public typealias OurTypeVisitor = SimpleTypeVisitor9 + +public fun TypeMirror.visit(visitor: OurTypeVisitor): R = this.accept(visitor, Unit) + +public fun TypeMirror.allSupertypes(ctx: AnalysisContext): Set = + ctx.types.directSupertypes(this).flatMap { setOf(it) + it.allSupertypes(ctx) }.toSet() diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/com.sun.source.util.Plugin b/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/com.sun.source.util.Plugin new file mode 100644 index 000000000..36566bf14 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/com.sun.source.util.Plugin @@ -0,0 +1 @@ +arrow.meta.plugins.analysis.java.AnalysisJavaPlugin \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/javax.annotation.processing.Processor new file mode 100644 index 000000000..5bd1670d0 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/javax.annotation.processing.Processor @@ -0,0 +1 @@ +arrow.meta.plugins.analysis.java.AnalysisJavaProcessor \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/AnalysisTests.kt b/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/AnalysisTests.kt new file mode 100644 index 000000000..50684e009 --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/AnalysisTests.kt @@ -0,0 +1,307 @@ +package arrow.meta.plugins.analysis.java + +import org.junit.jupiter.api.Test + +class AnalysisTests { + + @Test + fun `first test, ok`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Example { + public int f(int x) { + pre(x > 0, () -> "x must be positive"); + return post(x + 1, (r) -> r > 0, () -> "result is positive"); + } + } + """( + withPlugin = { succeeded() }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `first test, ok, using assert`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Example { + public int f(int x) { + assert x > 0 : "x must be positive"; + return post(x + 1, (r) -> r > 0, () -> "result is positive"); + } + } + """( + withPlugin = { succeeded() }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `first test, fails`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Example { + public int f(int x) { + pre(x > 0, () -> "x must be positive"); + return post(x - 1, (r) -> r > 0, () -> "result is positive"); + } + } + """( + withPlugin = { + failed() + hadErrorContaining("fails to satisfy the post-condition") + }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `first test, post at beginning, fails`() { + """ + import arrow.analysis.RefinementDSLKt; + import static arrow.analysis.RefinementDSLKt.*; + + final class Example { + public int f(int x) { + pre(x > 0, () -> "x must be positive"); + post((Integer r) -> r > 0, () -> "result is positive"); + return x - 1; + } + } + """( + withPlugin = { + failed() + hadErrorContaining("fails to satisfy the post-condition") + }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `ternary conditional`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Example { + public int f(int x) { + pre(x > 0, () -> "x must be positive"); + final int y = (x > 2) ? x + 1 : x - 1; + return post(y, (r) -> r > 0, () -> "result is positive"); + } + } + """( + withPlugin = { + failed() + hadErrorContaining("fails to satisfy the post-condition") + }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `conditional, post at beginning, ok`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Example { + public int f(int x) { + pre(x > 0, () -> "x must be positive"); + post((Integer r) -> r > 0, () -> "result is positive"); + if (x > 2) { + return x + 1; + } else { + return x + 2; + } + } + } + """( + withPlugin = { succeeded() }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `conditional, post at beginning, fail`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Example { + public int f(int x) { + pre(x > 0, () -> "x must be positive"); + post((Integer r) -> r > 0, () -> "result is positive"); + if (x > 2) { + return x + 1; + } else { + return x - 1; + } + } + } + """( + withPlugin = { + failed() + hadErrorContaining("fails to satisfy the post-condition") + }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `class invariant`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Positive { + + private final int n; + public int getValue() { + return n; + } + + public Positive(int value) { + pre(value >= 0, () -> "value is positive"); + this.n = value; + } + + { + post((Positive r) -> r.getValue() >= 0, () -> "result is positive"); + } + } + """( + withPlugin = { succeeded() }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `class invariant, wrong`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Positive { + + private int n; + public int getValue() { + return n; + } + + public Positive(int value) { + pre(value >= 0, () -> "value is positive"); + this.n = value; + } + + static void main() { + Positive x = new Positive(-1); + } + } + """( + withPlugin = { + failed() + hadErrorContaining("pre-condition `value is positive` is not satisfied") + }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `class invariant, on methods, ok`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Positive { + + private final int n; + public int getValue() { + return n; + } + + public Positive(int value) { + pre(value >= 0, () -> "value is positive"); + this.n = value; + } + + { + post((Positive r) -> r.getValue() >= 0, () -> "result is positive"); + } + + public Positive add(Positive other) { + return new Positive(this.getValue() + other.getValue()); + } + } + """( + withPlugin = { succeeded() }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `class invariant, on methods, wrong`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Positive { + + private final int n; + public int getValue() { + return n; + } + + public Positive(int value) { + pre(value >= 0, () -> "value is positive"); + this.n = value; + } + + { + post((Positive r) -> r.getValue() >= 0, () -> "result is positive"); + } + + public Positive subtract(Positive other) { + return new Positive(this.getValue() - other.getValue()); + } + } + """( + withPlugin = { + failed() + hadErrorContaining("pre-condition `value is positive` is not satisfied") + }, + withoutPlugin = { succeeded() } + ) + } + + @Test + fun `class invariant with assert, on methods, wrong`() { + """ + import static arrow.analysis.RefinementDSLKt.*; + + final class Positive { + + private final int n; + + public Positive(int value) { + pre(value >= 0, () -> "value is positive"); + this.n = value; + } + + public int getValue() { + return n; + } + + { + assert this.getValue() >= 0 : "result is positive"; + } + + public Positive subtract(Positive other) { + return new Positive(this.getValue() - other.getValue()); + } + } + """( + withPlugin = { + failed() + hadErrorContaining("pre-condition `result is positive` is not satisfied") + }, + withoutPlugin = { succeeded() } + ) + } +} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/Utils.kt b/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/Utils.kt new file mode 100644 index 000000000..a2075c34b --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/Utils.kt @@ -0,0 +1,46 @@ +package arrow.meta.plugins.analysis.java + +import com.google.testing.compile.CompilationSubject +import com.google.testing.compile.CompilationSubject.assertThat +import com.google.testing.compile.Compiler +import com.google.testing.compile.JavaFileObjects + +public operator fun String.invoke( + withPlugin: CompilationSubject.() -> Unit, + withoutPlugin: CompilationSubject.() -> Unit +) = ("Example" to this)(withPlugin, withoutPlugin) + +public operator fun Pair.invoke( + withPlugin: CompilationSubject.() -> Unit, + withoutPlugin: CompilationSubject.() -> Unit +) = mapOf(this)(withPlugin, withoutPlugin) + +public operator fun Map.invoke( + withPlugin: CompilationSubject.() -> Unit, + withoutPlugin: CompilationSubject.() -> Unit +) { + worker(config = { withOptions("-parameters") }, files = this, check = withoutPlugin) + worker( + config = { + withOptions( + "-parameters", + "-Xplugin:" + + AnalysisJavaPlugin.NAME + + " generatedSrcOutputDir=${System.getProperty("arrow.meta.generate.source.dir")}" + ) + .withProcessors(AnalysisJavaProcessor()) + }, + files = this, + check = withPlugin + ) +} + +private fun worker( + config: Compiler.() -> Compiler = { this }, + files: Map, + check: CompilationSubject.() -> Unit +): Unit { + val compiler = Compiler.javac().config() + val compilation = compiler.compile(files.map { (k, v) -> JavaFileObjects.forSourceString(k, v) }) + assertThat(compilation).check() +} diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts new file mode 100644 index 000000000..bca8a5353 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts @@ -0,0 +1,43 @@ +@file:Suppress("DSL_SCOPE_VIOLATION") + +plugins { + id(libs.plugins.kotlin.jvm.get().pluginId) + `java-gradle-plugin` + alias(libs.plugins.arrowGradleConfig.kotlin) + alias(libs.plugins.arrowGradleConfig.publish) +} + +version = property("projects.analysis_version").toString() + +tasks.processResources { + duplicatesStrategy = DuplicatesStrategy.WARN + filesMatching("**/analysis.plugin.properties") { + filter { it.replace("%analysisPluginVersion%", "$version") } + } +} + +dependencies { + api(projects.arrowGradlePluginCommons) + runtimeOnly(libs.classgraph) + + // Necessary during plugin execution to be found and added for compilation + api(projects.arrowMeta) + api(projects.arrowAnalysisKotlinPlugin) +} + +gradlePlugin { + plugins { + create("arrow") { + id = "io.arrow-kt.analysis.kotlin" + displayName = "Arrow Analysis Kotlin Gradle Plugin" + implementationClass = "arrow.meta.plugin.gradle.AnalysisGradlePlugin" + } + } +} + +pluginBundle { + website = "https://arrow-kt.io/docs/meta" + vcsUrl = "https://github.com/arrow-kt/arrow-meta" + description = "Functional companion to Kotlin's Compiler" + tags = listOf("kotlin", "compiler", "arrow", "plugin", "meta") +} diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/gradle.properties b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/gradle.properties new file mode 100644 index 000000000..9a9b4e467 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/gradle.properties @@ -0,0 +1,6 @@ +# Maven publishing configuration +POM_NAME=Arrow Analysis Kotlin Gradle Plugin +POM_ARTIFACT_ID=arrow-analysis-kotlin-gradle-plugin +POM_PACKAGING=jar + +pom.name=Arrow Analysis Kotlin Gradle Plugin diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt new file mode 100644 index 000000000..a13fde323 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt @@ -0,0 +1,31 @@ +package arrow.meta.plugin.gradle + +import java.util.* +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation + +public class AnalysisGradlePlugin : ArrowMetaGradlePlugin { + // get the version from the analysis.plugin.properties file + private val properties = + Properties().also { it.load(this.javaClass.getResourceAsStream("analysis.plugin.properties")) } + + override val groupId: String = "io.arrow-kt" + override val artifactId: String = "arrow-analysis-kotlin-plugin" + override val version: String = properties.getProperty("analysisPluginVersion") + override val pluginId: String = "analysis" + + override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = + // do not run on test targets + if (kotlinCompilation.compilationName.endsWith( + KotlinCompilation.TEST_COMPILATION_NAME, + ignoreCase = true + ) + ) + false + else super.isApplicable(kotlinCompilation) + + override val dependencies: List> = + listOf( + Triple(groupId, "arrow-analysis-laws", version), + Triple(groupId, "arrow-analysis-types", version), + ) +} diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.kotlin.properties b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.kotlin.properties new file mode 100644 index 000000000..59332487f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.kotlin.properties @@ -0,0 +1 @@ +implementation-class=arrow.meta.plugin.gradle.AnalysisGradlePlugin \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties new file mode 100644 index 000000000..31f336e35 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties @@ -0,0 +1 @@ +analysisPluginVersion=%analysisPluginVersion% diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts new file mode 100644 index 000000000..d4338469a --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts @@ -0,0 +1,30 @@ +@file:Suppress("DSL_SCOPE_VIOLATION") + +plugins { + id(libs.plugins.kotlin.jvm.get().pluginId) + alias(libs.plugins.arrowGradleConfig.kotlin) + alias(libs.plugins.arrowGradleConfig.publish) +} + +version = property("projects.analysis_version").toString() + +kotlin { + explicitApi = null +} + +dependencies { + compileOnly(libs.kotlin.stdlibJDK8) + implementation(projects.arrowMeta) + implementation(projects.arrowAnalysisTypes) + implementation(projects.arrowAnalysisCommon) + + testImplementation(libs.kotlin.stdlibJDK8) + testImplementation(libs.junit) + testImplementation(libs.junitEngine) + testImplementation(libs.junitPlatformLauncher) + testImplementation(projects.arrowMetaTest) + testRuntimeOnly(projects.arrowMeta) + testRuntimeOnly(projects.arrowAnalysisTypes) + testRuntimeOnly(projects.arrowAnalysisKotlinPlugin) + testRuntimeOnly(libs.arrowCore) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/gradle.properties b/arrow-libs/analysis/analysis/kotlin-plugin/gradle.properties new file mode 100644 index 000000000..b9d306502 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/gradle.properties @@ -0,0 +1,6 @@ +# Maven publishing configuration +POM_NAME=Arrow Analysis Kotlin Compiler Plugin +POM_ARTIFACT_ID=arrow-analysis-kotlin-plugin +POM_PACKAGING=jar + +pom.name=Arrow Analysis Kotlin Compiler Plugin diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm.java b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm.java new file mode 100644 index 000000000..c23775f34 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm.java @@ -0,0 +1,35 @@ +package arrow.meta.plugins.analysis.errors; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages; +import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticFactoryToRendererMap; + +import static arrow.meta.plugins.analysis.errors.MetaErrors.*; + +public class MetaDefaultErrorMessagesJvm implements DefaultErrorMessages.Extension { + + public static final MetaDefaultErrorMessagesJvm INSTANCE = new MetaDefaultErrorMessagesJvm(); + + private static final DiagnosticFactoryToRendererMap MAP = new DiagnosticFactoryToRendererMap("JVM"); + + @NotNull + @Override + public DiagnosticFactoryToRendererMap getMap() { + return MAP; + } + + static { + MAP.put(InconsistentBodyPre, "{0}", RenderString.instance); + MAP.put(UnsatBodyPost, "{0}", RenderString.instance); + MAP.put(UnsatCallPre, "{0}", RenderString.instance); + MAP.put(InconsistentCallPost, "{0}", RenderString.instance); + MAP.put(InconsistentConditions, "{0}", RenderString.instance); + MAP.put(InconsistentInvariants, "{0}", RenderString.instance); + MAP.put(UnsatInvariants, "{0}", RenderString.instance); + MAP.put(LiskovProblem, "{0}", RenderString.instance); + MAP.put(ErrorParsingPredicate, "{0}", RenderString.instance); + MAP.put(WarningParsingPredicate, "{0}", RenderString.instance); + MAP.put(UnsupportedElement, "{0}", RenderString.instance); + MAP.put(AnalysisException, "{0}", RenderString.instance); + } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaErrors.java b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaErrors.java new file mode 100644 index 000000000..4044768b6 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaErrors.java @@ -0,0 +1,35 @@ +package arrow.meta.plugins.analysis.errors; + +import org.jetbrains.kotlin.com.intellij.psi.PsiElement; +import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1; +import org.jetbrains.kotlin.diagnostics.Errors; + +import static org.jetbrains.kotlin.diagnostics.Severity.ERROR; +import static org.jetbrains.kotlin.diagnostics.Severity.WARNING; + +public interface MetaErrors { + // type proofs + DiagnosticFactory1 InconsistentBodyPre = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 UnsatBodyPost = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 UnsatCallPre = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 InconsistentCallPost = DiagnosticFactory1.create(WARNING); + DiagnosticFactory1 InconsistentConditions = DiagnosticFactory1.create(WARNING); + DiagnosticFactory1 InconsistentInvariants = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 UnsatInvariants = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 LiskovProblem = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 ErrorParsingPredicate = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 WarningParsingPredicate = DiagnosticFactory1.create(WARNING); + DiagnosticFactory1 UnsupportedElement = DiagnosticFactory1.create(WARNING); + DiagnosticFactory1 AnalysisException = DiagnosticFactory1.create(ERROR); + + /** + * needed to prevent NPE in + * org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages#getRendererForDiagnostic(org.jetbrains.kotlin.diagnostics.Diagnostic) + */ + @SuppressWarnings("UnusedDeclaration") + Object _initializer = new Object() { + { + Errors.Initializer.initializeFactoryNamesAndDefaultErrorMessages(MetaErrors.class, MetaDefaultErrorMessagesJvm.INSTANCE); + } + }; +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/RenderString.java b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/RenderString.java new file mode 100644 index 000000000..468e6518e --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/RenderString.java @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.errors; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticParameterRenderer; +import org.jetbrains.kotlin.diagnostics.rendering.RenderingContext; + +public class RenderString implements DiagnosticParameterRenderer { + + static final RenderString instance = new RenderString(); + + @NotNull + @Override + public String render(String o, @NotNull RenderingContext renderingContext) { + return o; + } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt new file mode 100644 index 000000000..1a1f10b87 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt @@ -0,0 +1,11 @@ +package arrow.meta + +import arrow.meta.phases.CompilerContext +import arrow.meta.plugins.analysis.phases.analysisPhases + +open class AnalysisPlugin : Meta { + override fun intercept(ctx: CompilerContext): List = + listOf("Arrow Analysis" { meta(analysisPhases()) }) +} + +class AnalysisMetaCliProcessor : MetaCliProcessor("analysis") diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt new file mode 100644 index 000000000..b1395445f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt @@ -0,0 +1,241 @@ +package arrow.meta.plugins.analysis.phases + +import arrow.meta.ArrowMetaConfigurationKeys +import arrow.meta.Meta +import arrow.meta.phases.CompilerContext +import arrow.meta.phases.Composite +import arrow.meta.phases.ExtensionPhase +import arrow.meta.phases.analysis.getOrCreateBaseDirectory +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnalysisResult +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.KotlinResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.check.checkDeclarationConstraints +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.collectConstraintsFromAnnotations +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.collectConstraintsFromDSL +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import arrow.meta.plugins.analysis.phases.ir.HintState +import arrow.meta.plugins.analysis.phases.ir.annotateWithConstraints +import arrow.meta.plugins.analysis.phases.ir.hintsFile +import kotlin.io.path.Path +import org.jetbrains.kotlin.diagnostics.Diagnostic +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext + +internal fun Meta.analysisPhases(): ExtensionPhase = + Composite( + listOf( + analysis( + doAnalysis = { _, module, _, _, bindingTrace, _ -> + val kotlinModule: KotlinModuleDescriptor = KotlinModuleDescriptor(module) + initialize(kotlinModule) + when (get(Keys.hints(kotlinModule))) { + HintState.NeedsProcessing -> { + setHintsAs(kotlinModule, HintState.Processed) + val path = getOrCreateBaseDirectory(configuration) + org.jetbrains.kotlin.analyzer.AnalysisResult.RetryWithAdditionalRoots( + bindingTrace.bindingContext, + module, + emptyList(), + listOfNotNull(path) + ) + } + else -> null + } + }, + analysisCompleted = { _, module, bindingTrace, files -> + if (isInStage(module, Stage.CollectConstraints)) { + val kotlinModule: KotlinModuleDescriptor = KotlinModuleDescriptor(module) + val solverState = solverState(module) + val context = KotlinResolutionContext(solverState, bindingTrace, module) + if (solverState != null) { + val locals = files.declarationDescriptors(context) + val (result, interesting) = + solverState.collectConstraintsFromAnnotations(locals, kotlinModule, context) + val currentParseWarnings = bindingTrace.bindingContext.diagnostics.toList() + setParseWarningsAs(module, currentParseWarnings) + setStageAs(module, Stage.Prove) // we end the CollectConstraints phase + when (result) { + AnalysisResult.Retry -> { + if (interesting.isNotEmpty()) { + // 1. generate the additional file with hints + val path = getOrCreateBaseDirectory(configuration) + hintsFile(path.absolutePath, module, interesting) + setHintsAs(kotlinModule, HintState.NeedsProcessing) + // 2. retry with all the gathered information + org.jetbrains.kotlin.analyzer.AnalysisResult.RetryWithAdditionalRoots( + bindingTrace.bindingContext, + module, + emptyList(), + listOf(path.absoluteFile) + ) + } else { + // no need to create the hints file + setHintsAs(kotlinModule, HintState.Processed) + org.jetbrains.kotlin.analyzer.AnalysisResult.RetryWithAdditionalRoots( + bindingTrace.bindingContext, + module, + emptyList(), + emptyList() + ) + } + } + AnalysisResult.ParsingError -> { + solverState.notifyModuleProcessed(kotlinModule) + org.jetbrains.kotlin.analyzer.AnalysisResult.compilationError( + bindingTrace.bindingContext + ) + } + AnalysisResult.Completed -> { + // TODO this is never reached + solverState.notifyModuleProcessed(kotlinModule) + null + } + } + } else { + null + } + } else { + // HACK: because diagnostics are cleared after retrying + // we keep them in a temporary place and re-issue them + if (isInStage(module, Stage.Prove)) { + getParseWarnings(module)?.forEach { bindingTrace.report(it) } + } + val solverState = solverState(module) + solverState?.notifyModuleProcessed(KotlinModuleDescriptor(module)) + null + } + }, + ), + declarationChecker { declaration, descriptor, context -> + if (isInStage(context.moduleDescriptor, Stage.Init) || + isInStage(context.moduleDescriptor, Stage.CollectConstraints) + ) { + setStageAs(context.moduleDescriptor, Stage.CollectConstraints) + val solverState = solverState(context) + val kotlinContext = + KotlinResolutionContext(solverState, context.trace, context.moduleDescriptor) + val decl = declaration.model() as? Declaration + if (decl != null && solverState != null) { + decl.collectConstraintsFromDSL(solverState, kotlinContext, descriptor.model()) + } + } + }, + declarationChecker { declaration, descriptor, context -> + if (isInStage(context.moduleDescriptor, Stage.Prove)) { + val solverState = solverState(context) + val kotlinContext = + KotlinResolutionContext(solverState, context.trace, context.moduleDescriptor) + val decl = declaration.model() as? Declaration + if (decl != null && solverState != null && !solverState.hadParseErrors()) { + solverState.checkDeclarationConstraints(kotlinContext, decl, descriptor.model()) + } + } + }, + irFunction { fn -> + compilerContext.solverState(moduleFragment.descriptor)?.let { + annotateWithConstraints(it, fn) + } + null + }, + irDumpKotlinLike() + ) + ) + +enum class Stage { + Init, + CollectConstraints, + Prove +} + +object Keys { + fun stage(moduleDescriptor: ModuleDescriptor): String = "Stage-${moduleDescriptor.name}" + + fun stage(moduleDescriptor: org.jetbrains.kotlin.descriptors.ModuleDescriptor): String = + "Stage-${moduleDescriptor.name}" + + fun solverState(moduleDescriptor: ModuleDescriptor): String = + "SolverState-${moduleDescriptor.name}" + + fun hints(module: ModuleDescriptor): String = "arrow-analysis-hint-${module.name}" + + fun parseWarnings(module: ModuleDescriptor): String = + "arrow-analysis-parse-warnings-${module.name}" + + fun parseWarnings(module: org.jetbrains.kotlin.descriptors.ModuleDescriptor): String = + "arrow-analysis-parse-warnings-${module.name}" +} + +internal fun CompilerContext.solverState(context: DeclarationCheckerContext): SolverState? = + solverState(context.moduleDescriptor) + +internal fun CompilerContext.solverState( + module: org.jetbrains.kotlin.descriptors.ModuleDescriptor +): SolverState? = get(Keys.solverState(KotlinModuleDescriptor(module))) + +internal fun CompilerContext.initialize(module: ModuleDescriptor) { + ensureInitialized(Keys.solverState(module)) { + val baseDir = + configuration?.get(ArrowMetaConfigurationKeys.BASE_DIR)?.firstOrNull() + ?: System.getProperty("user.dir") + val createOutputFile = { s: String -> + val buildDir = getOrCreateBaseDirectory(configuration) + val path = Path(buildDir.path, s) + path.parent.toFile().mkdirs() + path.toFile().writer() + } + SolverState(baseDir, createOutputFile) + } + ensureInitialized(Keys.hints(module)) { HintState.NeedsProcessing } + ensureInitialized(Keys.stage(module)) { Stage.Init } + ensureInitialized(Keys.parseWarnings(module)) { emptyList() } +} + +internal inline fun CompilerContext.ensureInitialized( + key: String, + acquire: () -> A +) { + val thing: A? = get(key) + if (thing == null) { + set(key, acquire()) + } +} + +fun Collection.declarationDescriptors( + context: ResolutionContext +): List = + this.flatMap { file -> + file.declarations.mapNotNull { decl -> context.descriptorFor(decl.model()) } + } + +private fun CompilerContext.setHintsAs(module: ModuleDescriptor, state: HintState) { + set(Keys.hints(module), state) +} + +private fun CompilerContext.isInStage( + module: org.jetbrains.kotlin.descriptors.ModuleDescriptor, + stage: Stage +) = get(Keys.stage(module)) == stage + +private fun CompilerContext.setStageAs( + module: org.jetbrains.kotlin.descriptors.ModuleDescriptor, + stage: Stage +) { + set(Keys.stage(module), stage) +} + +private fun CompilerContext.setParseWarningsAs( + module: org.jetbrains.kotlin.descriptors.ModuleDescriptor, + warnings: List +) { + set(Keys.parseWarnings(module), warnings) +} + +private fun CompilerContext.getParseWarnings( + module: org.jetbrains.kotlin.descriptors.ModuleDescriptor +) = get>(Keys.parseWarnings(module)) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt new file mode 100644 index 000000000..86df5ea7a --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt @@ -0,0 +1,214 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin + +import arrow.meta.plugins.analysis.errors.MetaErrors +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Types +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType +import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import org.jetbrains.kotlin.cfg.getDeclarationDescriptorIncludingConstructors +import org.jetbrains.kotlin.com.intellij.psi.PsiElement +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.callExpressionRecursiveVisitor +import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.BindingTrace + +class KotlinResolutionContext( + private val state: SolverState?, + private val impl: BindingTrace, + private val moduleImpl: org.jetbrains.kotlin.descriptors.ModuleDescriptor +) : ResolutionContext, BindingTrace by impl { + + fun reportLiskovProblem(expression: Element, msg: String) { + report(MetaErrors.LiskovProblem.on(expression.element(), msg)) + } + + fun reportUnsatInvariants(expression: Element, msg: String) { + report(MetaErrors.UnsatInvariants.on(expression.element(), msg)) + } + + fun reportInconsistentInvariants(expression: Element, msg: String) { + report(MetaErrors.InconsistentInvariants.on(expression.element(), msg)) + } + + fun reportInconsistentConditions(expression: Element, msg: String) { + report(MetaErrors.InconsistentConditions.on(expression.element(), msg)) + } + + fun reportInconsistentCallPost(expression: Element, msg: String) { + report(MetaErrors.InconsistentCallPost.on(expression.element(), msg)) + } + + private fun reportUnsatBodyPost(declaration: Element, msg: String) { + report(MetaErrors.UnsatBodyPost.on(declaration.element(), msg)) + } + + private fun reportInconsistentBodyPre(declaration: Element, msg: String) { + report(MetaErrors.InconsistentBodyPre.on(declaration.element(), msg)) + } + + fun reportUnsupported(expression: Element, msg: String) { + report(MetaErrors.UnsupportedElement.on(expression.element(), msg)) + } + + fun reportAnalysisException(element: Element, msg: String) { + report(MetaErrors.AnalysisException.on(element.element(), msg)) + } + + override val types: Types = + object : Types { + override val nothingType: Type = KotlinType(moduleImpl.builtIns.nothingType) + } + + /** + * Recursively walks [this] element for calls to [arrow.analysis.pre] and [arrow.analysis.post] + * that hold preconditions + */ + override fun Element.constraintsDSLElements(): List { + val results = hashSetOf() + val visitor = callExpressionRecursiveVisitor { + if (it.calleeExpression?.text == "pre" || + it.calleeExpression?.text == "post" || + it.calleeExpression?.text == "require" || + it.calleeExpression?.text == "doNotLookAtArgumentsWhen" + ) { + results.add(it) + } + } + val psi = element() + psi.accept(visitor) + psi.acceptChildren(visitor) + return results.filterIsInstance().map { it.model() } + } + + override fun type(typeReference: TypeReference?): Type? = + typeReference + ?.let { (it.psiOrParent as? KtExpression)?.let { expr -> bindingContext.getType(expr) } } + ?.let { KotlinType(it) } + + override fun handleError(error: ErrorIds, element: Element, msg: String): Unit { + when (error) { + ErrorIds.Exception.IllegalState -> reportAnalysisException(element, msg) + ErrorIds.Exception.OtherException -> reportAnalysisException(element, msg) + ErrorIds.Inconsistency.InconsistentBodyPre -> reportInconsistentBodyPre(element, msg) + ErrorIds.Inconsistency.InconsistentDefaultValues -> reportInconsistentBodyPre(element, msg) + ErrorIds.Inconsistency.InconsistentConditions -> reportInconsistentConditions(element, msg) + ErrorIds.Inconsistency.InconsistentCallPost -> reportInconsistentCallPost(element, msg) + ErrorIds.Inconsistency.InconsistentInvariants -> reportInconsistentInvariants(element, msg) + ErrorIds.Liskov.NotWeakerPrecondition -> reportLiskovProblem(element, msg) + ErrorIds.Liskov.NotStrongerPostcondition -> reportLiskovProblem(element, msg) + ErrorIds.Parsing.ErrorParsingPredicate -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Parsing.WarningParsingPredicate -> reportWarningsParsingPredicate(element, msg) + ErrorIds.Parsing.UnexpectedReference -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Parsing.UnexpectedFieldInitBlock -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Laws.LawMustCallFunction -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Laws.LawMustHaveParametersInOrder -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Laws.SubjectWithoutName -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Laws.CouldNotResolveSubject -> reportErrorsParsingPredicate(element, msg) + ErrorIds.Unsatisfiability.UnsatCallPre -> reportUnsatCallPre(element, msg) + ErrorIds.Unsatisfiability.UnsatBodyPost -> reportUnsatBodyPost(element, msg) + ErrorIds.Unsatisfiability.UnsatInvariants -> reportUnsatInvariants(element, msg) + ErrorIds.Unsupported.UnsupportedExpression -> reportUnsupported(element, msg) + } + state?.notifySarifReport(error, element, msg) + } + + private fun reportErrorsParsingPredicate(element: Element, msg: String) { + report(MetaErrors.ErrorParsingPredicate.on(element.element(), msg)) + } + + private fun reportWarningsParsingPredicate(element: Element, msg: String) { + report(MetaErrors.WarningParsingPredicate.on(element.element(), msg)) + } + + private fun reportUnsatCallPre(element: Element, msg: String) { + report(MetaErrors.UnsatCallPre.on(element.element(), msg)) + } + + private val descriptorCache: MutableMap> = mutableMapOf() + override fun descriptorFor(fqName: FqName): List { + // add if not there yet + if (!descriptorCache.containsKey(fqName.name)) { + val info: List = descriptorWorker(fqName).map { it.model() } + descriptorCache[fqName.name] = info + } + return descriptorCache.getValue(fqName.name) + } + + private fun descriptorWorker( + fqName: FqName + ): List { + val portions = fqName.name.split(".") + + fun org.jetbrains.kotlin.descriptors.ClassDescriptor.getAllDescriptors() = + unsubstitutedMemberScope.getContributedDescriptors { true } + + staticScope.getContributedDescriptors { true } + + unsubstitutedInnerClassesScope.getContributedDescriptors { true } + + var current: List = + listOfNotNull(moduleImpl.getPackage(org.jetbrains.kotlin.name.FqName(portions.first()))) + for (portion in portions.drop(1)) { + current = + when (portion) { + "" -> + current.flatMap { + when (it) { + is org.jetbrains.kotlin.descriptors.ClassDescriptor -> it.constructors + is org.jetbrains.kotlin.descriptors.TypeAliasDescriptor -> it.constructors + else -> emptyList() + } + } + else -> + current.flatMap { decl -> + when (decl) { + is org.jetbrains.kotlin.descriptors.PackageViewDescriptor -> + decl.memberScope.getContributedDescriptors { true } + is org.jetbrains.kotlin.descriptors.ClassDescriptor -> decl.getAllDescriptors() + is org.jetbrains.kotlin.descriptors.TypeAliasDescriptor -> + decl.classDescriptor?.getAllDescriptors() + else -> null + } + .orEmpty() + .flatMap { + when (it) { + is org.jetbrains.kotlin.descriptors.PropertyDescriptor -> + listOfNotNull(it, it.getter, it.setter) + else -> listOf(it) + } + } + .filter { it.name.asString() == portion } + } + } + } + + return current + } + + override fun descriptorFor(declaration: Declaration): DeclarationDescriptor? = + (declaration.impl() as? KtDeclaration) + ?.getDeclarationDescriptorIncludingConstructors(impl.bindingContext) + ?.model() + + override fun backingPropertyForConstructorParameter( + parameter: ValueParameterDescriptor + ): PropertyDescriptor? = + (parameter.impl() as? org.jetbrains.kotlin.descriptors.ValueParameterDescriptor)?.let { + impl.bindingContext.get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, it)?.model() + } + + override val module: ModuleDescriptor = KotlinModuleDescriptor(moduleImpl) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt new file mode 100644 index 000000000..f037bd011 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt @@ -0,0 +1,79 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinDefaultValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinExpressionValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinReceiverValue +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType +import org.jetbrains.kotlin.js.translate.callTranslator.getReturnType +import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument +import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument +import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument +import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver + +class KotlinResolvedCall( + val impl: + org.jetbrains.kotlin.resolve.calls.model.ResolvedCall< + out org.jetbrains.kotlin.descriptors.CallableDescriptor> +) : ResolvedCall { + + fun impl(): + org.jetbrains.kotlin.resolve.calls.model.ResolvedCall< + out org.jetbrains.kotlin.descriptors.CallableDescriptor> = impl + + override val callElement: Element + get() = impl().call.callElement.model() + + override fun getReceiverExpression(): Expression? = + impl() + .let { + // do not use .getReceiverExpression() directly, + // because it's in different packages on each version + // and leads to NoSuchMethodError exceptions (see #1014) + (it.extensionReceiver as? ExpressionReceiver) + ?: (it.dispatchReceiver as? ExpressionReceiver) + } + ?.expression + ?.model() + + override fun getReturnType(): Type = KotlinType(impl().getReturnType()) + + override val dispatchReceiver: ReceiverValue? + get() = impl().dispatchReceiver?.let { KotlinReceiverValue(it) } + + override val extensionReceiver: ReceiverValue? + get() = impl().extensionReceiver?.let { KotlinReceiverValue(it) } + + override val resultingDescriptor: CallableDescriptor + get() = impl().resultingDescriptor.model() + + override val valueArguments: Map + get() = + impl() + .valueArguments + .map { (param, resolvedArg) -> + val p: ValueParameterDescriptor = param.model() + val a: ResolvedValueArgument = + when (resolvedArg) { + is DefaultValueArgument -> KotlinDefaultValueArgument(resolvedArg) + is VarargValueArgument -> KotlinResolvedValueArgument(resolvedArg) + is ExpressionValueArgument -> KotlinExpressionValueArgument(resolvedArg) + else -> TODO() + } + p to a + } + .toMap() + + override val typeArguments: Map + get() = TODO("Not yet implemented") +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt new file mode 100644 index 000000000..454befb57 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt @@ -0,0 +1,152 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast + +/* ktlint-disable no-wildcard-imports */ +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.* +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements.* +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor +import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.isNull + +/* ktlint-enable no-wildcard-imports */ + +@Suppress("UNUSED_PARAMETER", "UNCHECKED_CAST") +private fun A.repr(unit: Unit = Unit): B = + this as B + +@Suppress("UNCHECKED_CAST") fun A.repr(): B = this as B + +fun < + A : org.jetbrains.kotlin.descriptors.DeclarationDescriptor, B : DeclarationDescriptor> A.model(): + B = + when (this) { + is SimpleFunctionDescriptor -> KotlinSimpleFunctionDescriptor(this).repr() + is TypeAliasConstructorDescriptor -> KotlinTypeAliasConstructorDescriptor(this).repr() + is ConstructorDescriptor -> KotlinConstructorDescriptor(this).repr() + is PropertyAccessorDescriptor -> KotlinPropertyAccessorDescriptor(this).repr() + is PropertyDescriptor -> KotlinPropertyDescriptor(this).repr() + is PackageViewDescriptor -> KotlinPackageViewDescriptor(this).repr() + is ClassDescriptor -> KotlinClassDescriptor(this).repr() + is TypeAliasDescriptor -> KotlinTypeAliasDescriptor(this).repr() + is ValueParameterDescriptor -> KotlinValueParameterDescriptor(this).repr() + is ModuleDescriptor -> KotlinModuleDescriptor(this).repr() + is ReceiverParameterDescriptor -> KotlinReceiverParameterDescriptor(this).repr() + is LocalVariableDescriptor -> KotlinLocalVariableDescriptor(this).repr() + is PackageFragmentDescriptor -> KotlinPackageFragmentDescriptor(this).repr() + // fallback cases: we sometimes find unknown descriptors + // and for those cases we need nothing else than what the + // abstract classes provide + is FunctionDescriptor -> KotlinDefaultFunctionDescriptor(this).repr() + is VariableDescriptor -> KotlinDefaultVariableDescriptor(this).repr() + is DeclarationDescriptorWithVisibility -> + KotlinDefaultDeclarationDescriptorWithVisibility(this).repr() + else -> KotlinDefaultDeclarationDescriptor(this).repr() + } + +fun A.model(): B = + when (this) { + is KtNamedFunction -> KotlinNamedFunction(this).repr() + is KtProperty -> KotlinProperty(this).repr() + is KtPropertyAccessor -> KotlinPropertyAccessor(this).repr() + is KtParameter -> KotlinParameter(this).repr() + is KtDestructuringDeclaration -> KotlinDestructuringDeclaration(this).repr() + is KtDestructuringDeclarationEntry -> KotlinDestructuringDeclarationEntry(this).repr() + is KtBinaryExpression -> + when (this.operationToken.toString()) { + "EQ" -> KotlinAssignmentExpression(this).repr() + else -> KotlinBinaryExpression(this).repr() + } + is KtBinaryExpressionWithTypeRHS -> + when (this.operationReference.getReferencedName()) { + "as", "as?" -> KotlinTypeCastExpression(this).repr() + else -> KotlinDefaultExpression(this).repr() + } + is KtNameReferenceExpression -> KotlinNameReferenceExpression(this).repr() + is KtLabelReferenceExpression -> KotlinLabelReferenceExpression(this).repr() + is KtOperationReferenceExpression -> KotlinOperationReferenceExpression(this).repr() + is KtConstantExpression -> + if (this.isNull()) KotlinNullExpression(this).repr() + else KotlinConstantExpression(this).repr() + is KtCallExpression -> KotlinCallExpression(this).repr() + is KtEnumEntry -> KotlinEnumEntry(this).repr() + is KtTypeAlias -> KotlinTypeAlias(this).repr() + is KtClass -> KotlinClass(this).repr() + is KtObjectDeclaration -> KotlinObjectDeclaration(this).repr() + is KtObjectLiteralExpression -> KotlinObjectLiteralExpression(this).repr() + is KtPropertyDelegate -> KotlinPropertyDelegate(this).repr() + is KtClassBody -> KotlinClassBody(this).repr() + is KtLambdaExpression -> KotlinLambdaExpression(this).repr() + is KtValueArgument -> KotlinValueArgument(this).repr() + is KtValueArgumentList -> KotlinValueArgumentList(this).repr() + is KtBlockExpression -> KotlinBlockExpression(this).repr() + is KtStringTemplateExpression -> + if (!this.hasInterpolation()) KotlinConstantStringExpression(this).repr() + else KotlinStringTemplateExpression(this).repr() + is KtReturnExpression -> KotlinReturnExpression(this).repr() + is KtBreakExpression -> KotlinBreakExpression(this).repr() + is KtContinueExpression -> KotlinContinueExpression(this).repr() + is KtParenthesizedExpression -> KotlinParenthesizedExpression(this).repr() + is KtAnnotatedExpression -> KotlinAnnotatedExpression(this).repr() + is KtFunctionLiteral -> KotlinFunctionLiteral(this).repr() + is KtDotQualifiedExpression -> KotlinDotQualifiedExpression(this).repr() + is KtUnaryExpression -> KotlinUnaryExpression(this).repr() + is KtThisExpression -> KotlinThisExpression(this).repr() + is KtSuperExpression -> KotlinSuperExpression(this).repr() + is KtIfExpression -> KotlinIfExpression(this).repr() + is KtPrimaryConstructor -> KotlinPrimaryConstructor(this).repr() + is KtSecondaryConstructor -> KotlinSecondaryConstructor(this).repr() + is KtClassInitializer -> KotlinClassInitializer(this).repr() + is KtParameterList -> KotlinParameterList(this).repr() + is KtIsExpression -> KotlinIsExpression(this).repr() + is KtTypeReference -> KotlinTypeReference(this).repr() + is KtThrowExpression -> KotlinThrowExpression(this).repr() + is KtTryExpression -> KotlinTryExpression(this).repr() + is KtCatchClause -> KotlinCatchClause(this).repr() + is KtFinallySection -> KotlinFinallySection(this).repr() + is KtClassLiteralExpression -> KotlinClassLiteralExpression(this).repr() + is KtCallableReferenceExpression -> KotlinCallableReferenceExpression(this).repr() + is KtConstructorCalleeExpression -> KotlinConstructorCalleeExpression(this).repr() + is KtSuperTypeCallEntry -> KotlinSuperTypeCallEntry(this).repr() + is KtDelegatedSuperTypeEntry -> KotlinDelegatedSuperTypeEntry(this).repr() + is KtSuperTypeEntry -> KotlinSuperTypeEntry(this).repr() + is KtWhileExpression -> KotlinWhileExpression(this).repr() + is KtDoWhileExpression -> KotlinDoWhileExpression(this).repr() + is KtArrayAccessExpression -> KotlinArrayAccessExpression(this).repr() + is KtForExpression -> KotlinForExpression(this).repr() + is KtWhenExpression -> KotlinWhenExpression(this).repr() + is KtWhenEntry -> KotlinWhenEntry(this).repr() + is KtWhenConditionWithExpression -> KotlinWhenConditionWithExpression(this).repr() + is KtWhenConditionIsPattern -> KotlinWhenConditionIsPattern(this).repr() + is KtWhenConditionInRange -> KotlinWhenConditionInRange(this).repr() + is KtConstructorDelegationCall -> KotlinConstructorDelegationCall(this).repr() + is KtConstructorDelegationReferenceExpression -> + KotlinConstructorDelegationReferenceExpression(this).repr() + is KtSafeQualifiedExpression -> KotlinSafeQualifiedExpression(this).repr() + is KtSuperTypeList -> KotlinSuperTypeList(this).repr() + is KtInitializerList -> KotlinInitializerList(this).repr() + is KtTypeParameter -> KotlinTypeParameter(this).repr() + is KtTypeParameterList -> KotlinTypeParameterList(this).repr() + is KtTypeConstraint -> KotlinTypeConstraint(this).repr() + is KtTypeConstraintList -> KotlinTypeConstraintList(this).repr() + is KtTypeArgumentList -> KotlinTypeArgumentList(this).repr() + is KtAnnotation -> KotlinAnnotation(this).repr() + is KtAnnotationEntry -> KotlinAnnotationEntry(this).repr() + is KtModifierList -> KotlinModifierList(this).repr() + // fallbacks + is KtFunction -> KotlinDefaultFunction(this).repr() + is KtContainerNodeForControlStructureBody -> this.expression?.model() + ?: KotlinDefaultElement(this).repr() + is KtContainerNode -> KotlinDefaultElement(this).repr() + // final fallback for expressions + is KtExpression -> KotlinDefaultExpression(this).repr() + // is KtFile -> KotlinFile(this).repr() + else -> + TODO( + "Missing impl for ${this.text} ${this.containingKtFile.virtualFilePath} (${this.javaClass.name})" + ) + } + +@Suppress("UNCHECKED_CAST") fun A.element(): B = impl() as B diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated.kt new file mode 100644 index 000000000..b47bf2df1 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotated +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations + +fun interface KotlinAnnotated : Annotated { + fun impl(): org.jetbrains.kotlin.descriptors.annotations.Annotated + override fun annotations(): Annotations = KotlinAnnotations(impl().annotations) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor.kt new file mode 100644 index 000000000..a003049eb --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor.kt @@ -0,0 +1,35 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType +import org.jetbrains.kotlin.resolve.annotations.argumentValue +import org.jetbrains.kotlin.resolve.constants.StringValue + +class KotlinAnnotationDescriptor( + val impl: org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor +) : AnnotationDescriptor { + + fun impl(): org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor = impl + + override val allValueArguments: Map + get() = + impl().allValueArguments.map { (key, value) -> Name(key.asString()) to value.value }.toMap() + + override fun argumentValueAsString(argName: String): String? = + impl().argumentValue(argName)?.value as? String + + override fun argumentValueAsArrayOfString(argName: String): List = + (impl().argumentValue(argName)?.value as? List<*>) + ?.filterIsInstance() + ?.map { it.value } + .orEmpty() + + override val fqName: FqName? + get() = impl().fqName?.let { FqName(it.asString()) } + + override val type: Type + get() = KotlinType(impl().type) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations.kt new file mode 100644 index 000000000..e25b93cdc --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations.kt @@ -0,0 +1,23 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName + +class KotlinAnnotations( + override val impl: org.jetbrains.kotlin.descriptors.annotations.Annotations +) : Annotations { + + override fun iterable(): Iterable = + impl.map { KotlinAnnotationDescriptor(it) } + + override fun isEmpty(): Boolean = impl.isEmpty() + + override fun findAnnotation(fqName: FqName): AnnotationDescriptor? = + impl.findAnnotation(org.jetbrains.kotlin.name.FqName(fqName.name))?.let { + KotlinAnnotationDescriptor(it) + } + + override fun hasAnnotation(fqName: FqName): Boolean = + impl.hasAnnotation(org.jetbrains.kotlin.name.FqName(fqName.name)) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor.kt new file mode 100644 index 000000000..7164380db --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor.kt @@ -0,0 +1,49 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType +import org.jetbrains.kotlin.backend.common.descriptors.allParameters +import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe + +fun interface KotlinCallableDescriptor : CallableDescriptor, KotlinDeclarationDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.CallableDescriptor + + fun descriptor(): KotlinDeclarationDescriptor = KotlinDeclarationDescriptor({ impl() }) + + override fun annotations(): Annotations = KotlinAnnotations(descriptor().impl().annotations) + + override fun element(): Element? = (impl().findPsi() as? KtElement)?.model() + + override val fqNameSafe: FqName + get() = FqName(impl().fqNameSafe.asString()) + override val name: Name + get() = Name(impl().name.asString()) + override val extensionReceiverParameter: ReceiverParameterDescriptor? + get() = impl().extensionReceiverParameter?.model() + override val dispatchReceiverParameter: ReceiverParameterDescriptor? + get() = impl().dispatchReceiverParameter?.model() + override val typeParameters: List + get() = impl().typeParameters.map { it.model() } + override val returnType: Type? + get() = impl().returnType?.let { KotlinType(it) } + override val valueParameters: List + get() = impl().valueParameters.map { it.model() } + override val overriddenDescriptors: Collection + get() = impl().overriddenDescriptors.map { it.model() } + + override val allParameters: List + get() = impl().allParameters.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor.kt new file mode 100644 index 000000000..a46325cb4 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor.kt @@ -0,0 +1,40 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind +import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe + +fun interface KotlinCallableMemberDescriptor : + CallableMemberDescriptor, KotlinCallableDescriptor, KotlinMemberDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.CallableMemberDescriptor + + override val kind: CallableMemberDescriptor.Kind + get() = + when (impl().kind) { + Kind.DECLARATION -> CallableMemberDescriptor.Kind.DECLARATION + Kind.FAKE_OVERRIDE -> CallableMemberDescriptor.Kind.FAKE_OVERRIDE + Kind.DELEGATION -> CallableMemberDescriptor.Kind.DELEGATION + Kind.SYNTHESIZED -> CallableMemberDescriptor.Kind.SYNTHESIZED + } + + override fun annotations(): Annotations = KotlinAnnotations(impl().annotations) + + override val containingDeclaration: DeclarationDescriptor? + get() = impl().containingDeclaration.model() + + override fun element(): Element? = (impl().findPsi() as? KtElement)?.model() + + override val fqNameSafe: FqName + get() = FqName(impl().fqNameSafe.asString()) + override val name: Name + get() = Name(impl().name.asString()) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor.kt new file mode 100644 index 000000000..f640eaaf0 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor.kt @@ -0,0 +1,65 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType +import org.jetbrains.kotlin.descriptors.ClassKind + +class KotlinClassDescriptor(val impl: org.jetbrains.kotlin.descriptors.ClassDescriptor) : + ClassDescriptor, KotlinDeclarationDescriptor, KotlinClassifierDescriptorWithTypeParameters { + + override fun impl(): org.jetbrains.kotlin.descriptors.ClassDescriptor = impl + override fun annotations(): Annotations = KotlinAnnotations(impl().annotations) + + override val unsubstitutedMemberScope: MemberScope + get() = KotlinMemberScope { impl.unsubstitutedMemberScope } + override val staticScope: MemberScope + get() = KotlinMemberScope { impl.staticScope } + override val unsubstitutedInnerClassesScope: MemberScope + get() = KotlinMemberScope { impl.unsubstitutedInnerClassesScope } + + override val constructors: Collection + get() = impl().constructors.map { it.model() } + override val companionObjectDescriptor: ClassDescriptor? + get() = impl().companionObjectDescriptor?.model() + override val kind: ClassDescriptor.ClassKind + get() = + when (impl().kind) { + ClassKind.CLASS -> ClassDescriptor.ClassKind.CLASS + ClassKind.INTERFACE -> ClassDescriptor.ClassKind.INTERFACE + ClassKind.ENUM_CLASS -> ClassDescriptor.ClassKind.ENUM_CLASS + ClassKind.ENUM_ENTRY -> ClassDescriptor.ClassKind.ENUM_ENTRY + ClassKind.ANNOTATION_CLASS -> ClassDescriptor.ClassKind.ANNOTATION_CLASS + ClassKind.OBJECT -> ClassDescriptor.ClassKind.OBJECT + } + override val isCompanionObject: Boolean + get() = impl().isCompanionObject + override val isData: Boolean + get() = impl().isData + override val isInline: Boolean + get() = impl().isInline + override val isFun: Boolean + get() = impl().isFun + override val isValue: Boolean + get() = impl().isValue + override val isEnumEntry: Boolean + get() = impl().kind == ClassKind.ENUM_ENTRY + override val thisAsReceiverParameter: ReceiverParameterDescriptor + get() = impl().thisAsReceiverParameter.model() + override val unsubstitutedPrimaryConstructor: ConstructorDescriptor? + get() = impl().unsubstitutedPrimaryConstructor?.model() + override val sealedSubclasses: Collection + get() = impl().sealedSubclasses.map { it.model() } + override val superTypes: Collection + get() = impl.defaultType.constructor.supertypes.map { KotlinType(it) } + override val isInner: Boolean + get() = impl.isInner + override val declaredTypeParameters: List + get() = impl().declaredTypeParameters.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor.kt new file mode 100644 index 000000000..af2756378 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType + +fun interface KotlinClassifierDescriptor : ClassifierDescriptor { + fun impl(): org.jetbrains.kotlin.descriptors.ClassifierDescriptor + + override val typeConstructor: TypeConstructor + get() = KotlinTypeConstructor { impl().typeConstructor } + override val defaultType: Type + get() = KotlinType(impl().defaultType) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters.kt new file mode 100644 index 000000000..34dbdaefe --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters.kt @@ -0,0 +1,24 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptorWithTypeParameters +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +fun interface KotlinClassifierDescriptorWithTypeParameters : + ClassifierDescriptorWithTypeParameters, + KotlinClassifierDescriptor, + KotlinDeclarationDescriptorWithVisibility, + KotlinMemberDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters + + override val isInner: Boolean + get() = impl().isInner + + override val declaredTypeParameters: List + get() = impl().declaredTypeParameters.map { it.model() } + + override val visibility: Visibility + get() = KotlinVisibility { impl().visibility.delegate } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor.kt new file mode 100644 index 000000000..0ec68a431 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor.kt @@ -0,0 +1,17 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +open class KotlinConstructorDescriptor( + override val impl: org.jetbrains.kotlin.descriptors.ConstructorDescriptor +) : ConstructorDescriptor, KotlinFunctionDescriptor(impl) { + override fun impl(): org.jetbrains.kotlin.descriptors.ConstructorDescriptor = impl + + override val constructedClass: ClassDescriptor + get() = impl().constructedClass.model() + + override val isPrimary: Boolean + get() = impl().isPrimary +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor.kt new file mode 100644 index 000000000..bfe295070 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor.kt @@ -0,0 +1,38 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.descriptors.containingPackage +import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe + +fun interface KotlinDeclarationDescriptor : DeclarationDescriptor { + override fun impl(): org.jetbrains.kotlin.descriptors.DeclarationDescriptor + + override fun annotations(): Annotations = KotlinAnnotations(impl().annotations) + + override val containingDeclaration: DeclarationDescriptor? + get() = impl().containingDeclaration?.model() + + override val containingPackage: FqName? + get() = impl().containingPackage()?.let { FqName(it.asString()) } + + override fun element(): Element? = (impl().findPsi() as? KtElement)?.model() + + override val fqNameSafe: FqName + get() = FqName(impl().fqNameSafe.asString()) + + override val name: Name + get() = Name(impl().name.asString()) +} + +class KotlinDefaultDeclarationDescriptor( + val impl: org.jetbrains.kotlin.descriptors.DeclarationDescriptor +) : KotlinDeclarationDescriptor { + override fun impl(): org.jetbrains.kotlin.descriptors.DeclarationDescriptor = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility.kt new file mode 100644 index 000000000..362e28f59 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility.kt @@ -0,0 +1,17 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptorWithVisibility +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility + +fun interface KotlinDeclarationDescriptorWithVisibility : + DeclarationDescriptorWithVisibility, KotlinDeclarationDescriptor { + override fun impl(): org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility + override val visibility: Visibility + get() = KotlinVisibility { impl().visibility.delegate } +} + +class KotlinDefaultDeclarationDescriptorWithVisibility( + val impl: org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility +) : KotlinDeclarationDescriptorWithVisibility { + override fun impl(): org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument.kt new file mode 100644 index 000000000..a3fb634fe --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument.kt @@ -0,0 +1,27 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DefaultValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName + +open class KotlinDefaultValueArgument( + override val impl: org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument +) : ValueArgument, DefaultValueArgument, KotlinResolvedValueArgument(impl) { + override fun impl(): org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument = impl + + override val argumentExpression: Expression? + get() = valueArgument?.argumentExpression + + override val isSpread: Boolean + get() = valueArgument?.isSpread ?: false + + override fun getArgumentName(): ValueArgumentName? = valueArgument?.getArgumentName() + + override fun isNamed(): Boolean = valueArgument?.isNamed() == true + + override fun isExternal(): Boolean = valueArgument?.isExternal() == true + + override val valueArgument: ValueArgument? + get() = impl().arguments.getOrNull(0)?.let { KotlinValueArgument(it) } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument.kt new file mode 100644 index 000000000..847f25d25 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument.kt @@ -0,0 +1,33 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ExpressionValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements.KotlinValueArgumentName + +open class KotlinExpressionValueArgument( + override val impl: org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument +) : + ValueArgument, + ExpressionValueArgument, + ExpressionResolvedValueArgument, + KotlinResolvedValueArgument(impl) { + override fun impl(): org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument = impl + override val argumentExpression: Expression? + get() = impl().valueArgument?.getArgumentExpression()?.model() + override val isSpread: Boolean + get() = impl().valueArgument?.getSpreadElement() != null + + override fun getArgumentName(): ValueArgumentName? = + impl().valueArgument?.getArgumentName()?.let { KotlinValueArgumentName(it) } + + override fun isNamed(): Boolean = impl().valueArgument?.isNamed() == true + + override fun isExternal(): Boolean = impl().valueArgument?.isExternal() == true + + override val valueArgument: ValueArgument? + get() = impl().valueArgument?.let { KotlinValueArgument(it) } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor.kt new file mode 100644 index 000000000..790450283 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FieldDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +fun interface KotlinFieldDescriptor : FieldDescriptor, KotlinAnnotated { + override fun impl(): org.jetbrains.kotlin.descriptors.FieldDescriptor + + override val correspondingProperty: PropertyDescriptor + get() = impl().correspondingProperty.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor.kt new file mode 100644 index 000000000..7930364a0 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor.kt @@ -0,0 +1,34 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind + +abstract class KotlinFunctionDescriptor( + open val impl: org.jetbrains.kotlin.descriptors.FunctionDescriptor +) : FunctionDescriptor, KotlinCallableMemberDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.FunctionDescriptor = impl + + override val kind: CallableMemberDescriptor.Kind + get() = + when (impl().kind) { + Kind.DECLARATION -> CallableMemberDescriptor.Kind.DECLARATION + Kind.FAKE_OVERRIDE -> CallableMemberDescriptor.Kind.FAKE_OVERRIDE + Kind.DELEGATION -> CallableMemberDescriptor.Kind.DELEGATION + Kind.SYNTHESIZED -> CallableMemberDescriptor.Kind.SYNTHESIZED + } + override val isOperator: Boolean + get() = impl().isOperator + override val isInfix: Boolean + get() = impl().isInfix + override val isInline: Boolean + get() = impl().isInline + override val isTailrec: Boolean + get() = impl().isTailrec + override val isSuspend: Boolean + get() = impl().isSuspend +} + +class KotlinDefaultFunctionDescriptor(impl: org.jetbrains.kotlin.descriptors.FunctionDescriptor) : + KotlinFunctionDescriptor(impl) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor.kt new file mode 100644 index 000000000..eebbb0722 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.LocalVariableDescriptor + +class KotlinLocalVariableDescriptor( + override val impl: org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor +) : LocalVariableDescriptor, KotlinVariableDescriptor(impl) { + override fun impl(): org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor.kt new file mode 100644 index 000000000..893ddd7e0 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor.kt @@ -0,0 +1,35 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Modality +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility +import org.jetbrains.kotlin.descriptors.Modality.ABSTRACT +import org.jetbrains.kotlin.descriptors.Modality.FINAL +import org.jetbrains.kotlin.descriptors.Modality.OPEN +import org.jetbrains.kotlin.descriptors.Modality.SEALED + +fun interface KotlinMemberDescriptor : MemberDescriptor, KotlinDeclarationDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.MemberDescriptor + + override val modality: Modality + get() = + when (impl().modality) { + FINAL -> Modality.FINAL + SEALED -> Modality.SEALED + OPEN -> Modality.OPEN + ABSTRACT -> Modality.ABSTRACT + } + + override val visibility: Visibility + get() = KotlinVisibility { impl().visibility.delegate } + + override val isExpect: Boolean + get() = impl().isExpect + + override val isActual: Boolean + get() = impl().isActual + + override val isExternal: Boolean + get() = impl().isExternal +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt new file mode 100644 index 000000000..2f1432289 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt @@ -0,0 +1,28 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter + +fun interface KotlinMemberScope : MemberScope { + + fun impl(): org.jetbrains.kotlin.resolve.scopes.MemberScope + + override fun getClassifierNames(): Set = + impl().getClassifierNames()?.map { Name(it.asString()) }.orEmpty().toSet() + + override fun getFunctionNames(): Set = + impl().getFunctionNames().map { Name(it.asString()) }.toSet() + + override fun getVariableNames(): Set = + impl().getVariableNames().map { Name(it.asString()) }.toSet() + + override fun getContributedDescriptors( + filter: (name: String) -> Boolean + ): List = + impl().getContributedDescriptors(DescriptorKindFilter.ALL) { filter(it.toString()) }.map { + it.model() + } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt new file mode 100644 index 000000000..b36d5fc55 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt @@ -0,0 +1,24 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageViewDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +class KotlinModuleDescriptor(val impl: org.jetbrains.kotlin.descriptors.ModuleDescriptor) : + ModuleDescriptor, KotlinDeclarationDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.ModuleDescriptor = impl + + override fun getPackage(pck: String): PackageViewDescriptor = + impl().getPackage(org.jetbrains.kotlin.name.FqName(pck)).model() + + override fun getSubPackagesOf(fqName: FqName): List = + impl().getSubPackagesOf(org.jetbrains.kotlin.name.FqName(fqName.name)) { true }.map { + FqName(it.asString()) + } + + override val stableName: Name? + get() = impl().stableName?.let { Name(it.asString()) } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed.kt new file mode 100644 index 000000000..25ec4bd78 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed.kt @@ -0,0 +1,10 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Named +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name + +fun interface KotlinNamed : Named { + fun impl(): org.jetbrains.kotlin.descriptors.Named + override val name: Name + get() = Name(impl().name.asString()) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor.kt new file mode 100644 index 000000000..cb9a0a442 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor.kt @@ -0,0 +1,10 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageFragmentDescriptor + +class KotlinPackageFragmentDescriptor( + val impl: org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +) : PackageFragmentDescriptor, KotlinDeclarationDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor.kt new file mode 100644 index 000000000..6759fac94 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageViewDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName + +class KotlinPackageViewDescriptor( + val impl: org.jetbrains.kotlin.descriptors.PackageViewDescriptor +) : PackageViewDescriptor, KotlinDeclarationDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.PackageViewDescriptor = impl + + override val memberScope: MemberScope + get() = KotlinMemberScope { impl().memberScope } + + override val fqName: FqName + get() = FqName(impl().fqName.asString()) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor.kt new file mode 100644 index 000000000..85516004f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor + +fun interface KotlinParameterDescriptor : ParameterDescriptor, KotlinValueDescriptor { + override fun impl(): org.jetbrains.kotlin.descriptors.ParameterDescriptor +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor.kt new file mode 100644 index 000000000..dd427edc5 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyAccessorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptorWithAccessors +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +class KotlinPropertyAccessorDescriptor( + override val impl: org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor +) : PropertyAccessorDescriptor, KotlinVariableAccessorDescriptor(impl) { + override fun impl(): org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor = impl + override val overriddenDescriptors: Collection + get() = impl().overriddenDescriptors.map { it.model() } + override val correspondingVariable: VariableDescriptorWithAccessors + get() = impl().correspondingVariable.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor.kt new file mode 100644 index 000000000..2202dc472 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor.kt @@ -0,0 +1,21 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FieldDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyAccessorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +class KotlinPropertyDescriptor( + override val impl: org.jetbrains.kotlin.descriptors.PropertyDescriptor +) : + PropertyDescriptor, KotlinVariableDescriptorWithAccessors(impl), KotlinCallableMemberDescriptor { + override fun impl(): org.jetbrains.kotlin.descriptors.PropertyDescriptor = impl + override val isSetterProjectedOut: Boolean + get() = impl().isSetterProjectedOut + override val accessors: List + get() = impl().accessors.map { it.model() } + override val backingField: FieldDescriptor? + get() = impl().backingField?.let { KotlinFieldDescriptor { it } } + override val delegateField: FieldDescriptor? + get() = impl().delegateField?.let { KotlinFieldDescriptor { it } } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor.kt new file mode 100644 index 000000000..318452e39 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor.kt @@ -0,0 +1,14 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue + +class KotlinReceiverParameterDescriptor( + val impl: org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor +) : ReceiverParameterDescriptor, KotlinParameterDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor = impl + + override val value: ReceiverValue + get() = KotlinReceiverValue(impl().value) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue.kt new file mode 100644 index 000000000..09baae351 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType +import org.jetbrains.kotlin.resolve.scopes.receivers.ClassValueReceiver + +class KotlinReceiverValue(val impl: org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue) : + ReceiverValue { + fun impl(): org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue = impl + override val type: Type + get() = KotlinType(impl().type) + override val isClassReceiver: Boolean + get() = impl is ClassValueReceiver +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument.kt new file mode 100644 index 000000000..cf0e51d02 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument + +open class KotlinResolvedValueArgument( + open val impl: org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument +) : ResolvedValueArgument { + open fun impl(): org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument = impl + override val arguments: List + get() = impl().arguments.map { KotlinValueArgument(it) } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor.kt new file mode 100644 index 000000000..a4778a45b --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor.kt @@ -0,0 +1,31 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.SimpleFunctionDescriptor +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind + +class KotlinSimpleFunctionDescriptor( + override val impl: org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor +) : SimpleFunctionDescriptor, KotlinFunctionDescriptor(impl) { + + override fun impl(): org.jetbrains.kotlin.descriptors.FunctionDescriptor = impl + + override val kind: CallableMemberDescriptor.Kind + get() = + when (impl().kind) { + Kind.DECLARATION -> CallableMemberDescriptor.Kind.DECLARATION + Kind.FAKE_OVERRIDE -> CallableMemberDescriptor.Kind.FAKE_OVERRIDE + Kind.DELEGATION -> CallableMemberDescriptor.Kind.DELEGATION + Kind.SYNTHESIZED -> CallableMemberDescriptor.Kind.SYNTHESIZED + } + override val isOperator: Boolean + get() = impl().isOperator + override val isInfix: Boolean + get() = impl().isInfix + override val isInline: Boolean + get() = impl().isInline + override val isTailrec: Boolean + get() = impl().isTailrec + override val isSuspend: Boolean + get() = impl().isSuspend +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor.kt new file mode 100644 index 000000000..53e2e9789 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor.kt @@ -0,0 +1,17 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasDescriptor + +class KotlinTypeAliasConstructorDescriptor( + override val impl: org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor +) : KotlinConstructorDescriptor(impl), TypeAliasConstructorDescriptor { + override fun impl(): org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor = impl + + override val underlyingConstructorDescriptor: ConstructorDescriptor + get() = KotlinConstructorDescriptor(impl.underlyingConstructorDescriptor) + + override fun getContainingDeclaration(): TypeAliasDescriptor = + KotlinTypeAliasDescriptor(impl.containingDeclaration) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor.kt new file mode 100644 index 000000000..08dc5c646 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor.kt @@ -0,0 +1,21 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasConstructorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType + +class KotlinTypeAliasDescriptor(val impl: org.jetbrains.kotlin.descriptors.TypeAliasDescriptor) : + TypeAliasDescriptor, KotlinClassifierDescriptorWithTypeParameters { + override fun impl(): org.jetbrains.kotlin.descriptors.TypeAliasDescriptor = impl + override val underlyingType: Type + get() = KotlinType(impl().underlyingType) + override val expandedType: Type + get() = KotlinType(impl().expandedType) + override val classDescriptor: ClassDescriptor? + get() = impl().classDescriptor?.model() + override val constructors: Collection + get() = impl().constructors.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor.kt new file mode 100644 index 000000000..7c5469a1f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor.kt @@ -0,0 +1,24 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType + +fun interface KotlinTypeConstructor : TypeConstructor { + + fun impl(): org.jetbrains.kotlin.types.TypeConstructor + + override val parameters: List + get() = impl().parameters.map { it.model() } + override val supertypes: Collection + get() = impl().supertypes.map { KotlinType(it) } + override val isFinal: Boolean + get() = impl().isFinal + override val isDenotable: Boolean + get() = impl().isDenotable + override val declarationDescriptor: ClassifierDescriptor? + get() = impl().declarationDescriptor?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor.kt new file mode 100644 index 000000000..6a8514e5e --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor.kt @@ -0,0 +1,30 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.Variance.INVARIANT +import org.jetbrains.kotlin.types.Variance.IN_VARIANCE +import org.jetbrains.kotlin.types.Variance.OUT_VARIANCE + +fun interface KotlinTypeParameterDescriptor : TypeParameterDescriptor, KotlinClassifierDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.TypeParameterDescriptor + + override val isReified: Boolean + get() = impl().isReified + override val variance: Variance + get() = + when (impl().variance) { + INVARIANT -> Variance.Invariant + IN_VARIANCE -> Variance.In + OUT_VARIANCE -> Variance.Out + } + override val upperBounds: List + get() = impl().upperBounds.map { KotlinType(it) } + override val index: Int + get() = impl().index + override val isCapturedFromOuterDeclaration: Boolean + get() = impl().isCapturedFromOuterDeclaration +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument.kt new file mode 100644 index 000000000..33c412b03 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument.kt @@ -0,0 +1,26 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements.KotlinElement +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements.KotlinValueArgumentName +import org.jetbrains.kotlin.psi.KtElement + +class KotlinValueArgument(val impl: org.jetbrains.kotlin.psi.ValueArgument) : + ValueArgument, KotlinElement { + override fun getArgumentName(): ValueArgumentName? = + impl.getArgumentName()?.let { KotlinValueArgumentName(it) } + + override fun isNamed(): Boolean = impl.isNamed() + + override fun isExternal(): Boolean = impl.isExternal() + + override val argumentExpression: Expression? + get() = impl.getArgumentExpression()?.model() + override val isSpread: Boolean + get() = impl.getSpreadElement() != null + + override fun impl(): KtElement = impl.asElement() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor.kt new file mode 100644 index 000000000..5cfdeb948 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor.kt @@ -0,0 +1,11 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType + +fun interface KotlinValueDescriptor : ValueDescriptor, KotlinCallableDescriptor { + override fun impl(): org.jetbrains.kotlin.descriptors.ValueDescriptor + override val type: Type + get() = KotlinType(impl().type) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor.kt new file mode 100644 index 000000000..8c6baf901 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor.kt @@ -0,0 +1,27 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType +import org.jetbrains.kotlin.psi.KtParameter +import org.jetbrains.kotlin.resolve.source.getPsi + +class KotlinValueParameterDescriptor( + override val impl: org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +) : ValueParameterDescriptor, KotlinVariableDescriptor(impl), KotlinParameterDescriptor { + override fun impl(): org.jetbrains.kotlin.descriptors.ValueParameterDescriptor = impl + override val index: Int + get() = impl().index + override val isCrossinline: Boolean + get() = impl().isCrossinline + override val isNoinline: Boolean + get() = impl().isNoinline + override val varargElementType: Type? + get() = impl().varargElementType?.let { KotlinType(it) } + + override fun declaresDefaultValue(): Boolean = impl().declaresDefaultValue() + override val defaultValue: Expression? + get() = (impl.source.getPsi() as? KtParameter)?.defaultValue?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor.kt new file mode 100644 index 000000000..29fd5c478 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableAccessorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptorWithAccessors +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +abstract class KotlinVariableAccessorDescriptor( + override val impl: org.jetbrains.kotlin.descriptors.VariableAccessorDescriptor +) : VariableAccessorDescriptor, KotlinFunctionDescriptor(impl) { + override fun impl(): org.jetbrains.kotlin.descriptors.VariableAccessorDescriptor = impl + override val correspondingVariable: VariableDescriptorWithAccessors + get() = impl().correspondingVariable.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor.kt new file mode 100644 index 000000000..54edd367e --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor.kt @@ -0,0 +1,20 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor + +abstract class KotlinVariableDescriptor( + open val impl: org.jetbrains.kotlin.descriptors.VariableDescriptor +) : VariableDescriptor, KotlinValueDescriptor { + + override fun impl(): org.jetbrains.kotlin.descriptors.VariableDescriptor = impl + + override val isVar: Boolean + get() = impl().isVar + override val isConst: Boolean + get() = impl().isConst + override val isLateInit: Boolean + get() = impl().isLateInit +} + +class KotlinDefaultVariableDescriptor(impl: org.jetbrains.kotlin.descriptors.VariableDescriptor) : + KotlinVariableDescriptor(impl) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors.kt new file mode 100644 index 000000000..c397d5d02 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableAccessorDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptorWithAccessors +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +abstract class KotlinVariableDescriptorWithAccessors( + override val impl: org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors +) : VariableDescriptorWithAccessors, KotlinVariableDescriptor(impl) { + + override fun impl(): org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors = impl + override val getter: VariableAccessorDescriptor? + get() = impl().getter?.model() + override val isDelegated: Boolean + get() = impl().isDelegated + override val setter: VariableAccessorDescriptor? + get() = impl().setter?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility.kt new file mode 100644 index 000000000..5abba2d83 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility.kt @@ -0,0 +1,11 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility + +fun interface KotlinVisibility : Visibility { + fun impl(): org.jetbrains.kotlin.descriptors.Visibility + override val isPublicAPI: Boolean + get() = impl().isPublicAPI + override val name: String + get() = impl().name +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated.kt new file mode 100644 index 000000000..9e7f2fa24 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotated +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtAnnotated + +fun interface KotlinAnnotated : Annotated, KotlinElement { + override fun impl(): KtAnnotated + + override fun getAnnotations(): List = impl().annotations.map { it.model() } + + override val annotationEntries: List + get() = impl().annotationEntries.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression.kt new file mode 100644 index 000000000..b7d77cd60 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression.kt @@ -0,0 +1,14 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotatedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtAnnotatedExpression + +class KotlinAnnotatedExpression(val impl: KtAnnotatedExpression) : + AnnotatedExpression, KotlinAnnotated, KotlinAnnotationsContainer { + override fun impl(): KtAnnotatedExpression = impl + + override val baseExpression: Expression? + get() = impl().baseExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation.kt new file mode 100644 index 000000000..a056161f2 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationUseSiteTarget +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtAnnotation + +class KotlinAnnotation(val impl: KtAnnotation) : Annotation, KotlinElement { + override fun impl(): KtAnnotation = impl + override val entries: List + get() = impl().entries.map { it.model() } + override val useSiteTarget: AnnotationUseSiteTarget? + get() = impl().useSiteTarget?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry.kt new file mode 100644 index 000000000..813bcaa70 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationUseSiteTarget +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtAnnotationEntry + +class KotlinAnnotationEntry(val impl: KtAnnotationEntry) : AnnotationEntry, KotlinCallElement { + override fun impl(): KtAnnotationEntry = impl + override val typeReference: TypeReference? + get() = impl().typeReference?.model() + override val useSiteTarget: AnnotationUseSiteTarget? + get() = impl().useSiteTarget?.model() + override val shortName: Name? + get() = impl().shortName?.asString()?.let { Name(it) } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer.kt new file mode 100644 index 000000000..a4a68ad2f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationsContainer +import org.jetbrains.kotlin.psi.KtAnnotationsContainer + +fun interface KotlinAnnotationsContainer : AnnotationsContainer, KotlinElement { + override fun impl(): KtAnnotationsContainer +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer.kt new file mode 100644 index 000000000..0eec5e1d0 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtAnonymousInitializer + +fun interface KotlinAnonymousInitializer : AnonymousInitializer, KotlinDeclaration { + override fun impl(): KtAnonymousInitializer + override val containingDeclaration: Declaration + get() = impl().containingDeclaration.model() + override val body: Expression? + get() = impl().body?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression.kt new file mode 100644 index 000000000..d00c83b64 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ArrayAccessExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtArrayAccessExpression + +class KotlinArrayAccessExpression(val impl: KtArrayAccessExpression) : + ArrayAccessExpression, KotlinReferenceExpression { + override fun impl(): KtArrayAccessExpression = impl + override val arrayExpression: Expression? + get() = impl().arrayExpression?.model() + override val indexExpressions: List + get() = impl().indexExpressions.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression.kt new file mode 100644 index 000000000..20351d667 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression.kt @@ -0,0 +1,20 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssignmentExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.lexer.KtSingleValueToken +import org.jetbrains.kotlin.psi.KtBinaryExpression + +class KotlinAssignmentExpression(val impl: KtBinaryExpression) : + AssignmentExpression, KotlinOperationExpression { + override fun impl(): KtBinaryExpression = impl + override val operationToken: String + get() = (impl().operationToken as KtSingleValueToken).value + override val operationTokenRpr: String + get() = impl().operationToken.toString() + override val left: Expression? + get() = impl().left?.model() + override val right: Expression? + get() = impl().right?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression.kt new file mode 100644 index 000000000..0859d284f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression.kt @@ -0,0 +1,20 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.lexer.KtSingleValueToken +import org.jetbrains.kotlin.psi.KtBinaryExpression + +class KotlinBinaryExpression(val impl: KtBinaryExpression) : + BinaryExpression, KotlinOperationExpression { + override fun impl(): KtBinaryExpression = impl + override val operationToken: String + get() = (impl().operationToken as KtSingleValueToken).value + override val operationTokenRpr: String + get() = impl().operationToken.toString() + override val left: Expression? + get() = impl().left?.model() + override val right: Expression? + get() = impl().right?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression.kt new file mode 100644 index 000000000..866e333a2 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtBlockExpression + +class KotlinBlockExpression(val impl: KtBlockExpression) : + BlockExpression, KotlinElement, KotlinExpression { + override fun impl(): KtBlockExpression = impl + override val firstStatement: Expression? + get() = impl().firstStatement?.model() + override val statements: List + get() = impl().statements.map { it.model() } + override val implicitReturnFromLast: Boolean = true +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression.kt new file mode 100644 index 000000000..b3a11b8fd --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BreakExpression +import org.jetbrains.kotlin.psi.KtBreakExpression + +class KotlinBreakExpression(val impl: KtBreakExpression) : + BreakExpression, KotlinExpressionWithLabel { + override fun impl(): KtBreakExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement.kt new file mode 100644 index 000000000..efb8d4392 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement.kt @@ -0,0 +1,22 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallElement +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionLambdaArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinValueArgument +import org.jetbrains.kotlin.psi.KtCallElement + +fun interface KotlinCallElement : CallElement, KotlinElement { + override fun impl(): KtCallElement + override val calleeExpression: Expression? + get() = impl().calleeExpression?.model() + override val valueArguments: List + get() = impl().valueArguments.map { KotlinValueArgument(it) } + override val lambdaArguments: List + get() = impl().lambdaArguments.map { it.model() } + override val typeArguments: List + get() = TODO("Not yet implemented") +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression.kt new file mode 100644 index 000000000..31a4cda29 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallExpression +import org.jetbrains.kotlin.psi.KtCallExpression + +class KotlinCallExpression(val impl: KtCallExpression) : + CallExpression, KotlinCallElement, KotlinReferenceExpression { + override fun impl(): KtCallExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration.kt new file mode 100644 index 000000000..ad06dc356 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration.kt @@ -0,0 +1,21 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtCallableDeclaration + +fun interface KotlinCallableDeclaration : + CallableDeclaration, KotlinNamedDeclaration, KotlinTypeParameterListOwner { + override fun impl(): KtCallableDeclaration + override val valueParameterList: ParameterList? + get() = impl().valueParameterList?.model() + override val valueParameters: List + get() = impl().valueParameters.map { it.model() } + override val receiverTypeReference: TypeReference? + get() = impl().receiverTypeReference?.model() + override val typeReference: TypeReference? + get() = impl().typeReference?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression.kt new file mode 100644 index 000000000..9e0abff56 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression.kt @@ -0,0 +1,14 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableReferenceExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtCallableReferenceExpression + +class KotlinCallableReferenceExpression(val impl: KtCallableReferenceExpression) : + CallableReferenceExpression, KotlinDoubleColonExpression { + override fun impl(): KtCallableReferenceExpression = impl + + override val callableReference: SimpleNameExpression + get() = impl.callableReference.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause.kt new file mode 100644 index 000000000..5400b722e --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CatchClause +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtCatchClause + +class KotlinCatchClause(val impl: KtCatchClause) : CatchClause, KotlinElement { + override fun impl(): KtCatchClause = impl + override val parameterList: ParameterList? + get() = impl().parameterList?.model() + override val catchParameter: Parameter? + get() = impl().catchParameter?.model() + override val catchBody: Expression? + get() = impl().catchBody?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass.kt new file mode 100644 index 000000000..edaf606af --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass.kt @@ -0,0 +1,34 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Class +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtClass + +open class KotlinClass(open val impl: KtClass) : Class, KotlinClassOrObject { + override fun impl(): KtClass = impl + + override fun getProperties(): List = impl().getProperties().map { it.model() } + + override fun isInterface(): Boolean = impl().isInterface() + + override fun isEnum(): Boolean = impl().isEnum() + + override fun isData(): Boolean = impl().isData() + + override fun isSealed(): Boolean = impl().isSealed() + + override fun isInner(): Boolean = impl().isInner() + + override fun isInline(): Boolean = impl().isInline() + + override fun isValue(): Boolean = impl().isValue() + + override fun getAnonymousInitializers(): List = + impl().getAnonymousInitializers().map { it.model() } + + override fun isTopLevel(): Boolean = impl().isTopLevel() + + override fun isAnnotation(): Boolean = impl().isAnnotation() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody.kt new file mode 100644 index 000000000..d4a3ea1c0 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody.kt @@ -0,0 +1,25 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedFunction +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtClassBody + +class KotlinClassBody(val impl: KtClassBody) : + ClassBody, KotlinDeclarationContainer, KotlinElement { + override fun impl(): KtClassBody = impl + override val anonymousInitializers: List + get() = impl().anonymousInitializers.map { it.model() } + override val properties: List + get() = impl().properties.map { it.model() } + override val functions: List + get() = impl().functions.map { it.model() } + override val enumEntries: List + get() = impl().enumEntries.map { it.model() } + override val allCompanionObjects: List + get() = impl().allCompanionObjects.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer.kt new file mode 100644 index 000000000..adb87c7da --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassInitializer +import org.jetbrains.kotlin.psi.KtClassInitializer + +class KotlinClassInitializer(val impl: KtClassInitializer) : + ClassInitializer, KotlinAnonymousInitializer { + override fun impl(): KtClassInitializer = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression.kt new file mode 100644 index 000000000..234d486c2 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassLiteralExpression +import org.jetbrains.kotlin.psi.KtClassLiteralExpression + +class KotlinClassLiteralExpression(val impl: KtClassLiteralExpression) : + ClassLiteralExpression, KotlinDoubleColonExpression { + override fun impl(): KtClassLiteralExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject.kt new file mode 100644 index 000000000..9a1c524b4 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject.kt @@ -0,0 +1,24 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtClassOrObject + +fun interface KotlinClassOrObject : ClassOrObject, KotlinNamedDeclaration, KotlinPureClassOrObject { + override fun impl(): KtClassOrObject + + override fun getAnonymousInitializers(): List = + impl().getAnonymousInitializers().map { it.model() } + + override fun isTopLevel(): Boolean = impl().isTopLevel() + + override fun isAnnotation(): Boolean = impl().isAnnotation() + + override val name: String? + get() = impl().name + + override val psiOrParent: Element + get() = impl().psiOrParent.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation.kt new file mode 100644 index 000000000..591601490 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation.kt @@ -0,0 +1,20 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation + +class KotlinCompilerMessageSourceLocation( + val impl: org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation +) : CompilerMessageSourceLocation { + override val column: Int + get() = impl.column + override val columnEnd: Int + get() = impl.columnEnd + override val line: Int + get() = impl.line + override val lineContent: String? + get() = impl.lineContent + override val lineEnd: Int + get() = impl.lineEnd + override val path: String + get() = impl.path +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression.kt new file mode 100644 index 000000000..13586789a --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression +import org.jetbrains.kotlin.psi.KtConstantExpression + +open class KotlinConstantExpression(val impl: KtConstantExpression) : + ConstantExpression, KotlinExpression { + override fun impl(): KtConstantExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression.kt new file mode 100644 index 000000000..b2f0dfb11 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression.kt @@ -0,0 +1,14 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression +import org.jetbrains.kotlin.psi.KtStringTemplateExpression + +open class KotlinConstantStringExpression(val impl: KtStringTemplateExpression) : + ConstantExpression, KotlinExpression { + + init { + require(!impl.hasInterpolation()) + } + + override fun impl(): KtStringTemplateExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor.kt new file mode 100644 index 000000000..effb4f439 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Constructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtConstructor + +fun interface KotlinConstructor> : Constructor, KotlinFunction { + override fun impl(): KtConstructor<*> + override fun getContainingClassOrObject(): ClassOrObject = + impl().getContainingClassOrObject().model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression.kt new file mode 100644 index 000000000..6dd7c0de3 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorCalleeExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtConstructorCalleeExpression + +class KotlinConstructorCalleeExpression(override val impl: KtConstructorCalleeExpression) : + ConstructorCalleeExpression, KotlinDefaultExpression(impl) { + override fun impl(): KtConstructorCalleeExpression = impl + override val typeReference: TypeReference? + get() = impl().typeReference?.model() + override val constructorReferenceExpression: SimpleNameExpression? + get() = impl().constructorReferenceExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall.kt new file mode 100644 index 000000000..6c1f11f24 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorDelegationCall +import org.jetbrains.kotlin.psi.KtConstructorDelegationCall + +class KotlinConstructorDelegationCall(val impl: KtConstructorDelegationCall) : + ConstructorDelegationCall, KotlinElement, KotlinCallElement { + override fun impl(): KtConstructorDelegationCall = impl + override val isImplicit: Boolean + get() = impl().isImplicit + override val isCallToThis: Boolean + get() = impl().isCallToThis +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression.kt new file mode 100644 index 000000000..341c73c28 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorDelegationReferenceExpression +import org.jetbrains.kotlin.psi.KtConstructorDelegationReferenceExpression + +class KotlinConstructorDelegationReferenceExpression( + val impl: KtConstructorDelegationReferenceExpression +) : ConstructorDelegationReferenceExpression, KotlinExpression, KotlinReferenceExpression { + override fun impl(): KtConstructorDelegationReferenceExpression = impl + override val isThis: Boolean + get() = impl().isThis +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression.kt new file mode 100644 index 000000000..faca88c4d --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ContinueExpression +import org.jetbrains.kotlin.psi.KtContinueExpression + +class KotlinContinueExpression(val impl: KtContinueExpression) : + ContinueExpression, KotlinExpressionWithLabel { + override fun impl(): KtContinueExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt new file mode 100644 index 000000000..d3666199d --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt @@ -0,0 +1,20 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.psiUtil.parents + +fun interface KotlinDeclaration : Declaration, KotlinExpression, KotlinModifierListOwner { + override fun impl(): KtDeclaration + override val name: String? + get() = impl().name + override val parents: List + get() = + impl().parents.filter { it !is KtFile }.filterIsInstance().toList().map { + it.model() + } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer.kt new file mode 100644 index 000000000..420457a40 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationContainer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtDeclarationContainer + +fun interface KotlinDeclarationContainer : DeclarationContainer { + fun impl(): KtDeclarationContainer + override val declarations: List + get() = impl().declarations.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody.kt new file mode 100644 index 000000000..16841362a --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody.kt @@ -0,0 +1,29 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.phases.analysis.body +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtDeclarationWithBody + +fun interface KotlinDeclarationWithBody : DeclarationWithBody, KotlinDeclaration { + override fun impl(): KtDeclarationWithBody + override val bodyExpression: Expression? + get() = impl().bodyExpression?.model() + + override fun hasBlockBody(): Boolean = impl().hasBlockBody() + + override fun hasBody(): Boolean = impl().hasBody() + + override fun hasDeclaredReturnType(): Boolean = impl().hasDeclaredReturnType() + + override fun body(): Expression? = impl().body()?.model() + + override val valueParameters: List + get() = impl().valueParameters.map { it.model() } + + override val bodyBlockExpression: BlockExpression? + get() = impl().bodyBlockExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer.kt new file mode 100644 index 000000000..b75ec8203 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithInitializer +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtDeclarationWithInitializer + +fun interface KotlinDeclarationWithInitializer : DeclarationWithInitializer, KotlinDeclaration { + override fun impl(): KtDeclarationWithInitializer + + override val initializer: Expression? + get() = impl().initializer?.model() + + override fun hasInitializer(): Boolean = impl().hasInitializer() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement.kt new file mode 100644 index 000000000..48834b67a --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import org.jetbrains.kotlin.psi.KtElement + +open class KotlinDefaultElement(open val impl: KtElement) : KotlinElement { + override fun impl(): KtElement = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression.kt new file mode 100644 index 000000000..8d6338330 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression.kt @@ -0,0 +1,7 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import org.jetbrains.kotlin.psi.KtExpression + +open class KotlinDefaultExpression(open val impl: KtExpression) : KotlinExpression { + override fun impl(): KtExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry.kt new file mode 100644 index 000000000..4d63aac1e --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DelegatedSuperTypeEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtDelegatedSuperTypeEntry + +class KotlinDelegatedSuperTypeEntry(val impl: KtDelegatedSuperTypeEntry) : + DelegatedSuperTypeEntry, KotlinSuperTypeListEntry { + override fun impl(): KtDelegatedSuperTypeEntry = impl + override val delegateExpression: Expression? + get() = impl().delegateExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration.kt new file mode 100644 index 000000000..88a09df41 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclarationEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtDestructuringDeclaration + +class KotlinDestructuringDeclaration(val impl: KtDestructuringDeclaration) : + DestructuringDeclaration, KotlinDeclarationWithInitializer { + override fun impl(): KtDestructuringDeclaration = impl + override val entries: List + get() = impl().entries.map { it.model() } + override val isVar: Boolean + get() = impl().isVar +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry.kt new file mode 100644 index 000000000..c9fd74fe7 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry.kt @@ -0,0 +1,11 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclarationEntry +import org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry + +class KotlinDestructuringDeclarationEntry(val impl: KtDestructuringDeclarationEntry) : + DestructuringDeclarationEntry, KotlinVariableDeclaration { + override fun impl(): KtDestructuringDeclarationEntry = impl + override val isVar: Boolean + get() = impl().isVar +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression.kt new file mode 100644 index 000000000..2712db0d0 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoWhileExpression +import org.jetbrains.kotlin.psi.KtDoWhileExpression + +class KotlinDoWhileExpression(val impl: KtDoWhileExpression) : + DoWhileExpression, KotlinWhileExpressionBase { + override fun impl(): KtDoWhileExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression.kt new file mode 100644 index 000000000..3f895f42c --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DotQualifiedExpression +import org.jetbrains.kotlin.psi.KtDotQualifiedExpression + +class KotlinDotQualifiedExpression(val impl: KtDotQualifiedExpression) : + DotQualifiedExpression, KotlinQualifiedExpression { + override fun impl(): KtDotQualifiedExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression.kt new file mode 100644 index 000000000..3600b74e1 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoubleColonExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtDoubleColonExpression + +fun interface KotlinDoubleColonExpression : DoubleColonExpression, KotlinExpression { + override fun impl(): KtDoubleColonExpression + override val receiverExpression: Expression? + get() = impl().receiverExpression?.model() + override val hasQuestionMarks: Boolean + get() = impl().hasQuestionMarks + override val isEmptyLHS: Boolean + get() = impl().isEmptyLHS +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt new file mode 100644 index 000000000..96b0af2a7 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt @@ -0,0 +1,51 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.KotlinResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.KotlinResolvedCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.cli.common.messages.MessageUtil +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtStringTemplateEntry +import org.jetbrains.kotlin.psi.psiUtil.parents +import org.jetbrains.kotlin.resolve.BindingContextUtils +import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall + +fun interface KotlinElement : Element { + override fun impl(): KtElement + + override val text: String + get() = impl().text + + override fun getResolvedCall(context: ResolutionContext): ResolvedCall? = + (context as? KotlinResolutionContext)?.let { ctx -> + impl().getResolvedCall(ctx.bindingContext)?.let { KotlinResolvedCall(it) } + } + + override fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? = + (context as? KotlinResolutionContext)?.let { ctx -> + BindingContextUtils.extractVariableDescriptorFromReference(ctx.bindingContext, impl()) + ?.model() + } + + override fun parents(): List = + impl() + .parents + .filter { it !is KtFile && it !is KtStringTemplateEntry } + .filterIsInstance() + .toList() + .map { it.model() } + + override fun location(): CompilerMessageSourceLocation? = + MessageUtil.psiElementToMessageLocation(impl().psiOrParent)?.let { + KotlinCompilerMessageSourceLocation(it) + } + + override val psiOrParent: Element + get() = impl().psiOrParent.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry.kt new file mode 100644 index 000000000..0ada19b30 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry +import org.jetbrains.kotlin.psi.KtEnumEntry + +class KotlinEnumEntry(override val impl: KtEnumEntry) : EnumEntry, KotlinClass(impl) { + override fun impl(): KtEnumEntry = impl + override fun hasInitializer(): Boolean = impl().hasInitializer() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt new file mode 100644 index 000000000..f25e05f78 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt @@ -0,0 +1,21 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.KotlinResolutionContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.psiUtil.lastBlockStatementOrThis +import org.jetbrains.kotlin.resolve.calls.callUtil.getType + +fun interface KotlinExpression : Expression, KotlinElement { + override fun impl(): KtExpression + override fun type(context: ResolutionContext): Type? = + if (context is KotlinResolutionContext) + impl().getType(context.bindingContext)?.let { KotlinType(it) } + else null + + override fun lastBlockStatementOrThis(): Expression = impl().lastBlockStatementOrThis().model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument.kt new file mode 100644 index 000000000..1398551bb --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionLambdaArgument +import org.jetbrains.kotlin.psi.KtLambdaArgument + +class KotlinExpressionLambdaArgument(override val impl: KtLambdaArgument) : + ExpressionLambdaArgument, KotlinLambdaArgument(impl) { + override fun impl(): KtLambdaArgument = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument.kt new file mode 100644 index 000000000..e6e081aea --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument.kt @@ -0,0 +1,22 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +open class KotlinExpressionValueArgument(open val impl: org.jetbrains.kotlin.psi.KtValueArgument) : + ValueArgument, KotlinElement { + override fun impl(): org.jetbrains.kotlin.psi.KtValueArgument = impl + + override fun getArgumentName(): ValueArgumentName? = impl().getArgumentName()?.model() + + override fun isNamed(): Boolean = impl().isNamed() + + override fun isExternal(): Boolean = impl().isExternal() + + override val argumentExpression: Expression? + get() = impl().getArgumentExpression()?.model() + override val isSpread: Boolean + get() = impl().isSpread +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName.kt new file mode 100644 index 000000000..416396eb5 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtValueArgumentName + +fun interface KotlinExpressionValueArgumentName : ValueArgumentName { + fun impl(): KtValueArgumentName + override val asName: Name + get() = Name(impl().asName.asString()) + override val referenceExpression: SimpleNameExpression? + get() = impl().referenceExpression.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel.kt new file mode 100644 index 000000000..ed8064f87 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel.kt @@ -0,0 +1,17 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionWithLabel +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtExpressionWithLabel + +fun interface KotlinExpressionWithLabel : ExpressionWithLabel, KotlinExpression { + override fun impl(): KtExpressionWithLabel + override fun getTargetLabel(): SimpleNameExpression? = impl().getTargetLabel()?.model() + + override fun getLabelName(): String? = impl().getLabelName() + + override fun getLabelNameAsName(): Name? = + impl().getLabelNameAsName()?.let { Name(it.asString()) } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection.kt new file mode 100644 index 000000000..111f59122 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FinallySection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtFinallySection + +class KotlinFinallySection(val impl: KtFinallySection) : FinallySection, KotlinElement { + override fun impl(): KtFinallySection = impl + override val finalExpression: BlockExpression + get() = impl.finalExpression.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression.kt new file mode 100644 index 000000000..1db308c87 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ForExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtForExpression + +class KotlinForExpression(val impl: KtForExpression) : ForExpression, KotlinLoopExpression { + override fun impl(): KtForExpression = impl + override val loopParameter: Parameter? + get() = impl().loopParameter?.model() + override val destructuringDeclaration: DestructuringDeclaration? + get() = impl().destructuringDeclaration?.model() + override val loopRange: Expression? + get() = impl().loopRange?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction.kt new file mode 100644 index 000000000..c5a5ba565 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Function +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtFunction + +interface KotlinFunction : Function, KotlinDeclarationWithBody, KotlinCallableDeclaration { + override fun impl(): KtFunction + override val isLocal: Boolean + get() = impl().isLocal + override val valueParameters: List + get() = impl().valueParameters.map { it.model() } +} + +class KotlinDefaultFunction(val impl: KtFunction) : KotlinFunction { + override fun impl(): KtFunction = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral.kt new file mode 100644 index 000000000..269016edd --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral.kt @@ -0,0 +1,14 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FunctionLiteral +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtFunctionLiteral + +class KotlinFunctionLiteral(val impl: KtFunctionLiteral) : FunctionLiteral, KotlinFunction { + override fun impl(): KtFunctionLiteral = impl + override fun hasParameterSpecification(): Boolean = impl().hasParameterSpecification() + + override val bodyExpression: Expression? + get() = impl().bodyExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression.kt new file mode 100644 index 000000000..9d13b9e05 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IfExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtIfExpression + +class KotlinIfExpression(val impl: KtIfExpression) : IfExpression, KotlinExpression { + override fun impl(): KtIfExpression = impl + override val condition: Expression? + get() = impl().condition?.model() + override val thenExpression: Expression? + get() = impl().then?.model() + override val elseExpression: Expression? + get() = impl().`else`?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList.kt new file mode 100644 index 000000000..0bb649b4d --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.InitializerList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtInitializerList + +class KotlinInitializerList(val impl: KtInitializerList) : InitializerList, KotlinElement { + override fun impl() = impl + + override val entries: List + get() = impl.initializers.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel.kt new file mode 100644 index 000000000..cd39c7c36 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.InstanceExpressionWithLabel +import org.jetbrains.kotlin.psi.KtInstanceExpressionWithLabel + +fun interface KotlinInstanceExpressionWithLabel : + InstanceExpressionWithLabel, KotlinExpressionWithLabel { + override fun impl(): KtInstanceExpressionWithLabel +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression.kt new file mode 100644 index 000000000..40066f8b2 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression.kt @@ -0,0 +1,21 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IsExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtIsExpression + +class KotlinIsExpression(val impl: KtIsExpression) : + IsExpression, KotlinExpression, KotlinOperationExpression { + override fun impl(): KtIsExpression = impl + override val leftHandSide: Expression + get() = impl().leftHandSide.model() + override val typeReference: TypeReference? + get() = impl().typeReference?.model() + override val operationReference: SimpleNameExpression + get() = impl().operationReference.model() + override val isNegated: Boolean + get() = impl().isNegated +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression.kt new file mode 100644 index 000000000..38e453760 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LabelReferenceExpression +import org.jetbrains.kotlin.psi.KtLabelReferenceExpression + +class KotlinLabelReferenceExpression(val impl: KtLabelReferenceExpression) : + LabelReferenceExpression, KotlinSimpleNameExpression { + override fun impl(): KtLabelReferenceExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression.kt new file mode 100644 index 000000000..20320af3f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LabeledExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtLabeledExpression + +fun interface KotlinLabeledExpression : LabeledExpression, KotlinExpressionWithLabel { + override fun impl(): KtLabeledExpression + override val baseExpression: Expression? + get() = impl().baseExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument.kt new file mode 100644 index 000000000..f90d1ed85 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtLambdaArgument + +open class KotlinLambdaArgument(override val impl: KtLambdaArgument) : + LambdaArgument, KotlinExpressionValueArgument(impl) { + override fun impl(): KtLambdaArgument = impl + override fun getLambdaExpression(): LambdaExpression? = impl().getLambdaExpression()?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression.kt new file mode 100644 index 000000000..945bc59b1 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression.kt @@ -0,0 +1,20 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FunctionLiteral +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtLambdaExpression + +class KotlinLambdaExpression(val impl: KtLambdaExpression) : LambdaExpression, KotlinExpression { + override fun impl(): KtLambdaExpression = impl + override val functionLiteral: FunctionLiteral + get() = impl().functionLiteral.model() + override val valueParameters: List + get() = impl().valueParameters.map { it.model() } + override val bodyExpression: BlockExpression? + get() = impl().bodyExpression?.model() + + override fun hasDeclaredReturnType(): Boolean = impl().hasDeclaredReturnType() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression.kt new file mode 100644 index 000000000..c88675f11 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LoopExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtLoopExpression + +fun interface KotlinLoopExpression : LoopExpression, KotlinExpression { + override fun impl(): KtLoopExpression + override val body: Expression? + get() = impl().body?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList.kt new file mode 100644 index 000000000..94f672be4 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotation +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtModifierList + +class KotlinModifierList(val impl: KtModifierList) : ModifierList, KotlinAnnotationsContainer { + override fun impl(): KtModifierList = impl + override val annotations: List + get() = impl().annotations.map { it.model() } + override val annotationEntries: List + get() = impl().annotationEntries.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner.kt new file mode 100644 index 000000000..3a08f92eb --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierListOwner +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtModifierListOwner + +fun interface KotlinModifierListOwner : ModifierListOwner, KotlinAnnotated { + override fun impl(): KtModifierListOwner + + override val modifierList: ModifierList? + get() = impl().modifierList?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression.kt new file mode 100644 index 000000000..e3928571f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NameReferenceExpression +import org.jetbrains.kotlin.psi.KtNameReferenceExpression + +class KotlinNameReferenceExpression(val impl: KtNameReferenceExpression) : + NameReferenceExpression, KotlinSimpleNameExpression { + override fun impl(): KtNameReferenceExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration.kt new file mode 100644 index 000000000..48f05ee65 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedDeclaration +import org.jetbrains.kotlin.psi.KtNamedDeclaration + +fun interface KotlinNamedDeclaration : NamedDeclaration, KotlinDeclaration { + override fun impl(): KtNamedDeclaration + override val nameAsName: Name? + get() = impl().nameAsName?.let { Name(it.asString()) } + override val nameAsSafeName: Name + get() = Name(impl().nameAsSafeName.asString()) + override val fqName: FqName? + get() = impl().fqName?.let { FqName(it.asString()) } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction.kt new file mode 100644 index 000000000..437a85af8 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedFunction +import org.jetbrains.kotlin.psi.KtNamedFunction + +class KotlinNamedFunction(val impl: KtNamedFunction) : + KotlinFunction, NamedFunction, KotlinDeclarationWithInitializer { + override fun impl(): KtNamedFunction = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression.kt new file mode 100644 index 000000000..dc598a2bb --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NullExpression +import org.jetbrains.kotlin.psi.KtConstantExpression +import org.jetbrains.kotlin.psi.psiUtil.isNull + +class KotlinNullExpression(impl: KtConstantExpression) : + NullExpression, KotlinConstantExpression(impl) { + init { + require(impl.isNull()) + } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration.kt new file mode 100644 index 000000000..1db7e02f7 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration +import org.jetbrains.kotlin.psi.KtObjectDeclaration + +class KotlinObjectDeclaration(val impl: KtObjectDeclaration) : + ObjectDeclaration, KotlinClassOrObject { + override fun impl(): KtObjectDeclaration = impl + + override fun isCompanion(): Boolean = impl().isCompanion() + + override fun isObjectLiteral(): Boolean = impl().isObjectLiteral() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression.kt new file mode 100644 index 000000000..ee5d7ca3b --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectLiteralExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtObjectLiteralExpression + +class KotlinObjectLiteralExpression(val impl: KtObjectLiteralExpression) : + ObjectLiteralExpression, KotlinExpression { + override fun impl(): KtObjectLiteralExpression = impl + override val objectDeclaration: ObjectDeclaration + get() = impl().objectDeclaration.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression.kt new file mode 100644 index 000000000..640e1bd8f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.OperationExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtOperationExpression + +fun interface KotlinOperationExpression : OperationExpression, KotlinExpression { + override fun impl(): KtOperationExpression + override val operationReference: SimpleNameExpression + get() = impl().operationReference.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression.kt new file mode 100644 index 000000000..1cfd9d9a8 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression.kt @@ -0,0 +1,10 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.OperationReferenceExpression +import org.jetbrains.kotlin.psi.KtOperationReferenceExpression + +class KotlinOperationReferenceExpression(val impl: KtOperationReferenceExpression) : + OperationReferenceExpression, KotlinSimpleNameExpression { + override fun impl(): KtOperationReferenceExpression = impl + override fun isConventionOperator(): Boolean = impl().isConventionOperator() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter.kt new file mode 100644 index 000000000..06ab59475 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter.kt @@ -0,0 +1,31 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtParameter + +class KotlinParameter(val impl: KtParameter) : Parameter, KotlinCallableDeclaration { + override fun impl(): KtParameter = impl + override fun hasDefaultValue(): Boolean = impl().hasDefaultValue() + + override val defaultValue: Expression? + get() = impl().defaultValue?.model() + override val isMutable: Boolean + get() = impl().isMutable + override val isVarArg: Boolean + get() = impl().isVarArg + + override fun hasValOrVar(): Boolean = impl.hasValOrVar() + + override val destructuringDeclaration: DestructuringDeclaration? + get() = impl().destructuringDeclaration?.model() + override val isLoopParameter: Boolean + get() = impl().isLoopParameter + override val isCatchParameter: Boolean + get() = impl().isCatchParameter + override val ownerFunction: DeclarationWithBody? + get() = impl().ownerFunction?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList.kt new file mode 100644 index 000000000..5f5b38e4c --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtParameterList + +class KotlinParameterList(val impl: KtParameterList) : KotlinElement { + override fun impl(): KtElement = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression.kt new file mode 100644 index 000000000..8710204f2 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParenthesizedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtParenthesizedExpression + +class KotlinParenthesizedExpression(override val impl: KtParenthesizedExpression) : + ParenthesizedExpression, KotlinDefaultExpression(impl) { + override val expression: Expression? + get() = impl.expression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor.kt new file mode 100644 index 000000000..bc4fda6bb --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor.kt @@ -0,0 +1,10 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor +import org.jetbrains.kotlin.psi.KtConstructor +import org.jetbrains.kotlin.psi.KtPrimaryConstructor + +class KotlinPrimaryConstructor(val impl: KtPrimaryConstructor) : + PrimaryConstructor, KotlinConstructor { + override fun impl(): KtConstructor<*> = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind.kt new file mode 100644 index 000000000..6e3f4f259 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +enum class KotlinProjectionKind { + IN, + OUT, + STAR, + NONE +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty.kt new file mode 100644 index 000000000..02157d3e3 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty.kt @@ -0,0 +1,45 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PropertyAccessor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PropertyDelegate +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtProperty + +class KotlinProperty(val impl: KtProperty) : Property, KotlinVariableDeclaration { + override fun impl(): KtProperty = impl + override val isLocal: Boolean + get() = impl().isLocal + override val isMember: Boolean + get() = impl().isMember + override val isTopLevel: Boolean + get() = impl().isTopLevel + override val accessors: List + get() = impl().accessors.map { it.model() } + override val getter: PropertyAccessor? + get() = impl().getter?.model() + override val setter: PropertyAccessor? + get() = impl().setter?.model() + + override fun hasDelegate(): Boolean = impl().hasDelegate() + + override val delegate: PropertyDelegate? + get() = impl().delegate?.model() + + override fun hasDelegateExpression(): Boolean = impl().hasDelegateExpression() + + override val delegateExpression: Expression? + get() = impl().delegateExpression?.model() + + override fun hasDelegateExpressionOrInitializer(): Boolean = + impl().hasDelegateExpressionOrInitializer() + + override val delegateExpressionOrInitializer: Expression? + get() = impl().delegateExpressionOrInitializer?.model() + + override fun hasBody(): Boolean = impl().hasBody() + + override val isVar: Boolean + get() = impl().isVar +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor.kt new file mode 100644 index 000000000..44db7ccb0 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor.kt @@ -0,0 +1,29 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PropertyAccessor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtPropertyAccessor + +class KotlinPropertyAccessor(val impl: KtPropertyAccessor) : + PropertyAccessor, + KotlinDeclarationWithBody, + KotlinModifierListOwner, + KotlinDeclarationWithInitializer { + override fun impl(): KtPropertyAccessor = impl + override val isSetter: Boolean + get() = impl().isSetter + override val isGetter: Boolean + get() = impl().isGetter + override val parameterList: ParameterList? + get() = impl().parameterList?.model() + override val parameter: Parameter? + get() = impl().parameter?.model() + override val returnTypeReference: TypeReference? + get() = impl().returnTypeReference?.model() + override val property: Property + get() = impl().property.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate.kt new file mode 100644 index 000000000..177f15de5 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PropertyDelegate +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtPropertyDelegate + +class KotlinPropertyDelegate(val impl: KtPropertyDelegate) : PropertyDelegate, KotlinElement { + override fun impl(): KtPropertyDelegate = impl + override val expression: Expression? + get() = impl().expression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject.kt new file mode 100644 index 000000000..d82cb06b0 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject.kt @@ -0,0 +1,43 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassBody +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PureClassOrObject +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtPureClassOrObject + +fun interface KotlinPureClassOrObject : PureClassOrObject, KotlinDeclarationContainer { + override fun impl(): KtPureClassOrObject + + override val name: String? + get() = impl().name + override val isLocal: Boolean + get() = impl().isLocal + override val superTypeListEntries: List + get() = impl().superTypeListEntries.map { it.model() } + override val companionObjects: List + get() = impl().companionObjects.map { it.model() } + + override fun hasExplicitPrimaryConstructor(): Boolean = impl().hasExplicitPrimaryConstructor() + + override fun hasPrimaryConstructor(): Boolean = impl().hasPrimaryConstructor() + + override val primaryConstructor: PrimaryConstructor? + get() = impl().primaryConstructor?.model() + override val primaryConstructorModifierList: ModifierList? + get() = impl().primaryConstructorModifierList?.model() + override val primaryConstructorParameters: List + get() = impl().primaryConstructorParameters.map { it.model() } + override val secondaryConstructors: List + get() = impl().secondaryConstructors.map { it.model() } + override val body: ClassBody? + get() = impl().body?.model() + override val psiOrParent: Element + get() = impl().psiOrParent.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression.kt new file mode 100644 index 000000000..31d24ecea --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression.kt @@ -0,0 +1,14 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.QualifiedExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtQualifiedExpression + +fun interface KotlinQualifiedExpression : QualifiedExpression, KotlinExpression { + override fun impl(): KtQualifiedExpression + override val receiverExpression: Expression + get() = impl().receiverExpression.model() + override val selectorExpression: Expression? + get() = impl().selectorExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression.kt new file mode 100644 index 000000000..0abd7fd96 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReferenceExpression +import org.jetbrains.kotlin.psi.KtReferenceExpression + +fun interface KotlinReferenceExpression : ReferenceExpression, KotlinExpression { + override fun impl(): KtReferenceExpression +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression.kt new file mode 100644 index 000000000..035c9f63f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtReturnExpression + +class KotlinReturnExpression(val impl: KtReturnExpression) : + ReturnExpression, KotlinExpressionWithLabel { + override fun impl(): KtReturnExpression = impl + override val returnedExpression: Expression? + get() = impl().returnedExpression?.model() + override val labeledExpression: Expression? + get() = (impl().labeledExpression as? KtElement)?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression.kt new file mode 100644 index 000000000..a817a7027 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SafeQualifiedExpression +import org.jetbrains.kotlin.psi.KtSafeQualifiedExpression + +class KotlinSafeQualifiedExpression(val impl: KtSafeQualifiedExpression) : + SafeQualifiedExpression, KotlinQualifiedExpression { + override fun impl(): KtSafeQualifiedExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor.kt new file mode 100644 index 000000000..fddf044b6 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorDelegationCall +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtSecondaryConstructor + +class KotlinSecondaryConstructor(val impl: KtSecondaryConstructor) : + SecondaryConstructor, KotlinConstructor { + override fun impl(): KtSecondaryConstructor = impl + override fun getDelegationCall(): ConstructorDelegationCall? = + impl().getDelegationCallOrNull()?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType.kt new file mode 100644 index 000000000..2678c1e88 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SelfType +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtSelfType + +fun interface KotlinSelfType : SelfType, KotlinTypeElement { + override fun impl(): KtSelfType + override val typeArgumentsAsTypes: List + get() = impl().typeArgumentsAsTypes.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression.kt new file mode 100644 index 000000000..8cfe3ebb7 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import org.jetbrains.kotlin.psi.KtSimpleNameExpression + +fun interface KotlinSimpleNameExpression : SimpleNameExpression, KotlinReferenceExpression { + override fun impl(): KtSimpleNameExpression + override fun getReferencedName(): String = impl().getReferencedName() + + override fun getReferencedNameAsName(): Name = Name(impl().getReferencedNameAsName().asString()) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression.kt new file mode 100644 index 000000000..1efc7ec87 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression.kt @@ -0,0 +1,27 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntryString +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtEscapeStringTemplateEntry +import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry +import org.jetbrains.kotlin.psi.KtStringTemplateEntryWithExpression +import org.jetbrains.kotlin.psi.KtStringTemplateExpression + +class KotlinStringTemplateExpression(val impl: KtStringTemplateExpression) : + StringTemplateExpression, KotlinExpression { + override fun impl(): KtStringTemplateExpression = impl + + override val entries: List = + impl.entries.mapNotNull { entry -> + when (entry) { + is KtEscapeStringTemplateEntry -> StringTemplateEntryString(entry.unescapedValue) + is KtLiteralStringTemplateEntry -> StringTemplateEntryString(entry.text) + is KtStringTemplateEntryWithExpression -> + entry.expression?.let { e -> StringTemplateEntryExpression(e.model()) } + else -> null + } + } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression.kt new file mode 100644 index 000000000..b2beba2dc --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtSuperExpression + +class KotlinSuperExpression(val impl: KtSuperExpression) : + SuperExpression, KotlinInstanceExpressionWithLabel { + override fun impl(): KtSuperExpression = impl + override val superTypeQualifier: TypeReference? + get() = impl.superTypeQualifier?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry.kt new file mode 100644 index 000000000..85a128240 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeCallEntry +import org.jetbrains.kotlin.psi.KtSuperTypeCallEntry + +class KotlinSuperTypeCallEntry(val impl: KtSuperTypeCallEntry) : + SuperTypeCallEntry, KotlinSuperTypeListEntry, KotlinCallElement { + override fun impl(): KtSuperTypeCallEntry = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry.kt new file mode 100644 index 000000000..859196aee --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeEntry +import org.jetbrains.kotlin.psi.KtSuperTypeEntry + +class KotlinSuperTypeEntry(val impl: KtSuperTypeEntry) : SuperTypeEntry, KotlinSuperTypeListEntry { + override fun impl(): KtSuperTypeEntry = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList.kt new file mode 100644 index 000000000..d121ef4e5 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtSuperTypeList + +class KotlinSuperTypeList(val impl: KtSuperTypeList) : SuperTypeList, KotlinElement { + override fun impl() = impl + + override val entries: List + get() = impl.entries.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry.kt new file mode 100644 index 000000000..ce8d84404 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtSuperTypeListEntry + +fun interface KotlinSuperTypeListEntry : SuperTypeListEntry, KotlinElement { + override fun impl(): KtSuperTypeListEntry + override val typeReference: TypeReference? + get() = impl().typeReference?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression.kt new file mode 100644 index 000000000..5f521efe2 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression +import org.jetbrains.kotlin.psi.KtThisExpression + +class KotlinThisExpression(val impl: KtThisExpression) : + ThisExpression, KotlinInstanceExpressionWithLabel { + override fun impl(): KtThisExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression.kt new file mode 100644 index 000000000..c605889bf --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThrowExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtThrowExpression + +class KotlinThrowExpression(val impl: KtThrowExpression) : ThrowExpression, KotlinExpression { + override fun impl(): KtThrowExpression = impl + override val thrownExpression: Expression? + get() = impl().thrownExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression.kt new file mode 100644 index 000000000..b8c4a74d4 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CatchClause +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FinallySection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTryExpression + +class KotlinTryExpression(val impl: KtTryExpression) : TryExpression, KotlinExpression { + override fun impl(): KtTryExpression = impl + override val tryBlock: BlockExpression + get() = impl().tryBlock.model() + override val catchClauses: List + get() = impl().catchClauses.map { it.model() } + override val finallyBlock: FinallySection? + get() = impl().finallyBlock?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias.kt new file mode 100644 index 000000000..50d9e6023 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeAlias +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTypeAlias + +class KotlinTypeAlias(val impl: KtTypeAlias) : TypeAlias, KotlinNamedDeclaration { + override fun impl(): KtTypeAlias = impl + override fun isTopLevel(): Boolean = impl.isTopLevel() + override fun getTypeReference(): TypeReference? = impl.getTypeReference()?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList.kt new file mode 100644 index 000000000..bdd62f5cc --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeArgumentList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTypeArgumentList + +class KotlinTypeArgumentList(val impl: KtTypeArgumentList) : TypeArgumentList, KotlinElement { + override fun impl(): KtTypeArgumentList = impl + override val arguments: List + get() = impl().arguments.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression.kt new file mode 100644 index 000000000..182f3fec3 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression.kt @@ -0,0 +1,27 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpresionKind +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtBinaryExpressionWithTypeRHS + +class KotlinTypeCastExpression(val impl: KtBinaryExpressionWithTypeRHS) : + TypeCastExpression, KotlinOperationExpression { + override fun impl(): KtBinaryExpressionWithTypeRHS = impl + + override val operationToken: String + get() = this.operationReference.getReferencedName() + override val left: Expression + get() = impl.left.model() + override val right: TypeReference? + get() = impl.right?.model() + override val kind: TypeCastExpresionKind + get() = + when (operationToken) { + "as" -> TypeCastExpresionKind.POSITIVE_TYPE_CAST + "as?" -> TypeCastExpresionKind.QUESTION_TYPE_CAST + else -> throw IllegalArgumentException("type cast with wrong operator") + } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint.kt new file mode 100644 index 000000000..e176adc69 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTypeConstraint + +class KotlinTypeConstraint(val impl: KtTypeConstraint) : TypeConstraint, KotlinElement { + override fun impl(): KtTypeConstraint = impl + override val subjectTypeParameterName: SimpleNameExpression? + get() = impl().subjectTypeParameterName?.model() + override val boundTypeReference: TypeReference? + get() = impl().boundTypeReference?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList.kt new file mode 100644 index 000000000..598f199be --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTypeConstraintList + +class KotlinTypeConstraintList(val impl: KtTypeConstraintList) : TypeConstraintList, KotlinElement { + override fun impl(): KtTypeConstraintList = impl + override val constraints: List + get() = impl().constraints.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement.kt new file mode 100644 index 000000000..08ba8f2bc --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeElement +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTypeElement + +fun interface KotlinTypeElement : TypeElement, KotlinElement { + override fun impl(): KtTypeElement + override val typeArgumentsAsTypes: List + get() = impl().typeArgumentsAsTypes.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter.kt new file mode 100644 index 000000000..fbef141a4 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter.kt @@ -0,0 +1,23 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTypeParameter +import org.jetbrains.kotlin.types.Variance.INVARIANT +import org.jetbrains.kotlin.types.Variance.IN_VARIANCE +import org.jetbrains.kotlin.types.Variance.OUT_VARIANCE + +class KotlinTypeParameter(val impl: KtTypeParameter) : TypeParameter, KotlinNamedDeclaration { + override fun impl(): KtTypeParameter = impl + override val variance: Variance + get() = + when (impl().variance) { + INVARIANT -> Variance.Invariant + IN_VARIANCE -> Variance.In + OUT_VARIANCE -> Variance.Out + } + override val extendsBounds: List + get() = listOfNotNull(impl().extendsBound?.model()) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList.kt new file mode 100644 index 000000000..562f50335 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTypeParameterList + +class KotlinTypeParameterList(val impl: KtTypeParameterList) : TypeParameterList, KotlinElement { + override fun impl(): KtTypeParameterList = impl + override val parameters: List + get() = impl().parameters.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner.kt new file mode 100644 index 000000000..866b10251 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner.kt @@ -0,0 +1,21 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterListOwner +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTypeParameterListOwner + +fun interface KotlinTypeParameterListOwner : TypeParameterListOwner, KotlinNamedDeclaration { + override fun impl(): KtTypeParameterListOwner + override val typeParameterList: TypeParameterList? + get() = impl().typeParameterList?.model() + override val typeConstraintList: TypeConstraintList? + get() = impl().typeConstraintList?.model() + override val typeConstraints: List + get() = impl().typeConstraints.map { it.model() } + override val typeParameters: List + get() = impl().typeParameters.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection.kt new file mode 100644 index 000000000..32f182f8d --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection.kt @@ -0,0 +1,22 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ProjectionKind +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtProjectionKind +import org.jetbrains.kotlin.psi.KtTypeProjection + +fun interface KotlinTypeProjection : TypeProjection { + fun impl(): KtTypeProjection + override val projectionKind: ProjectionKind + get() = + when (impl().projectionKind) { + KtProjectionKind.IN -> ProjectionKind.IN + KtProjectionKind.OUT -> ProjectionKind.OUT + KtProjectionKind.STAR -> ProjectionKind.STAR + KtProjectionKind.NONE -> ProjectionKind.NONE + } + override val typeReference: TypeReference? + get() = impl().typeReference?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference.kt new file mode 100644 index 000000000..436ba27df --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeElement +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtTypeReference + +class KotlinTypeReference(val impl: KtTypeReference) : + TypeReference, KotlinAnnotated, KotlinAnnotationsContainer { + override fun impl(): KtTypeReference = impl + override val typeElement: TypeElement? + get() = impl().typeElement?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression.kt new file mode 100644 index 000000000..99bb53ff3 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression.kt @@ -0,0 +1,16 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.UnaryExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtUnaryExpression + +class KotlinUnaryExpression(val impl: KtUnaryExpression) : + UnaryExpression, KotlinExpression, KotlinOperationExpression { + override fun impl(): KtUnaryExpression = impl + override val baseExpression: Expression? + get() = impl().baseExpression?.model() + override val operationReference: SimpleNameExpression + get() = impl().operationReference.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList.kt new file mode 100644 index 000000000..1b530c66d --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentList +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtValueArgumentList + +class KotlinValueArgumentList(val impl: KtValueArgumentList) : ValueArgumentList, KotlinElement { + override fun impl(): KtValueArgumentList = impl + override val arguments: List + get() = impl().arguments.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName.kt new file mode 100644 index 000000000..d7c54a8ef --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model + +class KotlinValueArgumentName(val impl: org.jetbrains.kotlin.psi.ValueArgumentName) : + ValueArgumentName { + fun impl(): org.jetbrains.kotlin.psi.ValueArgumentName = impl + override val asName: Name + get() = Name(impl().asName.asString()) + override val referenceExpression: SimpleNameExpression? + get() = impl().referenceExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration.kt new file mode 100644 index 000000000..62a27c794 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableDeclaration +import org.jetbrains.kotlin.psi.KtVariableDeclaration + +fun interface KotlinVariableDeclaration : + CallableDeclaration, KotlinCallableDeclaration, KotlinDeclarationWithInitializer { + override fun impl(): KtVariableDeclaration +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition.kt new file mode 100644 index 000000000..da0148695 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition.kt @@ -0,0 +1,8 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenCondition +import org.jetbrains.kotlin.psi.KtWhenCondition + +fun interface KotlinWhenCondition : WhenCondition, KotlinElement { + override fun impl(): KtWhenCondition +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange.kt new file mode 100644 index 000000000..d429b273a --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.OperationReferenceExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionInRange +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtWhenConditionInRange + +class KotlinWhenConditionInRange(val impl: KtWhenConditionInRange) : + WhenConditionInRange, KotlinWhenCondition { + override fun impl(): KtWhenConditionInRange = impl + override val isNegated: Boolean + get() = impl().isNegated + override val rangeExpression: Expression? + get() = impl().rangeExpression?.model() + override val operationReference: OperationReferenceExpression + get() = impl().operationReference.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern.kt new file mode 100644 index 000000000..3552ee69f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern.kt @@ -0,0 +1,15 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionIsPattern +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtWhenConditionIsPattern + +class KotlinWhenConditionIsPattern(val impl: KtWhenConditionIsPattern) : + WhenConditionIsPattern, KotlinWhenCondition { + override fun impl(): KtWhenConditionIsPattern = impl + override val isNegated: Boolean + get() = impl().isNegated + override val typeReference: TypeReference? + get() = impl().typeReference?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression.kt new file mode 100644 index 000000000..171675335 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression.kt @@ -0,0 +1,13 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionWithExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtWhenConditionWithExpression + +class KotlinWhenConditionWithExpression(val impl: KtWhenConditionWithExpression) : + WhenConditionWithExpression, KotlinWhenCondition { + override fun impl(): KtWhenConditionWithExpression = impl + override val expression: Expression? + get() = impl().expression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry.kt new file mode 100644 index 000000000..b598e293d --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry.kt @@ -0,0 +1,17 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenCondition +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtWhenEntry + +class KotlinWhenEntry(val impl: KtWhenEntry) : WhenEntry, KotlinElement { + override fun impl(): KtWhenEntry = impl + override val isElse: Boolean + get() = impl().isElse + override val expression: Expression? + get() = impl().expression?.model() + override val conditions: List + get() = impl().conditions.map { it.model() } +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression.kt new file mode 100644 index 000000000..d8085a0a1 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression.kt @@ -0,0 +1,22 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenEntry +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenExpression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtWhenExpression + +class KotlinWhenExpression(val impl: KtWhenExpression) : WhenExpression, KotlinExpression { + + override fun impl(): KtWhenExpression = impl + + override val entries: List + get() = impl().entries.map { it.model() } + override val subjectVariable: Property? + get() = impl().subjectVariable?.model() + override val subjectExpression: Expression? + get() = impl().subjectExpression?.model() + override val elseExpression: Expression? + get() = impl().subjectExpression?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression.kt new file mode 100644 index 000000000..a85e58022 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression.kt @@ -0,0 +1,9 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhileExpression +import org.jetbrains.kotlin.psi.KtWhileExpression + +class KotlinWhileExpression(val impl: KtWhileExpression) : + WhileExpression, KotlinWhileExpressionBase { + override fun impl(): KtWhileExpression = impl +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase.kt new file mode 100644 index 000000000..0b9a18064 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase.kt @@ -0,0 +1,12 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhileExpressionBase +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.psi.KtWhileExpressionBase + +fun interface KotlinWhileExpressionBase : WhileExpressionBase, KotlinLoopExpression { + override fun impl(): KtWhileExpressionBase + override val condition: Expression? + get() = impl().condition?.model() +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinType.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinType.kt new file mode 100644 index 000000000..9c35ea65a --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinType.kt @@ -0,0 +1,86 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types + +import arrow.meta.phases.resolve.unwrappedNotNullableType +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.TypeProjection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.types.TypeUtils +import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker +import org.jetbrains.kotlin.types.isNullable +import org.jetbrains.kotlin.types.typeUtil.isAnyOrNullableAny +import org.jetbrains.kotlin.types.typeUtil.isBoolean +import org.jetbrains.kotlin.types.typeUtil.isByte +import org.jetbrains.kotlin.types.typeUtil.isChar +import org.jetbrains.kotlin.types.typeUtil.isDouble +import org.jetbrains.kotlin.types.typeUtil.isFloat +import org.jetbrains.kotlin.types.typeUtil.isInt +import org.jetbrains.kotlin.types.typeUtil.isLong +import org.jetbrains.kotlin.types.typeUtil.isShort +import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf +import org.jetbrains.kotlin.types.typeUtil.isTypeParameter +import org.jetbrains.kotlin.types.typeUtil.isUnsignedNumberType + +internal class KotlinType(val impl: org.jetbrains.kotlin.types.KotlinType) : Type { + override val descriptor: ClassDescriptor? + get() = TypeUtils.getClassDescriptor(impl)?.model() + override val unwrappedNotNullableType: Type + get() = KotlinType(impl.unwrappedNotNullableType) + override val isMarkedNullable: Boolean + get() = impl.isMarkedNullable + override val arguments: List + get() = impl.arguments.map { KotlinTypeProjection(it) } + + override fun isBoolean(): Boolean = impl.isBoolean() + + override fun isNullable(): Boolean = impl.isNullable() + + override fun isSubtypeOf(other: Type): Boolean { + if (this === other) return true + if (other !is KotlinType) return false + if (this.isTypeParameter() && other.isTypeParameter()) return true + if (isMarkedNullable != other.isMarkedNullable) return false + if (NewKotlinTypeChecker.Default.isSubtypeOf(impl.unwrap(), other.impl.unwrap())) return true + + return impl.superTypesAndMe.any { possibleSuperType -> + possibleSuperType.constructor == other.impl.unwrap().constructor + } + } + + private val org.jetbrains.kotlin.types.KotlinType.superTypesAndMe: + List + get() = listOf(this) + this.unwrap().constructor.supertypes.flatMap { it.superTypesAndMe } + + override fun isEqualTo(other: Type): Boolean { + if (this === other) return true + if (other !is KotlinType) return false + if (this.isTypeParameter() && other.isTypeParameter()) return true + if (isMarkedNullable != other.isMarkedNullable) return false + if (NewKotlinTypeChecker.Default.equalTypes(impl.unwrap(), other.impl.unwrap())) return true + + return impl.unwrap().constructor == other.impl.unwrap().constructor + } + + override fun isInt(): Boolean = impl.isInt() + + override fun isLong(): Boolean = impl.isLong() + + override fun isFloat(): Boolean = impl.isFloat() + + override fun isDouble(): Boolean = impl.isDouble() + + override fun isTypeParameter(): Boolean = impl.isTypeParameter() + + override fun isAnyOrNullableAny(): Boolean = impl.isAnyOrNullableAny() + + override fun isByte(): Boolean = impl.isByte() + + override fun isShort(): Boolean = impl.isShort() + + override fun isUnsignedNumberType(): Boolean = impl.isUnsignedNumberType() + + override fun isChar(): Boolean = impl.isChar() + + override fun isString(): Boolean = KotlinBuiltIns.isString(impl) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection.kt new file mode 100644 index 000000000..94d1e86c0 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection.kt @@ -0,0 +1,19 @@ +package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types + +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.TypeProjection +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance + +class KotlinTypeProjection(val impl: org.jetbrains.kotlin.types.TypeProjection) : TypeProjection { + override val projectionKind: Variance + get() = + when (impl.projectionKind) { + org.jetbrains.kotlin.types.Variance.IN_VARIANCE -> Variance.In + org.jetbrains.kotlin.types.Variance.OUT_VARIANCE -> Variance.Out + org.jetbrains.kotlin.types.Variance.INVARIANT -> Variance.Invariant + } + override val type: Type + get() = KotlinType(impl.type) + override val isStarProjection: Boolean + get() = impl.isStarProjection +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt new file mode 100644 index 000000000..81d336e72 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt @@ -0,0 +1,206 @@ +package arrow.meta.plugins.analysis.phases.ir + +import arrow.meta.phases.codegen.ir.IrUtils +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FunctionDescriptor +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.withAliasUnwrapped +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model +import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint +import arrow.meta.plugins.analysis.phases.analysis.solver.isALaw +import arrow.meta.plugins.analysis.phases.analysis.solver.search.getConstraintsFor +import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState +import arrow.meta.plugins.analysis.smt.fieldNames +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor +import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies +import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET +import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrMutableAnnotationContainer +import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor +import org.jetbrains.kotlin.ir.expressions.IrConst +import org.jetbrains.kotlin.ir.expressions.IrConstKind +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrReturn +import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl +import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol +import org.jetbrains.kotlin.ir.util.statements +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.sosy_lab.java_smt.api.FormulaManager + +internal fun IrUtils.annotateWithConstraints(solverState: SolverState, fn: IrFunction) { + if (!solverState.hadParseErrors()) { + val model = + fn.toIrBasedDescriptor() + .model() + val declarationConstraints = solverState.getConstraintsFor(model) + if (declarationConstraints != null) { + solverState.solver.formulae { + preAnnotation(declarationConstraints.pre, solverState.solver.formulaManager)?.let { + fn.addAnnotation(it) + } + postAnnotation(declarationConstraints.post, solverState.solver.formulaManager)?.let { + fn.addAnnotation(it) + } + notLookAnnotation( + declarationConstraints.doNotLookAtArgumentsWhen, + solverState.solver.formulaManager + ) + ?.let { fn.addAnnotation(it) } + if (model.isALaw()) { + getIrReturnedExpressionWithoutPostcondition(fn)?.let { fnDescriptor -> + lawSubjectAnnotation(fnDescriptor.withAliasUnwrapped)?.let { fn.addAnnotation(it) } + } + } + } + } + } +} + +private fun getIrReturnedExpressionWithoutPostcondition(function: IrFunction): FunctionDescriptor? { + val lastElement = function.body?.statements?.lastOrNull() + val lastElementWithoutReturn = + when (lastElement) { + is IrReturn -> lastElement.value + else -> lastElement + } + // remove outer layer of postcondition + val veryLast: IrStatement? = + when (lastElementWithoutReturn) { + is IrMemberAccessExpression<*> -> + when (val symbol = lastElementWithoutReturn.symbol) { + is IrFunctionSymbol -> + lastElementWithoutReturn.extensionReceiver.takeIf { + symbol.owner.toIrBasedDescriptor().fqNameSafe == FqName("arrow.analysis.post") + } + else -> null + } + else -> null + } + ?: lastElementWithoutReturn + // and finally obtain the model + return when (veryLast) { + is IrMemberAccessExpression<*> -> + when (val symbol = veryLast.symbol) { + is IrFunctionSymbol -> + symbol + .owner + .toIrBasedDescriptor() + .model() + else -> null + } + else -> null + } +} + +private fun IrMutableAnnotationContainer.addAnnotation(annotation: IrConstructorCall) { + this.annotations = this.annotations + listOf(annotation) +} + +private fun IrUtils.preAnnotation( + formulae: List, + manager: FormulaManager +): IrConstructorCall? = + annotationFromClassId( + ClassId.fromString("arrow/analysis/Pre"), + formulae.map { it.msg }, + formulae.map { it.formula.toString() }, + formulae.flatMap { manager.fieldNames(it.formula).map { fld -> fld.first }.toSet() } + ) + +private fun IrUtils.postAnnotation( + formulae: List, + manager: FormulaManager +): IrConstructorCall? = + annotationFromClassId( + ClassId.fromString("arrow/analysis/Post"), + formulae.map { it.msg }, + formulae.map { it.formula.toString() }, + formulae.flatMap { manager.fieldNames(it.formula).map { fld -> fld.first }.toSet() } + ) + +private fun IrUtils.notLookAnnotation( + formulae: List, + manager: FormulaManager +): IrConstructorCall? = + annotationFromClassId( + ClassId.fromString("arrow/analysis/DoNotLookAtArguments"), + formulae.map { it.msg }, + formulae.map { it.formula.toString() }, + formulae.flatMap { manager.fieldNames(it.formula).map { fld -> fld.first }.toSet() } + ) + +private fun IrUtils.lawSubjectAnnotation(descriptor: FunctionDescriptor): IrConstructorCall? = + lawSubjectAnnotationFromClassId(ClassId.fromString("arrow/analysis/Subject"), descriptor) + +private fun IrUtils.annotationFromClassId( + classId: ClassId, + messages: List, + formulae: List, + dependencies: List +): IrConstructorCall? = + when { + formulae.isEmpty() -> null + else -> + moduleFragment.descriptor.findClassAcrossModuleDependencies(classId)?.let { + annotation(messages, formulae, dependencies, it) + } + } + +private fun IrUtils.lawSubjectAnnotationFromClassId( + classId: ClassId, + descriptor: FunctionDescriptor +): IrConstructorCall? = + moduleFragment.descriptor.findClassAcrossModuleDependencies(classId)?.let { + lawSubjectAnnotation(descriptor, it) + } + +private fun IrUtils.lawSubjectAnnotation( + fnDescriptor: FunctionDescriptor, + descriptor: ClassDescriptor +): IrConstructorCall? = + descriptor.irConstructorCall()?.also { + it.putValueArgument(0, constantValue(fnDescriptor.fqNameSafe.name)) + } + +private fun IrUtils.annotation( + messages: List, + formulae: List, + dependencies: List, + descriptor: ClassDescriptor +): IrConstructorCall? = + descriptor.irConstructorCall()?.also { + it.putValueArgument(0, arrayOfStrings(messages)) + it.putValueArgument(1, arrayOfStrings(formulae)) + it.putValueArgument(2, arrayOfStrings(dependencies)) + } + +private fun IrUtils.arrayOfStrings(values: List): IrVarargImpl? = + moduleFragment + .descriptor + .getPackage(FqName("kotlin")) + .memberScope + .getContributedDescriptors { it.asString() == "arrayOf" } + .filterIsInstance() + .firstOrNull() + ?.let { + IrVarargImpl( + startOffset = UNDEFINED_OFFSET, + endOffset = UNDEFINED_OFFSET, + type = it.returnType?.toIrType()!!, + varargElementType = moduleFragment.irBuiltins.stringType, + elements = values.map(this::constantValue) + ) + } + +private fun IrUtils.constantValue(value: String): IrConst = + IrConstImpl( + startOffset = UNDEFINED_OFFSET, + endOffset = UNDEFINED_OFFSET, + type = moduleFragment.irBuiltins.stringType, + kind = IrConstKind.String, + value = value + ) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt new file mode 100644 index 000000000..346473045 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt @@ -0,0 +1,41 @@ +package arrow.meta.plugins.analysis.phases.ir + +import arrow.meta.phases.CompilerContext +import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName +import java.io.File +import java.util.UUID +import org.jetbrains.kotlin.descriptors.ModuleDescriptor + +fun CompilerContext.hintsFile( + parentPath: String, + descriptor: ModuleDescriptor, + packages: Set +): File = + File( + parentPath, + "/AnalysisHints.kt", + ) + .also { + it.createNewFile() + it.writeText(hints(descriptor, packages)) + } + +fun hints(descriptor: ModuleDescriptor, packages: Set): String { + val hintPackageName = + descriptor.stableName?.asString()?.replace('.', '_') + ?: "unknown_${UUID.randomUUID().toString().replace('-', '_')}" + val packageList = packages.joinToString() { name -> "\"${name.name}\"" } + return """ + |package arrow.analysis.hints + | + |import arrow.analysis.PackagesWithLaws + | + |@PackagesWithLaws([$packageList]) + |class hints_$hintPackageName { } + |""".trimMargin() +} + +enum class HintState { + NeedsProcessing, + Processed +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor new file mode 100644 index 000000000..b81dfa873 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor @@ -0,0 +1 @@ +arrow.meta.AnalysisMetaCliProcessor \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar new file mode 100644 index 000000000..52dfa5908 --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar @@ -0,0 +1 @@ +arrow.meta.AnalysisPlugin \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/Utils.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/Utils.kt new file mode 100644 index 000000000..bea0fd12d --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/Utils.kt @@ -0,0 +1,18 @@ +package arrow.meta.plugins + +import arrow.meta.plugin.testing.CompilerPlugin +import arrow.meta.plugin.testing.Config +import arrow.meta.plugin.testing.ConfigSyntax +import arrow.meta.plugin.testing.Dependency + +fun ConfigSyntax.newMetaDependencies(): List { + val currentVersion = System.getProperty("CURRENT_VERSION") + val analysisPlugin = + CompilerPlugin( + "AnalysisPlugin", + listOf(Dependency("arrow-analysis-kotlin-plugin:$currentVersion")) + ) + return metaDependencies + + addCompilerPlugins(analysisPlugin) + + addDependencies(analysisLib(currentVersion)) +} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt new file mode 100644 index 000000000..c9b2a166f --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt @@ -0,0 +1,2074 @@ +package arrow.meta.plugins.analysis + +import arrow.meta.plugin.testing.Assert +import arrow.meta.plugin.testing.AssertSyntax +import arrow.meta.plugin.testing.CompilerTest +import arrow.meta.plugin.testing.assertThis +import arrow.meta.plugins.newMetaDependencies +import org.junit.jupiter.api.Test + +class AnalysisTests { + + @Test + fun `bad predicate, could not parse predicate`() { + """ + ${imports()} + fun bar(): Int { + pre( "a" == "b" ) { "wrong" } + return 1 + } + """( + withPlugin = { failsWith { it.contains("not parse predicate") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `bad predicate, refers to local variable`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre(x > 0) { "ok" } + val z = 2 + return 1.post({ z > 0 }) { "wrong" } + } + """( + withPlugin = { failsWith { it.contains("unexpected reference") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `boolean variable used as predicate`() { + """ + ${imports()} + fun negate(x: Boolean): Boolean { + pre(x) { "x is true" } + return (!x).post({ !it }) { "returns false" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `bad predicate, in require`() { + """ + ${imports()} + fun bar(): Int { + require( "a" == "b" ) { "wrong" } + return 1 + } + """( + withPlugin = { compilesWith { it.contains("not parse predicate") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `inconsistent preconditions`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre( x == 42 ) { "x is 42" } + pre( x == 43 ) { "x is also 43" } + val z = x + 2 + return z.post({ it == x + 2 }) { "returns 44" } + } + val result = bar(1) + """( + withPlugin = { failsWith { it.contains("inconsistent pre-conditions") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `post-conditions are checked, 1`() { + """ + ${imports()} + fun bar(x: Int): Int = + 3.post({ it > 0 }) { "greater than 0" } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `post-conditions are checked, 2`() { + """ + ${imports()} + fun bar(x: Int): Int = + 3.post({ it < 0 }) { "smaller than 0" } + """( + withPlugin = { + failsWith { + it.contains("declaration `bar` fails to satisfy the post-condition: ${'$'}result < 0") + } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `post-conditions are on if`() { + """ + ${imports()} + fun bar(x: Int): Int = + (if (x > 0) 1 else -1).post({ it > 0 }) { "greater than 0" } + """( + withPlugin = { + failsWith { + it.contains("declaration `bar` fails to satisfy the post-condition: ${'$'}result > 0") && + it.contains("in branch: !(x > 0)") + } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `checks special functions, 1`() { + """ + ${imports()} + fun bar(x: Int): Int = + 0.let { it + 1 }.post({ it > 0 }) { "greater than 0" } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `checks special functions, 2`() { + """ + ${imports()} + fun bar(x: Int): Int = + 1.run { this - 1 }.post({ it > 0 }) { "greater than 0" } + """( + withPlugin = { failsWith { it.contains("fails to satisfy the post-condition") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `scopes work well`() { + """ + ${imports()} + fun bar(x: Int): Int { + val x = 0 + { val x = 2 } + return x.post({ r -> r > 0 }) { "greater than 0" } + } + """( + withPlugin = { + failsWith { + it.contains("declaration `bar` fails to satisfy the post-condition: ${'$'}result > 0") + } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `invariants in variables`() { + """ + ${imports()} + fun bar(x: Int): Int { + var z = 2.invariant({ it > 0 }) { "invariant it > 0" } + z = 0 + return z + } + """( + withPlugin = { failsWith { it.contains("invariants are not satisfied in `z = 0`") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `var only knows the invariant, 1`() { + """ + ${imports()} + fun bar(x: Int): Int { + var z = 2 + z = 3 + return z.post({ it > 0 }) { "greater than 0" } + } + """( + withPlugin = { + failsWith { + it.contains("declaration `bar` fails to satisfy the post-condition: ${'$'}result > 0") + } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `var only knows the invariant, 2`() { + """ + ${imports()} + fun bar(x: Int): Int { + var z = 2.invariant({ it > 0 }) { "invariant it > 0" } + z = 3 + return z.post({ it >= 0 }) { "greater or equal to 0" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `unreachable code`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre( x > 0 ) { "x is > 0" } + if (x > 0) return 2 else return 3 + } + """( + withPlugin = { + compilesWith { it.contains("unreachable code due to conflicting conditions") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `when with patterns`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre( x >= 0 ) { "x is >= 0" } + return (when (x) { + 0 -> 1 + else -> x + }).post({ it > 0 }) { "result is > 0" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `when with val`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre( x >= 0 ) { "x is >= 0" } + return (when (val y = x + 1) { + else -> y + }).post({ it > 0 }) { "result is > 0" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `when, absolute value`() { + """ + ${imports()} + fun absoluteValue(n: Int): Int = when { + n >= 0 -> n + else -> -n + }.post({ it >= 0 }) { "result >= 0" } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `pre-conditions are not satisfied in call`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre( x == 42 ) { "x is 42" } + val z = x + 2 + return z + } + val result = bar(1) + """( + withPlugin = { + failsWith { it.contains("pre-condition `x is 42` is not satisfied in `bar(1)`") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `pre-conditions are not satisfied in call, but trust me, 1`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre( x == 42 ) { "x is 42" } + val z = x + 2 + return z + } + val result = unsafeCall(bar(1)) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `pre-conditions are not satisfied in call, but trust me, 2`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre( x == 42 ) { "x is 42" } + val z = x + 2 + return z + } + val result = unsafeBlock { bar(1) } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `pre-conditions are not satisfied in call, but trust me, 3`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre( x == 42 ) { "x is 42" } + val z = x + 2 + return z + } + val result = unsafeBlock { bar(1) + 1 } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `pre-conditions are satisfied in call`() { + """ + ${imports()} + fun bar(x: Int): Int { + pre( x > 0 ) { "x greater than 0" } + pre( x < 10 ) { "x less than 10" } + val z = x + 2 + return z.post({ r -> r == x + 2 }) { "it == x + 2" } + } + val result = bar(1) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `pre-conditions are not satisfied in loop, while`() { + """ + ${imports()} + @Pre(messages = ["(< (int x) 0)"], formulae = ["(< (int x) 0)"], dependencies = []) + fun bar(x: Int): Int = + x + 2 + + fun loopy1(t: Int): Int { + while (t > 0) { + bar(1) + } + return 2 + } + """( + withPlugin = { + failsWith { it.contains("pre-condition `(< (int x) 0)` is not satisfied in `bar(1)") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `pre-conditions are not satisfied in loop, for`() { + """ + ${imports()} + @Pre(messages = ["(< (int x) 0)"], formulae = ["(< (int x) 0)"], dependencies = []) + fun bar(x: Int): Int = + x + 2 + + fun loopy1(t: List): Int { + for (elt in t) { + bar(1) + } + return 2 + } + """( + withPlugin = { + failsWith { it.contains("pre-condition `(< (int x) 0)` is not satisfied in `bar(1)`") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `annotated pre-conditions are satisfied in call`() { + """ + ${imports()} + + @Pre(messages = ["x less than 10", "x less than 0"], formulae = ["(< (int x) 10)", "(> (int x) 0)"], dependencies = []) + fun bar(x: Int): Int = + x + 2 + + val result = bar(1) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `annotated pre-conditions are checked in call `() { + """ + ${imports()} + + @Pre(messages = ["x less than 10", "x less than 0"], formulae = ["(< (int x) 10)", "(> (int x) 0)"], dependencies = []) + fun bar(x: Int): Int = + x + 2 + + val result = bar(30) + """( + withPlugin = { + failsWith { it.contains("pre-condition `x less than 10` is not satisfied in `bar(30)`") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `pre-conditions for subjects`() { + """ + ${imports()} + @Pre(messages = ["not zero divisor"], formulae = ["(not (= (int other) 0))"], dependencies = []) + @Subject(fqName = "kotlin.Int.div") + fun Int.divLaw(other: Int) = this / other + + val x: Int = 1 / 0 + """( + withPlugin = { + failsWith { it.contains("pre-condition `not zero divisor` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `post-conditions for subjects`() { + """ + ${imports()} + import kotlin.Result.Companion.success + + @Post(messages = ["create a success"], formulae = ["true"], dependencies = ["kotlin.Result.isSuccess"]) + @Subject(fqName = "kotlin.Result.Companion.success") + fun Result.Companion.successLaw(x: T): Result = success(x) + + val x: Result = success(3) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `post-conditions for subjects, subtype`() { + """ + ${imports()} + @Post(messages = ["example"], formulae = ["true"], dependencies = []) + @Subject(fqName = "kotlin.collections.minus") + fun Collection.minusLaw(element: E) = minus(element) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `post-conditions for subjects, function`() { + """ + ${imports()} + @Pre(messages = ["not empty"], formulae = ["(>= (int (field kotlin.collections.List.size this)) 1)"], dependencies = ["kotlin.collections.List.size"]) + @Subject(fqName = "kotlin.collections.first") + fun List.firstLaw(predicate: (x: E) -> Boolean) = first(predicate) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `ad-hoc laws are checked in call, 1`() { + """ + ${imports()} + + @Law + fun Int.safeDiv(theOtherNumber: Int): Int { + pre( theOtherNumber != 0 ) { "other is not zero" } + return this / theOtherNumber + } + + val result = 1 / 0 + """( + withPlugin = { + failsWith { it.contains("pre-condition `other is not zero` is not satisfied in `1 / 0`") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `ad-hoc laws are checked in call, 2`() { + """ + ${imports()} + + @Law + fun Int.safeDiv(theOtherNumber: Int): Int { + pre( theOtherNumber != 0 ) { "other is not zero" } + return this / theOtherNumber + } + + fun foo() { + val x = 1 - 2 + val result = 1 / x + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `ad-hoc laws are checked in call, 3`() { + """ + ${imports()} + + @Laws + object IntLaws { + @Law + fun Int.safeDiv(theOtherNumber: Int): Int { + pre( theOtherNumber != 0 ) { "other is not zero" } + return this / theOtherNumber + } + } + + val result = 1 / 0 + """( + withPlugin = { + failsWith { it.contains("pre-condition `other is not zero` is not satisfied in `1 / 0`") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `ad-hoc laws are checked in call, 4`() { + """ + ${imports()} + + @Laws + object IntLaws { + @Law + fun Int.safeDiv(theOtherNumber: Int): Int { + pre( theOtherNumber != 0 ) { "other is not zero" } + return this / theOtherNumber + } + } + + val result = 1 / 2 + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `ad-hoc laws are checked in lambda, 1`() { + """ + ${imports()} + + @Law + fun Int.safeDiv(theOtherNumber: Int): Int { + pre( theOtherNumber != 0 ) { "other is not zero" } + return this / theOtherNumber + } + + val result = listOf(1, 0).map { n -> 1 / n } + """( + withPlugin = { + failsWith { it.contains("pre-condition `other is not zero` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `ad-hoc laws are checked in lambda, 2`() { + """ + ${imports()} + + @Law + fun Int.safeDiv(theOtherNumber: Int): Int { + pre( theOtherNumber != 0 ) { "other is not zero" } + return this / theOtherNumber + } + + val result = listOf(1, 0).map { 1 / it } + """( + withPlugin = { + failsWith { it.contains("pre-condition `other is not zero` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `ad-hoc laws for constructors, 1`() { + """ + ${imports()} + ${arrayListLaws()} + + val result = ArrayList(-1) + """( + withPlugin = { + failsWith { + it.contains("pre-condition `initial capacity should be non-negative` is not satisfied") + } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `ad-hoc laws for constructors, 2`() { + """ + ${imports()} + ${arrayListLaws()} + + val result = ArrayList(1) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `ad-hoc laws for constructors, 3`() { + """ + ${imports()} + + import kotlin.collections.ArrayList + + @Pre(messages = ["initial capacity should be non-negative"], formulae = ["(>= (int initialCapacity) 0)"], dependencies = []) + @Subject(fqName = "kotlin.collections.ArrayList.") + fun ArrayListConstruction(initialCapacity: Int): ArrayList { + pre( initialCapacity >= 0 ) { "initial capacity should be non-negative" } + return ArrayList(initialCapacity) + } + + val result = ArrayList(-1) + """( + withPlugin = { + failsWith { + it.contains("pre-condition `initial capacity should be non-negative` is not satisfied") + } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `incorrect ad-hoc law`() { + """ + ${imports()} + + @Law + fun Int.safeDiv(theOtherNumber: Int): Int { + pre( theOtherNumber != 0 ) { "other is not zero" } + return theOtherNumber / this + } + """( + withPlugin = { failsWith { it.contains("must use the arguments in order") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `safe get`() { + """ + ${imports()} + + @Law + fun List.safeGet(index: Int): A { + pre( index >= 0 ) { "index non-negative" } + pre( index < size ) { "index smaller than size" } + return get(index) + } + + @Law + fun emptyListIsEmpty(): List = + emptyList().post({ it.size == 0 }) { "is empty" } + + val wrong: String = emptyList().get(0) + """( + withPlugin = { + failsWith { + it.contains("pre-condition `index smaller than size` is not satisfied in `get(0)`") + } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `safe indexing`() { + """ + ${imports()} + + @Law + fun List.safeGet(index: Int): A { + pre( index >= 0 ) { "index non-negative" } + pre( index < size ) { "index smaller than size" } + return get(index) + } + + @Law + fun emptyListIsEmpty(): List = + emptyList().post({ it.size == 0 }) { "is empty" } + + val wrong: String = emptyList()[0] + """( + withPlugin = { + failsWith { + it.contains( + "pre-condition `index smaller than size` is not satisfied in `emptyList()[0]`" + ) + } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `isEmpty is size == 0`() { + """ + ${imports()} + + @Law + fun List.safeGet(index: Int): A { + pre( index >= 0 ) { "index non-negative" } + pre( index < size ) { "index smaller than size" } + return get(index) + } + + @Law + fun List.refinedIsEmpty(): Boolean = + isEmpty().post({ it == (size <= 0) }) { "equivalent to size 0" } + + fun ok(x: List): String { + pre( !x.isEmpty() ) { "non-empty" } + return x.get(0) + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `isEmpty is size == 0, on map`() { + """ + ${imports()} + + @Law + inline fun List.getLaw(index: Int): E { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + + @Law + inline fun Collection.isEmptyLaw(): Boolean = + isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } + + data class Order(val entries: List) + data class Entry(val id: String, val amount: Int) + + fun Order.containsSingleValue() = + if (entries.isEmpty()) false + else entries.all { entry -> entry.id == entries[0].id } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `nullability, predicate with null, 1`() { + """ + ${imports()} + fun nully1a(x: Int?): Int? { + val y = x?.let { 1 } + return y.post({ + if (x == null) { it == null } + else { (it != null) && (it > 0) } + }) { "greater than 0" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `nullability, predicate with null, 2, if`() { + """ + ${imports()} + fun nully1b(x: Int?): Int? { + val y = x?.let { 1 } + return y.post({ + if (x == null) { it == null } + else { (it != null) && (it < 0) } + }) { "smaller than 0" } + } + """( + withPlugin = { failsWith { it.contains("`nully1b` fails to satisfy the post-condition") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `nullability, predicate with null, 2, when`() { + """ + ${imports()} + fun nully1b(x: Int?): Int? { + val y = x?.let { 1 } + return y.post({ + when { + x == null -> it == null + else -> (it != null) && (it < 0) + } + }) { "smaller than 0" } + } + """( + withPlugin = { failsWith { it.contains("`nully1b` fails to satisfy the post-condition") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `nullability, null check in pre`() { + """ + ${imports()} + fun nully1b(x: Int?): Int? { + pre((x == null) || (x > 0)) { "x is null or positive" } + val y = x?.let { it + 1 } + return y.post({ (it == null) || (it > 1) }) { "greater than 1" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `nullability, branches are followed on null check`() { + """ + ${imports()} + fun nully2(x: Int?): Int { + val y = if (x == null) 1 else 2 + return y.post({ it > 0 }) { "greater than 0" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `nullability, Elvis operator`() { + """ + ${imports()} + fun nully3(x: Int?): Int { + val y = x ?: 1 + return y.post({ it > 0 }) { "greater than 0" } + } + """( + withPlugin = { failsWith { it.contains("`nully3` fails to satisfy the post-condition") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `nullability, is implies non-nullability`() { + """ + ${imports()} + fun nully4(x: Int?): Int { + val y = if (x is Int) 1 else 2 + return y.post({ it > 0 }) { "greater than 0" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `try, 1`() { + """ + ${imports()} + fun try1(x: Int): Int { + val y = try { 1 } catch (e: Exception) { 2 } + return y.post({ it > 0 }) { "greater than 0" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `try, 2`() { + """ + ${imports()} + fun try2(x: Int): Int { + val y = try { 1 } catch (e: Exception) { 0 } + return y.post({ it > 0 }) { "greater than 0" } + } + """( + withPlugin = { failsWith { it.contains("`try2` fails to satisfy the post-condition") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `subtyping, pre- and post-conditions are checked in overridden functions`() { + """ + ${imports()} + open class A() { + open fun f(): Int = 2.post({ it > 0 }) { "greater than 0" } + } + + class B(): A() { + override fun f(): Int = 0 + } + """( + withPlugin = { failsWith { it.contains("`f` fails to satisfy the post-condition") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `subtyping, Liskov Substitution Principle, 1`() { + """ + ${imports()} + open class A() { + open fun f(): Int = 2.post({ it > 0 }) { "greater than 0" } + } + + class B(): A() { + override fun f(): Int = 1.post({ it >= 0 }) { "non-negative" } + } + """( + withPlugin = { + failsWith { + it.contains("post-condition `greater than 0` from overridden member is not satisfied") + } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `subtyping, Liskov Substitution Principle, 2`() { + """ + ${imports()} + open class A() { + open fun f(x: Int): Int { + pre(x > 0) { "greater than 0" } + val y = x + 1 + return y.post({ it > 0 }) { "greater than 0" } + } + } + + class B(): A() { + override fun f(x: Int): Int { + pre(x >= 0) { "greater or equal to 0" } + val y = x + 1000 + return y.post({ it > 1 }) { "greater than 1" } + } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `subtyping, Liskov Substitution Principle, interface`() { + """ + ${imports()} + interface A { + fun f(): Int + + @Law + fun f_Law(): Int = + f().post({ it > 0 }) { "greater than 0" } + } + + class B(): A { + override fun f(): Int = 0 + } + """( + withPlugin = { + failsWith { it.contains("declaration `f` fails to satisfy the post-condition") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class with two init blocks`() { + """ + ${imports()} + data class A(val n: Int) { + init { + pre(n > 0) { "n must be positive" } + } + init { + post({ n > 0 }) { "n must be positive" } + } + fun f(x: Int) = x + } + + val wrong = A(0) + """( + withPlugin = { + failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class with two (wrong) init blocks`() { + """ + ${imports()} + data class A(val n: Int) { + init { + pre(n > 0) { "n must be positive" } + } + init { + post({ n < 0 }) { "n must be negative" } + } + fun f(x: Int) = x + } + """( + withPlugin = { + failsWith { it.contains("declaration `A` fails to satisfy the post-condition") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class with require`() { + """ + ${imports()} + data class B(val n: Int) { + init { + require(n > 0) { "n must be positive" } + } + fun f(x: Int) = x + } + + val wrong = B(0) + """( + withPlugin = { + failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class with require, field knows about invariant, 1`() { + """ + ${imports()} + data class B(val n: Int) { + init { + require(n > 0) { "n must be positive" } + } + fun f(x: Int): Int { + pre(x > 0) { "x is positive" } + val y = x + return (y + n).post({it > 0}) { "result is positive" } + } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class with require, field knows about invariant, 2`() { + """ + ${imports()} + data class B(val n: Int) { + init { + require(n > 0) { "n must be positive" } + } + } + + fun f(b: B, x: Int): Int { + pre(x > 0) { "x is positive" } + return (x + b.n).post({it > 0}) { "result is positive" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class with require, secondary constructor`() { + """ + ${imports()} + data class B(val n: Int) { + init { + require(n > 0) { "n must be positive" } + } + constructor() : this(0) { } + fun f(x: Int) = x + } + """( + withPlugin = { + failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class with require, two classes`() { + """ + ${imports()} + open class A(val n: Int) { + init { + require(n > 0) { "n must be positive" } + } + fun f(x: Int) = x + } + + class B(): A(0) { } + """( + withPlugin = { + failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class with require on field, implicit constructor`() { + """ + ${imports()} + class A { + val n = 0 + init { + require(n > 0) { "n must be positive" } + } + } + + val x = A() + """( + withPlugin = { + failsWith { it.contains("declaration `A` fails to satisfy the post-condition") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `larger example of invariant`() { + """ + ${imports()} + class Positive(val n: Int) { + init { require(n >= 0) } + + operator fun minus(y: Positive): Positive { + pre(this.n >= y.n) { "ensure positive answer" } + return Positive(this.n - y.n) + } + } + + val p = Positive(1) - Positive(2) + """( + withPlugin = { + failsWith { it.contains("pre-condition `ensure positive answer` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `enumerations, init blocks ok`() { + """ + ${imports()} + enum class Color(val rgb: Int) { + RED(0xFF0000), + GREEN(0x00FF00), + BLUE(0x0000FF); + + init { + require(rgb != 0) { "no zero color" } + } + } + + val result: Int = Color.RED.rgb.post({ it != 0 }) { "check this" } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `enumerations, init blocks wrong`() { + """ + ${imports()} + enum class Cosa(val x: Int) { + Esto(0), + Eso(1), + Aquello(2); + + init { + require(x > 0) { "positive" } + } + } + """( + withPlugin = { failsWith { it.contains("pre-condition `positive` is not satisfied") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `overloads work right, 1`() { + """ + ${imports()} + fun f(x: Int): Int { + pre(x > 10) { "greater than ten" } + return 1 + } + + fun f(x: List): Int = 1 + + val result = f(1) + """( + withPlugin = { + failsWith { it.contains("pre-condition `greater than ten` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `overloads work right, 2`() { + """ + ${imports()} + fun f(x: Int): Int { + pre(x > 10) { "greater than ten" } + return 1 + } + + fun f(x: List): Int = 1 + + val result = f(emptyList()) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `optional arguments, 1`() { + """ + ${imports()} + fun f(x: Int = 0): Int { + pre(x > 10) { "greater than ten" } + return 1 + } + """( + withPlugin = { failsWith { it.contains("has inconsistent default values") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `optional arguments, 2`() { + """ + ${imports()} + fun f(x: Int = 1): Int { + pre(x > 0) { "greater than ten" } + return 1 + } + + val result1 = f() + val result2 = f(3) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `optional arguments, only knows pre`() { + """ + ${imports()} + fun f(x: Int = 1): Int { + pre(x > 0) { "greater than ten" } + return x.post({ it == 1 }) { "is one" } + } + """( + withPlugin = { failsWith { it.contains("fails to satisfy the post-condition") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `parses predicates, Result`() { + """ + ${imports()} + + import kotlin.Result.Companion.success + import kotlin.Result.Companion.failure + + @Law + inline fun successLaw(x: T): Result = + success(x).post({ it.isSuccess == true }) { "create a success" } + + @Law + inline fun failureLaw(e: Throwable): Result = + failure(e).post({ it.isFailure == true }) { "create a failure" } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `parses predicates, Lazy`() { + """ + ${imports()} + + @Law + inline fun lazyOfLaw(value: T): Lazy = + lazyOf(value).post({ it.value == value }) { "lazy value is argument" } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `parses predicates, Collection, 1`() { + """ + ${imports()} + ${collectionListLaws()} + + val problem = emptyList().map { it + 1 }.first() + """( + withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `parses predicates, Collection, 2`() { + """ + ${imports()} + ${collectionListLaws()} + + val oki = emptyList().map { it + 1 } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `function reference`() { + """ + ${imports()} + ${collectionListLaws()} + + fun addOne(n: Int): Int = n + 1 + val problem = emptyList().map(::addOne).first() + """( + withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `parses predicates, Collection, using annotations`() { + """ + ${imports()} + + @Laws + object ListLaws { + @Law + @Post(messages = ["empty list is empty"], formulae = ["(= (int (field kotlin.collections.List.size ${'\\'}${'$'}result)) 0)"], dependencies = ["kotlin.collections.List.size"]) + @Subject(fqName = "kotlin.collections.emptyList") + inline fun emptyListLaw(): List = emptyList() + + @Law + @Pre(messages = ["not empty"], formulae = ["(>= (int (field kotlin.collections.List.size this)) 1)"], dependencies = ["kotlin.collections.List.size"]) + @Subject(fqName = "kotlin.collections.first") + inline fun List.firstLaw(): E = first() + } + + val oki = emptyList().first() + """( + withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `string literals, fail`() { + """ + ${imports()} + ${stringLaws()} + fun bar(name: String): Int { + pre( name.isNotEmpty() ) { "not empty name" } + return 2 + } + val result = bar("") + """( + withPlugin = { + failsWith { it.contains("pre-condition `not empty name` is not satisfied in `bar(\"\")`") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `string literals, ok`() { + """ + ${imports()} + ${stringLaws()} + fun bar(name: String): Int { + pre( name.isNotEmpty() ) { "not empty name" } + return 2 + } + val result = bar("alex") + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `string templates, fail`() { + """ + ${imports()} + ${stringLaws()} + fun bar(name: String): Int { + pre( name.isNotEmpty() ) { "not empty name" } + return 2 + } + // we don't know upfront the length of the expression + val result = bar("${'$'}{1 + 2}") + """( + withPlugin = { failsWith { it.contains("pre-condition `not empty name` is not satisfied") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `late initialization, without this`() { + """ + ${imports()} + + class A { + val thing: Int + + public constructor() { + thing = 0 + post({ it.thing == 0 }) { "thing is zero" } + } + + /* cannot be in 'init' because it's "too early" + and the compiler says 'thing' is not initialized + init { + require(thing == 0) { "thing is zero" } + } + */ + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `late initialization, with this`() { + """ + ${imports()} + + class A { + val thing: Int + + public constructor() { + this.thing = 0 + post({ it.thing == 0 }) { "thing is zero" } + } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `implicit primary constructor, ok`() { + """ + ${imports()} + + class A { + val thing: Int = 0 + + init { + require(thing == 0) { "thing is zero" } + } + } + + val example = A() + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `implicit primary constructor, fail`() { + """ + ${imports()} + + class A { + val thing: Int = 1 + + init { + require(thing == 0) { "thing is zero" } + } + } + + val example = A() + """( + withPlugin = { + failsWith { it.contains("declaration `A` fails to satisfy the post-condition") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `implicit primary constructor on object, fail`() { + """ + ${imports()} + + object A { + val thing: Int = 1 + + init { + require(thing == 0) { "thing is zero" } + } + } + + val example = A.thing + """( + withPlugin = { + failsWith { it.contains("declaration `A` fails to satisfy the post-condition") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `do nothing on empty lists, without annotation`() { + """ + ${imports()} + ${collectionListLaws()} + + fun List.containsSingleElement() = + this.all { n -> n == first() } + """( + withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `do nothing on empty lists, with annotation`() { + """ + ${imports()} + ${collectionListLaws()} + + @Law + inline fun List.allLaw(predicate: (x: E) -> Boolean): Boolean { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return all(predicate) + } + + fun List.containsSingleElement() = + this.all { n -> n == first() } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `empty list, ok`() { + """ + ${imports()} + ${collectionListLaws()} + + fun List.x(): Int { + pre(isEmpty()) { "list is not empty" } + return 1 + } + + val l = listOf().x() + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `empty map, ok`() { + """ + ${imports()} + ${collectionListLaws()} + + fun Map.x(): Int { + pre(isEmpty()) { "map is not empty" } + return 1 + } + + val l = mapOf().x() + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `fun interface exception`() { + """ + ${imports()} + + fun interface Example { + fun helloWorld(content: String): Int + } + + fun example(): Example = + Example { content -> content.length } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `weird scoping problem`() { + """ + ${imports()} + + fun Int.a(a: String): Unit { } + + fun b(a: Int) { + a.apply { + a("inline-block address") + } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `escape known names`() { + """ + ${imports()} + + fun f(div: Int, floor: Int): Int = div / floor + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class and element references are recognized`() { + """ + ${imports()} + + import kotlin.reflect.KClass + import kotlin.reflect.KCallable + + fun f(k: KClass): Int = 3 + val value = f(String ::class) + + fun g(k: KCallable): Int = 2 + val other = g(String::capitalize) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `if without else`() { + """ + ${imports()} + + fun f(x: Int): Int { + if (x > 0) { print("positive") } + return x + 1 + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `as expressions`() { + """ + ${imports()} + + fun f(x: Any): Int = (x as Int) + 1 + fun g(x: Any): Int? = (x as? Int)?.let { it + 1 } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `finally`() { + """ + ${imports()} + + fun f(x: Int): Int { + var n = 1.invariant({ it > 0 }) { "positive" } + try { n = 2 } finally { n = 3 } + return 2.post({ it > 0 }) { "positive" } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `class with type parameters`() { + """ + ${imports()} + + data class Thing(val x: A, val n: Int) { + init { pre(n > 0) { "n must be positive" } } + } + + val x = Thing(true, -1) + """( + withPlugin = { + failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } + }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `delegated property, ok`() { + """ + ${imports()} + + val p by lazy { object : Any() {} } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `delegated property, wrong`() { + """ + ${imports()} + ${collectionListLaws()} + + val p: Int by lazy { emptyList().first() } + """( + withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `throw does not break`() { + """ + ${imports()} + + fun f(n: Int) = when { + n > 0 -> n + 1 + else -> throw IllegalArgumentException("positive") + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `issue #1002`() { + """ + ${imports()} + ${collectionListLaws()} + + fun domain(value: String): String? { + val parts = value.split("@") // no pattern matching in kotlin :(((( + return if (parts.size != 2) + null + else + parts[1] + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `issue #997, part 1`() { + """ + ${imports()} + ${collectionListLaws()} + + val ok = listOf(1).first() + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `issue #997, part 2`() { + """ + ${imports()} + ${collectionListLaws()} + + val ok = listOf(1, 2).first() + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `issue #997, part 3`() { + """ + ${imports()} + ${collectionListLaws()} + + val ok = listOf().first() + """( + withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `issue #997, part 4`() { + """ + ${imports()} + ${collectionListLaws()} + + val ok = listOf(-1).map { it + 1 }.first() + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `expect and actual`() { + """ + ${imports()} + ${collectionListLaws()} + + expect class Thing + + actual class Thing { + val problem: Int = emptyList().first() + } + """( + withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, + withoutPlugin = { compiles }, + isMultiplatform = true + ) + } + + @Test + fun `field named field (issue #1031)`() { + """ + ${imports()} + + data class Field(val key: String, val value: String) + + private fun List.findField(tag: String, field: String): Field? = + Field(tag, field) + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles }, + isMultiplatform = true + ) + } +} + +private val AssertSyntax.compilesNoUnreachable: Assert.SingleAssert + get() = compilesWith { !it.contains("unreachable code") } + +private fun imports() = + """ +package test + +import arrow.analysis.invariant +import arrow.analysis.pre +import arrow.analysis.post +import arrow.analysis.Pre +import arrow.analysis.Post +import arrow.analysis.Law +import arrow.analysis.Laws +import arrow.analysis.Subject +import arrow.analysis.doNotLookAtArgumentsWhen +import arrow.analysis.unsafeBlock +import arrow.analysis.unsafeCall + + """ + +private fun collectionListLaws(): String = + """ +@Laws +object CollectionLaws { + @Law + inline fun Collection.firstLaw(): E { + pre(size >= 1) { "not empty" } + return first() + } + @Law + inline fun Collection.mapLaw(transform: (A) -> B): List = + map(transform).post({ it.size == this.size }) { "size remains after map" } +} + +@Laws +object ListLaws { + @Law + inline fun emptyListLaw(): List = + emptyList().post({ it.size == 0 }) { "empty list is empty" } + @Law + inline fun emptyListOfLaw(): List = + listOf().post({ it.size == 0 }) { "empty list is empty" } + @Law + inline fun singletonListLaw(element: E): List = + listOf(element).post({ it.size == 1 }) { "singleton list has size 1" } + @Law + inline fun listOfLaw(vararg elements: E): List = + listOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun List.firstLaw(): E { + pre(size >= 1) { "not empty" } + return first() + } + @Law + inline fun List.isEmptyLaw(): Boolean = + isEmpty().post({ it == (size <= 0) }) { "empty list has size 0" } + @Law + inline fun List.getLaw(index: Int): E { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } +} + +@Laws +object MapLaws { + @Law + inline fun Map.isEmptyLaw(): Boolean = + isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } + @Law + inline fun emptyMapOfLaw(): Map = + mapOf().post({ it.size == 0 }) { "empty map is empty" } +} +""" + +private fun arrayListLaws(): String = + """ +import kotlin.collections.ArrayList + +@Laws +object ArrayListLaws { + @Law + fun ArrayListConstruction(initialCapacity: Int): ArrayList { + pre( initialCapacity >= 0 ) { "initial capacity should be non-negative" } + return ArrayList(initialCapacity) + } +} +""" + +private fun stringLaws(): String = + """ +@Law +fun CharSequence.noneLaw(): Boolean = + none().post({ it == (length <= 0) }) { "none when length is 0" } +@Law +fun CharSequence.isNotEmptyLaw(): Boolean = + isNotEmpty().post({ it == (length > 0) }) { "not empty when length is > 0" } +""" + +// TODO update arrow dependencies to latest to test validated support +private operator fun String.invoke( + withPlugin: AssertSyntax.() -> Assert, + withoutPlugin: AssertSyntax.() -> Assert, + isMultiplatform: Boolean = false +) { + assertThis( + CompilerTest( + config = { + newMetaDependencies() + listOf(addArguments("-Xmulti-platform")).filter { isMultiplatform } + // addPluginOptions(PluginOption("arrow.meta.plugin.compiler", "generatedSrcOutputDir", + // "value")) + }, + code = { this@invoke.source }, + assert = { withPlugin() } + ) + ) + assertThis( + CompilerTest( + config = { + listOf(addDependencies(analysisLib(System.getProperty("CURRENT_VERSION")))) + + listOf(addArguments("-Xmulti-platform")).filter { isMultiplatform } + }, + code = { this@invoke.source }, + assert = { withoutPlugin() } + ) + ) +} diff --git a/arrow-libs/analysis/analysis/laws/build.gradle.kts b/arrow-libs/analysis/analysis/laws/build.gradle.kts new file mode 100644 index 000000000..609d0fe08 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/build.gradle.kts @@ -0,0 +1,57 @@ +@file:Suppress("DSL_SCOPE_VIOLATION") + +plugins { + id(libs.plugins.kotlin.multiplatform.get().pluginId) + alias(libs.plugins.arrowGradleConfig.kotlin) + alias(libs.plugins.arrowGradleConfig.publish) +} + +version = property("projects.analysis_version").toString() + +kotlin { + explicitApi = null + + sourceSets { + commonMain { + dependencies { + implementation(libs.kotlin.stdlibCommon) + api(projects.arrowAnalysisTypes) + } + } + + named("jvmMain") { + dependencies { + implementation(libs.kotlin.stdlibJDK8) + } + } + + named("jsMain") { + dependencies { + implementation(libs.kotlin.stdlibJS) + } + } + } +} + +dependencies { + kotlinCompilerClasspath(projects.arrowAnalysisKotlinPlugin) +} + +tasks.compileKotlinJvm { + kotlinOptions { + dependsOn(":arrow-analysis-kotlin-plugin:jar") + freeCompilerArgs = listOf( + "-Xplugin=$rootDir/plugins/analysis/kotlin-plugin/build/libs/arrow-analysis-kotlin-plugin-$version.jar", + "-P", "plugin:arrow.meta.plugin.compiler.analysis:generatedSrcOutputDir=$buildDir/generated/meta", + "-P", "plugin:arrow.meta.plugin.compiler.analysis:baseDir=${project.rootProject.rootDir.path}" + ) + } +} + +tasks.compileKotlinJs { + kotlinOptions.suppressWarnings = true +} + +tasks.compileKotlinMetadata { + kotlinOptions.suppressWarnings = true +} diff --git a/arrow-libs/analysis/analysis/laws/gradle.properties b/arrow-libs/analysis/analysis/laws/gradle.properties new file mode 100644 index 000000000..838fd9d30 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/gradle.properties @@ -0,0 +1,6 @@ +# Maven publishing configuration +POM_NAME=Arrow Analysis Laws +POM_ARTIFACT_ID=arrow-analysis-laws +POM_PACKAGING=jar + +pom.name=Arrow Analysis Laws diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Array.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Array.kt new file mode 100644 index 000000000..28b1ebf65 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Array.kt @@ -0,0 +1,400 @@ +// ktlint-disable filename +@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") + +package arrow.analysis.laws.kotlin + +import arrow.analysis.Law +import arrow.analysis.Laws +import arrow.analysis.post +import arrow.analysis.pre + +@Laws +object ArrayLaws { + @Law + inline fun constructorLaw(size: Int, noinline init: (Int) -> E): Array { + return Array(size, init).post({ it.size == size }) { "size is the given one" } + } + @Law + inline fun emptyArrayLaw(): Array = + emptyArray().post({ it.size == 0 }) { "empty array" } + + @Law inline fun Array.sizeLaw(): Int = size.post({ it >= 0 }) { "size is non-negative" } + @Law + inline fun Array.countLaw(): Int = count().post({ it == this.size }) { "count is size" } + @Law + inline fun Array.countLaw(predicate: (E) -> Boolean): Int = + count(predicate).post({ it <= this.size }) { "count bounded by size" } + @Law + inline fun Array.lastIndexLaw(): Int = + lastIndex.post({ it == size - 1 }) { "last index is size - 1" } + + @Law + inline fun Array.isEmptyLaw(): Boolean = + isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } + @Law + inline fun Array.noneLaw(): Boolean = + none().post({ it == (size <= 0) }) { "none when size is 0" } + @Law + inline fun Array.isNotEmptyLaw(): Boolean = + isNotEmpty().post({ it == (size > 0) }) { "not empty when size is > 0" } + @Law + inline fun Array?.isNullOrEmptyLaw(): Boolean = + isNullOrEmpty().post({ it == ((this == null) || (this.size <= 0)) }) { + "either null or size is 0" + } + + @Law + inline fun Array.getLaw(index: Int): E { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun Array.setLaw(index: Int, value: E) { + pre(index >= 0 && index < size) { "index within bounds" } + return set(index, value) + } + + @Law + inline fun Array.elementAtLaw(index: Int): E { + pre(index >= 0 && index < size) { "index within bounds" } + return elementAt(index) + } + @Law + inline fun Array.elementAtOrNullLaw(index: Int): E? = + elementAtOrNull(index).post({ (it == null) == (index < 0 && index >= size) }) { + "null iff out of bounds" + } + @Law + inline fun Collection.firstLaw(): E { + pre(size >= 1) { "not empty" } + return first() + } + @Law + inline fun Array.firstLawWithPredicate(predicate: (x: E) -> Boolean): E { + pre(size >= 1) { "not empty" } + return first(predicate) + } + @Law + inline fun Array.firstOrNullLaw(): E? = + firstOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } + @Law + inline fun Array.lastLaw(): E { + pre(size >= 1) { "not empty" } + return last() + } + @Law + inline fun Array.lastLaw(predicate: (x: E) -> Boolean): E { + pre(size >= 1) { "not empty" } + return last(predicate) + } + @Law + inline fun Array.lastOrNullLaw(): E? = + lastOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } + + @Law + inline fun Array.singleLaw(): E { + pre(size == 1) { "size should be exactly 1" } + return single() + } + @Law + inline fun Array.singleOrNullLaw(): E? = + singleOrNull().post({ (it == null) == (this.size != 1) }) { "null iff size is not 1" } + + @Law + inline fun Array.indexOfLaw(element: E): Int = + indexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOf" + } + @Law + inline fun Array.lastIndexOfLaw(element: E): Int = + lastIndexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for lastIndexOf" + } + @Law + inline fun Array.indexOfFirstLaw(predicate: (x: E) -> Boolean): Int = + indexOfFirst(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOfFirst" + } + @Law + inline fun Array.indexOfLastLaw(predicate: (x: E) -> Boolean): Int = + indexOfLast(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOfLast" + } + + @Law + inline fun Array.randomLaw(): T { + pre(size > 0) { "not empty" } + return random() + } + @Law + inline fun Array.randomOrNullLaw(): T? = + randomOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } + + @Law + inline fun Array.filterLaw(predicate: (E) -> Boolean): List = + filter(predicate).post({ it.size <= this.size }) { "bounds after filter" } + @Law + inline fun Array.filterNotLaw(predicate: (E) -> Boolean): List = + filterNot(predicate).post({ it.size <= this.size }) { "bounds after filter" } + @Law + inline fun Array.filterNotNullLaw(): List = + filterNotNull().post({ it.size <= this.size }) { "bounds after filter" } + @Law + inline fun Array.filterIndexedLaw(predicate: (Int, E) -> Boolean): List = + filterIndexed(predicate).post({ it.size <= this.size }) { "bounds after filter" } + @Law + inline fun Array<*>.filterIsInstanceLaw(): List = + filterIsInstance().post({ it.size <= this.size }) { "bounds after filter" } + + @Law + inline fun Array.distinctLaw(): List = + distinct().post({ it.size <= this.size }) { "size bounded by original " } + @Law + inline fun Array.distinctByLaw(selector: (T) -> K): List = + distinctBy(selector).post({ it.size <= this.size }) { "size bounded by original " } + + @Law + inline fun Array.mapLaw(transform: (A) -> B): List = + map(transform).post({ it.size == this.size }) { "size remains after map" } + @Law + inline fun Array.mapIndexedLaw(transform: (Int, A) -> B): List = + mapIndexed(transform).post({ it.size == this.size }) { "size remains after map" } + + @Law + inline fun Array.mapNotNullLaw(transform: (A) -> B?): List = + mapNotNull(transform).post({ it.size <= this.size }) { "size bounded by original" } + @Law + inline fun Array.mapIndexedNotNullLaw(transform: (Int, A) -> B?): List = + mapIndexedNotNull(transform).post({ it.size == this.size }) { "size bounded by original" } + + @Law + inline fun Array.intersectLaw(other: Collection): Set = + intersect(other).post({ it.size <= this.size && it.size <= other.size }) { + "bounds for intersection" + } + @Law + inline fun Array.subtractLaw(other: Collection): Set = + subtract(other).post({ it.size <= this.size }) { "bounds for subtraction" } + @Law + inline fun Array.unionLaw(other: Collection): Set = + union(other).post({ it.size >= this.size && it.size >= other.size }) { + "bounds for subtraction" + } + + @Law + inline fun Array.component1Law(): E { + pre(this.size >= 1) { "element #1 available" } + return component1() + } + @Law + inline fun Array.component2Law(): E { + pre(this.size >= 2) { "element #2 available" } + return component2() + } + @Law + inline fun Array.component3Law(): E { + pre(this.size >= 3) { "element #3 available" } + return component3() + } + @Law + inline fun Array.component4Law(): E { + pre(this.size >= 4) { "element #4 available" } + return component4() + } + @Law + inline fun Array.component5Law(): E { + pre(this.size >= 5) { "element #5 available" } + return component5() + } +} + +@Laws +object ArrayConversionsLaws { + @Law + inline fun Array>.toMapLaw(): Map = + toMap().post({ it.size <= this.size }) { "size bounded by array" } + @Law + inline fun Array.associateLaw(transform: (T) -> Pair): Map = + associate(transform).post({ it.size <= this.size }) { "size bounded by array" } + @Law + inline fun Array.associateByLaw(keySelector: (T) -> K): Map = + associateBy(keySelector).post({ it.size <= this.size }) { "size bounded by array" } + @Law + inline fun Array.associateWithLaw(valueSelector: (K) -> T): Map = + associateWith(valueSelector).post({ it.size <= this.size }) { "size bounded by array" } + + @Law + inline fun Array.toListLaw(): List = + toList().post({ it.size == this.size }) { "size remains after converstion to list" } + @Law + inline fun Array.toSetLaw(): Set = + toSet().post({ it.size < this.size }) { "size bounded by original size" } +} + +@Laws +object CharArrayLaws { + @Law + inline fun constructorLaw(size: Int, noinline init: (Int) -> Char): CharArray { + return CharArray(size, init).post({ it.size == size }) { "size is the given one" } + } + @Law + inline fun charArrayOfLaw(vararg elements: Char): CharArray = + charArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun CharArray.getLaw(index: Int): Char { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun CharArray.setLaw(index: Int, value: Char) { + pre(index >= 0 && index < size) { "index within bounds" } + return set(index, value) + } +} + +@Laws +object BooleanArrayLaws { + @Law + inline fun constructorLaw(size: Int, noinline init: (Int) -> Boolean): BooleanArray { + return BooleanArray(size, init).post({ it.size == size }) { "size is the given one" } + } + @Law + inline fun booleanArrayOfLaw(vararg elements: Boolean): BooleanArray = + booleanArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun BooleanArray.getLaw(index: Int): Boolean { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun BooleanArray.setLaw(index: Int, value: Boolean) { + pre(index >= 0 && index < size) { "index within bounds" } + return set(index, value) + } +} + +@Laws +object ByteArrayLaws { + @Law + inline fun constructorLaw(size: Int, noinline init: (Int) -> Byte): ByteArray { + return ByteArray(size, init).post({ it.size == size }) { "size is the given one" } + } + @Law + inline fun byteArrayOfLaw(vararg elements: Byte): ByteArray = + byteArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun ByteArray.getLaw(index: Int): Byte { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun ByteArray.setLaw(index: Int, value: Byte) { + pre(index >= 0 && index < size) { "index within bounds" } + return set(index, value) + } +} + +@Laws +object ShortArrayLaws { + @Law + inline fun constructorLaw(size: Int, noinline init: (Int) -> Short): ShortArray { + return ShortArray(size, init).post({ it.size == size }) { "size is the given one" } + } + @Law + inline fun shortArrayOfLaw(vararg elements: Short): ShortArray = + shortArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun ShortArray.getLaw(index: Int): Short { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun ShortArray.setLaw(index: Int, value: Short) { + pre(index >= 0 && index < size) { "index within bounds" } + return set(index, value) + } +} + +@Laws +object IntArrayLaws { + @Law + inline fun constructorLaw(size: Int, noinline init: (Int) -> Int): IntArray { + return IntArray(size, init).post({ it.size == size }) { "size is the given one" } + } + @Law + inline fun intArrayOfLaw(vararg elements: Int): IntArray = + intArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun IntArray.getLaw(index: Int): Int { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun IntArray.setLaw(index: Int, value: Int) { + pre(index >= 0 && index < size) { "index within bounds" } + return set(index, value) + } +} + +@Laws +object LongArrayLaws { + @Law + inline fun constructorLaw(size: Int, noinline init: (Int) -> Long): LongArray { + return LongArray(size, init).post({ it.size == size }) { "size is the given one" } + } + @Law + inline fun longArrayOfLaw(vararg elements: Long): LongArray = + longArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun LongArray.getLaw(index: Int): Long { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun LongArray.setLaw(index: Int, value: Long) { + pre(index >= 0 && index < size) { "index within bounds" } + return set(index, value) + } +} + +@Laws +object FloatArrayLaws { + @Law + inline fun constructorLaw(size: Int, noinline init: (Int) -> Float): FloatArray { + return FloatArray(size, init).post({ it.size == size }) { "size is the given one" } + } + @Law + inline fun floatArrayOfLaw(vararg elements: Float): FloatArray = + floatArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun FloatArray.getLaw(index: Int): Float { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun FloatArray.setLaw(index: Int, value: Float) { + pre(index >= 0 && index < size) { "index within bounds" } + return set(index, value) + } +} + +@Laws +object DoubleArrayLaws { + @Law + inline fun constructorLaw(size: Int, noinline init: (Int) -> Double): DoubleArray { + return DoubleArray(size, init).post({ it.size == size }) { "size is the given one" } + } + @Law + inline fun doubleArrayOfLaw(vararg elements: Double): DoubleArray = + doubleArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun DoubleArray.getLaw(index: Int): Double { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun DoubleArray.setLaw(index: Int, value: Double) { + pre(index >= 0 && index < size) { "index within bounds" } + return set(index, value) + } +} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt new file mode 100644 index 000000000..cca42c2d5 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt @@ -0,0 +1,247 @@ +// ktlint-disable filename +@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") + +package arrow.analysis.laws.kotlin + +import arrow.analysis.Law +import arrow.analysis.Laws +import arrow.analysis.post +import arrow.analysis.pre + +@Laws +object CharSequenceLaws { + @Law + inline fun CharSequence.lengthLaw(): Int = length.post({ it >= 0 }) { "length is non-negative" } + @Law + inline fun CharSequence.countLaw(): Int = + count().post({ it == this.length }) { "count is length" } + @Law + inline fun CharSequence.countLaw(predicate: (Char) -> Boolean): Int = + count(predicate).post({ it <= this.length }) { "count bounded by length" } + @Law + inline fun CharSequence.lastIndexLaw(): Int = + lastIndex.post({ it == length - 1 }) { "last index is length - 1" } + + @Law + inline fun CharSequence.isEmptyLaw(): Boolean = + isEmpty().post({ it == (length <= 0) }) { "empty when length is 0" } + @Law + inline fun CharSequence.noneLaw(): Boolean = + none().post({ it == (length <= 0) }) { "none when length is 0" } + @Law + inline fun CharSequence.isNotEmptyLaw(): Boolean = + isNotEmpty().post({ it == (length > 0) }) { "not empty when length is > 0" } + @Law + inline fun CharSequence?.isNullOrEmptyLaw(): Boolean = + isNullOrEmpty().post({ it == ((this == null) || (this.length <= 0)) }) { + "either null or length is 0" + } + + @Law + inline fun CharSequence.getLaw(index: Int): Char { + pre(index >= 0 && index < length) { "index within bounds" } + return get(index) + } + + @Law + inline fun CharSequence.elementAtLaw(index: Int): Char { + pre(index >= 0 && index < length) { "index within bounds" } + return elementAt(index) + } + @Law + inline fun CharSequence.elementAtOrNullLaw(index: Int): Char? = + elementAtOrNull(index).post({ (it == null) == (index < 0 && index >= length) }) { + "null iff out of bounds" + } + @Law + inline fun CharSequence.firstLaw(): Char { + pre(length >= 1) { "not empty" } + return first() + } + @Law + inline fun CharSequence.firstLawWithPredicate(predicate: (x: Char) -> Boolean): Char { + pre(length >= 1) { "not empty" } + return first(predicate) + } + @Law + inline fun CharSequence.firstOrNullLaw(): Char? = + firstOrNull().post({ (it == null) == (this.length <= 0) }) { "null iff empty" } + @Law + inline fun CharSequence.lastLaw(): Char { + pre(length >= 1) { "not empty" } + return last() + } + @Law + inline fun CharSequence.lastLaw(predicate: (x: Char) -> Boolean): Char { + pre(length >= 1) { "not empty" } + return last(predicate) + } + @Law + inline fun CharSequence.lastOrNullLaw(): Char? = + lastOrNull().post({ (it == null) == (this.length <= 0) }) { "null iff empty" } + + @Law + inline fun CharSequence.singleLaw(): Char { + pre(length == 1) { "length should be exactly 1" } + return single() + } + @Law + inline fun CharSequence.singleOrNullLaw(): Char? = + singleOrNull().post({ (it == null) == (this.length != 1) }) { "null iff length is not 1" } + + @Law + inline fun CharSequence.indexOfLawChar(element: Char, startIndex: Int, ignoreCase: Boolean): Int = + indexOf(element, startIndex, ignoreCase).post({ + if (this.length <= 0) (it == -1) else (it >= -1) + }) { "bounds for indexOf" } + @Law + inline fun CharSequence.indexOfLawString( + element: String, + startIndex: Int, + ignoreCase: Boolean + ): Int = + indexOf(element, startIndex, ignoreCase).post({ + if (this.length <= 0) (it == -1) else (it >= -1) + }) { "bounds for indexOf" } + @Law + inline fun CharSequence.lastIndexOfLawChar( + element: Char, + startIndex: Int, + ignoreCase: Boolean + ): Int = + lastIndexOf(element, startIndex, ignoreCase).post({ + if (this.length <= 0) (it == -1) else (it >= -1) + }) { "bounds for lastIndexOf" } + @Law + inline fun CharSequence.lastIndexOfLawString( + element: String, + startIndex: Int, + ignoreCase: Boolean + ): Int = + lastIndexOf(element, startIndex, ignoreCase).post({ + if (this.length <= 0) (it == -1) else (it >= -1) + }) { "bounds for lastIndexOf" } + @Law + inline fun CharSequence.indexOfFirstLaw(predicate: (x: Char) -> Boolean): Int = + indexOfFirst(predicate).post({ if (this.length <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOfFirst" + } + @Law + inline fun CharSequence.indexOfLastLaw(predicate: (x: Char) -> Boolean): Int = + indexOfLast(predicate).post({ if (this.length <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOfLast" + } + + @Law + inline fun CharSequence.randomLaw(): Char { + pre(length > 0) { "not empty" } + return random() + } + + @Law + inline fun CharSequence.filterLaw(predicate: (Char) -> Boolean): CharSequence = + filter(predicate).post({ it.length <= this.length }) { "bounds after filter" } + @Law + inline fun CharSequence.filterNotLaw(predicate: (Char) -> Boolean): CharSequence = + filterNot(predicate).post({ it.length <= this.length }) { "bounds after filter" } + @Law + inline fun CharSequence.filterIndexedLaw(predicate: (Int, Char) -> Boolean): CharSequence = + filterIndexed(predicate).post({ it.length <= this.length }) { "bounds after filter" } + + @Law + inline fun CharSequence.mapLaw(transform: (Char) -> B): List = + map(transform).post({ it.size == this.length }) { "length remains after map" } + @Law + inline fun CharSequence.mapIndexedLaw(transform: (Int, Char) -> B): List = + mapIndexed(transform).post({ it.size == this.length }) { "length remains after map" } + + @Law + inline fun CharSequence.mapNotNullLaw(transform: (Char) -> B?): List = + mapNotNull(transform).post({ it.size <= this.length }) { "length bounded by original" } + @Law + inline fun CharSequence.mapIndexedNotNullLaw(transform: (Int, Char) -> B?): List = + mapIndexedNotNull(transform).post({ it.size == this.length }) { "length bounded by original" } + + @Law + inline fun CharSequence.dropLaw(n: Int): CharSequence { + pre(n >= 0) { "n must be non-negative" } + return drop(n).post({ + if (this.length <= n) (it.length == 0) else (it.length == this.length - n) + }) { "bounds for drop" } + } + @Law + inline fun CharSequence.takeLaw(n: Int): CharSequence { + pre(n >= 0) { "n must be non-negative" } + return take(n).post({ it.length <= this.length && it.length <= n }) { "bounds for take" } + } + @Law + inline fun CharSequence.dropLastLaw(n: Int): CharSequence { + pre(n >= 0) { "n must be non-negative" } + return dropLast(n).post({ + if (this.length <= n) (it.length == 0) else (it.length == this.length - n) + }) { "bounds for drop" } + } + @Law + inline fun CharSequence.takeLastLaw(n: Int): CharSequence { + pre(n >= 0) { "n must be non-negative" } + return takeLast(n).post({ it.length <= this.length && it.length <= n }) { "bounds for take" } + } + + @Law + inline fun CharSequence.trimLaw(): CharSequence = + trim().post({ it.length <= this.length }) { "trim may reduce the size" } + @Law + inline fun CharSequence.trimLaw(vararg chars: Char): CharSequence = + trim(*chars).post({ it.length <= this.length }) { "trim may reduce the size" } + @Law + inline fun CharSequence.trimEndLaw(): CharSequence = + trimEnd().post({ it.length <= this.length }) { "trim may reduce the size" } + @Law + inline fun CharSequence.trimEndLaw(vararg chars: Char): CharSequence = + trimEnd(*chars).post({ it.length <= this.length }) { "trim may reduce the size" } + @Law + inline fun CharSequence.trimStartLaw(): CharSequence = + trimStart().post({ it.length <= this.length }) { "trim may reduce the size" } + @Law + inline fun CharSequence.trimStartLaw(vararg chars: Char): CharSequence = + trimStart(*chars).post({ it.length <= this.length }) { "trim may reduce the size" } +} + +@Laws +object CharSequenceConversionsLaws { + @Law + inline fun CharSequence.associateLaw(transform: (Char) -> Pair): Map = + associate(transform).post({ it.size <= this.length }) { "length bounded by array" } + @Law + inline fun CharSequence.associateByLaw(keySelector: (Char) -> K): Map = + associateBy(keySelector).post({ it.size <= this.length }) { "length bounded by array" } + @Law + inline fun CharSequence.associateWithLaw(valueSelector: (Char) -> T): Map = + associateWith(valueSelector).post({ it.size <= this.length }) { "length bounded by array" } + + @Law + inline fun CharSequence.toListLaw(): List = + toList().post({ it.size == this.length }) { "length remains after converstion to list" } + @Law + inline fun CharSequence.toMutableListLaw(): List = + toMutableList().post({ it.size == this.length }) { "length remains after converstion to list" } + + @Law + inline fun CharSequence.toSetLaw(): Set = + toSet().post({ it.size < this.length }) { "length bounded by original length" } + @Law + inline fun CharSequence.toHashSetLaw(): HashSet = + toHashSet().post({ it.size < this.length }) { "length bounded by original length" } +} + +@Laws +object StringLaws { + @Law + inline fun String.plusLaw(other: CharSequence?): String = + plus(other).post({ + when { + other == null -> it.length == this.length + else -> it.length == this.length + other.length + } + }) { "concatenation adds lengths" } +} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt new file mode 100644 index 000000000..4b0f9ff42 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt @@ -0,0 +1,726 @@ +// ktlint-disable filename +@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") + +package arrow.analysis.laws.kotlin + +import arrow.analysis.Law +import arrow.analysis.Laws +import arrow.analysis.doNotLookAtArgumentsWhen +import arrow.analysis.post +import arrow.analysis.pre + +// based on core/builtins/native/kotlin/Collections.kt +// and libraries/stdlib/src/kotlin/collections/*.kt +// and libraries/stdlib/common/src/generated/_Collections.kt +// remember that laws are inherited by subclasses + +@Laws +object CollectionLaws { + @Law + inline fun Collection.sizeLaw(): Int = size.post({ it >= 0 }) { "size is non-negative" } + @Law + inline fun Collection.countLaw(): Int = + count().post({ it == this.size }) { "count is size" } + @Law + inline fun Collection.countLaw(predicate: (E) -> Boolean): Int { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return count(predicate).post({ it <= this.size }) { "count bounded by size" } + } + + @Law + inline fun Collection.isEmptyLaw(): Boolean = + isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } + @Law + inline fun Collection.noneLaw(): Boolean = + none().post({ it == (size <= 0) }) { "none when size is 0" } + @Law + inline fun Collection.isNotEmptyLaw(): Boolean = + isNotEmpty().post({ it == (size > 0) }) { "not empty when size is > 0" } + @Law + inline fun Collection?.isNullOrEmptyLaw(): Boolean = + isNullOrEmpty().post({ it == ((this == null) || (this.size <= 0)) }) { + "either null or size is 0" + } + @Law + inline fun Collection?.orEmptyLaw(): Collection = + orEmpty().post({ if (this == null) (it.size == 0) else (it.size == this.size) }) { + "returns empty when this is null" + } + + @Law + inline fun Collection.elementAtLaw(index: Int): E { + pre(index >= 0 && index < size) { "index within bounds" } + return elementAt(index) + } + @Law + inline fun Collection.elementAtOrNullLaw(index: Int): E? = + elementAtOrNull(index).post({ (it == null) == (index < 0 && index >= size) }) { + "null iff out of bounds" + } + @Law + inline fun Collection.firstLaw(): E { + pre(size >= 1) { "not empty" } + return first() + } + @Law + inline fun Collection.firstLawWithPredicate(predicate: (x: E) -> Boolean): E { + pre(size >= 1) { "not empty" } + return first(predicate) + } + @Law + inline fun Collection.firstOrNullLaw(): E? = + firstOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } + @Law + inline fun Collection.lastLaw(): E { + pre(size >= 1) { "not empty" } + return last() + } + @Law + inline fun Collection.lastLaw(predicate: (x: E) -> Boolean): E { + pre(size >= 1) { "not empty" } + return last(predicate) + } + @Law + inline fun Collection.lastOrNullLaw(): E? = + lastOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } + + @Law + inline fun Collection.singleLaw(): E { + pre(size == 1) { "size should be exactly 1" } + return single() + } + @Law + inline fun Collection.singleOrNullLaw(): E? = + singleOrNull().post({ (it == null) == (this.size != 1) }) { "null iff size is not 1" } + + @Law + inline fun Collection.indexOfLaw(element: E): Int = + indexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOf" + } + @Law + inline fun Collection.lastIndexOfLaw(element: E): Int = + lastIndexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for lastIndexOf" + } + @Law + inline fun Collection.indexOfFirstLaw(predicate: (x: E) -> Boolean): Int { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return indexOfFirst(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOfFirst" + } + } + @Law + inline fun Collection.indexOfLastLaw(predicate: (x: E) -> Boolean): Int { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return indexOfLast(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOfLast" + } + } + + @Law + inline fun Collection.randomLaw(): T { + pre(size > 0) { "not empty" } + return random() + } + @Law + inline fun Collection.randomOrNullLaw(): T? = + randomOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } + + // zip and unzip + @Law + inline fun Collection>.unzipLaw(): Pair, List> = + unzip().post({ it.first.size == this.size && it.second.size == this.size }) { + "size remains after unzip" + } + @Law + inline fun Collection.zipLaw(other: Collection): List> { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return zip(other).post({ it.size <= this.size && it.size <= other.size }) { + "size bounded by the smallest" + } + } + @Law + inline fun Collection.zipLaw( + other: Collection, + transform: (a: T, b: R) -> V + ): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return zip(other, transform).post({ it.size <= this.size && it.size <= other.size }) { + "size bounded by the smallest" + } + } + @Law + inline fun Collection.zipWithNextLaw(): List> = + zipWithNext().post({ if (this.size < 2) (it.size == 0) else (it.size == this.size - 1) }) { + "size is one less" + } + @Law + inline fun Collection.zipWithNextLaw(transform: (a: T, b: T) -> V): List { + doNotLookAtArgumentsWhen(size < 2) { "empty lists have no elements" } + return zipWithNext(transform).post({ + if (this.size < 2) (it.size == 0) else (it.size == this.size - 1) + }) { "size bounded by the smallest" } + } + + // operations which remove things + @Law + inline fun Collection.dropLaw(n: Int): List { + pre(n >= 0) { "n must be non-negative" } + return drop(n).post({ if (this.size <= n) (it.size == 0) else (it.size == this.size - n) }) { + "bounds for drop" + } + } + @Law + inline fun Collection.dropWhileLaw(predicate: (E) -> Boolean): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return dropWhile(predicate).post({ it.size <= this.size }) { "bounds for dropWhile" } + } + @Law + inline fun Collection.takeLaw(n: Int): List { + pre(n >= 0) { "n must be non-negative" } + return take(n).post({ it.size <= this.size && it.size <= n }) { "bounds for take" } + } + @Law + inline fun Collection.takeWhileLaw(predicate: (E) -> Boolean): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return takeWhile(predicate).post({ it.size <= this.size }) { "bounds for takeWhile" } + } + + @Law + inline fun Collection.filterLaw(predicate: (E) -> Boolean): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return filter(predicate).post({ it.size <= this.size }) { "bounds after filter" } + } + @Law + inline fun Collection.filterNotLaw(predicate: (E) -> Boolean): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return filterNot(predicate).post({ it.size <= this.size }) { "bounds after filter" } + } + @Law + inline fun Collection.filterNotNullLaw(): List = + filterNotNull().post({ it.size <= this.size }) { "bounds after filter" } + @Law + inline fun Collection.filterIndexedLaw(predicate: (Int, E) -> Boolean): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return filterIndexed(predicate).post({ it.size <= this.size }) { "bounds after filter" } + } + @Law + inline fun Collection<*>.filterIsInstanceLaw(): List = + filterIsInstance().post({ it.size <= this.size }) { "bounds after filter" } + + @Law + inline fun Collection.distinctLaw(): List = + distinct().post({ it.size <= this.size }) { "size bounded by original " } + @Law + inline fun Collection.distinctByLaw(selector: (T) -> K): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return distinctBy(selector).post({ it.size <= this.size }) { "size bounded by original " } + } + + @Law + inline fun Collection.plusLaw(element: E): List = + plus(element).post({ it.size == this.size + 1 }) { "size increases by 1" } + @Law + inline fun Collection.plusLawWithElements(elements: Collection): List = + plus(elements).post({ it.size == this.size + elements.size }) { + "size increases by size of the collection" + } + + @Law + inline fun Collection.minusLaw(element: E): List = + minus(element).post({ it.size >= this.size - 1 && it.size <= this.size }) { + "size may decrease by 1" + } + @Law + inline fun Collection.minusLawWithElements(elements: Collection): List = + minus(elements).post({ it.size >= this.size - elements.size && it.size <= this.size }) { + "size may decrease by size of the removed elements" + } + + // operations which keep the size + @Law + inline fun Collection.reversedLaw(): List = + reversed().post({ it.size == this.size }) { "size remains after reversal" } + @Law + inline fun > Collection.sortedLaw(): List = + sorted().post({ it.size == this.size }) { "size remains after sorting" } + @Law + inline fun > Collection.sortedDescendingLaw(): List = + sortedDescending().post({ it.size == this.size }) { "size remains after sorting" } + @Law + inline fun > Collection.sortedByLaw( + crossinline selector: (T) -> R? + ): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return sortedBy(selector).post({ it.size == this.size }) { "size remains after sorting" } + } + @Law + inline fun > Collection.sortedByDescendingLaw( + crossinline selector: (T) -> R? + ): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return sortedByDescending(selector).post({ it.size == this.size }) { + "size remains after sorting" + } + } + @Law + inline fun Collection.sortedWithLaw(comparator: Comparator): List = + sortedWith(comparator).post({ it.size == this.size }) { "size remains after sorting" } + + @Law + inline fun Collection.shuffledLaw(): List = + shuffled().post({ it.size == this.size }) { "size remains after shuffle" } + + @Law + inline fun Collection.mapLaw(transform: (A) -> B): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return map(transform).post({ it.size == this.size }) { "size remains after map" } + } + @Law + inline fun Collection.mapIndexedLaw(transform: (Int, A) -> B): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return mapIndexed(transform).post({ it.size == this.size }) { "size remains after map" } + } + + @Law + inline fun Collection.mapNotNullLaw(transform: (A) -> B?): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return mapNotNull(transform).post({ it.size <= this.size }) { "size bounded by original" } + } + @Law + inline fun Collection.mapIndexedNotNullLaw(transform: (Int, A) -> B?): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return mapIndexedNotNull(transform).post({ it.size == this.size }) { + "size bounded by original" + } + } + + @Law + inline fun Collection.forEachLaw(action: (A) -> Unit): Unit { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return forEach(action) + } + @Law + inline fun Collection.forEachIndexedLaw(action: (Int, A) -> Unit): Unit { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return forEachIndexed(action) + } + + @Law + inline fun > C.onEachLaw(action: (A) -> Unit): C { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return onEach(action).post({ it.size == size }) { "onEach does nothing" } + } + @Law + inline fun > C.onEachIndexedLaw(action: (Int, A) -> Unit): C { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return onEachIndexed(action).post({ it.size == this.size }) { "onEach does nothing" } + } + + @Law + inline fun Collection.flatMapLaw(transform: (A) -> Iterable): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return flatMap(transform).post({ + if (size <= 0) it.size == 0 else /* true means no info */ true + }) { "size of empty list" } + } + @Law + inline fun Collection.flatMapIndexedLaw( + transform: (index: Int, A) -> Iterable + ): List { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return flatMapIndexed(transform).post({ + if (size <= 0) it.size == 0 else /* true means no info */ true + }) { "size of empty list" } + } + @Law + inline fun Collection>.flattenLaw(): List = + flatten().post({ if (size <= 0) it.size == 0 else /* true means no info */ true }) { + "size of empty list" + } + + // operations between several collections + @Law + inline fun Collection.intersectLaw(other: Collection): Set = + intersect(other).post({ it.size <= this.size && it.size <= other.size }) { + "bounds for intersection" + } + @Law + inline fun Collection.subtractLaw(other: Collection): Set = + subtract(other).post({ it.size <= this.size }) { "bounds for subtraction" } + @Law + inline fun Collection.unionLaw(other: Collection): Set = + union(other).post({ it.size >= this.size && it.size >= other.size }) { + "bounds for subtraction" + } + + // iteration over the list + @Law + inline fun Collection.allLaw(predicate: (T) -> Boolean): Boolean { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return all(predicate).post({ if (size <= 0) it == true else /* true means no info */ true }) { + "true for empty lists" + } + } + @Law + inline fun Collection.anyLaw(): Boolean = + any().post({ it == (size > 0) }) { "any means at least one element" } + @Law + inline fun Collection.anyLaw(predicate: (T) -> Boolean): Boolean { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return any(predicate).post({ if (size <= 0) it == false else /* true means no info */ true }) { + "false for empty lists" + } + } +} + +@Laws +object ListLaws { + // size is inherited + // isEmpty is inherited + + @Law + inline fun List.getLaw(index: Int): E { + pre(index >= 0 && index < size) { "index within bounds" } + return get(index) + } + @Law + inline fun List.elementAtLaw(index: Int): E { + pre(index >= 0 && index < size) { "index within bounds" } + return elementAt(index) + } + @Law + inline fun List.getOrNullLaw(index: Int): E? = + getOrNull(index).post({ (it == null) == (index < 0 && index >= size) }) { + "null iff out of bounds" + } + @Law + inline fun List.elementAtOrNullLaw(index: Int): E? = + elementAtOrNull(index).post({ (it == null) == (index < 0 && index >= size) }) { + "null iff out of bounds" + } + + @Law + inline fun List.firstLaw(): E { + pre(size >= 1) { "not empty" } + return first() + } + @Law + inline fun List.firstOrNullLaw(): E? = + firstOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } + @Law + inline fun List.lastLaw(): E { + pre(size >= 1) { "not empty" } + return last() + } + @Law + inline fun List.lastLaw(predicate: (x: E) -> Boolean): E { + pre(size >= 1) { "not empty" } + return last(predicate) + } + @Law + inline fun List.lastOrNullLaw(): E? = + lastOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } + + @Law + inline fun List.singleLaw(): E { + pre(size == 1) { "size should be exactly 1" } + return single() + } + @Law + inline fun List.singleOrNullLaw(): E? = + singleOrNull().post({ (it == null) == (this.size != 1) }) { "null iff size is not 1" } + + @Law + inline fun List.indexOfLaw(element: E): Int = + indexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOf" + } + @Law + inline fun List.lastIndexOfLaw(element: E): Int = + lastIndexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for lastIndexOf" + } + @Law + inline fun List.lastIndexLaw(): Int = + lastIndex.post({ it == size - 1 }) { "last index is size - 1" } + @Law + inline fun List.indexOfFirstLaw(predicate: (x: E) -> Boolean): Int { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return indexOfFirst(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOfFirst" + } + } + @Law + inline fun List.indexOfLastLaw(predicate: (x: E) -> Boolean): Int { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return indexOfLast(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { + "bounds for indexOfLast" + } + } + + @Law + inline fun emptyListLaw(): List = + emptyList().post({ it.size == 0 }) { "empty list is empty" } + @Law + inline fun emptyListOfLaw(): List = + listOf().post({ it.size == 0 }) { "empty list is empty" } + @Law + inline fun listOfNotNullLaw(element: E?): List = + listOfNotNull(element).post({ if (element == null) (it.size == 0) else (it.size == 1) }) { + "empty iff element is null" + } + @Law + inline fun singletonListOfLaw(element: E): List = + listOf(element).post({ it.size == 1 }) { "singleton list has size 1" } + @Law + inline fun listOfLaw(vararg elements: E): List = + listOf(*elements).post({ it.size == elements.size }) { "literal size" } + @Law + inline fun listOfNotNullLaw(vararg elements: E?): List = + listOfNotNull(*elements).post({ it.size <= elements.size }) { "bounded by the literal" } + + @Law + inline fun emptyMutableListLaw(): List = + mutableListOf().post({ it.size == 0 }) { "empty list is empty" } + @Law + inline fun mutableListOfLaw(vararg elements: E): MutableList = + mutableListOf(*elements).post({ it.size == elements.size }) { "literal size" } + + @Law + inline fun List?.orEmptyLaw(): List = + orEmpty().post({ if (this == null) (it.size == 0) else (it.size == this.size) }) { + "returns empty when this is null" + } + + @Law + inline fun List.asReversedLaw(): List = + asReversed().post({ it.size == this.size }) { "size remains after reversal" } + + @Law + inline fun List.component1Law(): E { + pre(this.size >= 1) { "element #1 available" } + return component1() + } + @Law + inline fun List.component2Law(): E { + pre(this.size >= 2) { "element #2 available" } + return component2() + } + @Law + inline fun List.component3Law(): E { + pre(this.size >= 3) { "element #3 available" } + return component3() + } + @Law + inline fun List.component4Law(): E { + pre(this.size >= 4) { "element #4 available" } + return component4() + } + @Law + inline fun List.component5Law(): E { + pre(this.size >= 5) { "element #5 available" } + return component5() + } + + // operations + @Law + inline fun List.dropLastLaw(n: Int): List { + pre(n >= 0) { "n must be non-negative" } + return dropLast(n).post({ + if (this.size <= n) (it.size == 0) else (it.size == this.size - n) + }) { "bounds for drop" } + } + @Law + inline fun List.takeLastLaw(n: Int): List { + pre(n >= 0) { "n must be non-negative" } + return takeLast(n).post({ it.size <= this.size && it.size <= n }) { "bounds for take" } + } + + @Law + inline fun List.isEmptyLaw(): Boolean = + isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } +} + +@Laws +object SetLaws { + // size is inherited + // isEmpty is inherited + + @Law + inline fun emptySetLaw(): Set = + emptySet().post({ it.size == 0 }) { "empty set is empty" } + @Law + inline fun emptySetOfLaw(): Set = + setOf().post({ it.size == 0 }) { "empty set is empty" } + @Law + inline fun setOfNotNullLaw(element: E?): Set = + setOfNotNull(element).post({ if (element == null) (it.size == 0) else (it.size == 1) }) { + "empty iff element is null" + } + @Law + inline fun setOfLaw(vararg elements: E): Set = + setOf(*elements).post({ it.size <= elements.size }) { "bounded by the literal" } + @Law + inline fun setOfNotNullLaw(vararg elements: E?): Set = + setOfNotNull(*elements).post({ it.size <= elements.size }) { "bounded by the literal" } + + @Law + inline fun emptyMutableSetOfLaw(): MutableSet = + mutableSetOf().post({ it.size == 0 }) { "empty set is empty" } + @Law + inline fun mutableSetOfLaw(vararg elements: E): MutableSet = + mutableSetOf(*elements).post({ it.size <= elements.size }) { "bounded by the literal" } + + @Law + inline fun Set?.orEmptyLaw(): Set = + orEmpty().post({ if (this == null) (it.size == 0) else (it.size == this.size) }) { + "returns empty when this is null" + } +} + +@Laws +object MapLaws { + @Law + inline fun Map.sizeLaw(): Int = size.post({ it >= 0 }) { "size is non-negative" } + @Law + inline fun Map.isEmptyLaw(): Boolean = + isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } + @Law + inline fun Map.isNotEmptyLaw(): Boolean = + isNotEmpty().post({ it == (size > 0) }) { "not empty when size is > 0" } + @Law + inline fun Map?.isNullOrEmptyLaw(): Boolean = + isNullOrEmpty().post({ it == ((this == null) || (this.size <= 0)) }) { + "either null or size is 0" + } + @Law + inline fun Map?.orEmptyLaw(): Map = + orEmpty().post({ if (this == null) (it.size == 0) else (it.size == this.size) }) { + "returns empty when this is null" + } + + @Law + inline fun Map.keysLaw(): Set = + keys.post({ it.size == this.size }) { "size of keys remains" } + @Law + inline fun Map.valuesLaw(): Collection = + values.post({ it.size == this.size }) { "size of values remains" } + @Law + inline fun Map.entriesLaw(): Set> = + entries.post({ it.size == this.size }) { "size of entries remains" } + + @Law + inline fun emptyMapLaw(): Map = + emptyMap().post({ it.size == 0 }) { "empty map is empty" } + @Law + inline fun emptyMapOfLaw(): Map = + mapOf().post({ it.size == 0 }) { "empty map is empty" } + @Law + inline fun mapOfLaw(vararg elements: Pair): Map = + mapOf(*elements).post({ it.size <= elements.size }) { "literal size" } + + @Law + inline fun emptyMutableMapLaw(): Map = + mutableMapOf().post({ it.size == 0 }) { "empty map is empty" } + @Law + inline fun mutableMapOfLaw(vararg elements: Pair): MutableMap = + mutableMapOf(*elements).post({ it.size <= elements.size }) { "literal size" } + + @Law + inline fun Map.mapValuesLaw(transform: (Map.Entry) -> R): Map { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return mapValues(transform).post({ it.size == this.size }) { "size remains after mapValues" } + } + @Law + inline fun Map.mapKeysLaw(transform: (Map.Entry) -> R): Map { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return mapKeys(transform).post({ it.size <= this.size }) { "size bounded after mapKeys" } + } + + @Law + inline fun Map.filterLaw(predicate: (Map.Entry) -> Boolean): Map { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return filter(predicate).post({ it.size <= this.size }) { "size bounded after filter" } + } + @Law + inline fun Map.filterNotLaw(predicate: (Map.Entry) -> Boolean): Map { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return filterNot(predicate).post({ it.size <= this.size }) { "size bounded after filter" } + } + @Law + inline fun Map.filterValuesLaw(predicate: (V) -> Boolean): Map { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return filterValues(predicate).post({ it.size <= this.size }) { "size bounded after filter" } + } + @Law + inline fun Map.filterKeysLaw(predicate: (K) -> Boolean): Map { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return filterKeys(predicate).post({ it.size <= this.size }) { "size bounded after filter" } + } + + @Law + inline fun Map.plusLaw(pair: Pair): Map = + plus(pair).post({ it.size <= this.size + 1 }) { "size may increase by 1" } + @Law + inline fun Map.plusLawWithElements(pairs: Collection>): Map = + plus(pairs).post({ it.size <= this.size + pairs.size }) { + "size may increase by size of the collection" + } + @Law + inline fun Map.plusLawWithMap(map: Map): Map = + plus(map).post({ it.size <= this.size + map.size }) { "size may increase by size of the map" } + + @Law + inline fun Map.minusLaw(key: K): Map = + minus(key).post({ it.size <= this.size && it.size >= this.size - 1 }) { + "size may decrease by 1" + } + @Law + inline fun Map.minusLawWithElements(keys: Collection): Map = + minus(keys).post({ it.size <= this.size && it.size >= this.size - keys.size }) { + "size may decrease by size of the collection" + } +} + +@Laws +object MapEntryLaws { + @Law + inline fun Map.Entry.component1Law(): K = + component1().post({ it == this.key }) { "1st component is key" } + @Law + inline fun Map.Entry.component2Law(): V = + component2().post({ it == this.value }) { "2nd component is value" } +} + +@Laws +object CollectionConversionsLaws { + @Law + inline fun Collection>.toMapLaw(): Map = + toMap().post({ it.size <= this.size }) { "size bounded by collection" } + @Law + inline fun Collection.associateLaw(transform: (T) -> Pair): Map { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return associate(transform).post({ it.size <= this.size }) { "size bounded by collection" } + } + @Law + inline fun Collection.associateByLaw(keySelector: (T) -> K): Map { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return associateBy(keySelector).post({ it.size <= this.size }) { "size bounded by collection" } + } + @Law + inline fun Collection.associateWithLaw(valueSelector: (K) -> T): Map { + doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } + return associateWith(valueSelector).post({ it.size <= this.size }) { + "size bounded by collection" + } + } + + @Law + inline fun Collection.toListLaw(): List = + toList().post({ it.size == this.size }) { "size remains after converstion to list" } + @Law + inline fun Collection.toSetLaw(): Set = + toSet().post({ it.size < this.size }) { "size bounded by original size" } +} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Enum.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Enum.kt new file mode 100644 index 000000000..ff9fb84db --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Enum.kt @@ -0,0 +1,15 @@ +// ktlint-disable filename +@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") + +package arrow.analysis.laws.kotlin + +import arrow.analysis.Law +import arrow.analysis.Laws +import arrow.analysis.post + +@Laws +object EnumLaws { + @Law + inline fun > Enum.ordinalLaw(): Int = + ordinal.post({ it >= 0 }) { "ordinal is non-negative" } +} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt new file mode 100644 index 000000000..bc7ad87f5 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt @@ -0,0 +1,167 @@ +// ktlint-disable filename +@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") + +package arrow.analysis.laws.kotlin + +import arrow.analysis.Law +import arrow.analysis.Laws +import arrow.analysis.post +import kotlin.math.abs +import kotlin.math.absoluteValue +import kotlin.math.max +import kotlin.math.min +import kotlin.math.sign + +@Laws +object MathLaws { + @Law + inline fun Int.absoluteValueLaw(): Int = + absoluteValue.post({ it >= 0 && (if (this >= 0) it == this else it == -this) }) { + "absolute value is non-negative + definition" + } + @Law + inline fun Long.absoluteValueLaw(): Long = + absoluteValue.post({ it >= 0L && (if (this >= 0L) it == this else it == -this) }) { + "absolute value is non-negative + definition" + } + @Law + inline fun Float.absoluteValueLaw(): Float = + absoluteValue.post({ it >= 0.0F && (if (this >= 0.0F) it == this else it == -this) }) { + "absolute value is non-negative + definition" + } + @Law + inline fun Double.absoluteValueLaw(): Double = + absoluteValue.post({ it >= 0.0 && (if (this >= 0.0) it == this else it == -this) }) { + "absolute value is non-negative + definition" + } + @Law + inline fun absLaw(x: Int): Int = + abs(x).post({ it >= 0 && (if (x >= 0) it == x else it == -x) }) { + "absolute value is non-negative + definition" + } + @Law + inline fun absLaw(x: Long): Long = + abs(x).post({ it >= 0L && (if (x >= 0L) it == x else it == -x) }) { + "absolute value is non-negative + definition" + } + @Law + inline fun absLaw(x: Float): Float = + abs(x).post({ it >= 0.0F && (if (x >= 0.0F) it == x else it == -x) }) { + "absolute value is non-negative + definition" + } + @Law + inline fun absLaw(x: Double): Double = + abs(x).post({ it >= 0.0 && (if (x >= 0.0) it == x else it == -x) }) { + "absolute value is non-negative + definition" + } + + @Law + inline fun Int.signLaw(): Int = + sign.post({ + it >= -1 && + it <= 1 && + when { + this == 0 -> it == 0 + this > 0 -> it == 1 + else -> it == -1 + } + }) { "sign bounds + definition" } + @Law + inline fun Long.signLaw(): Int = + sign.post({ + it >= -1 && + it <= 1 && + when { + this == 0L -> it == 0 + this > 0L -> it == 1 + else -> it == -1 + } + }) { "sign bounds + definition" } + @Law + inline fun Double.signLaw(): Double = + sign.post({ + it >= -1.0 && + it <= 1.0 && + when { + this == 0.0 -> it == 0.0 + this > 0.0 -> it == 1.0 + else -> it == -1.0 + } + }) { "sign bounds + definition" } + @Law + inline fun Float.signLaw(): Float = + sign.post({ + it >= -1.0F && + it <= 1.0F && + when { + this == 0.0F -> it == 0.0F + this > 0.0F -> it == 1.0F + else -> it == -1.0F + } + }) { "sign bounds + definition" } + + @Law + inline fun signTopLevelLaw(x: Double): Double = + sign(x).post({ + it >= -1.0 && + it <= 1.0 && + when { + x == 0.0 -> it == 0.0 + x > 0.0 -> it == 1.0 + else -> it == -1.0 + } + }) { "sign bounds + definition" } + @Law + inline fun signTopLevelLaw(x: Float): Float = + sign(x).post({ + it >= -1.0F && + it <= 1.0F && + when { + x == 0.0F -> it == 0.0F + x > 0.0F -> it == 1.0F + else -> it == -1.0F + } + }) { "sign bounds + definition" } + + @Law + inline fun maxLaw(a: Int, b: Int): Int = + max(a, b).post({ it >= a && it >= b && (if (a >= b) it == a else it == b) }) { + "bounds for max + definition" + } + @Law + inline fun maxLaw(a: Long, b: Long): Long = + max(a, b).post({ it >= a && it >= b && (if (a >= b) it == a else it == b) }) { + "bounds for max + definition" + } + @Law + inline fun maxLaw(a: Float, b: Float): Float = + max(a, b).post({ it >= a && it >= b && (if (a >= b) it == a else it == b) }) { + "bounds for max + definition" + } + @Law + inline fun maxLaw(a: Double, b: Double): Double = + max(a, b).post({ it >= a && it >= b && (if (a >= b) it == a else it == b) }) { + "bounds for max + definition" + } + + @Law + inline fun minLaw(a: Int, b: Int): Int = + min(a, b).post({ it <= a && it <= b && (if (a <= b) it == a else it == b) }) { + "bounds for min + definition" + } + @Law + inline fun minLaw(a: Long, b: Long): Long = + min(a, b).post({ it <= a && it <= b && (if (a <= b) it == a else it == b) }) { + "bounds for min + definition" + } + @Law + inline fun minLaw(a: Float, b: Float): Float = + min(a, b).post({ it <= a && it <= b && (if (a <= b) it == a else it == b) }) { + "bounds for min + definition" + } + @Law + inline fun minLaw(a: Double, b: Double): Double = + min(a, b).post({ it <= a && it <= b && (if (a <= b) it == a else it == b) }) { + "bounds for min + definition" + } +} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Numbers.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Numbers.kt new file mode 100644 index 000000000..f7d6f9883 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Numbers.kt @@ -0,0 +1,113 @@ +// ktlint-disable filename +@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") + +package arrow.analysis.laws.kotlin + +import arrow.analysis.Law +import arrow.analysis.Laws +import arrow.analysis.post +import arrow.analysis.pre + +@Laws +object ByteLaws { + @Law + inline fun Byte.divLaw(other: Int): Int { + pre(other != 0) { "other is not zero" } + return this / other + } + @Law + inline fun Byte.divLaw(other: Long): Long { + pre(other != 0L) { "other is not zero" } + return this / other + } + + @Law + inline fun Byte.countOneBitsLaw(): Int = + this.countOneBits().post({ it >= 0 }) { "number of ones is >= 0" } + + @Law + inline fun Byte.countLeadingZeroBitsLaw(): Int = + this.countLeadingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } + + @Law + inline fun Byte.countTrailingZeroBitsLaw(): Int = + this.countTrailingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } +} + +@Laws +object ShortLaws { + @Law + inline fun Short.divLaw(other: Int): Int { + pre(other != 0) { "other is not zero" } + return this / other + } + @Law + inline fun Short.divLaw(other: Long): Long { + pre(other != 0L) { "other is not zero" } + return this / other + } + + @Law + inline fun Short.countOneBitsLaw(): Int = + this.countOneBits().post({ it >= 0 }) { "number of ones is >= 0" } + + @Law + inline fun Short.countLeadingZeroBitsLaw(): Int = + this.countLeadingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } + + @Law + inline fun Short.countTrailingZeroBitsLaw(): Int = + this.countTrailingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } +} + +@Laws +object IntLaws { + @Law + inline fun Int.divLaw(other: Int): Int { + pre(other != 0) { "other is not zero" } + return this / other + } + @Law + inline fun Int.divLaw(other: Long): Long { + pre(other != 0L) { "other is not zero" } + return this / other + } + + @Law + inline fun Int.countOneBitsLaw(): Int = + this.countOneBits().post({ it >= 0 }) { "number of ones is >= 0" } + + @Law + inline fun Int.countLeadingZeroBitsLaw(): Int = + this.countLeadingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } + + @Law + inline fun Int.countTrailingZeroBitsLaw(): Int = + this.countTrailingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } +} + +@Laws +object LongLaws { + @Law + inline fun Long.divLaw(other: Int): Long { + pre(other != 0) { "other is not zero" } + return this / other + } + @Law + inline fun Long.divLaw(other: Long): Long { + pre(other != 0L) { "other is not zero" } + return this / other + } + + @Law + inline fun Long.countOneBitsLaw(): Int = + this.countOneBits().post({ it >= 0 }) { "number of ones is >= 0" } + + @Law + inline fun Long.countLeadingZeroBitsLaw(): Int = + this.countLeadingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } + + @Law + inline fun Long.countTrailingZeroBitsLaw(): Int = + this.countTrailingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } +} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Ranges.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Ranges.kt new file mode 100644 index 000000000..26ac57da8 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Ranges.kt @@ -0,0 +1,17 @@ +// ktlint-disable filename +@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") + +package arrow.analysis.laws.kotlin + +import arrow.analysis.Law +import arrow.analysis.Laws +import arrow.analysis.post + +@Laws +object ComparableRangeLaws { + @Law + inline fun > T.rangeToLaw(that: T): ClosedRange = + this.rangeTo(that).post({ it.start == this && it.endInclusive == that }) { + "range with given bounds" + } +} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Result.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Result.kt new file mode 100644 index 000000000..c4db34441 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Result.kt @@ -0,0 +1,34 @@ +// ktlint-disable filename +@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") + +package arrow.analysis.laws.kotlin + +import arrow.analysis.Law +import arrow.analysis.Laws +import arrow.analysis.post + +@Laws +object ResultLaws { + // we define isFailure in terms of isSuccess, + // but not the other way around, + // to prevent infinite recursion in the solver + @Law + inline fun Result.isFailureLaw(): Boolean = + this.isFailure.post({ it == !this.isSuccess }) { "failure is opposite to success" } + + @Law + inline fun Result.getOrNullLaw(): T? = + this.getOrNull().post({ result -> (this.isSuccess) xor (result == null) }) { "null if failure" } + + @Law + inline fun Result.Companion.successLaw(x: T): Result = + success(x).post({ it.isSuccess == true }) { "create a success" } + + @Law + inline fun Result.Companion.failureLaw(e: Throwable): Result = + failure(e).post({ it.isFailure == true }) { "create a failure" } + + @Law + inline fun Result.mapLaw(transform: (value: T) -> R): Result = + this.map(transform).post({ it.isSuccess == this.isSuccess }) { "map preserves success" } +} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Util.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Util.kt new file mode 100644 index 000000000..767ab8f73 --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Util.kt @@ -0,0 +1,28 @@ +// ktlint-disable filename +@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") + +package arrow.analysis.laws.kotlin + +import arrow.analysis.Law +import arrow.analysis.post + +// run, with, apply, also, let +// are treated in a special way by the analysis + +@Law +inline fun Any?.hashCodeLaw(): Int = + this.hashCode().post({ if (this == null) (it == 0) else true }) { "if null, hashcode is 0" } + +@Law +inline fun lazyOfLaw(value: T): Lazy = + lazyOf(value).post({ it.value == value }) { "lazy value is argument" } + +@Law inline fun TODOLaw(): Nothing = TODO().post({ false }) { "nothing executes after TODO" } + +@Law +inline fun TODOLaw(reason: String): Nothing = + TODO(reason).post({ false }) { "nothing executes after TODO" } + +@Law +inline fun A.toLaw(other: B): Pair = + (this to other).post({ it.first == this && it.second == other }) { "components" } diff --git a/arrow-libs/analysis/analysis/types/README.md b/arrow-libs/analysis/analysis/types/README.md new file mode 100644 index 000000000..af147524c --- /dev/null +++ b/arrow-libs/analysis/analysis/types/README.md @@ -0,0 +1,199 @@ +# Module arrow-refined-types + +# Package arrow.refinement + +A refined type is any regular type constrained by predicates expected to hold in all possible values of the type's +constructor. + +The Arrow refined-types plugin verifies at compile and runtime refined types constructor calls, ensuring values in +declared types truly represent the programmers intent. + +## Setup. + +The refined-types plugin is a Kotlin compiler plugin that can be enabled via Gradle in your build by adding it to the +list of your Gradle plugins. + +Release + +```groovy +plugins { + id "io.arrow-kt.refined-types" version "" +} +``` + +Snapshots + +```groovy +buildscript { + repositories { + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } + } + dependencies { + classpath "io.arrow-kt:arrow-refined-types-gradle-plugin:" + } +} +apply plugin: "io.arrow-kt.refined-types" +``` + +## Issues modeling with primitives types. + +Leveraging programming languages built-in types like `String` and `Int` is convenient and allows us to express a wide +range of domain problems. Unfortunately, types like `String` or `Int` accept a broader range of values than desirable in +our programs and functions. By choosing overly broad types for our models like `Int` or `String`, we move the +responsibility of validating the value to each call site. + +Consider the following type that attempts to model a machine port number using the type `Int.` + +```kotlin:ank +val x: Int = 5555 +``` + +While there does not seem to be anything wrong at first sight with this definition, simply using `Int` does not prevent +invalid out-of-range inputs of what's considered a valid port number. + +```kotlin:ank +val x: Int = 70000 +``` + +Because the valid range for port numbers is `0..65353`, the value `70000` is incorrect as it would be other negative +values that `Int` accepts. In this case, the best we can do is create a new type and require in its initialization that +input arguments get validated before construction. + +```kotlin:ank +@JvmInline +value class Port(val value: Int) { + init { + require(value in 0..65353) { "$value should be in range of 0..65353 " } + } +} +``` + +Adding these requirements to `init` static blocks guarantees `Port` instances are not constructed but invoking the +constructor with an invalid input will result in an `IllegalArgumentException` thrown at runtime. +Throwing exceptions imposes the burden in the call site to preemptively `try/catch` all constructor calls or crashing the program at runtime. + +```kotlin:ank +try { + Port(70000) +} catch (e: IllegalArgumentException) { + e.message +} +``` + +Runtime exceptions are what most programming languages offer as the solution to validating constructor arguments. Since +the `init` static initialization blocks can't produce values and only accept statements, we can only resort to +throwing `IllegalArgumentException` if we encounter a case where the value is considered invalid. + +## Refining custom types. + +The refined-types plugin monitors all calls to Refined type constructors, ensuring arguments provided are verifiable in +the range of the declared predicates constraining the type. + +Considering the example above, instead of using `Int` to describe a port number, we will create our own `Port` type and +enable the refined-types capabilities by making the `Port` companion extend the `Refined` class. + +```kotlin:ank +import arrow.refinement.Refined +import arrow.refinement.ensure + +@JvmInline +value class Port /* private constructor */ (val value: Int) { + companion object : Refined(::Port, { + ensure((it in 0..65535) to "$it should be in the closed range of 0..65535 to be a valid port number") + }) +} +``` + +In the declaration above the `Refined` class takes as first argument a function `(Int) -> Port` with value `::Port`. +It's important to make constructors `private` so they are not visible and instead handled by the `Refined` +implementation. + +When attempting to instantiate a Port with invalid values as constants, the Refined Types compiler plugin fails before +our program can compile and forces us to correct the input preventing a potential runtime exception. + +```kotlin:ank:silent +Port(70000) +// error: "$it should be in the closed range of 0..65535 to be a valid port number" +``` + +For cases where the input values are dynamic and not evaluable at compile-time, the plugin advises us to use a safe API +based on nullable types. + +```kotlin:ank +fun f(n: Int) { + Port(n) +} +// error: Prefer a safe alternative such as Port.orNull(n) or for explicit use of exceptions `Port.require(n)` +``` + +By implementing the `Refined` interface we gain access to the following validation APIs. + +## Safe nullable construction. + +```kotlin:ank +Port.orNull(70000) +``` + +```kotlin:ank +Port.orNull(5555) +``` + +## Resolved constraints. + +```kotlin:ank +Port.constraints(70000) +``` + +```kotlin:ank +Port.constraints(5555) +``` + +```kotlin:ank +Port.isValid(70000) +``` + + ```kotlin:ank + Port.isValid(5555) + ``` + +## Fold validation. + +```kotlin:ank +Port.fold(70000, { "failed: $it" }, { "success: $it" }) +``` + +```kotlin:ank +Port.fold(5555, { "failed: $it" }, { "success: $it" }) +``` + +## Unsafe require. + +```kotlin:ank +Port.require(5555) +``` + +```kotlin:ank +try { + Port.require(70000) +} catch (e: IllegalArgumentException) { + e.message +} +``` + +## Refined types library. + +The refined-types plugin includes a runtime library that also works standalone independently of the compiler plugin and +includes useful predicates for [chars](/booleans/arrow-refined-types/arrow.refinement.booleans/), [chars](/apidocs/arrow-refined-types/arrow.refinement.chars/), [strings](/apidocs/arrow-refined-types/arrow.refinement.strings/), [collections](/apidocs/arrow-refined-types/arrow.refinement.collections/), [digests](/apidocs/arrow-refined-types/arrow.refinement.digests/), [network](/apidocs/arrow-refined-types/arrow.refinement.network/), and [time](/apidocs/arrow-refined-types/arrow.refinement.time/) that can be composed and used alongside user type +definitions. + +## Credits. + +The refined-types plugin is inspired by libraries like [scala's refined](https://github.com/fthomas/refined) +, [Haskell's refined](https://github.com/nikita-volkov/refined) +and [Liquid Haskell](https://ucsd-progsys.github.io/liquidhaskell-blog/). + +In contrast to a type-level implementation as we find in these libraries in Scala and Haskell, the refined-types plugin +takes a different approach and leverages the Kotlin compiler APIs and its ability to interpret IR code to offer similar +compile-time guarantees. + +[Refined Types were originally introduced in ML by Freeman and Pfenning](https://www.cs.cmu.edu/afs/cs.cmu.edu/user/fp/www/papers/pldi91.pdf) diff --git a/arrow-libs/analysis/analysis/types/build.gradle.kts b/arrow-libs/analysis/analysis/types/build.gradle.kts new file mode 100644 index 000000000..64873a813 --- /dev/null +++ b/arrow-libs/analysis/analysis/types/build.gradle.kts @@ -0,0 +1,33 @@ +@file:Suppress("DSL_SCOPE_VIOLATION") + +plugins { + id(libs.plugins.kotlin.multiplatform.get().pluginId) + alias(libs.plugins.arrowGradleConfig.kotlin) + alias(libs.plugins.arrowGradleConfig.publish) +} + +version = property("projects.analysis_version").toString() + +kotlin { + explicitApi = null + + sourceSets { + commonMain { + dependencies { + implementation(libs.kotlin.stdlibCommon) + } + } + + named("jvmMain") { + dependencies { + implementation(libs.kotlin.stdlibJDK8) + } + } + + named("jsMain") { + dependencies { + implementation(libs.kotlin.stdlibJS) + } + } + } +} diff --git a/arrow-libs/analysis/analysis/types/gradle.properties b/arrow-libs/analysis/analysis/types/gradle.properties new file mode 100644 index 000000000..789e4fcf8 --- /dev/null +++ b/arrow-libs/analysis/analysis/types/gradle.properties @@ -0,0 +1,6 @@ +# Maven publishing configuration +POM_NAME=Arrow Analysis Types +POM_ARTIFACT_ID=arrow-analysis-types +POM_PACKAGING=jar + +pom.name=Arrow Analysis Types diff --git a/arrow-libs/analysis/analysis/types/src/commonMain/kotlin/arrow/analysis/RefinementDSL.kt b/arrow-libs/analysis/analysis/types/src/commonMain/kotlin/arrow/analysis/RefinementDSL.kt new file mode 100644 index 000000000..00298bf3a --- /dev/null +++ b/arrow-libs/analysis/analysis/types/src/commonMain/kotlin/arrow/analysis/RefinementDSL.kt @@ -0,0 +1,80 @@ +@file:Suppress("NOTHING_TO_INLINE") + +package arrow.analysis + +public fun interface Messager { + public operator fun invoke(): String +} + +public fun interface Predicate { + public operator fun invoke(value: A): Boolean +} + +public inline fun pre(predicate: Boolean, msg: Messager): Unit = require(predicate) { msg() } + +public inline fun doNotLookAtArgumentsWhen(predicate: Boolean, msg: Messager): Unit = Unit + +public inline fun A.post(predicate: Predicate, msg: Messager): A { + require(predicate(this)) { msg() } + return this +} + +public inline fun post(predicate: Predicate, msg: Messager): Unit {} + +public inline fun A.invariant(predicate: Predicate, msg: Messager): A { + require(predicate(this)) { msg() } + return this +} + +@Target(AnnotationTarget.FUNCTION) +public annotation class Pre( + val messages: Array, + val formulae: Array, + val dependencies: Array +) + +@Target(AnnotationTarget.FUNCTION) +public annotation class Post( + val messages: Array, + val formulae: Array, + val dependencies: Array +) + +@Target(AnnotationTarget.FUNCTION) +public annotation class DoNotLookAtArguments( + val messages: Array, + val formulae: Array, + val dependencies: Array +) + +/** Annotation to flag ad-hoc refinements over third party functions */ +@Target(AnnotationTarget.FUNCTION) public annotation class Law + +/** Annotation to flag ad-hoc refinements over third party functions */ +@Target(AnnotationTarget.FUNCTION) public annotation class Subject(val fqName: String) + +/** + * This is used to mark an object as containing only laws. This way you do not have to write the + * annotation on every element, and you can group several of them together. + * + * ``` + * @Laws + * object IntLaws { + * fun Int.plusLaw { ... } + * } + * ``` + */ +@Target(AnnotationTarget.CLASS) public annotation class Laws + +/** + * This is used internally to speed up the search for laws Each package with any law should include + * this annotation in a class of module 'arrow.analysis.hints' + */ +@Target(AnnotationTarget.CLASS) +public annotation class PackagesWithLaws(val packages: Array) + +/** Indicates that the preconditions for a call should not be checked. */ +public inline fun unsafeCall(call: A): A = call + +/** Indicates that nothing in this block should be checked. */ +public inline fun unsafeBlock(block: () -> A): A = block() From e488f4ef9ecca8c42e6c9c3e6d78dd2dde0dbf74 Mon Sep 17 00:00:00 2001 From: Imran Malic Settuba <46971368+i-walker@users.noreply.github.com> Date: Thu, 17 Mar 2022 22:22:46 +0100 Subject: [PATCH 02/12] remove local meta and use arrow-gradle-config (#10) * add versioning plugin and remove meta * trim down dependency cataloug * adjust jvm env --- arrow-libs/analysis/analysis/common/build.gradle.kts | 3 +-- arrow-libs/analysis/analysis/example/build.gradle.kts | 2 +- .../analysis/analysis/java-example/build.gradle.kts | 3 +-- .../analysis/java-gradle-plugin/build.gradle.kts | 7 +++---- .../analysis/analysis/java-plugin/build.gradle.kts | 9 ++++----- .../analysis/kotlin-gradle-plugin/build.gradle.kts | 7 +++---- .../analysis/analysis/kotlin-plugin/build.gradle.kts | 9 ++++----- arrow-libs/analysis/analysis/laws/build.gradle.kts | 4 ++-- arrow-libs/analysis/analysis/types/build.gradle.kts | 3 +-- 9 files changed, 20 insertions(+), 27 deletions(-) diff --git a/arrow-libs/analysis/analysis/common/build.gradle.kts b/arrow-libs/analysis/analysis/common/build.gradle.kts index 70928c54b..b9167fe60 100644 --- a/arrow-libs/analysis/analysis/common/build.gradle.kts +++ b/arrow-libs/analysis/analysis/common/build.gradle.kts @@ -4,10 +4,9 @@ plugins { id(libs.plugins.kotlin.jvm.get().pluginId) alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.publish) + alias(libs.plugins.arrowGradleConfig.versioning) } -version = property("projects.analysis_version").toString() - kotlin { explicitApi = null } diff --git a/arrow-libs/analysis/analysis/example/build.gradle.kts b/arrow-libs/analysis/analysis/example/build.gradle.kts index cf098ca76..6ce4b913e 100644 --- a/arrow-libs/analysis/analysis/example/build.gradle.kts +++ b/arrow-libs/analysis/analysis/example/build.gradle.kts @@ -3,9 +3,9 @@ plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) alias(libs.plugins.arrowGradleConfig.kotlin) + alias(libs.plugins.arrowGradleConfig.formatter) } -version = property("projects.analysis_version").toString() kotlin { explicitApi = null diff --git a/arrow-libs/analysis/analysis/java-example/build.gradle.kts b/arrow-libs/analysis/analysis/java-example/build.gradle.kts index 5caf7cc78..aad71a000 100644 --- a/arrow-libs/analysis/analysis/java-example/build.gradle.kts +++ b/arrow-libs/analysis/analysis/java-example/build.gradle.kts @@ -2,10 +2,9 @@ plugins { `java-library` + alias(libs.plugins.arrowGradleConfig.versioning) } -version = property("projects.analysis_version").toString() - java { toolchain { languageVersion.set(JavaLanguageVersion.of(11)) diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts index a0b652589..bc52a1bad 100644 --- a/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts @@ -5,10 +5,9 @@ plugins { `java-gradle-plugin` alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.publish) + alias(libs.plugins.arrowGradleConfig.versioning) } -version = property("projects.analysis_version").toString() - tasks.processResources { duplicatesStrategy = DuplicatesStrategy.WARN filesMatching("**/analysis.plugin.properties") { @@ -17,11 +16,11 @@ tasks.processResources { } dependencies { - api(projects.arrowGradlePluginCommons) + api(libs.arrowGradlePluginCommons) runtimeOnly(libs.classgraph) // Necessary during plugin execution to be found and added for compilation - api(projects.arrowMeta) + api(libs.arrowMeta) api(projects.arrowAnalysisJavaPlugin) } diff --git a/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts index 16b61b374..a7793c001 100644 --- a/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts @@ -3,17 +3,16 @@ plugins { id(libs.plugins.kotlin.jvm.get().pluginId) alias(libs.plugins.arrowGradleConfig.publish) + alias(libs.plugins.arrowGradleConfig.versioning) } -version = property("projects.analysis_version").toString() - kotlin { explicitApi = null } dependencies { compileOnly(libs.kotlin.stdlibJDK8) - implementation(projects.arrowMeta) + implementation(libs.arrowMeta) implementation(projects.arrowAnalysisTypes) implementation(projects.arrowAnalysisCommon) api(files(org.gradle.internal.jvm.Jvm.current().toolsJar)) @@ -21,8 +20,8 @@ dependencies { testImplementation(libs.kotlin.stdlibJDK8) testImplementation(libs.junit) testImplementation(libs.javaCompileTesting) - testImplementation(projects.arrowMetaTest) - testRuntimeOnly(projects.arrowMeta) + testImplementation(libs.arrowMetaTest) + testRuntimeOnly(libs.arrowMeta) testRuntimeOnly(projects.arrowAnalysisTypes) testRuntimeOnly(projects.arrowAnalysisJavaPlugin) testRuntimeOnly(projects.arrowAnalysisTypes) diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts index bca8a5353..8b03592db 100644 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts @@ -4,11 +4,10 @@ plugins { id(libs.plugins.kotlin.jvm.get().pluginId) `java-gradle-plugin` alias(libs.plugins.arrowGradleConfig.kotlin) + alias(libs.plugins.arrowGradleConfig.formatter) alias(libs.plugins.arrowGradleConfig.publish) } -version = property("projects.analysis_version").toString() - tasks.processResources { duplicatesStrategy = DuplicatesStrategy.WARN filesMatching("**/analysis.plugin.properties") { @@ -17,11 +16,11 @@ tasks.processResources { } dependencies { - api(projects.arrowGradlePluginCommons) + api(libs.arrowGradlePluginCommons) runtimeOnly(libs.classgraph) // Necessary during plugin execution to be found and added for compilation - api(projects.arrowMeta) + api(libs.arrowMeta) api(projects.arrowAnalysisKotlinPlugin) } diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts index d4338469a..3ac752b95 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts @@ -4,17 +4,16 @@ plugins { id(libs.plugins.kotlin.jvm.get().pluginId) alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.publish) + alias(libs.plugins.arrowGradleConfig.versioning) } -version = property("projects.analysis_version").toString() - kotlin { explicitApi = null } dependencies { compileOnly(libs.kotlin.stdlibJDK8) - implementation(projects.arrowMeta) + implementation(libs.arrowMeta) implementation(projects.arrowAnalysisTypes) implementation(projects.arrowAnalysisCommon) @@ -22,8 +21,8 @@ dependencies { testImplementation(libs.junit) testImplementation(libs.junitEngine) testImplementation(libs.junitPlatformLauncher) - testImplementation(projects.arrowMetaTest) - testRuntimeOnly(projects.arrowMeta) + testImplementation(libs.arrowMetaTest) + testRuntimeOnly(libs.arrowMeta) testRuntimeOnly(projects.arrowAnalysisTypes) testRuntimeOnly(projects.arrowAnalysisKotlinPlugin) testRuntimeOnly(libs.arrowCore) diff --git a/arrow-libs/analysis/analysis/laws/build.gradle.kts b/arrow-libs/analysis/analysis/laws/build.gradle.kts index 609d0fe08..148c3d373 100644 --- a/arrow-libs/analysis/analysis/laws/build.gradle.kts +++ b/arrow-libs/analysis/analysis/laws/build.gradle.kts @@ -4,10 +4,10 @@ plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.publish) + alias(libs.plugins.arrowGradleConfig.versioning) + alias(libs.plugins.arrowGradleConfig.formatter) } -version = property("projects.analysis_version").toString() - kotlin { explicitApi = null diff --git a/arrow-libs/analysis/analysis/types/build.gradle.kts b/arrow-libs/analysis/analysis/types/build.gradle.kts index 64873a813..8c7b7fd5a 100644 --- a/arrow-libs/analysis/analysis/types/build.gradle.kts +++ b/arrow-libs/analysis/analysis/types/build.gradle.kts @@ -4,10 +4,9 @@ plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.publish) + alias(libs.plugins.arrowGradleConfig.versioning) } -version = property("projects.analysis_version").toString() - kotlin { explicitApi = null From 0df90734bc8f92ec2ed161a69cd2c1da106ec372 Mon Sep 17 00:00:00 2001 From: Imran Malic Settuba <46971368+i-walker@users.noreply.github.com> Date: Sat, 19 Mar 2022 10:32:46 +0100 Subject: [PATCH 03/12] add binaryComp tool, fix publication task (#20) * add detekt and binnComp tool, fix publicatio * add api files * upload sarif file * remove detekt --- .../common/api/arrow-analysis-common.api | 2065 +++++++++ .../analysis/analysis/common/build.gradle.kts | 1 + .../api/arrow-analysis-java-gradle-plugin.api | 6 + .../java-gradle-plugin/build.gradle.kts | 1 + .../api/arrow-analysis-java-plugin.api | 1177 +++++ .../analysis/java-plugin/build.gradle.kts | 1 + .../arrow-analysis-kotlin-gradle-plugin.api | 17 + .../kotlin-gradle-plugin/build.gradle.kts | 1 + .../api/arrow-analysis-kotlin-plugin.api | 3773 +++++++++++++++++ .../analysis/kotlin-plugin/build.gradle.kts | 1 + .../analysis/laws/api/arrow-analysis-laws.api | 439 ++ .../analysis/analysis/laws/build.gradle.kts | 1 + .../types/api/arrow-analysis-types.api | 50 + .../analysis/analysis/types/build.gradle.kts | 1 + 14 files changed, 7534 insertions(+) create mode 100644 arrow-libs/analysis/analysis/common/api/arrow-analysis-common.api create mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/api/arrow-analysis-java-gradle-plugin.api create mode 100644 arrow-libs/analysis/analysis/java-plugin/api/arrow-analysis-java-plugin.api create mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/api/arrow-analysis-kotlin-gradle-plugin.api create mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api create mode 100644 arrow-libs/analysis/analysis/laws/api/arrow-analysis-laws.api create mode 100644 arrow-libs/analysis/analysis/types/api/arrow-analysis-types.api diff --git a/arrow-libs/analysis/analysis/common/api/arrow-analysis-common.api b/arrow-libs/analysis/analysis/common/api/arrow-analysis-common.api new file mode 100644 index 000000000..56161ac20 --- /dev/null +++ b/arrow-libs/analysis/analysis/common/api/arrow-analysis-common.api @@ -0,0 +1,2065 @@ +public abstract class arrow/meta/continuations/ContSeq { + public static final field Companion Larrow/meta/continuations/ContSeq$Companion; + public final fun drain ()V + public final fun flatMap (Lkotlin/jvm/functions/Function1;)Larrow/meta/continuations/ContSeq; + public final fun forEach (Lkotlin/jvm/functions/Function1;)V + public abstract fun iterator ()Ljava/util/Iterator; + public final fun map (Lkotlin/jvm/functions/Function3;)Larrow/meta/continuations/ContSeq; + public final fun onEach (Lkotlin/jvm/functions/Function1;)Larrow/meta/continuations/ContSeq; + public final fun toList ()Ljava/util/List; + public final fun toSet ()Ljava/util/Set; + public final fun void ()Larrow/meta/continuations/ContSeq; + public final fun zip (Larrow/meta/continuations/ContSeq;Lkotlin/jvm/functions/Function2;)Larrow/meta/continuations/ContSeq; +} + +public final class arrow/meta/continuations/ContSeq$Builder : arrow/meta/continuations/ContSeq { + public fun (Lkotlin/jvm/functions/Function2;)V + public fun iterator ()Ljava/util/Iterator; +} + +public final class arrow/meta/continuations/ContSeq$Companion { + public final fun empty ()Larrow/meta/continuations/ContSeq; + public final fun getAbort ()Larrow/meta/continuations/ContSeq; + public final fun getUnit ()Larrow/meta/continuations/ContSeq; + public final fun invoke (Larrow/meta/continuations/ContSeq$Iterable;)Larrow/meta/continuations/ContSeq; + public final fun invoke (Lkotlin/jvm/functions/Function2;)Larrow/meta/continuations/ContSeq; + public final fun invoke ([Ljava/lang/Object;)Larrow/meta/continuations/ContSeq; +} + +public final class arrow/meta/continuations/ContSeq$Iterable : arrow/meta/continuations/ContSeq { + public fun (Larrow/meta/continuations/ContSeq$Iterable;)V + public fun iterator ()Ljava/util/Iterator; +} + +public final class arrow/meta/continuations/ContSeq$VarArg : arrow/meta/continuations/ContSeq { + public fun ([Ljava/lang/Object;)V + public fun iterator ()Ljava/util/Iterator; +} + +public final class arrow/meta/continuations/ContSeqKt { + public static final fun asContSeq (Ljava/lang/Iterable;)Larrow/meta/continuations/ContSeq; + public static final fun cont (Lkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; + public static final fun doOnlyWhen (ZLjava/lang/Object;Lkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; + public static final fun doOnlyWhen (ZLkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; + public static final fun doOnlyWhenNotNull (Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Larrow/meta/continuations/ContSeq; + public static final fun nested (Ljava/util/List;)Larrow/meta/continuations/ContSeq; + public static final fun sequence (Ljava/util/List;)Larrow/meta/continuations/ContSeq; +} + +public abstract interface class arrow/meta/continuations/ContSeqSyntax : arrow/meta/continuations/ContSyntax { + public abstract fun yield (Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun yieldAll (Larrow/meta/continuations/ContSeq;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun yieldAll (Ljava/lang/Iterable;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun yieldAll (Ljava/util/Iterator;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun yieldAll (Lkotlin/sequences/Sequence;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public final class arrow/meta/continuations/ContSeqSyntax$DefaultImpls { + public static fun ensure (Larrow/meta/continuations/ContSeqSyntax;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun yieldAll (Larrow/meta/continuations/ContSeqSyntax;Larrow/meta/continuations/ContSeq;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun yieldAll (Larrow/meta/continuations/ContSeqSyntax;Ljava/lang/Iterable;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun yieldAll (Larrow/meta/continuations/ContSeqSyntax;Lkotlin/sequences/Sequence;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public abstract interface class arrow/meta/continuations/ContSyntax { + public abstract fun abort (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun ensure (ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public final class arrow/meta/continuations/ContSyntax$DefaultImpls { + public static fun ensure (Larrow/meta/continuations/ContSyntax;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ArgumentExpression { + public fun (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ZZLjava/util/List;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public final fun component3 ()Z + public final fun component4 ()Z + public final fun component5 ()Ljava/util/List; + public final fun copy (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ZZLjava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/ArgumentExpression; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ArgumentExpression;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ZZLjava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ArgumentExpression; + public fun equals (Ljava/lang/Object;)Z + public final fun getExpression ()Ljava/util/List; + public final fun getName ()Ljava/lang/String; + public final fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun hashCode ()I + public final fun isSpread ()Z + public final fun isVarArg ()Z + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtilsKt { + public static final fun gather (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public static final fun gather (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;Ljava/util/List;ZLkotlin/jvm/functions/Function1;)Ljava/util/List; + public static synthetic fun gather$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;Ljava/util/List;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/util/List; + public static final fun isALaw (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z + public static final fun isCompatibleWith (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z + public static final fun isField (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z + public static final fun isLooselyCompatibleWith (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z + public static final fun overriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Ljava/util/Collection; + public static final fun sameVarity (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/PrimitiveKt { + public static final fun primitiveFormula (Larrow/meta/plugins/analysis/smt/Solver;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall;Ljava/util/List;)Lorg/sosy_lab/java_smt/api/Formula; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind : java/lang/Enum { + public static final field Invariant Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; + public static final field NotLookArgs Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; + public static final field Post Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; + public static final field Pre Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; + public static final field TrustBlock Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; + public static final field TrustCall Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext { + public abstract fun backingPropertyForConstructorParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; + public abstract fun constraintsDSLElements (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Ljava/util/List; + public abstract fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public abstract fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; + public abstract fun getModule ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor; + public abstract fun getTypes ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types; + public abstract fun handleError (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public abstract fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall { + public abstract fun getCallElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public abstract fun getDispatchReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public abstract fun getExtensionReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getResultingDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor; + public abstract fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun getTypeArguments ()Ljava/util/Map; + public abstract fun getValueArguments ()Ljava/util/Map; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult : java/lang/Enum { + public static final field Completed Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; + public static final field ParsingError Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; + public static final field Retry Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated { + public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public abstract fun getHasDoNotLookAtArgumentsAnnotation ()Z + public abstract fun getHasPackageWithLawsAnnotation ()Z + public abstract fun getHasPreOrPostAnnotation ()Z + public abstract fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotatedKt { + public static final fun getHasInterestingAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor { + public abstract fun argumentValueAsArrayOfString (Ljava/lang/String;)Ljava/util/List; + public abstract fun argumentValueAsString (Ljava/lang/String;)Ljava/lang/String; + public abstract fun getAllValueArguments ()Ljava/util/Map; + public abstract fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations { + public abstract fun findAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public abstract fun getImpl ()Ljava/lang/Object; + public abstract fun hasAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Z + public abstract fun isEmpty ()Z + public abstract fun iterable ()Ljava/lang/Iterable; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { + public abstract fun getAllParameters ()Ljava/util/List; + public abstract fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public abstract fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public abstract fun getOverriddenDescriptors ()Ljava/util/Collection; + public abstract fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun getTypeParameters ()Ljava/util/List; + public abstract fun getValueParameters ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor { + public abstract fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind : java/lang/Enum { + public static final field DECLARATION Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public static final field DELEGATION Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public static final field FAKE_OVERRIDE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public static final field SYNTHESIZED Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { + public abstract fun getCompanionObjectDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public abstract fun getCompleteUnsubstitutedScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public abstract fun getConstructors ()Ljava/util/Collection; + public abstract fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public abstract fun getSealedSubclasses ()Ljava/util/Collection; + public abstract fun getStaticScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public abstract fun getSuperTypes ()Ljava/util/Collection; + public abstract fun getThisAsReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public abstract fun getUnsubstitutedInnerClassesScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public abstract fun getUnsubstitutedMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public abstract fun getUnsubstitutedPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; + public abstract fun isCompanionObject ()Z + public abstract fun isData ()Z + public abstract fun isEnumEntry ()Z + public abstract fun isFun ()Z + public abstract fun isInline ()Z + public abstract fun isValue ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind : java/lang/Enum { + public static final field ANNOTATION_CLASS Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public static final field CLASS Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public static final field ENUM_CLASS Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public static final field ENUM_ENTRY Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public static final field INTERFACE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public static final field OBJECT Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$DefaultImpls { + public static fun getCompleteUnsubstitutedScope (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor { + public abstract fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor { + public abstract fun getDeclaredTypeParameters ()Ljava/util/List; + public abstract fun isInner ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CombinedMemberScope : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope { + public fun (Ljava/util/Collection;)V + public fun getClassifierNames ()Ljava/util/Set; + public fun getContributedDescriptors (Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public fun getFunctionNames ()Ljava/util/Set; + public fun getVariableNames ()Ljava/util/Set; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor { + public abstract fun getConstructedClass ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public abstract fun isPrimary ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named { + public abstract fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public abstract fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun impl ()Ljava/lang/Object; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { + public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument { + public abstract fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument { + public abstract fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated { + public abstract fun getCorrespondingProperty ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor { + public abstract fun isInfix ()Z + public abstract fun isInline ()Z + public abstract fun isOperator ()Z + public abstract fun isSuspend ()Z + public abstract fun isTailrec ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptorKt { + public static final fun getWithAliasUnwrapped (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static final fun getWithAliasUnwrapped (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor { +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { + public abstract fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public abstract fun isActual ()Z + public abstract fun isExpect ()Z + public abstract fun isExternal ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope { + public abstract fun getClassifierNames ()Ljava/util/Set; + public abstract fun getContributedDescriptors (Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public abstract fun getFunctionNames ()Ljava/util/Set; + public abstract fun getVariableNames ()Ljava/util/Set; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality : java/lang/Enum { + public static final field ABSTRACT Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public static final field FINAL Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public static final field OPEN Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public static final field SEALED Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { + public abstract fun getPackage (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor; + public abstract fun getStableName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun getSubPackagesOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named { + public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { + public abstract fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun getMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor { +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor { + public abstract fun getOverriddenDescriptors ()Ljava/util/Collection; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors { + public abstract fun getAccessors ()Ljava/util/List; + public abstract fun getBackingField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; + public abstract fun getDelegateField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; + public abstract fun isSetterProjectedOut ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor { + public abstract fun getValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue { + public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun isClassReceiver ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument { + public abstract fun getArguments ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor { +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor { + public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor; + public abstract fun getUnderlyingConstructorDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters { + public abstract fun getClassDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public abstract fun getConstructors ()Ljava/util/Collection; + public abstract fun getExpandedType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun getUnderlyingType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor { + public abstract fun getDeclarationDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; + public abstract fun getParameters ()Ljava/util/List; + public abstract fun getSupertypes ()Ljava/util/Collection; + public abstract fun isDenotable ()Z + public abstract fun isFinal ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor { + public abstract fun getIndex ()I + public abstract fun getUpperBounds ()Ljava/util/List; + public abstract fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public abstract fun isCapturedFromOuterDeclaration ()Z + public abstract fun isReified ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor { + public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor { + public abstract fun declaresDefaultValue ()Z + public abstract fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getIndex ()I + public abstract fun getVarargElementType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun isCrossinline ()Z + public abstract fun isNoinline ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor { + public abstract fun getCorrespondingVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor { + public abstract fun isConst ()Z + public abstract fun isLateInit ()Z + public abstract fun isVar ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor { + public abstract fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; + public abstract fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; + public abstract fun isDelegated ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors$DefaultImpls { + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility { + public abstract fun getName ()Ljava/lang/String; + public abstract fun isPublicAPI ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getAnnotationEntries ()Ljava/util/List; + public abstract fun getAnnotations ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer { + public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation { + public abstract fun getEntries ()Ljava/util/List; + public abstract fun getUseSiteTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement { + public abstract fun getShortName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun getUseSiteTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget : java/lang/Enum { + public static final field CONSTRUCTOR_PARAMETER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static final field FIELD Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static final field FILE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static final field PROPERTY Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static final field PROPERTY_DELEGATE_FIELD Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static final field PROPERTY_GETTER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static final field PROPERTY_SETTER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static final field RECEIVER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static final field SETTER_PARAMETER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration { + public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression { + public abstract fun getArrayExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getIndexExpressions ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression$Companion; + public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getDetail ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression$Companion { + public final fun getFAKE_ASSERT_NAME ()Ljava/lang/String; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { + public abstract fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getOperationToken ()Ljava/lang/String; + public abstract fun getOperationTokenRpr ()Ljava/lang/String; + public abstract fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { + public abstract fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getOperationToken ()Ljava/lang/String; + public abstract fun getOperationTokenRpr ()Ljava/lang/String; + public abstract fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getFirstStatement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getImplicitReturnFromLast ()Z + public abstract fun getStatements ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getLambdaArguments ()Ljava/util/List; + public abstract fun getTypeArguments ()Ljava/util/List; + public abstract fun getValueArguments ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner { + public abstract fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public abstract fun getValueParameters ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression { + public abstract fun getCallableReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getCatchBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getCatchParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; + public abstract fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject { + public abstract fun getProperties ()Ljava/util/List; + public abstract fun isData ()Z + public abstract fun isEnum ()Z + public abstract fun isInline ()Z + public abstract fun isInner ()Z + public abstract fun isInterface ()Z + public abstract fun isSealed ()Z + public abstract fun isValue ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class$DefaultImpls { + public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getAllCompanionObjects ()Ljava/util/List; + public abstract fun getAnonymousInitializers ()Ljava/util/List; + public abstract fun getEnumEntries ()Ljava/util/List; + public abstract fun getFunctions ()Ljava/util/List; + public abstract fun getProperties ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject { + public abstract fun getAnonymousInitializers ()Ljava/util/List; + public abstract fun getPrimaryConstructorParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public abstract fun isAnnotation ()Z + public abstract fun isTopLevel ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject$DefaultImpls { + public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation { + public abstract fun getColumn ()I + public abstract fun getColumnEnd ()I + public abstract fun getLine ()I + public abstract fun getLineContent ()Ljava/lang/String; + public abstract fun getLineEnd ()I + public abstract fun getPath ()Ljava/lang/String; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function { + public abstract fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression { + public abstract fun getConstructorReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun isCallToThis ()Z + public abstract fun isImplicit ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression { + public abstract fun isThis ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner { + public abstract fun getName ()Ljava/lang/String; + public abstract fun getParents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer { + public abstract fun getDeclarations ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration { + public abstract fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public abstract fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getValueParameters ()Ljava/util/List; + public abstract fun hasBlockBody ()Z + public abstract fun hasBody ()Z + public abstract fun hasDeclaredReturnType ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration { + public abstract fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun hasInitializer ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry { + public abstract fun getDelegateExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer { + public abstract fun getEntries ()Ljava/util/List; + public abstract fun isVar ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getHasQuestionMarks ()Z + public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun isEmptyLHS ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement { + public abstract fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public abstract fun getText ()Ljava/lang/String; + public abstract fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public abstract fun impl ()Ljava/lang/Object; + public abstract fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public abstract fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class { + public abstract fun hasInitializer ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry$DefaultImpls { + public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument { + public abstract fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun isSpread ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getLabelName ()Ljava/lang/String; + public abstract fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getFinalExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression { + public abstract fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; + public abstract fun getLoopParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; + public abstract fun getLoopRange ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName { + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun equals (Ljava/lang/Object;)Z + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody { + public abstract fun isLocal ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function { + public abstract fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun hasParameterSpecification ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getThenExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getEntries ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { + public abstract fun getLeftHandSide ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun isNegated ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { + public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument { + public abstract fun getLambdaExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getFunctionLiteral ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral; + public abstract fun getValueParameters ()Ljava/util/List; + public abstract fun hasDeclaredReturnType ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer { + public abstract fun getAnnotationEntries ()Ljava/util/List; + public abstract fun getAnnotations ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated { + public abstract fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name { + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun equals (Ljava/lang/Object;)Z + public final fun getValue ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named { + public abstract fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named { + public abstract fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject { + public abstract fun isCompanion ()Z + public abstract fun isObjectLiteral ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration$DefaultImpls { + public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getObjectDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression { + public abstract fun isConventionOperator ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration { + public abstract fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; + public abstract fun getOwnerFunction ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody; + public abstract fun hasDefaultValue ()Z + public abstract fun hasValOrVar ()Z + public abstract fun isCatchParameter ()Z + public abstract fun isLoopParameter ()Z + public abstract fun isMutable ()Z + public abstract fun isVarArg ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList { + public abstract fun getOwnerFunction ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody; + public abstract fun getParameters ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression { + public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor { +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind : java/lang/Enum { + public static final field IN Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; + public static final field NONE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; + public static final field OUT Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; + public static final field STAR Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration { + public abstract fun getAccessors ()Ljava/util/List; + public abstract fun getDelegate ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate; + public abstract fun getDelegateExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getDelegateExpressionOrInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor; + public abstract fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor; + public abstract fun hasBody ()Z + public abstract fun hasDelegate ()Z + public abstract fun hasDelegateExpression ()Z + public abstract fun hasDelegateExpressionOrInitializer ()Z + public abstract fun isLocal ()Z + public abstract fun isMember ()Z + public abstract fun isTopLevel ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner { + public abstract fun getParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; + public abstract fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public abstract fun getProperty ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; + public abstract fun getReturnTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun isGetter ()Z + public abstract fun isSetter ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement { + public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; + public abstract fun getCompanionObjects ()Ljava/util/List; + public abstract fun getName ()Ljava/lang/String; + public abstract fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; + public abstract fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public abstract fun getPrimaryConstructorParameters ()Ljava/util/List; + public abstract fun getSecondaryConstructors ()Ljava/util/List; + public abstract fun getSuperTypeListEntries ()Ljava/util/List; + public abstract fun hasExplicitPrimaryConstructor ()Z + public abstract fun hasPrimaryConstructor ()Z + public abstract fun isLocal ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement { + public abstract fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getSelectorExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { + public abstract fun getLabeledExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getReturnedExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor { + public abstract fun getDelegationCall ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement { + public abstract fun getTypeArgumentsAsTypes ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression { + public abstract fun getReferencedName ()Ljava/lang/String; + public abstract fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntry { +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntry { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;)V + public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryExpression; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryExpression; + public fun equals (Ljava/lang/Object;)Z + public final fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryString : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntry { + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryString; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryString;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryString; + public fun equals (Ljava/lang/Object;)Z + public final fun getString ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getEntries ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel { + public abstract fun getSuperTypeQualifier ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getEntries ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry { + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public abstract fun getSubject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression { + public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getInitializer ()Ljava/util/List; + public abstract fun getUpdate ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getThrownExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getCatchClauses ()Ljava/util/List; + public abstract fun getFinallyBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection; + public abstract fun getTryBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration { + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun isTopLevel ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList { + public abstract fun getArguments ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind : java/lang/Enum { + public static final field POSITIVE_TYPE_CAST Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; + public static final field QUESTION_TYPE_CAST Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { + public abstract fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; + public abstract fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getOperationToken ()Ljava/lang/String; + public abstract fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint { + public abstract fun getBoundTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun getSubjectTypeParameterName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList { + public abstract fun getConstraints ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getTypeArgumentsAsTypes ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter { + public abstract fun getExtendsBounds ()Ljava/util/List; + public abstract fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList { + public abstract fun getParameters ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration { + public abstract fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public abstract fun getTypeConstraints ()Ljava/util/List; + public abstract fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public abstract fun getTypeParameters ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection { + public abstract fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer { + public abstract fun getTypeElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { + public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument { + public abstract fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; + public abstract fun isExternal ()Z + public abstract fun isNamed ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList { + public abstract fun getArguments ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { + public abstract fun getAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun getReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer { + public abstract fun isVar ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition { + public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression; + public abstract fun getRangeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun isNegated ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition { + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun isNegated ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition { + public abstract fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getConditions ()Ljava/util/List; + public abstract fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun isElse ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { + public abstract fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getEntries ()Ljava/util/List; + public abstract fun getSubjectExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getSubjectVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase { +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression { + public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type : java/lang/Comparable { + public abstract fun compareTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)I + public abstract fun getArguments ()Ljava/util/List; + public abstract fun getDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public abstract fun getUnwrappedNotNullableType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun intersectIfPossible (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun isAnyOrNullableAny ()Z + public abstract fun isBoolean ()Z + public abstract fun isByte ()Z + public abstract fun isChar ()Z + public abstract fun isDouble ()Z + public abstract fun isEqualTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Z + public abstract fun isFloat ()Z + public abstract fun isInt ()Z + public abstract fun isLong ()Z + public abstract fun isMarkedNullable ()Z + public abstract fun isNullable ()Z + public abstract fun isShort ()Z + public abstract fun isString ()Z + public abstract fun isSubtypeOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Z + public abstract fun isTypeParameter ()Z + public abstract fun isUnsignedNumberType ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type$DefaultImpls { + public static fun compareTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)I + public static fun intersectIfPossible (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection { + public abstract fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun isStarProjection ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types { + public abstract fun getNothingType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance : java/lang/Enum { + public static final field In Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public static final field Invariant Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public static final field Out Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPointKt { + public static final fun checkDeclarationConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)V +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo { + public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo$Companion; + public fun (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Z)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public final fun component4 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun component5 ()Z + public final fun copy (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Z)Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;ZILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo; + public fun equals (Ljava/lang/Object;)Z + public final fun getElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun getName ()Ljava/lang/String; + public final fun getSmtName ()Ljava/lang/String; + public final fun getThisFromConstructor ()Z + public final fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo$Companion { + public final fun invoke (Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Z)Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo; + public static synthetic fun invoke$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo$Companion;Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;ZILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch;)V + public final fun addBranch (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public final fun addBranch (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public final fun addReturnPoint (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public final fun addVarInfo (Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public static synthetic fun addVarInfo$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public final fun addVarInfos (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext; + public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; + public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; + public final fun component4 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; + public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public fun equals (Ljava/lang/Object;)Z + public final fun getBranch ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; + public final fun getContext ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext; + public final fun getReturnPoints ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; + public final fun getVarInfo ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; + public fun hashCode ()I + public final fun replaceTopMostReturnPoint (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public fun toString ()Ljava/lang/String; +} + +public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition { + public synthetic fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;ZLarrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun getWhole ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun isElse ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior;)V + public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; + public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn; + public fun equals (Ljava/lang/Object;)Z + public final fun getArgumentName ()Ljava/lang/String; + public final fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getReturnBehavior ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; + public final fun getTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior : java/lang/Enum { + public static final field RETURNS_ARGUMENT Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; + public static final field RETURNS_BLOCK_RESULT Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch { + public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch$Companion; + public fun (Ljava/util/List;)V + public final fun add (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; + public final fun add (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; + public final fun get ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch$Companion { + public final fun new ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo { + public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo$Companion; + public fun (Ljava/util/List;)V + public final fun add (Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; + public final fun add (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; + public static synthetic fun add$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; + public final fun copy (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Ljava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; + public fun equals (Ljava/lang/Object;)Z + public final fun get (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo$Companion { + public final fun new ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitBlockReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitReturn { + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitBlockReturn; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitBlockReturn;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitBlockReturn; + public fun equals (Ljava/lang/Object;)Z + public final fun getReturnPoint ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitLoopReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitReturn { + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitLoopReturn; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitLoopReturn;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitLoopReturn; + public fun equals (Ljava/lang/Object;)Z + public final fun getReturnPoint ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return { +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitThrowReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitReturn { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)V + public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitThrowReturn; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitThrowReturn;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitThrowReturn; + public fun equals (Ljava/lang/Object;)Z + public final fun getExceptionType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace : java/lang/Enum { + public static final field AFTER_LOOP Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace; + public static final field INSIDE_LOOP Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/MissingElseBlockExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;)V + public fun getFirstStatement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getImplicitReturnFromLast ()Z + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getStatements ()Ljava/util/List; + public fun getText ()Ljava/lang/String; + public final fun getThenExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public final fun getWhole ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun impl ()Ljava/lang/Object; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/NoReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return { + public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/NoReturn; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return { +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints { + public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints$Companion; + public fun (Lkotlin/Pair;Ljava/util/Map;)V + public final fun addAndReplaceTopMost (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; + public final fun component1 ()Lkotlin/Pair; + public final fun component2 ()Ljava/util/Map; + public final fun copy (Lkotlin/Pair;Ljava/util/Map;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints;Lkotlin/Pair;Ljava/util/Map;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; + public fun equals (Ljava/lang/Object;)Z + public final fun getNamedReturnPointVariableNames ()Ljava/util/Map; + public final fun getTopMostReturnPointVariableName ()Lkotlin/Pair; + public fun hashCode ()I + public final fun replaceTopMost (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints$Companion { + public final fun new (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/SimpleCondition : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;ZLarrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)V + public final fun getPredicate ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;)V + public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return; + public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; + public fun equals (Ljava/lang/Object;)Z + public final fun getData ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; + public final fun getReturnInfo ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public final fun withData (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; + public final fun withReturn (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfterKt { + public static final fun noReturn (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; + public static final fun noReturn (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;Lkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/SubjectCondition : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition;ZLarrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)V + public final fun getCheck ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo { + public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo$Companion; + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun component4 ()Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; + public fun equals (Ljava/lang/Object;)Z + public final fun getInvariant ()Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun getName ()Ljava/lang/String; + public final fun getOrigin ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun getSmtName ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo$Companion { + public final fun invoke (Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; + public static synthetic fun invoke$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo$Companion;Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; + public final fun unsafeCreate (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; + public static synthetic fun unsafeCreate$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo$Companion;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptorKt { + public static final fun findDescriptorFromLocalLaw (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotationsKt { + public static final fun collectConstraintsFromAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Ljava/util/List;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Lkotlin/Pair; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSLKt { + public static final fun collectConstraintsFromDSL (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)V +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V + public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public final fun component2 ()Ljava/util/List; + public final fun component3 ()Ljava/util/List; + public final fun component4 ()Ljava/util/List; + public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; + public fun equals (Ljava/lang/Object;)Z + public final fun getDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public final fun getDoNotLookAtArgumentsWhen ()Ljava/util/List; + public final fun getPost ()Ljava/util/List; + public final fun getPre ()Ljava/util/List; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint { + public fun (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/BooleanFormula;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun copy (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint;Ljava/lang/String;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint; + public fun equals (Ljava/lang/Object;)Z + public final fun getFormula ()Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun getMsg ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { + public abstract fun getFullDescription ()Ljava/lang/String; + public abstract fun getId ()Ljava/lang/String; + public abstract fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public abstract fun getName ()Ljava/lang/String; + public abstract fun getShortDescription ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$DefaultImpls { + public static fun getFullDescription (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;)Ljava/lang/String; + public static fun getId (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;)Ljava/lang/String; + public static fun getLevel (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { + public static final field IllegalState Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception; + public static final field OtherException Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception; + public fun getFullDescription ()Ljava/lang/String; + public fun getId ()Ljava/lang/String; + public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public synthetic fun getName ()Ljava/lang/String; + public fun getShortDescription ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { + public static final field InconsistentBodyPre Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; + public static final field InconsistentCallPost Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; + public static final field InconsistentConditions Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; + public static final field InconsistentDefaultValues Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; + public static final field InconsistentInvariants Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; + public synthetic fun (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun getFullDescription ()Ljava/lang/String; + public fun getId ()Ljava/lang/String; + public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public synthetic fun getName ()Ljava/lang/String; + public fun getShortDescription ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { + public static final field CouldNotResolveSubject Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; + public static final field LawMustCallFunction Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; + public static final field LawMustHaveParametersInOrder Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; + public static final field SubjectWithoutName Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; + public fun getFullDescription ()Ljava/lang/String; + public fun getId ()Ljava/lang/String; + public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public synthetic fun getName ()Ljava/lang/String; + public fun getShortDescription ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { + public static final field NotStrongerPostcondition Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov; + public static final field NotWeakerPrecondition Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov; + public synthetic fun (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun getFullDescription ()Ljava/lang/String; + public fun getId ()Ljava/lang/String; + public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public synthetic fun getName ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { + public static final field ErrorParsingPredicate Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; + public static final field UnexpectedFieldInitBlock Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; + public static final field UnexpectedReference Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; + public static final field WarningParsingPredicate Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; + public fun getFullDescription ()Ljava/lang/String; + public fun getId ()Ljava/lang/String; + public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public synthetic fun getName ()Ljava/lang/String; + public fun getShortDescription ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { + public static final field UnsatBodyPost Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; + public static final field UnsatCallPre Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; + public static final field UnsatInvariants Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; + public synthetic fun (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun getFullDescription ()Ljava/lang/String; + public fun getId ()Ljava/lang/String; + public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public synthetic fun getName ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsupported : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { + public static final field UnsupportedExpression Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsupported; + public fun getFullDescription ()Ljava/lang/String; + public fun getId ()Ljava/lang/String; + public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public synthetic fun getName ()Ljava/lang/String; + public fun getShortDescription ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsupported; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsupported; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages { + public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Exception { + public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Exception; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Inconsistency { + public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Inconsistency; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Liskov { + public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Liskov; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Parsing { + public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Parsing; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Unsatisfiability { + public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Unsatisfiability; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Unsupported { + public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Unsupported; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel : java/lang/Enum { + public static final field Error Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public static final field Info Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public static final field Unsupported Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public static final field Warning Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearchKt { + public static final fun getConstraintsFor (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; + public static final fun getConstraintsFor (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState { + public fun (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Larrow/meta/plugins/analysis/smt/utils/NameProvider;Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;Ljava/util/List;Larrow/meta/plugins/analysis/smt/utils/FieldProvider;Ljava/util/Set;)V + public synthetic fun (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Larrow/meta/plugins/analysis/smt/utils/NameProvider;Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;Ljava/util/List;Larrow/meta/plugins/analysis/smt/utils/FieldProvider;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun addConstraint (Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)V + public final fun bracket (Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; + public final fun component3 ()Larrow/meta/plugins/analysis/smt/utils/NameProvider; + public final fun component4 ()Larrow/meta/plugins/analysis/smt/Solver; + public final fun component5 ()Lorg/sosy_lab/java_smt/api/ProverEnvironment; + public final fun component6 ()Ljava/util/Map; + public final fun component7 ()Ljava/util/List; + public final fun component8 ()Larrow/meta/plugins/analysis/smt/utils/FieldProvider; + public final fun copy (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Larrow/meta/plugins/analysis/smt/utils/NameProvider;Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;Ljava/util/List;Larrow/meta/plugins/analysis/smt/utils/FieldProvider;Ljava/util/Set;)Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Larrow/meta/plugins/analysis/smt/utils/NameProvider;Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;Ljava/util/List;Larrow/meta/plugins/analysis/smt/utils/FieldProvider;Ljava/util/Set;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState; + public fun equals (Ljava/lang/Object;)Z + public final fun field (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; + public final fun getCallableConstraints ()Ljava/util/Map; + public final fun getContinuationBracket ()Larrow/meta/continuations/ContSeq; + public final fun getFieldProvider ()Larrow/meta/plugins/analysis/smt/utils/FieldProvider; + public final fun getNames ()Larrow/meta/plugins/analysis/smt/utils/NameProvider; + public final fun getProver ()Lorg/sosy_lab/java_smt/api/ProverEnvironment; + public final fun getSolver ()Larrow/meta/plugins/analysis/smt/Solver; + public final fun getSolverTrace ()Ljava/util/List; + public final fun hadParseErrors ()Z + public fun hashCode ()I + public final fun newName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Ljava/lang/String; + public final fun newName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/Pair;)Ljava/lang/String; + public final fun notifyModuleProcessed (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)V + public final fun notifySarifReport (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun scopedBracket (Lkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; + public final fun signalParseErrors ()V + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverStateKt { + public static final fun getAsField (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/sarif/ReportedError { + public fun (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;Ljava/util/List;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds; + public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/util/List; + public final fun copy (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;Ljava/util/List;)Larrow/meta/plugins/analysis/sarif/ReportedError; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/sarif/ReportedError;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/sarif/ReportedError; + public fun equals (Ljava/lang/Object;)Z + public final fun getElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun getErrorsId ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds; + public final fun getId ()Ljava/lang/String; + public final fun getMsg ()Ljava/lang/String; + public final fun getReferences ()Ljava/util/List; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/sarif/SarifReporterKt { + public static final fun sarifFileContent (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String; + public static final fun toResults (Ljava/lang/String;Ljava/util/List;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/smt/FormulaExtensionsKt { + public static final fun extractSingleVariable (Lorg/sosy_lab/java_smt/api/FormulaManager;Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; + public static final fun fieldNames (Lorg/sosy_lab/java_smt/api/FormulaManager;Ljava/lang/Iterable;)Ljava/util/Set; + public static final fun fieldNames (Lorg/sosy_lab/java_smt/api/FormulaManager;Lorg/sosy_lab/java_smt/api/Formula;)Ljava/util/Set; + public static final fun isFieldCall (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/Formula;)Z + public static final fun isSingleVariable (Lorg/sosy_lab/java_smt/api/FormulaManager;Lorg/sosy_lab/java_smt/api/Formula;)Z + public static final fun renameDeclarationConstraints (Larrow/meta/plugins/analysis/smt/Solver;Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints;Ljava/util/Map;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; + public static final fun substituteDeclarationConstraints (Larrow/meta/plugins/analysis/smt/Solver;Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints;Ljava/util/Map;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; + public static final fun substituteVariable (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/Formula;Ljava/util/Map;)Lorg/sosy_lab/java_smt/api/Formula; + public static final fun substituteWithFix (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/Formula;Ljava/util/Map;)Lorg/sosy_lab/java_smt/api/Formula; +} + +public final class arrow/meta/plugins/analysis/smt/Solver : arrow/meta/plugins/analysis/smt/utils/KotlinPrinter, org/sosy_lab/java_smt/api/BooleanFormulaManager, org/sosy_lab/java_smt/api/FormulaManager, org/sosy_lab/java_smt/api/SolverContext { + public static final field Companion Larrow/meta/plugins/analysis/smt/Solver$Companion; + public fun (Lorg/sosy_lab/java_smt/api/SolverContext;Larrow/meta/plugins/analysis/smt/utils/NameProvider;)V + public fun and (Ljava/util/Collection;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun and (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun and ([Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun applyTactic (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/Tactic;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun arrays (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun bitvectors (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun boolValue (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun booleans (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public fun close ()V + public final fun decimalValue (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/NumeralFormula$RationalFormula; + public fun dumpFormula (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/common/Appender; + public fun dumpKotlinLike (Ljava/util/List;)Ljava/lang/String; + public fun dumpKotlinLike (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; + public fun dumpKotlinLikeOrRemove (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; + public fun equivalence (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun escape (Ljava/lang/String;)Ljava/lang/String; + public fun extractVariables (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/util/Map; + public fun extractVariablesAndUFs (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/util/Map; + public final fun field (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; + public final fun floatingPoint (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun formulae (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public fun getArrayFormulaManager ()Lorg/sosy_lab/java_smt/api/ArrayFormulaManager; + public fun getBitvectorFormulaManager ()Lorg/sosy_lab/java_smt/api/BitvectorFormulaManager; + public final fun getBoolValueFun ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; + public fun getBooleanFormulaManager ()Lorg/sosy_lab/java_smt/api/BooleanFormulaManager; + public final fun getDecimalValueFun ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; + public final fun getFieldFun ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; + public fun getFloatingPointFormulaManager ()Lorg/sosy_lab/java_smt/api/FloatingPointFormulaManager; + public fun getFormulaManager ()Lorg/sosy_lab/java_smt/api/FormulaManager; + public fun getFormulaType (Lorg/sosy_lab/java_smt/api/Formula;)Lorg/sosy_lab/java_smt/api/FormulaType; + public final fun getIntValueFun ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; + public fun getIntegerFormulaManager ()Lorg/sosy_lab/java_smt/api/IntegerFormulaManager; + public fun getQuantifiedFormulaManager ()Lorg/sosy_lab/java_smt/api/QuantifiedFormulaManager; + public fun getRationalFormulaManager ()Lorg/sosy_lab/java_smt/api/RationalFormulaManager; + public final fun getResultVariable ()Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; + public fun getSLFormulaManager ()Lorg/sosy_lab/java_smt/api/SLFormulaManager; + public fun getSolverName ()Lorg/sosy_lab/java_smt/SolverContextFactory$Solvers; + public fun getStringFormulaManager ()Lorg/sosy_lab/java_smt/api/StringFormulaManager; + public final fun getThisVariable ()Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; + public fun getUFManager ()Lorg/sosy_lab/java_smt/api/UFManager; + public fun getVersion ()Ljava/lang/String; + public fun ifThenElse (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/Formula;Lorg/sosy_lab/java_smt/api/Formula;)Lorg/sosy_lab/java_smt/api/Formula; + public fun implication (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun intValue (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; + public final fun ints (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public fun isFalse (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Z + public final fun isNotNull (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun isNull (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun isNullFn ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; + public fun isTrue (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Z + public fun isValidName (Ljava/lang/String;)Z + public fun makeApplication (Lorg/sosy_lab/java_smt/api/FunctionDeclaration;Ljava/util/List;)Lorg/sosy_lab/java_smt/api/Formula; + public fun makeApplication (Lorg/sosy_lab/java_smt/api/FunctionDeclaration;[Lorg/sosy_lab/java_smt/api/Formula;)Lorg/sosy_lab/java_smt/api/Formula; + public final fun makeBooleanObjectVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun makeDecimalObjectVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/NumeralFormula$RationalFormula; + public fun makeFalse ()Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun makeIntegerObjectVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; + public final fun makeObjectVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; + public fun makeTrue ()Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun makeVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun makeVariable (Lorg/sosy_lab/java_smt/api/FormulaType;Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/Formula; + public fun mirroredElement (Ljava/lang/String;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; + public fun newOptimizationProverEnvironment ([Lorg/sosy_lab/java_smt/api/SolverContext$ProverOptions;)Lorg/sosy_lab/java_smt/api/OptimizationProverEnvironment; + public fun newProverEnvironment ([Lorg/sosy_lab/java_smt/api/SolverContext$ProverOptions;)Lorg/sosy_lab/java_smt/api/ProverEnvironment; + public fun newProverEnvironmentWithInterpolation ([Lorg/sosy_lab/java_smt/api/SolverContext$ProverOptions;)Lorg/sosy_lab/java_smt/api/InterpolatingProverEnvironment; + public fun not (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun objects (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public fun or (Ljava/util/Collection;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun or (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun or ([Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun parse (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public final fun quantified (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun rationals (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun separationLogic (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public fun simplify (Lorg/sosy_lab/java_smt/api/Formula;)Lorg/sosy_lab/java_smt/api/Formula; + public fun substitute (Lorg/sosy_lab/java_smt/api/Formula;Ljava/util/Map;)Lorg/sosy_lab/java_smt/api/Formula; + public fun toConjunction ()Ljava/util/stream/Collector; + public fun toConjunctionArgs (Lorg/sosy_lab/java_smt/api/BooleanFormula;Z)Ljava/util/Set; + public fun toDisjunction ()Ljava/util/stream/Collector; + public fun toDisjunctionArgs (Lorg/sosy_lab/java_smt/api/BooleanFormula;Z)Ljava/util/Set; + public fun transformRecursively (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/visitors/BooleanFormulaTransformationVisitor;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun transformRecursively (Lorg/sosy_lab/java_smt/api/Formula;Lorg/sosy_lab/java_smt/api/visitors/FormulaTransformationVisitor;)Lorg/sosy_lab/java_smt/api/Formula; + public fun translateFrom (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/FormulaManager;)Lorg/sosy_lab/java_smt/api/BooleanFormula; + public fun unescape (Ljava/lang/String;)Ljava/lang/String; + public final fun uninterpretedFunctions (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public fun visit (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/visitors/BooleanFormulaVisitor;)Ljava/lang/Object; + public fun visit (Lorg/sosy_lab/java_smt/api/Formula;Lorg/sosy_lab/java_smt/api/visitors/FormulaVisitor;)Ljava/lang/Object; + public fun visitRecursively (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/visitors/BooleanFormulaVisitor;)V + public fun visitRecursively (Lorg/sosy_lab/java_smt/api/Formula;Lorg/sosy_lab/java_smt/api/visitors/FormulaVisitor;)V + public fun xor (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; +} + +public final class arrow/meta/plugins/analysis/smt/Solver$Companion { + public final fun getBOOL_VALUE_NAME ()Ljava/lang/String; + public final fun getDECIMAL_VALUE_NAME ()Ljava/lang/String; + public final fun getFIELD_FUNCTION_NAME ()Ljava/lang/String; + public final fun getINT_VALUE_NAME ()Ljava/lang/String; + public final fun getIS_NULL_FUNCTION_NAME ()Ljava/lang/String; + public final fun invoke (Larrow/meta/plugins/analysis/smt/utils/NameProvider;)Larrow/meta/plugins/analysis/smt/Solver; +} + +public final class arrow/meta/plugins/analysis/smt/SolverKt { + public static final fun getFieldFormulaType ()Lorg/sosy_lab/java_smt/api/FormulaType; + public static final fun getObjectFormulaType ()Lorg/sosy_lab/java_smt/api/FormulaType; +} + +public final class arrow/meta/plugins/analysis/smt/utils/FieldProvider { + public static final field Companion Larrow/meta/plugins/analysis/smt/utils/FieldProvider$Companion; + public fun (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;J)V + public final fun introduce (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)J +} + +public final class arrow/meta/plugins/analysis/smt/utils/FieldProvider$Companion { + public final fun invoke (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;)Larrow/meta/plugins/analysis/smt/utils/FieldProvider; +} + +public abstract interface class arrow/meta/plugins/analysis/smt/utils/KotlinPrinter { + public abstract fun dumpKotlinLike (Ljava/util/List;)Ljava/lang/String; + public abstract fun dumpKotlinLike (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; + public abstract fun dumpKotlinLikeOrRemove (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; + public abstract fun mirroredElement (Ljava/lang/String;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; +} + +public final class arrow/meta/plugins/analysis/smt/utils/KotlinPrinter$DefaultImpls { + public static fun dumpKotlinLike (Larrow/meta/plugins/analysis/smt/utils/KotlinPrinter;Ljava/util/List;)Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/smt/utils/NameProvider { + public fun ()V + public final fun mirroredElement (Ljava/lang/String;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; + public final fun recordNewName (Ljava/lang/String;Larrow/meta/plugins/analysis/smt/utils/ReferencedElement;)Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/smt/utils/ReferencedElement { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/Pair;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)V + public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun component2 ()Lkotlin/Pair; + public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/Pair;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; + public static synthetic fun copy$default (Larrow/meta/plugins/analysis/smt/utils/ReferencedElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/Pair;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ILjava/lang/Object;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; + public fun equals (Ljava/lang/Object;)Z + public final fun getElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun getReference ()Lkotlin/Pair; + public final fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/types/LiteralsKt { + public static final fun asFloatingLiteral (Ljava/lang/String;)Ljava/math/BigDecimal; + public static final fun asIntegerLiteral (Ljava/lang/String;)Ljava/math/BigInteger; +} + +public final class arrow/meta/plugins/analysis/types/PrimitiveType : java/lang/Enum { + public static final field BOOLEAN Larrow/meta/plugins/analysis/types/PrimitiveType; + public static final field CHAR Larrow/meta/plugins/analysis/types/PrimitiveType; + public static final field INTEGRAL Larrow/meta/plugins/analysis/types/PrimitiveType; + public static final field RATIONAL Larrow/meta/plugins/analysis/types/PrimitiveType; + public static final field STRING Larrow/meta/plugins/analysis/types/PrimitiveType; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/types/PrimitiveType; + public static fun values ()[Larrow/meta/plugins/analysis/types/PrimitiveType; +} + +public final class arrow/meta/plugins/analysis/types/PrimitiveTypeKt { + public static final fun primitiveType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/types/PrimitiveType; + public static final fun unwrapIfNullable (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + diff --git a/arrow-libs/analysis/analysis/common/build.gradle.kts b/arrow-libs/analysis/analysis/common/build.gradle.kts index b9167fe60..7c5319d9b 100644 --- a/arrow-libs/analysis/analysis/common/build.gradle.kts +++ b/arrow-libs/analysis/analysis/common/build.gradle.kts @@ -5,6 +5,7 @@ plugins { alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.publish) alias(libs.plugins.arrowGradleConfig.versioning) + alias(libs.plugins.kotlin.binaryCompatibilityValidator) } kotlin { diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/api/arrow-analysis-java-gradle-plugin.api b/arrow-libs/analysis/analysis/java-gradle-plugin/api/arrow-analysis-java-gradle-plugin.api new file mode 100644 index 000000000..cf33b594c --- /dev/null +++ b/arrow-libs/analysis/analysis/java-gradle-plugin/api/arrow-analysis-java-gradle-plugin.api @@ -0,0 +1,6 @@ +public final class arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin : org/gradle/api/Plugin { + public fun ()V + public synthetic fun apply (Ljava/lang/Object;)V + public fun apply (Lorg/gradle/api/Project;)V +} + diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts index bc52a1bad..fa84d345c 100644 --- a/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts @@ -6,6 +6,7 @@ plugins { alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.publish) alias(libs.plugins.arrowGradleConfig.versioning) + alias(libs.plugins.kotlin.binaryCompatibilityValidator) } tasks.processResources { diff --git a/arrow-libs/analysis/analysis/java-plugin/api/arrow-analysis-java-plugin.api b/arrow-libs/analysis/analysis/java-plugin/api/arrow-analysis-java-plugin.api new file mode 100644 index 000000000..669ca5a4e --- /dev/null +++ b/arrow-libs/analysis/analysis/java-plugin/api/arrow-analysis-java-plugin.api @@ -0,0 +1,1177 @@ +public final class arrow/meta/plugins/analysis/java/AnalysisContext : arrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver { + public static final field Companion Larrow/meta/plugins/analysis/java/AnalysisContext$Companion; + public fun (Lcom/sun/tools/javac/util/Context;Ljavax/lang/model/util/Types;Ljavax/lang/model/util/Elements;Lcom/sun/source/tree/CompilationUnitTree;Larrow/meta/plugins/analysis/java/Resolver;)V + public final fun getResolver ()Larrow/meta/plugins/analysis/java/Resolver; + public final fun getUnit ()Lcom/sun/source/tree/CompilationUnitTree; +} + +public final class arrow/meta/plugins/analysis/java/AnalysisContext$Companion { + public final fun invoke (Lcom/sun/tools/javac/api/BasicJavacTask;Lcom/sun/source/tree/CompilationUnitTree;)Larrow/meta/plugins/analysis/java/AnalysisContext; +} + +public class arrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver { + public static final field Companion Larrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver$Companion; + public fun (Lcom/sun/tools/javac/util/Context;Ljavax/lang/model/util/Types;Ljavax/lang/model/util/Elements;)V + public final fun copy (Lcom/sun/tools/javac/tree/JCTree;)Lcom/sun/tools/javac/tree/JCTree; + public final fun getContext ()Lcom/sun/tools/javac/util/Context; + public final fun getDiagnostics ()Lcom/sun/tools/javac/util/JCDiagnostic$Factory; + public final fun getElements ()Ljavax/lang/model/util/Elements; + public final fun getLogger ()Lcom/sun/tools/javac/util/Log; + public final fun getMessages ()Lcom/sun/tools/javac/util/JavacMessages; + public final fun getModules ()Lcom/sun/tools/javac/comp/Modules; + public final fun getNames ()Lcom/sun/tools/javac/util/Names; + public final fun getSymbolTable ()Lcom/sun/tools/javac/code/Symtab; + public final fun getTypes ()Ljavax/lang/model/util/Types; +} + +public final class arrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver$Companion { + public final fun invoke (Lcom/sun/tools/javac/api/BasicJavacTask;)Larrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver; +} + +public final class arrow/meta/plugins/analysis/java/AnalysisJavaPlugin : com/sun/source/util/Plugin { + public static final field Companion Larrow/meta/plugins/analysis/java/AnalysisJavaPlugin$Companion; + public static final field NAME Ljava/lang/String; + public fun ()V + public fun getName ()Ljava/lang/String; + public fun init (Lcom/sun/source/util/JavacTask;[Ljava/lang/String;)V +} + +public final class arrow/meta/plugins/analysis/java/AnalysisJavaPlugin$Companion { +} + +public final class arrow/meta/plugins/analysis/java/AnalysisJavaProcessor : javax/annotation/processing/Processor { + public fun ()V + public fun getCompletions (Ljavax/lang/model/element/Element;Ljavax/lang/model/element/AnnotationMirror;Ljavax/lang/model/element/ExecutableElement;Ljava/lang/String;)Ljava/lang/Iterable; + public fun getSupportedAnnotationTypes ()Ljava/util/Set; + public fun getSupportedOptions ()Ljava/util/Set; + public fun getSupportedSourceVersion ()Ljavax/lang/model/SourceVersion; + public final fun getTodo ()Ljava/util/List; + public fun init (Ljavax/annotation/processing/ProcessingEnvironment;)V + public fun process (Ljava/util/Set;Ljavax/annotation/processing/RoundEnvironment;)Z +} + +public final class arrow/meta/plugins/analysis/java/AnalysisJavaProcessorKey : com/sun/tools/javac/util/Context$Key { + public static final field INSTANCE Larrow/meta/plugins/analysis/java/AnalysisJavaProcessorKey; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I +} + +public final class arrow/meta/plugins/analysis/java/AnalysisMessages : java/util/ListResourceBundle { + public static final field AnalysisException Ljava/lang/String; + public static final field Companion Larrow/meta/plugins/analysis/java/AnalysisMessages$Companion; + public static final field ErrorParsingPredicate Ljava/lang/String; + public static final field InconsistentBodyPre Ljava/lang/String; + public static final field InconsistentCallPost Ljava/lang/String; + public static final field InconsistentConditions Ljava/lang/String; + public static final field InconsistentInvariants Ljava/lang/String; + public static final field LiskovProblem Ljava/lang/String; + public static final field UnsatBodyPost Ljava/lang/String; + public static final field UnsatCallPre Ljava/lang/String; + public static final field UnsatInvariants Ljava/lang/String; + public static final field UnsupportedElement Ljava/lang/String; + public static final field WarningParsingPredicate Ljava/lang/String; + public fun ()V +} + +public final class arrow/meta/plugins/analysis/java/AnalysisMessages$Companion { + public final fun getErrors ()Ljava/util/List; + public final fun getWarnings ()Ljava/util/List; +} + +public abstract class arrow/meta/plugins/analysis/java/PerKindTaskListener : com/sun/source/util/TaskListener { + public fun ()V + public final fun afterAnalyze (Lcom/sun/source/util/TaskEvent;)V + public final fun afterEnter (Lcom/sun/source/util/TaskEvent;)V + public final fun afterGenerate (Lcom/sun/source/util/TaskEvent;)V + public final fun afterParse (Lcom/sun/source/util/TaskEvent;)V + public fun finished (Lcom/sun/source/util/TaskEvent;)V +} + +public final class arrow/meta/plugins/analysis/java/Resolver { + public fun (Ljavax/tools/JavaCompiler$CompilationTask;Lcom/sun/source/tree/CompilationUnitTree;)V + public final fun getTopElement ()Ljavax/lang/model/element/Element; + public final fun parent (Lcom/sun/source/tree/Tree;)Lcom/sun/source/tree/Tree; + public final fun parentElements (Lcom/sun/source/tree/Tree;)Ljava/lang/Iterable; + public final fun parentTrees (Lcom/sun/source/tree/Tree;)Ljava/lang/Iterable; + public final fun path (Lcom/sun/source/tree/Tree;)Lcom/sun/source/util/TreePath; + public final fun positionOf (Lcom/sun/source/tree/Tree;)Lkotlin/Pair; + public final fun resolve (Lcom/sun/source/tree/Tree;)Ljavax/lang/model/element/Element; + public final fun resolveType (Lcom/sun/source/tree/Tree;)Ljavax/lang/model/type/TypeMirror; + public final fun tree (Ljavax/lang/model/element/Element;)Lcom/sun/source/tree/Tree; +} + +public final class arrow/meta/plugins/analysis/java/TaskListenerKt { + public static final fun after (Lcom/sun/source/util/JavacTask;Lcom/sun/source/util/TaskEvent$Kind;Lkotlin/jvm/functions/Function2;)V + public static final fun before (Lcom/sun/source/util/JavacTask;Lcom/sun/source/util/TaskEvent$Kind;Lkotlin/jvm/functions/Function2;)V +} + +public final class arrow/meta/plugins/analysis/java/ast/AnnotationUtilsKt { + public static final fun addAnn (Lcom/sun/tools/javac/tree/JCTree$JCModifiers;Lcom/sun/tools/javac/tree/JCTree$JCAnnotation;)V + public static final fun addAnn (Lcom/sun/tools/javac/tree/JCTree$JCModifiers;Lkotlin/jvm/functions/Function0;)V + public static final fun annArrays (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/lang/String;[Ljava/util/List;)Lcom/sun/tools/javac/tree/JCTree$JCAnnotation; + public static final fun annStrings (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/lang/String;[Ljava/lang/String;)Lcom/sun/tools/javac/tree/JCTree$JCAnnotation; + public static final fun hintsClass (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;)Lcom/sun/tools/javac/tree/JCTree$JCClassDecl; + public static final fun hintsPackage (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;)Lkotlin/Pair; +} + +public final class arrow/meta/plugins/analysis/java/ast/JavaInterpreterKt { + public static final fun fqName (Ljavax/lang/model/element/Name;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static final fun model (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static final fun model (Ljavax/lang/model/element/Element;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor; + public static final fun model (Ljavax/lang/model/type/TypeMirror;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/java/ast/types/JavaType; + public static final fun modelCautious (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static final fun modelCautious (Ljavax/lang/model/type/TypeMirror;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/java/ast/types/JavaType; + public static final fun name (Ljavax/lang/model/element/Name;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; +} + +public final class arrow/meta/plugins/analysis/java/ast/JavaResolutionContext : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/java/AnalysisContext;)V + public fun backingPropertyForConstructorParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; + public fun constraintsDSLElements (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Ljava/util/List; + public fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; + public fun getModule ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor; + public fun getTypes ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types; + public fun handleError (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportAnalysisException (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportInconsistentCallPost (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportInconsistentConditions (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportInconsistentInvariants (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportLiskovProblem (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportUnsatInvariants (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportUnsupported (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/AnnotationMirror;)V + public fun argumentValueAsArrayOfString (Ljava/lang/String;)Ljava/util/List; + public fun argumentValueAsString (Ljava/lang/String;)Ljava/lang/String; + public fun getAllValueArguments ()Ljava/util/Map; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;)V + public fun findAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public synthetic fun getImpl ()Ljava/lang/Object; + public fun getImpl ()Ljava/util/List; + public fun hasAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Z + public fun isEmpty ()Z + public fun iterable ()Ljava/lang/Iterable; +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/TypeElement;)V + public fun getCompanionObjectDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public fun getCompleteUnsubstitutedScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getConstructors ()Ljava/util/Collection; + public fun getDeclaredTypeParameters ()Ljava/util/List; + public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public fun getSealedSubclasses ()Ljava/util/Collection; + public fun getStaticScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getSuperTypes ()Ljava/util/Collection; + public fun getThisAsReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; + public fun getUnsubstitutedInnerClassesScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getUnsubstitutedMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getUnsubstitutedPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; + public fun isCompanionObject ()Z + public fun isData ()Z + public fun isEnumEntry ()Z + public fun isFun ()Z + public fun isInline ()Z + public fun isInner ()Z + public fun isValue ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/ExecutableElement;)V + public fun getConstructedClass ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public fun isPrimary ()Z +} + +public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/Element;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Ljavax/lang/model/element/Element; +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtilsKt { + public static final fun getEnclosingClass (Ljavax/lang/model/element/Element;)Ljavax/lang/model/element/TypeElement; + public static final fun getFqName (Ljavax/lang/model/element/Element;)Ljava/lang/String; + public static final fun getParametersFromEverywhere (Ljavax/lang/model/element/Element;)Ljava/util/List; + public static final fun getTypeParametersFromEverywhere (Ljavax/lang/model/element/Element;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V + public fun getCompanionObjectDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public fun getCompleteUnsubstitutedScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getConstructors ()Ljava/util/Collection; + public fun getDeclaredTypeParameters ()Ljava/util/List; + public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public fun getSealedSubclasses ()Ljava/util/Collection; + public fun getStaticScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getSuperTypes ()Ljava/util/Collection; + public fun getThisAsReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; + public fun getUnsubstitutedInnerClassesScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getUnsubstitutedMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getUnsubstitutedPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; + public fun isCompanionObject ()Z + public fun isData ()Z + public fun isEnumEntry ()Z + public fun isFun ()Z + public fun isInline ()Z + public fun isInner ()Z + public fun isValue ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V + public fun getAccessors ()Ljava/util/List; + public fun getAllParameters ()Ljava/util/List; + public fun getBackingField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; + public fun getDelegateField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; + public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; + public fun getType ()Larrow/meta/plugins/analysis/java/ast/types/JavaType; + public synthetic fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeParameters ()Ljava/util/List; + public fun getValueParameters ()Ljava/util/List; + public fun isConst ()Z + public fun isDelegated ()Z + public fun isLateInit ()Z + public fun isSetterProjectedOut ()Z + public fun isVar ()Z +} + +public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/ExecutableElement;)V + public fun getAllParameters ()Ljava/util/List; + public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeParameters ()Ljava/util/List; + public fun getValueParameters ()Ljava/util/List; + public fun isInfix ()Z + public fun isInline ()Z + public fun isOperator ()Z + public fun isSuspend ()Z + public fun isTailrec ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V +} + +public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/Element;)V + public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public fun isActual ()Z + public fun isExpect ()Z + public fun isExternal ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/Collection;)V + public fun getClassifierNames ()Ljava/util/Set; + public fun getContributedDescriptors (Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public fun getFunctionNames ()Ljava/util/Set; + public fun getVariableNames ()Ljava/util/Set; +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/ModuleElement;)V + public fun getPackage (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor; + public fun getStableName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getSubPackagesOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/PackageElement;)V + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V + public fun declaresDefaultValue ()Z + public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getIndex ()I + public fun getVarargElementType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun isCrossinline ()Z + public fun isNoinline ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/element/Element;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getAllParameters ()Ljava/util/List; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeParameters ()Ljava/util/List; + public fun getValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public fun getValueParameters ()Ljava/util/List; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Ljavax/lang/model/type/TypeMirror; +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/ExecutableElement;)V +} + +public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/TypeParameterElement;)V + public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getIndex ()I + public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; + public fun getUpperBounds ()Ljava/util/List; + public fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public fun isCapturedFromOuterDeclaration ()Z + public fun isReified ()Z +} + +public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V + public fun getAllParameters ()Ljava/util/List; + public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeParameters ()Ljava/util/List; + public fun getValueParameters ()Ljava/util/List; +} + +public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V + public fun isConst ()Z + public fun isLateInit ()Z + public fun isVar ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssert : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/AssertTree;)V + public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getDetail ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssertFakeCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/AssertTree;)V + public fun getCallElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getDispatchReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public fun getExtensionReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getResultingDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeArguments ()Ljava/util/Map; + public fun getValueArguments ()Ljava/util/Map; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssertFakeDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Z)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getAllParameters ()Ljava/util/List; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public final fun getMessageParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public final fun getPredicateParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeParameters ()Ljava/util/List; + public fun getValueParameters ()Ljava/util/List; + public fun impl ()Ljava/lang/Object; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssertFakeParameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;ILjava/lang/String;Ljavax/lang/model/type/TypeMirror;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun declaresDefaultValue ()Z + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getAllParameters ()Ljava/util/List; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public fun getIndex ()I + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeParameters ()Ljava/util/List; + public fun getValueParameters ()Ljava/util/List; + public fun getVarargElementType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun impl ()Ljava/lang/Object; + public fun isConst ()Z + public fun isCrossinline ()Z + public fun isLateInit ()Z + public fun isNoinline ()Z + public fun isVar ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/AssignmentTree;)V + public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getOperationToken ()Ljava/lang/String; + public fun getOperationTokenRpr ()Ljava/lang/String; + public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaBinary : arrow/meta/plugins/analysis/java/ast/elements/JavaOperation, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/BinaryTree;)V + public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationToken ()Ljava/lang/String; + public fun getOperationTokenRpr ()Ljava/lang/String; + public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaBlock : arrow/meta/plugins/analysis/java/ast/elements/JavaBlockParent, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/BlockTree;)V +} + +public class arrow/meta/plugins/analysis/java/ast/elements/JavaBlockParent : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;Lcom/sun/source/tree/Tree;)V + public fun getFirstStatement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getImplicitReturnFromLast ()Z + public fun getStatements ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaBreak : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/BreakTree;)V + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaCall : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MethodInvocationTree;)V + public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getLambdaArguments ()Ljava/util/List; + public fun getTypeArguments ()Ljava/util/List; + public fun getValueArguments ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaCase : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/CaseTree;)V + public fun getConditions ()Ljava/util/List; + public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun isElse ()Z +} + +public class arrow/meta/plugins/analysis/java/ast/elements/JavaCatch : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/CatchTree;)V + public fun getCatchBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getCatchParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; + public fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaClass : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ClassTree;)V + public fun getAnonymousInitializers ()Ljava/util/List; + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; + public fun getCompanionObjects ()Ljava/util/List; + public fun getDeclarations ()Ljava/util/List; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; + public fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getPrimaryConstructorParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getPrimaryConstructorParameters ()Ljava/util/List; + public fun getProperties ()Ljava/util/List; + public fun getSecondaryConstructors ()Ljava/util/List; + public fun getSuperTypeListEntries ()Ljava/util/List; + public fun hasExplicitPrimaryConstructor ()Z + public fun hasPrimaryConstructor ()Z + public fun isAnnotation ()Z + public fun isData ()Z + public fun isEnum ()Z + public fun isInline ()Z + public fun isInner ()Z + public fun isInterface ()Z + public fun isLocal ()Z + public fun isSealed ()Z + public fun isTopLevel ()Z + public fun isValue ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaCompoundAssignment : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/CompoundAssignmentTree;)V + public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getOperationToken ()Ljava/lang/String; + public fun getOperationTokenRpr ()Ljava/lang/String; + public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaCompoundAssignmentRHS : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/CompoundAssignmentTree;)V + public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getOperationToken ()Ljava/lang/String; + public fun getOperationTokenRpr ()Ljava/lang/String; + public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public abstract class arrow/meta/plugins/analysis/java/ast/elements/JavaConditional : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/ExpressionTree;Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/Tree;)V + public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getThenExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaConstructor : arrow/meta/plugins/analysis/java/ast/elements/JavaMethod, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MethodTree;)V + public fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; + public fun getDelegationCall ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaConstructorCall : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/NewClassTree;)V + public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getLambdaArguments ()Ljava/util/List; + public fun getTypeArguments ()Ljava/util/List; + public fun getValueArguments ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaContinue : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ContinueTree;)V + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaDefaultValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)V + public fun getArguments ()Ljava/util/List; + public fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaDoWhile : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/DoWhileLoopTree;)V + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public class arrow/meta/plugins/analysis/java/ast/elements/JavaElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public final fun getResolvedCall ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun impl ()Lcom/sun/source/tree/Tree; + public synthetic fun impl ()Ljava/lang/Object; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public final fun type ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtilsKt { + public static final fun fqName (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;)Ljava/lang/String; + public static final fun getArgumentsFromEverywhere (Lcom/sun/source/tree/ExpressionTree;)Ljava/util/List; + public static final fun getName (Lcom/sun/source/tree/Tree;)Ljava/lang/String; + public static final fun getTypeArgumentsFromEverywhere (Lcom/sun/source/tree/ExpressionTree;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaEmptyBlock : arrow/meta/plugins/analysis/java/ast/elements/JavaBlockParent, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/EmptyStatementTree;)V +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaEnhancedFor : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/EnhancedForLoopTree;)V + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; + public fun getLoopParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; + public fun getLoopRange ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaExpressionValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)V + public fun getArguments ()Ljava/util/List; + public fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression { + public fun (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)V + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReferencedName ()Ljava/lang/String; + public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun impl ()Ljava/lang/Object; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public class arrow/meta/plugins/analysis/java/ast/elements/JavaFinally : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/TryTree;)V + public fun getFinalExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaFor : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ForLoopTree;)V + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getInitializer ()Ljava/util/List; + public fun getUpdate ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/IdentifierTree;)V + public fun getReferencedName ()Ljava/lang/String; + public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaIf : arrow/meta/plugins/analysis/java/ast/elements/JavaConditional { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/IfTree;)V +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaInstanceInitializer : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/BlockTree;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;)V + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; + public fun getName ()Ljava/lang/String; + public fun getParents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaInstanceOf : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/InstanceOfTree;)V + public fun getLeftHandSide ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun isNegated ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/LabeledStatementTree;)V + public fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaLambda : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/LambdaExpressionTree;)V + public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getFunctionLiteral ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun hasBlockBody ()Z + public fun hasBody ()Z + public fun hasDeclaredReturnType ()Z + public fun hasParameterSpecification ()Z + public fun isLocal ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/LiteralTree;)V +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MemberReferenceTree;)V + public fun getCallableReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getHasQuestionMarks ()Z + public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun isEmptyLHS ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaMemberSelect : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MemberSelectTree;)V + public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getLambdaArguments ()Ljava/util/List; + public fun getTypeArguments ()Ljava/util/List; + public fun getValueArguments ()Ljava/util/List; +} + +public class arrow/meta/plugins/analysis/java/ast/elements/JavaMethod : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MethodTree;)V + public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun hasBlockBody ()Z + public fun hasBody ()Z + public fun hasDeclaredReturnType ()Z + public fun hasInitializer ()Z + public fun isLocal ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaNull : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/LiteralTree;)V +} + +public class arrow/meta/plugins/analysis/java/ast/elements/JavaOperation : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)V + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + protected final fun getOperatorName ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaParameter : arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/VariableTree;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody;)V + public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; + public fun getOwnerFunction ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody; + public fun hasDefaultValue ()Z + public fun hasValOrVar ()Z + public fun isCatchParameter ()Z + public fun isLoopParameter ()Z + public fun isMutable ()Z + public fun isVarArg ()Z +} + +public class arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/VariableTree;)V + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getText ()Ljava/lang/String; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ParenthesizedTree;)V + public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Lcom/sun/tools/javac/code/Symbol;Lcom/sun/source/tree/Tree;Ljava/util/List;Ljava/util/List;)V + public fun getCallElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getDispatchReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public fun getExtensionReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public fun getReceiverExpression ()Larrow/meta/plugins/analysis/java/ast/elements/JavaElement; + public synthetic fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getResultingDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeArguments ()Ljava/util/Map; + public fun getValueArguments ()Ljava/util/Map; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCallKt { + public static final fun resolvedCall (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;Ljava/util/List;)Larrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall; + public static synthetic fun resolvedCall$default (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaReturn : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ReturnTree;)V + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getLabeledExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getReturnedExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSingleBlock : arrow/meta/plugins/analysis/java/ast/elements/JavaBlockParent, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ExpressionStatementTree;)V +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation { + public static final field Companion Larrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation$Companion; + public fun (Lcom/sun/source/tree/CompilationUnitTree;JJ)V + public fun getColumn ()I + public fun getColumnEnd ()I + public fun getLine ()I + public fun getLineContent ()Ljava/lang/String; + public fun getLineEnd ()I + public fun getPath ()Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation$Companion { + public final fun invoke (Lcom/sun/source/tree/CompilationUnitTree;JJ)Larrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSuper : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/IdentifierTree;)V + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getSuperTypeQualifier ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSwitch : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/SwitchTree;)V + public fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getEntries ()Ljava/util/List; + public fun getSubjectExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getSubjectVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/SynchronizedTree;)V + public fun getBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getSubject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTernaryConditional : arrow/meta/plugins/analysis/java/ast/elements/JavaConditional { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ConditionalExpressionTree;)V +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaThis : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/IdentifierTree;)V + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtilsKt { + public static final fun accept (Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/TreeVisitor;Ljava/lang/Object;)Ljava/lang/Object; + public static final fun accept (Ljava/lang/Iterable;Lcom/sun/source/tree/TreeVisitor;Ljava/lang/Object;)Ljava/util/List; + public static final fun visit (Lcom/sun/source/tree/Tree;Lcom/sun/source/util/SimpleTreeVisitor;)Ljava/lang/Object; + public static final fun visitRecursively (Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/TreeVisitor;)V + public static final fun visitRecursively (Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/TreeVisitor;Ljava/lang/Object;)V +} + +public class arrow/meta/plugins/analysis/java/ast/elements/JavaTry : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/TryTree;)V + public fun getCatchClauses ()Ljava/util/List; + public fun getFinallyBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection; + public fun getTryBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeCast : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/TypeCastTree;)V + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; + public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getOperationToken ()Ljava/lang/String; + public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElement : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)V + public fun getTypeArgumentsAsTypes ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/TypeParameterTree;)V + public fun getExtendsBounds ()Ljava/util/List; + public fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)V + public fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeReference : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference { + public static final field Companion Larrow/meta/plugins/analysis/java/ast/elements/JavaTypeReference$Companion; + public synthetic fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun getTypeElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement; + public final fun getUnderlyingTree ()Lcom/sun/source/tree/Tree; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeReference$Companion { + public final fun invoke (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)Larrow/meta/plugins/analysis/java/ast/elements/JavaTypeReference; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaUnary : arrow/meta/plugins/analysis/java/ast/elements/JavaOperation, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/UnaryTree;)V + public fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public class arrow/meta/plugins/analysis/java/ast/elements/JavaValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)V + public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; + public fun isExternal ()Z + public fun isNamed ()Z + public fun isSpread ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaValueArgumentName : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)V + public fun getAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaVariable : arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/VariableTree;)V + public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun hasInitializer ()Z + public fun isVar ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/JavaWhile : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/WhileLoopTree;)V + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; +} + +public final class arrow/meta/plugins/analysis/java/ast/elements/RecursiveTreeVisitor : com/sun/source/util/SimpleTreeVisitor { + public fun (Lcom/sun/source/tree/TreeVisitor;)V + public synthetic fun visitAnnotatedType (Lcom/sun/source/tree/AnnotatedTypeTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitAnnotatedType (Lcom/sun/source/tree/AnnotatedTypeTree;Ljava/lang/Object;)V + public synthetic fun visitAnnotation (Lcom/sun/source/tree/AnnotationTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitAnnotation (Lcom/sun/source/tree/AnnotationTree;Ljava/lang/Object;)V + public synthetic fun visitArrayAccess (Lcom/sun/source/tree/ArrayAccessTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitArrayAccess (Lcom/sun/source/tree/ArrayAccessTree;Ljava/lang/Object;)V + public synthetic fun visitArrayType (Lcom/sun/source/tree/ArrayTypeTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitArrayType (Lcom/sun/source/tree/ArrayTypeTree;Ljava/lang/Object;)V + public synthetic fun visitAssert (Lcom/sun/source/tree/AssertTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitAssert (Lcom/sun/source/tree/AssertTree;Ljava/lang/Object;)V + public synthetic fun visitAssignment (Lcom/sun/source/tree/AssignmentTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitAssignment (Lcom/sun/source/tree/AssignmentTree;Ljava/lang/Object;)V + public synthetic fun visitBinary (Lcom/sun/source/tree/BinaryTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitBinary (Lcom/sun/source/tree/BinaryTree;Ljava/lang/Object;)V + public synthetic fun visitBlock (Lcom/sun/source/tree/BlockTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitBlock (Lcom/sun/source/tree/BlockTree;Ljava/lang/Object;)V + public synthetic fun visitBreak (Lcom/sun/source/tree/BreakTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitBreak (Lcom/sun/source/tree/BreakTree;Ljava/lang/Object;)V + public synthetic fun visitCase (Lcom/sun/source/tree/CaseTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitCase (Lcom/sun/source/tree/CaseTree;Ljava/lang/Object;)V + public synthetic fun visitCatch (Lcom/sun/source/tree/CatchTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitCatch (Lcom/sun/source/tree/CatchTree;Ljava/lang/Object;)V + public synthetic fun visitClass (Lcom/sun/source/tree/ClassTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitClass (Lcom/sun/source/tree/ClassTree;Ljava/lang/Object;)V + public synthetic fun visitCompilationUnit (Lcom/sun/source/tree/CompilationUnitTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitCompilationUnit (Lcom/sun/source/tree/CompilationUnitTree;Ljava/lang/Object;)V + public synthetic fun visitCompoundAssignment (Lcom/sun/source/tree/CompoundAssignmentTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitCompoundAssignment (Lcom/sun/source/tree/CompoundAssignmentTree;Ljava/lang/Object;)V + public synthetic fun visitConditionalExpression (Lcom/sun/source/tree/ConditionalExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitConditionalExpression (Lcom/sun/source/tree/ConditionalExpressionTree;Ljava/lang/Object;)V + public synthetic fun visitContinue (Lcom/sun/source/tree/ContinueTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitContinue (Lcom/sun/source/tree/ContinueTree;Ljava/lang/Object;)V + public synthetic fun visitDoWhileLoop (Lcom/sun/source/tree/DoWhileLoopTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitDoWhileLoop (Lcom/sun/source/tree/DoWhileLoopTree;Ljava/lang/Object;)V + public synthetic fun visitEmptyStatement (Lcom/sun/source/tree/EmptyStatementTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitEmptyStatement (Lcom/sun/source/tree/EmptyStatementTree;Ljava/lang/Object;)V + public synthetic fun visitEnhancedForLoop (Lcom/sun/source/tree/EnhancedForLoopTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitEnhancedForLoop (Lcom/sun/source/tree/EnhancedForLoopTree;Ljava/lang/Object;)V + public synthetic fun visitErroneous (Lcom/sun/source/tree/ErroneousTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitErroneous (Lcom/sun/source/tree/ErroneousTree;Ljava/lang/Object;)V + public synthetic fun visitExports (Lcom/sun/source/tree/ExportsTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitExports (Lcom/sun/source/tree/ExportsTree;Ljava/lang/Object;)V + public synthetic fun visitExpressionStatement (Lcom/sun/source/tree/ExpressionStatementTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitExpressionStatement (Lcom/sun/source/tree/ExpressionStatementTree;Ljava/lang/Object;)V + public synthetic fun visitForLoop (Lcom/sun/source/tree/ForLoopTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitForLoop (Lcom/sun/source/tree/ForLoopTree;Ljava/lang/Object;)V + public synthetic fun visitIdentifier (Lcom/sun/source/tree/IdentifierTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitIdentifier (Lcom/sun/source/tree/IdentifierTree;Ljava/lang/Object;)V + public synthetic fun visitIf (Lcom/sun/source/tree/IfTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitIf (Lcom/sun/source/tree/IfTree;Ljava/lang/Object;)V + public synthetic fun visitImport (Lcom/sun/source/tree/ImportTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitImport (Lcom/sun/source/tree/ImportTree;Ljava/lang/Object;)V + public synthetic fun visitInstanceOf (Lcom/sun/source/tree/InstanceOfTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitInstanceOf (Lcom/sun/source/tree/InstanceOfTree;Ljava/lang/Object;)V + public synthetic fun visitIntersectionType (Lcom/sun/source/tree/IntersectionTypeTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitIntersectionType (Lcom/sun/source/tree/IntersectionTypeTree;Ljava/lang/Object;)V + public synthetic fun visitLabeledStatement (Lcom/sun/source/tree/LabeledStatementTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitLabeledStatement (Lcom/sun/source/tree/LabeledStatementTree;Ljava/lang/Object;)V + public synthetic fun visitLambdaExpression (Lcom/sun/source/tree/LambdaExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitLambdaExpression (Lcom/sun/source/tree/LambdaExpressionTree;Ljava/lang/Object;)V + public synthetic fun visitLiteral (Lcom/sun/source/tree/LiteralTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitLiteral (Lcom/sun/source/tree/LiteralTree;Ljava/lang/Object;)V + public synthetic fun visitMemberReference (Lcom/sun/source/tree/MemberReferenceTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitMemberReference (Lcom/sun/source/tree/MemberReferenceTree;Ljava/lang/Object;)V + public synthetic fun visitMemberSelect (Lcom/sun/source/tree/MemberSelectTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitMemberSelect (Lcom/sun/source/tree/MemberSelectTree;Ljava/lang/Object;)V + public synthetic fun visitMethod (Lcom/sun/source/tree/MethodTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitMethod (Lcom/sun/source/tree/MethodTree;Ljava/lang/Object;)V + public synthetic fun visitMethodInvocation (Lcom/sun/source/tree/MethodInvocationTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitMethodInvocation (Lcom/sun/source/tree/MethodInvocationTree;Ljava/lang/Object;)V + public synthetic fun visitModifiers (Lcom/sun/source/tree/ModifiersTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitModifiers (Lcom/sun/source/tree/ModifiersTree;Ljava/lang/Object;)V + public synthetic fun visitModule (Lcom/sun/source/tree/ModuleTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitModule (Lcom/sun/source/tree/ModuleTree;Ljava/lang/Object;)V + public synthetic fun visitNewArray (Lcom/sun/source/tree/NewArrayTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitNewArray (Lcom/sun/source/tree/NewArrayTree;Ljava/lang/Object;)V + public synthetic fun visitNewClass (Lcom/sun/source/tree/NewClassTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitNewClass (Lcom/sun/source/tree/NewClassTree;Ljava/lang/Object;)V + public synthetic fun visitOpens (Lcom/sun/source/tree/OpensTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitOpens (Lcom/sun/source/tree/OpensTree;Ljava/lang/Object;)V + public synthetic fun visitOther (Lcom/sun/source/tree/Tree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitOther (Lcom/sun/source/tree/Tree;Ljava/lang/Object;)V + public synthetic fun visitPackage (Lcom/sun/source/tree/PackageTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitPackage (Lcom/sun/source/tree/PackageTree;Ljava/lang/Object;)V + public synthetic fun visitParameterizedType (Lcom/sun/source/tree/ParameterizedTypeTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitParameterizedType (Lcom/sun/source/tree/ParameterizedTypeTree;Ljava/lang/Object;)V + public synthetic fun visitParenthesized (Lcom/sun/source/tree/ParenthesizedTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitParenthesized (Lcom/sun/source/tree/ParenthesizedTree;Ljava/lang/Object;)V + public synthetic fun visitPrimitiveType (Lcom/sun/source/tree/PrimitiveTypeTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitPrimitiveType (Lcom/sun/source/tree/PrimitiveTypeTree;Ljava/lang/Object;)V + public synthetic fun visitProvides (Lcom/sun/source/tree/ProvidesTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitProvides (Lcom/sun/source/tree/ProvidesTree;Ljava/lang/Object;)V + public synthetic fun visitRequires (Lcom/sun/source/tree/RequiresTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitRequires (Lcom/sun/source/tree/RequiresTree;Ljava/lang/Object;)V + public synthetic fun visitReturn (Lcom/sun/source/tree/ReturnTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitReturn (Lcom/sun/source/tree/ReturnTree;Ljava/lang/Object;)V + public synthetic fun visitSwitch (Lcom/sun/source/tree/SwitchTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitSwitch (Lcom/sun/source/tree/SwitchTree;Ljava/lang/Object;)V + public synthetic fun visitSynchronized (Lcom/sun/source/tree/SynchronizedTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitSynchronized (Lcom/sun/source/tree/SynchronizedTree;Ljava/lang/Object;)V + public synthetic fun visitThrow (Lcom/sun/source/tree/ThrowTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitThrow (Lcom/sun/source/tree/ThrowTree;Ljava/lang/Object;)V + public synthetic fun visitTry (Lcom/sun/source/tree/TryTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitTry (Lcom/sun/source/tree/TryTree;Ljava/lang/Object;)V + public synthetic fun visitTypeCast (Lcom/sun/source/tree/TypeCastTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitTypeCast (Lcom/sun/source/tree/TypeCastTree;Ljava/lang/Object;)V + public synthetic fun visitTypeParameter (Lcom/sun/source/tree/TypeParameterTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitTypeParameter (Lcom/sun/source/tree/TypeParameterTree;Ljava/lang/Object;)V + public synthetic fun visitUnary (Lcom/sun/source/tree/UnaryTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitUnary (Lcom/sun/source/tree/UnaryTree;Ljava/lang/Object;)V + public synthetic fun visitUnionType (Lcom/sun/source/tree/UnionTypeTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitUnionType (Lcom/sun/source/tree/UnionTypeTree;Ljava/lang/Object;)V + public synthetic fun visitUses (Lcom/sun/source/tree/UsesTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitUses (Lcom/sun/source/tree/UsesTree;Ljava/lang/Object;)V + public synthetic fun visitVariable (Lcom/sun/source/tree/VariableTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitVariable (Lcom/sun/source/tree/VariableTree;Ljava/lang/Object;)V + public synthetic fun visitWhileLoop (Lcom/sun/source/tree/WhileLoopTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitWhileLoop (Lcom/sun/source/tree/WhileLoopTree;Ljava/lang/Object;)V + public synthetic fun visitWildcard (Lcom/sun/source/tree/WildcardTree;Ljava/lang/Object;)Ljava/lang/Object; + public fun visitWildcard (Lcom/sun/source/tree/WildcardTree;Ljava/lang/Object;)V +} + +public final class arrow/meta/plugins/analysis/java/ast/types/JavaType : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/type/TypeMirror;)V + public fun compareTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)I + public synthetic fun compareTo (Ljava/lang/Object;)I + public fun getArguments ()Ljava/util/List; + public fun getDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public fun getUnwrappedNotNullableType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun intersectIfPossible (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun isAnyOrNullableAny ()Z + public fun isBoolean ()Z + public fun isByte ()Z + public fun isChar ()Z + public fun isDouble ()Z + public fun isEqualTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Z + public fun isFloat ()Z + public fun isInt ()Z + public fun isLong ()Z + public fun isMarkedNullable ()Z + public fun isNullable ()Z + public fun isShort ()Z + public fun isString ()Z + public fun isSubtypeOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Z + public fun isTypeParameter ()Z + public fun isUnsignedNumberType ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/TypeElement;)V + public fun getDeclarationDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; + public fun getParameters ()Ljava/util/List; + public fun getSupertypes ()Ljava/util/Collection; + public fun isDenotable ()Z + public fun isFinal ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/TypeParameterElement;)V + public fun getDeclarationDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; + public fun getParameters ()Ljava/util/List; + public fun getSupertypes ()Ljava/util/Collection; + public fun isDenotable ()Z + public fun isFinal ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection { + public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/type/TypeMirror;)V + public fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun isStarProjection ()Z +} + +public final class arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtilsKt { + public static final fun allSupertypes (Ljavax/lang/model/type/TypeMirror;Larrow/meta/plugins/analysis/java/AnalysisContext;)Ljava/util/Set; + public static final fun visit (Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/util/SimpleTypeVisitor9;)Ljava/lang/Object; +} + diff --git a/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts index a7793c001..7db842494 100644 --- a/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts @@ -4,6 +4,7 @@ plugins { id(libs.plugins.kotlin.jvm.get().pluginId) alias(libs.plugins.arrowGradleConfig.publish) alias(libs.plugins.arrowGradleConfig.versioning) + alias(libs.plugins.kotlin.binaryCompatibilityValidator) } kotlin { diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/api/arrow-analysis-kotlin-gradle-plugin.api b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/api/arrow-analysis-kotlin-gradle-plugin.api new file mode 100644 index 000000000..2f346941e --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/api/arrow-analysis-kotlin-gradle-plugin.api @@ -0,0 +1,17 @@ +public final class arrow/meta/plugin/gradle/AnalysisGradlePlugin : arrow/meta/plugin/gradle/ArrowMetaGradlePlugin { + public fun ()V + public fun addMetaDependency (Lorg/gradle/api/Project;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun apply (Ljava/lang/Object;)V + public fun apply (Lorg/gradle/api/Project;)V + public fun applyToCompilation (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Lorg/gradle/api/provider/Provider; + public fun getArtifactId ()Ljava/lang/String; + public fun getCompilerPluginId ()Ljava/lang/String; + public fun getDependencies ()Ljava/util/List; + public fun getGroupId ()Ljava/lang/String; + public fun getPluginArtifact ()Lorg/jetbrains/kotlin/gradle/plugin/SubpluginArtifact; + public fun getPluginArtifactForNative ()Lorg/jetbrains/kotlin/gradle/plugin/SubpluginArtifact; + public fun getPluginId ()Ljava/lang/String; + public fun getVersion ()Ljava/lang/String; + public fun isApplicable (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Z +} + diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts index 8b03592db..5db746687 100644 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts @@ -6,6 +6,7 @@ plugins { alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.formatter) alias(libs.plugins.arrowGradleConfig.publish) + alias(libs.plugins.kotlin.binaryCompatibilityValidator) } tasks.processResources { diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api b/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api new file mode 100644 index 000000000..61220513d --- /dev/null +++ b/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api @@ -0,0 +1,3773 @@ +public final class arrow/meta/AnalysisMetaCliProcessor : arrow/meta/MetaCliProcessor { + public fun ()V +} + +public class arrow/meta/AnalysisPlugin : arrow/meta/Meta { + public fun ()V + public fun IrGeneration (Larrow/meta/dsl/codegen/ir/IrSyntax;Lkotlin/jvm/functions/Function3;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun additionalSources (Lkotlin/jvm/functions/Function4;)Larrow/meta/phases/analysis/CollectAdditionalSources; + public fun analysis (Lkotlin/jvm/functions/Function7;Lkotlin/jvm/functions/Function5;)Larrow/meta/phases/analysis/AnalysisHandler; + public fun callChecker (Lkotlin/jvm/functions/Function4;)Larrow/meta/phases/config/StorageComponentContainer; + public fun codegen (Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/asm/Codegen; + public fun compilerContextService ()Larrow/meta/phases/config/StorageComponentContainer; + public fun declarationAttributeAlterer (Lkotlin/jvm/functions/Function7;)Larrow/meta/phases/resolve/DeclarationAttributeAlterer; + public fun declarationChecker (Lkotlin/jvm/functions/Function4;)Larrow/meta/phases/config/StorageComponentContainer; + public fun enableIr ()Larrow/meta/phases/ExtensionPhase; + public fun extraImports (Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/analysis/ExtraImports; + public fun intercept (Larrow/meta/phases/CompilerContext;)Ljava/util/List; + public fun irAnonymousInitializer (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irBlock (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irBlockBody (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irBody (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irBranch (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irBreak (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irBreakContinue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irCallableReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irCatch (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irClass (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irClassReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irComposite (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irConst (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irConstructor (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irConstructorCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irContainerExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irContinue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irDeclaration (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irDeclarationReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irDelegatingConstructorCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irDoWhileLoop (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irDump (Larrow/meta/Meta;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irDumpKotlinLike (Larrow/meta/Meta;Lorg/jetbrains/kotlin/ir/util/KotlinLikeDumpOptions;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irDynamicExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irDynamicMemberExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irDynamicOperatorExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irElseBranch (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irEnumConstructorCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irEnumEntry (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irErrorCallExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irErrorDeclaration (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irErrorExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irExpressionBody (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irField (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irFieldAccess (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irFile (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irFunction (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irFunctionAccess (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irFunctionReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irGetClass (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irGetEnumValue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irGetField (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irGetObjectValue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irGetValue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irInstanceInitializerCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irLocalDelegatedProperty (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irLocalDelegatedPropertyReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irLoop (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irMemberAccess (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irModuleFragment (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irProperty (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irPropertyReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irReturn (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irSetField (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irSetValue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irSimpleFunction (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irSingletonReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irSpreadElement (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irStringConcatenation (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irSuspendableExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irSuspensionPoint (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irSyntheticBody (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irThrow (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irTry (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irTypeAlias (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irTypeOperator (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irTypeParameter (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irValueAccess (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irValueParameter (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irVararg (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irVariable (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irWhen (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun irWhileLoop (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; + public fun meta ([Larrow/meta/phases/ExtensionPhase;)Ljava/util/List; + public fun packageFragmentProvider (Lkotlin/jvm/functions/Function7;)Larrow/meta/phases/resolve/PackageProvider; + public fun packageFragmentProvider (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/resolve/PackageProvider;Larrow/meta/phases/CompilerContext;)V + public fun preprocessedVirtualFileFactory (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/analysis/PreprocessedVirtualFileFactory; + public fun registerAnalysisHandler (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/analysis/AnalysisHandler;Larrow/meta/phases/CompilerContext;)V + public fun registerClassBuilder (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/codegen/asm/ClassBuilder;Larrow/meta/phases/CompilerContext;)V + public fun registerCodegen (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/codegen/asm/Codegen;Larrow/meta/phases/CompilerContext;)V + public fun registerCollectAdditionalSources (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/analysis/CollectAdditionalSources;Larrow/meta/phases/CompilerContext;)V + public fun registerCompilerConfiguration (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/config/Config;Larrow/meta/phases/CompilerContext;)V + public fun registerDeclarationAttributeAlterer (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/resolve/DeclarationAttributeAlterer;Larrow/meta/phases/CompilerContext;)V + public fun registerExtraImports (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/analysis/ExtraImports;Larrow/meta/phases/CompilerContext;)V + public fun registerIRGeneration (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/codegen/ir/IRGeneration;Larrow/meta/phases/CompilerContext;)V + public fun registerMetaAnalyzer ()Larrow/meta/phases/ExtensionPhase; + public fun registerMetaComponents (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Lorg/jetbrains/kotlin/config/CompilerConfiguration;Larrow/meta/phases/CompilerContext;)V + public fun registerPreprocessedVirtualFileFactory (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/analysis/PreprocessedVirtualFileFactory;Larrow/meta/phases/CompilerContext;)V + public fun registerProjectComponents (Lorg/jetbrains/kotlin/com/intellij/mock/MockProject;Lorg/jetbrains/kotlin/config/CompilerConfiguration;)V + public fun registerStorageComponentContainer (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/config/StorageComponentContainer;Larrow/meta/phases/CompilerContext;)V + public fun registerSyntheticResolver (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/resolve/synthetics/SyntheticResolver;Larrow/meta/phases/CompilerContext;)V + public fun registerSyntheticScopeProvider (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/resolve/synthetics/SyntheticScopeProvider;Larrow/meta/phases/CompilerContext;)V + public fun registerSyntheticScopeProviderIfNeeded (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;)V + public fun storageComponent (Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function4;)Larrow/meta/phases/config/StorageComponentContainer; + public fun suppressDiagnostic (Lkotlin/jvm/functions/Function1;)Larrow/meta/phases/ExtensionPhase; + public fun suppressDiagnosticWithTrace (Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/ExtensionPhase; + public fun syntheticResolver (Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/resolve/synthetics/SyntheticResolver; + public fun syntheticScopes (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)Larrow/meta/phases/ExtensionPhase; + public fun updateConfig (Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/config/Config; +} + +public class arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm : org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages$Extension { + public static final field INSTANCE Larrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm; + public fun ()V + public fun getMap ()Lorg/jetbrains/kotlin/diagnostics/rendering/DiagnosticFactoryToRendererMap; +} + +public abstract interface class arrow/meta/plugins/analysis/errors/MetaErrors { + public static final field AnalysisException Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field ErrorParsingPredicate Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field InconsistentBodyPre Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field InconsistentCallPost Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field InconsistentConditions Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field InconsistentInvariants Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field LiskovProblem Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field UnsatBodyPost Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field UnsatCallPre Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field UnsatInvariants Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field UnsupportedElement Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field WarningParsingPredicate Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; + public static final field _initializer Ljava/lang/Object; +} + +public class arrow/meta/plugins/analysis/errors/RenderString : org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer { + public fun ()V + public synthetic fun render (Ljava/lang/Object;Lorg/jetbrains/kotlin/diagnostics/rendering/RenderingContext;)Ljava/lang/String; + public fun render (Ljava/lang/String;Lorg/jetbrains/kotlin/diagnostics/rendering/RenderingContext;)Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/Keys { + public static final field INSTANCE Larrow/meta/plugins/analysis/phases/Keys; + public final fun hints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Ljava/lang/String; + public final fun parseWarnings (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Ljava/lang/String; + public final fun parseWarnings (Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;)Ljava/lang/String; + public final fun solverState (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Ljava/lang/String; + public final fun stage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Ljava/lang/String; + public final fun stage (Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;)Ljava/lang/String; +} + +public final class arrow/meta/plugins/analysis/phases/PhasesKt { + public static final fun declarationDescriptors (Ljava/util/Collection;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/Stage : java/lang/Enum { + public static final field CollectConstraints Larrow/meta/plugins/analysis/phases/Stage; + public static final field Init Larrow/meta/plugins/analysis/phases/Stage; + public static final field Prove Larrow/meta/plugins/analysis/phases/Stage; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/Stage; + public static fun values ()[Larrow/meta/plugins/analysis/phases/Stage; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext, org/jetbrains/kotlin/resolve/BindingTrace { + public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Lorg/jetbrains/kotlin/resolve/BindingTrace;Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;)V + public fun backingPropertyForConstructorParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; + public fun constraintsDSLElements (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Ljava/util/List; + public fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; + public fun get (Lorg/jetbrains/kotlin/util/slicedMap/ReadOnlySlice;Ljava/lang/Object;)Ljava/lang/Object; + public fun getBindingContext ()Lorg/jetbrains/kotlin/resolve/BindingContext; + public fun getKeys (Lorg/jetbrains/kotlin/util/slicedMap/WritableSlice;)Ljava/util/Collection; + public fun getModule ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor; + public fun getType (Lorg/jetbrains/kotlin/psi/KtExpression;)Lorg/jetbrains/kotlin/types/KotlinType; + public fun getTypes ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types; + public fun handleError (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public fun record (Lorg/jetbrains/kotlin/util/slicedMap/WritableSlice;Ljava/lang/Object;)V + public fun record (Lorg/jetbrains/kotlin/util/slicedMap/WritableSlice;Ljava/lang/Object;Ljava/lang/Object;)V + public fun recordType (Lorg/jetbrains/kotlin/psi/KtExpression;Lorg/jetbrains/kotlin/types/KotlinType;)V + public fun report (Lorg/jetbrains/kotlin/diagnostics/Diagnostic;)V + public final fun reportAnalysisException (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportInconsistentCallPost (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportInconsistentConditions (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportInconsistentInvariants (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportLiskovProblem (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportUnsatInvariants (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public final fun reportUnsupported (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun wantsDiagnostics ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall { + public fun (Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedCall;)V + public fun getCallElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getDispatchReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public fun getExtensionReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public final fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedCall; + public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getResultingDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeArguments ()Ljava/util/Map; + public fun getValueArguments ()Ljava/util/Map; + public final fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedCall; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreterKt { + public static final fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Lorg/jetbrains/kotlin/psi/KtElement; + public static final fun model (Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static final fun model (Lorg/jetbrains/kotlin/psi/KtElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static final fun repr (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated { + public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/annotations/Annotated; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor;)V + public fun argumentValueAsArrayOfString (Ljava/lang/String;)Ljava/util/List; + public fun argumentValueAsString (Ljava/lang/String;)Ljava/lang/String; + public fun getAllValueArguments ()Ljava/util/Map; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public final fun impl ()Lorg/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations { + public fun (Lorg/jetbrains/kotlin/descriptors/annotations/Annotations;)V + public fun findAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public synthetic fun getImpl ()Ljava/lang/Object; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/annotations/Annotations; + public fun hasAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Z + public fun isEmpty ()Z + public fun iterable ()Ljava/lang/Iterable; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { + public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public abstract fun descriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; + public abstract fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public abstract fun getAllParameters ()Ljava/util/List; + public abstract fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public abstract fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public abstract fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun getOverriddenDescriptors ()Ljava/util/Collection; + public abstract fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun getTypeParameters ()Ljava/util/List; + public abstract fun getValueParameters ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun descriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; + public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getAllParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Ljava/util/List; + public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getDispatchReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public static fun getExtensionReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Z + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getOverriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Ljava/util/Collection; + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public static fun getReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Ljava/util/List; + public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor { + public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public abstract fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public abstract fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun descriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; + public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getAllParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Ljava/util/List; + public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getDispatchReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public static fun getExtensionReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z + public static fun getKind (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public static fun getModality (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getOverriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Ljava/util/Collection; + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public static fun getReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Ljava/util/List; + public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Ljava/util/List; + public static fun getVisibility (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public static fun isActual (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z + public static fun isExpect (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z + public static fun isExternal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/ClassDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getCompanionObjectDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public fun getCompleteUnsubstitutedScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getConstructors ()Ljava/util/Collection; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getDeclaredTypeParameters ()Ljava/util/List; + public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ClassDescriptor; + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; + public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public fun getSealedSubclasses ()Ljava/util/Collection; + public fun getStaticScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getSuperTypes ()Ljava/util/Collection; + public fun getThisAsReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; + public fun getUnsubstitutedInnerClassesScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getUnsubstitutedMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getUnsubstitutedPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; + public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptorWithTypeParameters; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public fun isActual ()Z + public fun isCompanionObject ()Z + public fun isData ()Z + public fun isEnumEntry ()Z + public fun isExpect ()Z + public fun isExternal ()Z + public fun isFun ()Z + public fun isInline ()Z + public fun isInner ()Z + public fun isValue ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor { + public abstract fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor$DefaultImpls { + public static fun getDefaultType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public static fun getTypeConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor { + public abstract fun getDeclaredTypeParameters ()Ljava/util/List; + public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptorWithTypeParameters; + public abstract fun isInner ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getDeclaredTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Ljava/util/List; + public static fun getDefaultType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z + public static fun getModality (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public static fun getTypeConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; + public static fun getVisibility (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public static fun isActual (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z + public static fun isExpect (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z + public static fun isExternal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z + public static fun isInner (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor;)V + public fun getConstructedClass ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public fun isPrimary ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { + public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public abstract fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public abstract fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Z + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { + public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Z + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public static fun getVisibility (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultDeclarationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultDeclarationDescriptorWithVisibility : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility { + public fun (Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultFunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor;)V +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument { + public fun (Lorg/jetbrains/kotlin/resolve/calls/model/DefaultValueArgument;)V + public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; + public fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/DefaultValueArgument; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; + public fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; + public fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/DefaultValueArgument; + public synthetic fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; + public fun isExternal ()Z + public fun isNamed ()Z + public fun isSpread ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultVariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/VariableDescriptor;)V +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument { + public fun (Lorg/jetbrains/kotlin/resolve/calls/model/ExpressionValueArgument;)V + public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; + public fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ExpressionValueArgument; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; + public fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; + public fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ExpressionValueArgument; + public synthetic fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; + public fun isExternal ()Z + public fun isNamed ()Z + public fun isSpread ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated { + public abstract fun getCorrespondingProperty ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/FieldDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun getCorrespondingProperty (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Z + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; +} + +public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun descriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getAllParameters ()Ljava/util/List; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeParameters ()Ljava/util/List; + public fun getValueParameters ()Ljava/util/List; + public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public fun isActual ()Z + public fun isExpect ()Z + public fun isExternal ()Z + public fun isInfix ()Z + public fun isInline ()Z + public fun isOperator ()Z + public fun isSuspend ()Z + public fun isTailrec ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor;)V + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { + public abstract fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public abstract fun isActual ()Z + public abstract fun isExpect ()Z + public abstract fun isExternal ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z + public static fun getModality (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public static fun getVisibility (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public static fun isActual (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z + public static fun isExpect (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z + public static fun isExternal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope { + public abstract fun getClassifierNames ()Ljava/util/Set; + public abstract fun getContributedDescriptors (Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public abstract fun getFunctionNames ()Ljava/util/Set; + public abstract fun getVariableNames ()Ljava/util/Set; + public abstract fun impl ()Lorg/jetbrains/kotlin/resolve/scopes/MemberScope; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope$DefaultImpls { + public static fun getClassifierNames (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope;)Ljava/util/Set; + public static fun getContributedDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public static fun getFunctionNames (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope;)Ljava/util/Set; + public static fun getVariableNames (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope;)Ljava/util/Set; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPackage (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public fun getStableName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getSubPackagesOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named { + public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/Named; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed$DefaultImpls { + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/PackageFragmentDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/PackageFragmentDescriptor; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/PackageFragmentDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/PackageViewDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/PackageViewDescriptor; + public fun getMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/PackageViewDescriptor; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor { + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/ParameterDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun descriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; + public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getAllParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Ljava/util/List; + public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getDispatchReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public static fun getExtensionReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Z + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getOverriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Ljava/util/Collection; + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public static fun getReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public static fun getType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Ljava/util/List; + public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor;)V + public fun getCorrespondingVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/PropertyDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getAccessors ()Ljava/util/List; + public fun getBackingField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getDelegateField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/PropertyDescriptor; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors; + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/PropertyDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors; + public fun isActual ()Z + public fun isExpect ()Z + public fun isExternal ()Z + public fun isSetterProjectedOut ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/ReceiverParameterDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun descriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getAllParameters ()Ljava/util/List; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ReceiverParameterDescriptor; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeParameters ()Ljava/util/List; + public fun getValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; + public fun getValueParameters ()Ljava/util/List; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ParameterDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/ReceiverParameterDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue { + public fun (Lorg/jetbrains/kotlin/resolve/scopes/receivers/ReceiverValue;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/resolve/scopes/receivers/ReceiverValue; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public final fun impl ()Lorg/jetbrains/kotlin/resolve/scopes/receivers/ReceiverValue; + public fun isClassReceiver ()Z +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument { + public fun (Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument;)V + public fun getArguments ()Ljava/util/List; + public fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; + public fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/SimpleFunctionDescriptor;)V + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/SimpleFunctionDescriptor; + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public fun isInfix ()Z + public fun isInline ()Z + public fun isOperator ()Z + public fun isSuspend ()Z + public fun isTailrec ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor;)V + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor; + public fun getUnderlyingConstructorDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters { + public fun (Lorg/jetbrains/kotlin/descriptors/TypeAliasDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getClassDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; + public fun getConstructors ()Ljava/util/Collection; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getDeclaredTypeParameters ()Ljava/util/List; + public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getExpandedType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/TypeAliasDescriptor; + public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; + public fun getUnderlyingType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptorWithTypeParameters; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/TypeAliasDescriptor; + public fun isActual ()Z + public fun isExpect ()Z + public fun isExternal ()Z + public fun isInner ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor { + public abstract fun getDeclarationDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; + public abstract fun getParameters ()Ljava/util/List; + public abstract fun getSupertypes ()Ljava/util/Collection; + public abstract fun impl ()Lorg/jetbrains/kotlin/types/TypeConstructor; + public abstract fun isDenotable ()Z + public abstract fun isFinal ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor$DefaultImpls { + public static fun getDeclarationDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; + public static fun getParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Ljava/util/List; + public static fun getSupertypes (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Ljava/util/Collection; + public static fun isDenotable (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Z + public static fun isFinal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor { + public abstract fun getIndex ()I + public abstract fun getUpperBounds ()Ljava/util/List; + public abstract fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/TypeParameterDescriptor; + public abstract fun isCapturedFromOuterDeclaration ()Z + public abstract fun isReified ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor$DefaultImpls { + public static fun getDefaultType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public static fun getIndex (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)I + public static fun getTypeConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; + public static fun getUpperBounds (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Ljava/util/List; + public static fun getVariance (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public static fun isCapturedFromOuterDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Z + public static fun isReified (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/ValueArgument;)V + public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/ValueArgument; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun isExternal ()Z + public fun isNamed ()Z + public fun isSpread ()Z + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor { + public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor$DefaultImpls { + public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public static fun descriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; + public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getAllParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Ljava/util/List; + public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getDispatchReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public static fun getExtensionReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Z + public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Z + public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Z + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getOverriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Ljava/util/Collection; + public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public static fun getReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public static fun getType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Ljava/util/List; + public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/ValueParameterDescriptor;)V + public fun declaresDefaultValue ()Z + public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ValueParameterDescriptor; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public fun getIndex ()I + public fun getVarargElementType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ParameterDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueParameterDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public fun isCrossinline ()Z + public fun isNoinline ()Z +} + +public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor;)V + public fun getCorrespondingVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor; +} + +public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor { + public fun (Lorg/jetbrains/kotlin/descriptors/VariableDescriptor;)V + public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; + public fun descriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; + public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getAllParameters ()Ljava/util/List; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; + public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; + public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getHasDoNotLookAtArgumentsAnnotation ()Z + public fun getHasPackageWithLawsAnnotation ()Z + public fun getHasPreOrPostAnnotation ()Z + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getOverriddenDescriptors ()Ljava/util/Collection; + public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; + public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun getTypeParameters ()Ljava/util/List; + public fun getValueParameters ()Ljava/util/List; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public fun isConst ()Z + public fun isLateInit ()Z + public fun isVar ()Z +} + +public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors { + public fun (Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors;)V + public fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors; + public fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; + public fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors; + public fun isDelegated ()Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility { + public abstract fun getName ()Ljava/lang/String; + public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/Visibility; + public abstract fun isPublicAPI ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility$DefaultImpls { + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility;)Ljava/lang/String; + public static fun isPublicAPI (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility;)Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public abstract fun getAnnotationEntries ()Ljava/util/List; + public abstract fun getAnnotations ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer { + public fun (Lorg/jetbrains/kotlin/psi/KtAnnotatedExpression;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtAnnotatedExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotatedExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationsContainer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtAnnotation;)V + public fun getEntries ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtAnnotation; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getUseSiteTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotation; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement { + public fun (Lorg/jetbrains/kotlin/psi/KtAnnotationEntry;)V + public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtAnnotationEntry; + public fun getLambdaArguments ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getShortName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getText ()Ljava/lang/String; + public fun getTypeArguments ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getUseSiteTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; + public fun getValueArguments ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationEntry; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationsContainer; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;)Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration { + public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtAnonymousInitializer; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/util/List; + public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/lang/String; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtArrayAccessExpression;)V + public fun getArrayExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtArrayAccessExpression; + public fun getIndexExpressions ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtArrayAccessExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtBinaryExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpression; + public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getOperationToken ()Ljava/lang/String; + public fun getOperationTokenRpr ()Ljava/lang/String; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtBinaryExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpression; + public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getOperationToken ()Ljava/lang/String; + public fun getOperationTokenRpr ()Ljava/lang/String; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtBlockExpression;)V + public fun getFirstStatement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBlockExpression; + public fun getImplicitReturnFromLast ()Z + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getStatements ()Ljava/util/List; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtBlockExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { + public fun (Lorg/jetbrains/kotlin/psi/KtBreakExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBreakExpression; + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtBreakExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public abstract fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getLambdaArguments ()Ljava/util/List; + public abstract fun getTypeArguments ()Ljava/util/List; + public abstract fun getValueArguments ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement$DefaultImpls { + public static fun getCalleeExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getLambdaArguments (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/lang/String; + public static fun getTypeArguments (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/util/List; + public static fun getValueArguments (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/util/List; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtCallExpression;)V + public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtCallExpression; + public fun getLambdaArguments ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeArguments ()Ljava/util/List; + public fun getValueArguments ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtCallExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner { + public abstract fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public abstract fun getValueParameters ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; + public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/lang/String; + public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getReceiverTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/lang/String; + public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; + public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; + public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public static fun getValueParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtCallableReferenceExpression;)V + public fun getCallableReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getHasQuestionMarks ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtCallableReferenceExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableReferenceExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDoubleColonExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun isEmptyLHS ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtCatchClause;)V + public fun getCatchBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getCatchParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtCatchClause; + public fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtCatchClause; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject { + public fun (Lorg/jetbrains/kotlin/psi/KtClass;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getAnonymousInitializers ()Ljava/util/List; + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; + public fun getCompanionObjects ()Ljava/util/List; + public fun getDeclarations ()Ljava/util/List; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClass; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; + public fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getPrimaryConstructorParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getPrimaryConstructorParameters ()Ljava/util/List; + public fun getProperties ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getSecondaryConstructors ()Ljava/util/List; + public fun getSuperTypeListEntries ()Ljava/util/List; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasExplicitPrimaryConstructor ()Z + public fun hasPrimaryConstructor ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtClass; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtClassOrObject; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtPureClassOrObject; + public fun isAnnotation ()Z + public fun isData ()Z + public fun isEnum ()Z + public fun isInline ()Z + public fun isInner ()Z + public fun isInterface ()Z + public fun isLocal ()Z + public fun isSealed ()Z + public fun isTopLevel ()Z + public fun isValue ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtClassBody;)V + public fun getAllCompanionObjects ()Ljava/util/List; + public fun getAnonymousInitializers ()Ljava/util/List; + public fun getDeclarations ()Ljava/util/List; + public fun getEnumEntries ()Ljava/util/List; + public fun getFunctions ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClassBody; + public fun getProperties ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtClassBody; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer { + public fun (Lorg/jetbrains/kotlin/psi/KtClassInitializer;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClassInitializer; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnonymousInitializer; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtClassInitializer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtClassLiteralExpression;)V + public fun getHasQuestionMarks ()Z + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClassLiteralExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtClassLiteralExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDoubleColonExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun isEmptyLHS ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject { + public abstract fun getAnonymousInitializers ()Ljava/util/List; + public abstract fun getName ()Ljava/lang/String; + public abstract fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtClassOrObject; + public abstract fun isAnnotation ()Z + public abstract fun isTopLevel ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun getAnonymousInitializers (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; + public static fun getCompanionObjects (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun getDeclarations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/lang/String; + public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun getPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; + public static fun getPrimaryConstructorModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public static fun getPrimaryConstructorParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getSecondaryConstructors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun getSuperTypeListEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun hasExplicitPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z + public static fun hasPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z + public static fun isAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z + public static fun isLocal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z + public static fun isTopLevel (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation { + public fun (Lorg/jetbrains/kotlin/cli/common/messages/CompilerMessageSourceLocation;)V + public fun getColumn ()I + public fun getColumnEnd ()I + public final fun getImpl ()Lorg/jetbrains/kotlin/cli/common/messages/CompilerMessageSourceLocation; + public fun getLine ()I + public fun getLineContent ()Ljava/lang/String; + public fun getLineEnd ()I + public fun getPath ()Ljava/lang/String; +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtConstantExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtConstantExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstantExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction { + public abstract fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructor; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor$DefaultImpls { + public static fun body (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; + public static fun getBodyBlockExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public static fun getBodyExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getContainingClassOrObject (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; + public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/lang/String; + public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getReceiverTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/lang/String; + public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; + public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; + public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public static fun getValueParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun hasBlockBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Z + public static fun hasBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Z + public static fun hasDeclaredReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Z + public static fun isLocal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Z + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtConstructorCalleeExpression;)V + public fun getConstructorReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtConstructorCalleeExpression; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructorCalleeExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtConstructorDelegationCall;)V + public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtConstructorDelegationCall; + public fun getLambdaArguments ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeArguments ()Ljava/util/List; + public fun getValueArguments ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructorDelegationCall; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun isCallToThis ()Z + public fun isImplicit ()Z + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtConstructorDelegationReferenceExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtConstructorDelegationReferenceExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructorDelegationReferenceExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; + public fun isThis ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { + public fun (Lorg/jetbrains/kotlin/psi/KtContinueExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtContinueExpression; + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtContinueExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner { + public abstract fun getName ()Ljava/lang/String; + public abstract fun getParents ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/util/List; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/lang/String; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer { + public abstract fun getDeclarations ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer$DefaultImpls { + public static fun getDeclarations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer;)Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration { + public abstract fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public abstract fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getValueParameters ()Ljava/util/List; + public abstract fun hasBlockBody ()Z + public abstract fun hasBody ()Z + public abstract fun hasDeclaredReturnType ()Z + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody$DefaultImpls { + public static fun body (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; + public static fun getBodyBlockExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public static fun getBodyExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/lang/String; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/lang/String; + public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun hasBlockBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Z + public static fun hasBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Z + public static fun hasDeclaredReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Z + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration { + public abstract fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun hasInitializer ()Z + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/util/List; + public static fun getInitializer (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/lang/String; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun hasInitializer (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Z + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtElement;)V + public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtExpression;)V + public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultFunction : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction { + public fun (Lorg/jetbrains/kotlin/psi/KtFunction;)V + public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtFunction; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasBlockBody ()Z + public fun hasBody ()Z + public fun hasDeclaredReturnType ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; + public fun isLocal ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry { + public fun (Lorg/jetbrains/kotlin/psi/KtDelegatedSuperTypeEntry;)V + public fun getDelegateExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDelegatedSuperTypeEntry; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtDelegatedSuperTypeEntry; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeListEntry; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer { + public fun (Lorg/jetbrains/kotlin/psi/KtDestructuringDeclaration;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getEntries ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDestructuringDeclaration; + public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasInitializer ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtDestructuringDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public fun isVar ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration { + public fun (Lorg/jetbrains/kotlin/psi/KtDestructuringDeclarationEntry;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDestructuringDeclarationEntry; + public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasInitializer ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtDestructuringDeclarationEntry; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtVariableDeclaration; + public fun isVar ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase { + public fun (Lorg/jetbrains/kotlin/psi/KtDoWhileExpression;)V + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDoWhileExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtDoWhileExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtLoopExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhileExpressionBase; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtDotQualifiedExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDotQualifiedExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getSelectorExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtDotQualifiedExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtQualifiedExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public abstract fun getHasQuestionMarks ()Z + public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDoubleColonExpression; + public abstract fun isEmptyLHS ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression$DefaultImpls { + public static fun getHasQuestionMarks (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Z + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getReceiverExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun isEmptyLHS (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Z + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { + public abstract fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public abstract fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public abstract fun getText ()Ljava/lang/String; + public abstract fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public abstract fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public abstract fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry { + public fun (Lorg/jetbrains/kotlin/psi/KtEnumEntry;)V + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClass; + public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtEnumEntry; + public fun hasInitializer ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtClass; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtClassOrObject; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtEnumEntry; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtPureClassOrObject; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public abstract fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument { + public fun (Lorg/jetbrains/kotlin/psi/KtLambdaArgument;)V + public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtLambdaArgument; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtLambdaArgument; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtValueArgument;)V + public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; + public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; + public fun isExternal ()Z + public fun isNamed ()Z + public fun isSpread ()Z + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { + public abstract fun getAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun getReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgumentName; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName$DefaultImpls { + public static fun getAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getReferenceExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public abstract fun getLabelName ()Ljava/lang/String; + public abstract fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel$DefaultImpls { + public static fun getLabelName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Ljava/lang/String; + public static fun getLabelNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getTargetLabel (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtFinallySection;)V + public fun getFinalExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtFinallySection; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtFinallySection; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtForExpression;)V + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtForExpression; + public fun getLoopParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; + public fun getLoopRange ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtForExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtLoopExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody { + public abstract fun getValueParameters ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; + public abstract fun isLocal ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction$DefaultImpls { + public static fun body (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; + public static fun getBodyBlockExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public static fun getBodyExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/lang/String; + public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getReceiverTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/lang/String; + public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; + public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; + public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public static fun getValueParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun hasBlockBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Z + public static fun hasBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Z + public static fun hasDeclaredReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Z + public static fun isLocal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Z + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction { + public fun (Lorg/jetbrains/kotlin/psi/KtFunctionLiteral;)V + public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtFunctionLiteral; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasBlockBody ()Z + public fun hasBody ()Z + public fun hasDeclaredReturnType ()Z + public fun hasParameterSpecification ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtFunctionLiteral; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; + public fun isLocal ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtIfExpression;)V + public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtIfExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getThenExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtIfExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtInitializerList;)V + public fun getEntries ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtInitializerList; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtInitializerList; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtInstanceExpressionWithLabel; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel$DefaultImpls { + public static fun getLabelName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Ljava/lang/String; + public static fun getLabelNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getTargetLabel (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtIsExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtIsExpression; + public fun getLeftHandSide ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtIsExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; + public fun isNegated ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtLabelReferenceExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtLabelReferenceExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReferencedName ()Ljava/lang/String; + public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtLabelReferenceExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSimpleNameExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { + public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtLabeledExpression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression$DefaultImpls { + public static fun getBaseExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getLabelName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Ljava/lang/String; + public static fun getLabelNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getTargetLabel (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument { + public fun (Lorg/jetbrains/kotlin/psi/KtLambdaArgument;)V + public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtLambdaArgument; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; + public fun getLambdaExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtLambdaArgument; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtLambdaExpression;)V + public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public synthetic fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getFunctionLiteral ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtLambdaExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasDeclaredReturnType ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtLambdaExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtLoopExpression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression$DefaultImpls { + public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer { + public fun (Lorg/jetbrains/kotlin/psi/KtModifierList;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtModifierList; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationsContainer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierList; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated { + public abstract fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Ljava/util/List; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtNameReferenceExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtNameReferenceExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReferencedName ()Ljava/lang/String; + public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtNameReferenceExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSimpleNameExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration { + public abstract fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public abstract fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/util/List; + public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/lang/String; + public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction { + public fun (Lorg/jetbrains/kotlin/psi/KtNamedFunction;)V + public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtNamedFunction; + public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasBlockBody ()Z + public fun hasBody ()Z + public fun hasDeclaredReturnType ()Z + public fun hasInitializer ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedFunction; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; + public fun isLocal ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtConstantExpression;)V +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject { + public fun (Lorg/jetbrains/kotlin/psi/KtObjectDeclaration;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getAnonymousInitializers ()Ljava/util/List; + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; + public fun getCompanionObjects ()Ljava/util/List; + public fun getDeclarations ()Ljava/util/List; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtObjectDeclaration; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; + public fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getPrimaryConstructorParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getPrimaryConstructorParameters ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getSecondaryConstructors ()Ljava/util/List; + public fun getSuperTypeListEntries ()Ljava/util/List; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasExplicitPrimaryConstructor ()Z + public fun hasPrimaryConstructor ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtClassOrObject; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtObjectDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtPureClassOrObject; + public fun isAnnotation ()Z + public fun isCompanion ()Z + public fun isLocal ()Z + public fun isObjectLiteral ()Z + public fun isTopLevel ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtObjectLiteralExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtObjectLiteralExpression; + public fun getObjectDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtObjectLiteralExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression$DefaultImpls { + public static fun getOperationReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtOperationReferenceExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtOperationReferenceExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReferencedName ()Ljava/lang/String; + public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationReferenceExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSimpleNameExpression; + public fun isConventionOperator ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration { + public fun (Lorg/jetbrains/kotlin/psi/KtParameter;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtParameter; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getOwnerFunction ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasDefaultValue ()Z + public fun hasValOrVar ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtParameter; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; + public fun isCatchParameter ()Z + public fun isLoopParameter ()Z + public fun isMutable ()Z + public fun isVarArg ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtParameterList;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtParameterList; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtParenthesizedExpression;)V + public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtParenthesizedExpression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor { + public fun (Lorg/jetbrains/kotlin/psi/KtPrimaryConstructor;)V + public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtPrimaryConstructor; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasBlockBody ()Z + public fun hasBody ()Z + public fun hasDeclaredReturnType ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; + public fun isLocal ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind : java/lang/Enum { + public static final field IN Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; + public static final field NONE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; + public static final field OUT Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; + public static final field STAR Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; + public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration { + public fun (Lorg/jetbrains/kotlin/psi/KtProperty;)V + public fun getAccessors ()Ljava/util/List; + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getDelegate ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate; + public fun getDelegateExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getDelegateExpressionOrInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtProperty; + public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor; + public fun getText ()Ljava/lang/String; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasBody ()Z + public fun hasDelegate ()Z + public fun hasDelegateExpression ()Z + public fun hasDelegateExpressionOrInitializer ()Z + public fun hasInitializer ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtProperty; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtVariableDeclaration; + public fun isLocal ()Z + public fun isMember ()Z + public fun isTopLevel ()Z + public fun isVar ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner { + public fun (Lorg/jetbrains/kotlin/psi/KtPropertyAccessor;)V + public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtPropertyAccessor; + public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; + public fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getParents ()Ljava/util/List; + public fun getProperty ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getReturnTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getText ()Ljava/lang/String; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasBlockBody ()Z + public fun hasBody ()Z + public fun hasDeclaredReturnType ()Z + public fun hasInitializer ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtPropertyAccessor; + public fun isGetter ()Z + public fun isSetter ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtPropertyDelegate;)V + public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtPropertyDelegate; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtPropertyDelegate; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer { + public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; + public abstract fun getCompanionObjects ()Ljava/util/List; + public abstract fun getName ()Ljava/lang/String; + public abstract fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; + public abstract fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public abstract fun getPrimaryConstructorParameters ()Ljava/util/List; + public abstract fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public abstract fun getSecondaryConstructors ()Ljava/util/List; + public abstract fun getSuperTypeListEntries ()Ljava/util/List; + public abstract fun hasExplicitPrimaryConstructor ()Z + public abstract fun hasPrimaryConstructor ()Z + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtPureClassOrObject; + public abstract fun isLocal ()Z +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject$DefaultImpls { + public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; + public static fun getCompanionObjects (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; + public static fun getDeclarations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/lang/String; + public static fun getPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; + public static fun getPrimaryConstructorModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getPrimaryConstructorParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getSecondaryConstructors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; + public static fun getSuperTypeListEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; + public static fun hasExplicitPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Z + public static fun hasPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Z + public static fun isLocal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Z +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun getSelectorExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtQualifiedExpression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getReceiverExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getSelectorExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { + public fun (Lorg/jetbrains/kotlin/psi/KtReturnExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtReturnExpression; + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getLabeledExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getReturnedExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtReturnExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtSafeQualifiedExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSafeQualifiedExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getSelectorExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtQualifiedExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtSafeQualifiedExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor { + public fun (Lorg/jetbrains/kotlin/psi/KtSecondaryConstructor;)V + public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; + public fun getDelegationCall ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSecondaryConstructor; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public fun getTypeConstraints ()Ljava/util/List; + public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public fun getTypeParameters ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public fun getValueParameters ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun hasBlockBody ()Z + public fun hasBody ()Z + public fun hasDeclaredReturnType ()Z + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtSecondaryConstructor; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; + public fun isLocal ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement { + public abstract fun getTypeArgumentsAsTypes ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtSelfType; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Ljava/lang/String; + public static fun getTypeArgumentsAsTypes (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Ljava/util/List; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression { + public abstract fun getReferencedName ()Ljava/lang/String; + public abstract fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtSimpleNameExpression; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getReferencedName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Ljava/lang/String; + public static fun getReferencedNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression;)V + public fun getEntries ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel { + public fun (Lorg/jetbrains/kotlin/psi/KtSuperExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSuperExpression; + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getSuperTypeQualifier ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtInstanceExpressionWithLabel; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry { + public fun (Lorg/jetbrains/kotlin/psi/KtSuperTypeCallEntry;)V + public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeCallEntry; + public fun getLambdaArguments ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeArguments ()Ljava/util/List; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getValueArguments ()Ljava/util/List; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeCallEntry; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeListEntry; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry { + public fun (Lorg/jetbrains/kotlin/psi/KtSuperTypeEntry;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeEntry; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeEntry; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeListEntry; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtSuperTypeList;)V + public fun getEntries ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeList; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeList; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeListEntry; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Ljava/lang/String; + public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel { + public fun (Lorg/jetbrains/kotlin/psi/KtThisExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtThisExpression; + public fun getLabelName ()Ljava/lang/String; + public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtInstanceExpressionWithLabel; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtThisExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtThrowExpression;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtThrowExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getThrownExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtThrowExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtTryExpression;)V + public fun getCatchClauses ()Ljava/util/List; + public fun getFinallyBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTryExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTryBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtTryExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration { + public fun (Lorg/jetbrains/kotlin/psi/KtTypeAlias;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeAlias; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeAlias; + public fun isTopLevel ()Z + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtTypeArgumentList;)V + public fun getArguments ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeArgumentList; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeArgumentList; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtBinaryExpressionWithTypeRHS;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpressionWithTypeRHS; + public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; + public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getOperationToken ()Ljava/lang/String; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpressionWithTypeRHS; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtTypeConstraint;)V + public fun getBoundTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeConstraint; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getSubjectTypeParameterName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeConstraint; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtTypeConstraintList;)V + public fun getConstraints ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeConstraintList; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeConstraintList; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public abstract fun getTypeArgumentsAsTypes ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeElement; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Ljava/lang/String; + public static fun getTypeArgumentsAsTypes (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Ljava/util/List; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration { + public fun (Lorg/jetbrains/kotlin/psi/KtTypeParameter;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public fun getExtendsBounds ()Ljava/util/List; + public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeParameter; + public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public fun getName ()Ljava/lang/String; + public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public fun getParents ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameter; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtTypeParameterList;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterList; + public fun getParameters ()Ljava/util/List; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterList; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration { + public abstract fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public abstract fun getTypeConstraints ()Ljava/util/List; + public abstract fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public abstract fun getTypeParameters ()Ljava/util/List; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; + public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/lang/String; + public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/lang/String; + public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; + public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection { + public abstract fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; + public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeProjection; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection$DefaultImpls { + public static fun getProjectionKind (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; + public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer { + public fun (Lorg/jetbrains/kotlin/psi/KtTypeReference;)V + public fun getAnnotationEntries ()Ljava/util/List; + public fun getAnnotations ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeReference; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationsContainer; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeReference; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtUnaryExpression;)V + public fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtUnaryExpression; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtUnaryExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtValueArgumentList;)V + public fun getArguments ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtValueArgumentList; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgumentList; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { + public fun (Lorg/jetbrains/kotlin/psi/ValueArgumentName;)V + public fun getAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/ValueArgumentName; + public fun getReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; + public final fun impl ()Lorg/jetbrains/kotlin/psi/ValueArgumentName; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer { + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtVariableDeclaration; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration$DefaultImpls { + public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; + public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; + public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; + public static fun getInitializer (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; + public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/lang/String; + public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; + public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getReceiverTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/lang/String; + public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; + public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; + public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; + public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; + public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public static fun getValueParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; + public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun hasInitializer (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Z + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenCondition; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition$DefaultImpls { + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;)Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition { + public fun (Lorg/jetbrains/kotlin/psi/KtWhenConditionInRange;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionInRange; + public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getRangeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenCondition; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionInRange; + public fun isNegated ()Z + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition { + public fun (Lorg/jetbrains/kotlin/psi/KtWhenConditionIsPattern;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionIsPattern; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenCondition; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionIsPattern; + public fun isNegated ()Z + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition { + public fun (Lorg/jetbrains/kotlin/psi/KtWhenConditionWithExpression;)V + public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionWithExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenCondition; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionWithExpression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { + public fun (Lorg/jetbrains/kotlin/psi/KtWhenEntry;)V + public fun getConditions ()Ljava/util/List; + public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenEntry; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenEntry; + public fun isElse ()Z + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { + public fun (Lorg/jetbrains/kotlin/psi/KtWhenExpression;)V + public fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getEntries ()Ljava/util/List; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getSubjectExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getSubjectVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenExpression; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase { + public fun (Lorg/jetbrains/kotlin/psi/KtWhileExpression;)V + public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhileExpression; + public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public fun getText ()Ljava/lang/String; + public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public synthetic fun impl ()Ljava/lang/Object; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtLoopExpression; + public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhileExpression; + public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhileExpressionBase; + public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public fun parents ()Ljava/util/List; + public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression { + public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtWhileExpressionBase; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase$DefaultImpls { + public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getCondition (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; + public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; + public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Ljava/lang/String; + public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; + public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; + public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; + public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Ljava/util/List; + public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; +} + +public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection { + public fun (Lorg/jetbrains/kotlin/types/TypeProjection;)V + public final fun getImpl ()Lorg/jetbrains/kotlin/types/TypeProjection; + public fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; + public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; + public fun isStarProjection ()Z +} + +public final class arrow/meta/plugins/analysis/phases/ir/HintState : java/lang/Enum { + public static final field NeedsProcessing Larrow/meta/plugins/analysis/phases/ir/HintState; + public static final field Processed Larrow/meta/plugins/analysis/phases/ir/HintState; + public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/ir/HintState; + public static fun values ()[Larrow/meta/plugins/analysis/phases/ir/HintState; +} + +public final class arrow/meta/plugins/analysis/phases/ir/HintsKt { + public static final fun hints (Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;Ljava/util/Set;)Ljava/lang/String; + public static final fun hintsFile (Larrow/meta/phases/CompilerContext;Ljava/lang/String;Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;Ljava/util/Set;)Ljava/io/File; +} + diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts index 3ac752b95..45b43e828 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts @@ -5,6 +5,7 @@ plugins { alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.publish) alias(libs.plugins.arrowGradleConfig.versioning) + alias(libs.plugins.kotlin.binaryCompatibilityValidator) } kotlin { diff --git a/arrow-libs/analysis/analysis/laws/api/arrow-analysis-laws.api b/arrow-libs/analysis/analysis/laws/api/arrow-analysis-laws.api new file mode 100644 index 000000000..39b9ca44f --- /dev/null +++ b/arrow-libs/analysis/analysis/laws/api/arrow-analysis-laws.api @@ -0,0 +1,439 @@ +public final class arrow/analysis/laws/kotlin/ArrayConversionsLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/ArrayConversionsLaws; + public final fun associateByLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun associateLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun associateWithLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun toListLaw ([Ljava/lang/Object;)Ljava/util/List; + public final fun toMapLaw ([Lkotlin/Pair;)Ljava/util/Map; + public final fun toSetLaw ([Ljava/lang/Object;)Ljava/util/Set; +} + +public final class arrow/analysis/laws/kotlin/ArrayLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/ArrayLaws; + public final fun component1Law ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun component2Law ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun component3Law ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun component4Law ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun component5Law ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun countLaw ([Ljava/lang/Object;)I + public final fun countLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)I + public final fun distinctByLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun distinctLaw ([Ljava/lang/Object;)Ljava/util/List; + public final fun elementAtLaw ([Ljava/lang/Object;I)Ljava/lang/Object; + public final fun elementAtOrNullLaw ([Ljava/lang/Object;I)Ljava/lang/Object; + public final fun filterIndexedLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun filterLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun filterNotLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun filterNotNullLaw ([Ljava/lang/Object;)Ljava/util/List; + public final fun firstLaw (Ljava/util/Collection;)Ljava/lang/Object; + public final fun firstLawWithPredicate ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun firstOrNullLaw ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun getLaw ([Ljava/lang/Object;I)Ljava/lang/Object; + public final fun indexOfFirstLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)I + public final fun indexOfLastLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)I + public final fun indexOfLaw ([Ljava/lang/Object;Ljava/lang/Object;)I + public final fun intersectLaw ([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Set; + public final fun isEmptyLaw ([Ljava/lang/Object;)Z + public final fun isNotEmptyLaw ([Ljava/lang/Object;)Z + public final fun isNullOrEmptyLaw ([Ljava/lang/Object;)Z + public final fun lastIndexLaw ([Ljava/lang/Object;)I + public final fun lastIndexOfLaw ([Ljava/lang/Object;Ljava/lang/Object;)I + public final fun lastLaw ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun lastLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun lastOrNullLaw ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun mapIndexedLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun mapIndexedNotNullLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun mapLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun mapNotNullLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun noneLaw ([Ljava/lang/Object;)Z + public final fun randomLaw ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun randomOrNullLaw ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun setLaw ([Ljava/lang/Object;ILjava/lang/Object;)V + public final fun singleLaw ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun singleOrNullLaw ([Ljava/lang/Object;)Ljava/lang/Object; + public final fun sizeLaw ([Ljava/lang/Object;)I + public final fun subtractLaw ([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Set; + public final fun unionLaw ([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Set; +} + +public final class arrow/analysis/laws/kotlin/BooleanArrayLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/BooleanArrayLaws; + public final fun booleanArrayOfLaw ([Z)[Z + public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[Z + public final fun getLaw ([ZI)Z + public final fun setLaw ([ZIZ)V +} + +public final class arrow/analysis/laws/kotlin/ByteArrayLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/ByteArrayLaws; + public final fun byteArrayOfLaw ([B)[B + public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[B + public final fun getLaw ([BI)B + public final fun setLaw ([BIB)V +} + +public final class arrow/analysis/laws/kotlin/ByteLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/ByteLaws; + public final fun countLeadingZeroBitsLaw (B)I + public final fun countOneBitsLaw (B)I + public final fun countTrailingZeroBitsLaw (B)I + public final fun divLaw (BI)I + public final fun divLaw (BJ)J +} + +public final class arrow/analysis/laws/kotlin/CharArrayLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/CharArrayLaws; + public final fun charArrayOfLaw ([C)[C + public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[C + public final fun getLaw ([CI)C + public final fun setLaw ([CIC)V +} + +public final class arrow/analysis/laws/kotlin/CharSequenceConversionsLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/CharSequenceConversionsLaws; + public final fun associateByLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun associateLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun associateWithLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun toHashSetLaw (Ljava/lang/CharSequence;)Ljava/util/HashSet; + public final fun toListLaw (Ljava/lang/CharSequence;)Ljava/util/List; + public final fun toMutableListLaw (Ljava/lang/CharSequence;)Ljava/util/List; + public final fun toSetLaw (Ljava/lang/CharSequence;)Ljava/util/Set; +} + +public final class arrow/analysis/laws/kotlin/CharSequenceLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/CharSequenceLaws; + public final fun countLaw (Ljava/lang/CharSequence;)I + public final fun countLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)I + public final fun dropLastLaw (Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; + public final fun dropLaw (Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; + public final fun elementAtLaw (Ljava/lang/CharSequence;I)C + public final fun elementAtOrNullLaw (Ljava/lang/CharSequence;I)Ljava/lang/Character; + public final fun filterIndexedLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/lang/CharSequence; + public final fun filterLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/CharSequence; + public final fun filterNotLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/CharSequence; + public final fun firstLaw (Ljava/lang/CharSequence;)C + public final fun firstLawWithPredicate (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)C + public final fun firstOrNullLaw (Ljava/lang/CharSequence;)Ljava/lang/Character; + public final fun getLaw (Ljava/lang/CharSequence;I)C + public final fun indexOfFirstLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)I + public final fun indexOfLastLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)I + public final fun indexOfLawChar (Ljava/lang/CharSequence;CIZ)I + public final fun indexOfLawString (Ljava/lang/CharSequence;Ljava/lang/String;IZ)I + public final fun isEmptyLaw (Ljava/lang/CharSequence;)Z + public final fun isNotEmptyLaw (Ljava/lang/CharSequence;)Z + public final fun isNullOrEmptyLaw (Ljava/lang/CharSequence;)Z + public final fun lastIndexLaw (Ljava/lang/CharSequence;)I + public final fun lastIndexOfLawChar (Ljava/lang/CharSequence;CIZ)I + public final fun lastIndexOfLawString (Ljava/lang/CharSequence;Ljava/lang/String;IZ)I + public final fun lastLaw (Ljava/lang/CharSequence;)C + public final fun lastLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)C + public final fun lastOrNullLaw (Ljava/lang/CharSequence;)Ljava/lang/Character; + public final fun lengthLaw (Ljava/lang/CharSequence;)I + public final fun mapIndexedLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun mapIndexedNotNullLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun mapLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun mapNotNullLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun noneLaw (Ljava/lang/CharSequence;)Z + public final fun randomLaw (Ljava/lang/CharSequence;)C + public final fun singleLaw (Ljava/lang/CharSequence;)C + public final fun singleOrNullLaw (Ljava/lang/CharSequence;)Ljava/lang/Character; + public final fun takeLastLaw (Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; + public final fun takeLaw (Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; + public final fun trimEndLaw (Ljava/lang/CharSequence;)Ljava/lang/CharSequence; + public final fun trimEndLaw (Ljava/lang/CharSequence;[C)Ljava/lang/CharSequence; + public final fun trimLaw (Ljava/lang/CharSequence;)Ljava/lang/CharSequence; + public final fun trimLaw (Ljava/lang/CharSequence;[C)Ljava/lang/CharSequence; + public final fun trimStartLaw (Ljava/lang/CharSequence;)Ljava/lang/CharSequence; + public final fun trimStartLaw (Ljava/lang/CharSequence;[C)Ljava/lang/CharSequence; +} + +public final class arrow/analysis/laws/kotlin/CollectionConversionsLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/CollectionConversionsLaws; + public final fun associateByLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun associateLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun associateWithLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun toListLaw (Ljava/util/Collection;)Ljava/util/List; + public final fun toMapLaw (Ljava/util/Collection;)Ljava/util/Map; + public final fun toSetLaw (Ljava/util/Collection;)Ljava/util/Set; +} + +public final class arrow/analysis/laws/kotlin/CollectionLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/CollectionLaws; + public final fun allLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Z + public final fun anyLaw (Ljava/util/Collection;)Z + public final fun anyLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Z + public final fun countLaw (Ljava/util/Collection;)I + public final fun countLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)I + public final fun distinctByLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun distinctLaw (Ljava/util/Collection;)Ljava/util/List; + public final fun dropLaw (Ljava/util/Collection;I)Ljava/util/List; + public final fun dropWhileLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun elementAtLaw (Ljava/util/Collection;I)Ljava/lang/Object; + public final fun elementAtOrNullLaw (Ljava/util/Collection;I)Ljava/lang/Object; + public final fun filterIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun filterLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun filterNotLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun filterNotNullLaw (Ljava/util/Collection;)Ljava/util/List; + public final fun firstLaw (Ljava/util/Collection;)Ljava/lang/Object; + public final fun firstLawWithPredicate (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun firstOrNullLaw (Ljava/util/Collection;)Ljava/lang/Object; + public final fun flatMapIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun flatMapLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun flattenLaw (Ljava/util/Collection;)Ljava/util/List; + public final fun forEachIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)V + public final fun forEachLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)V + public final fun indexOfFirstLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)I + public final fun indexOfLastLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)I + public final fun indexOfLaw (Ljava/util/Collection;Ljava/lang/Object;)I + public final fun intersectLaw (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/Set; + public final fun isEmptyLaw (Ljava/util/Collection;)Z + public final fun isNotEmptyLaw (Ljava/util/Collection;)Z + public final fun isNullOrEmptyLaw (Ljava/util/Collection;)Z + public final fun lastIndexOfLaw (Ljava/util/Collection;Ljava/lang/Object;)I + public final fun lastLaw (Ljava/util/Collection;)Ljava/lang/Object; + public final fun lastLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun lastOrNullLaw (Ljava/util/Collection;)Ljava/lang/Object; + public final fun mapIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun mapIndexedNotNullLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun mapLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun mapNotNullLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun minusLaw (Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List; + public final fun minusLawWithElements (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/List; + public final fun noneLaw (Ljava/util/Collection;)Z + public final fun onEachIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/Collection; + public final fun onEachLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/Collection; + public final fun orEmptyLaw (Ljava/util/Collection;)Ljava/util/Collection; + public final fun plusLaw (Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List; + public final fun plusLawWithElements (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/List; + public final fun randomLaw (Ljava/util/Collection;)Ljava/lang/Object; + public final fun randomOrNullLaw (Ljava/util/Collection;)Ljava/lang/Object; + public final fun reversedLaw (Ljava/util/Collection;)Ljava/util/List; + public final fun shuffledLaw (Ljava/util/Collection;)Ljava/util/List; + public final fun singleLaw (Ljava/util/Collection;)Ljava/lang/Object; + public final fun singleOrNullLaw (Ljava/util/Collection;)Ljava/lang/Object; + public final fun sizeLaw (Ljava/util/Collection;)I + public final fun sortedByDescendingLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun sortedByLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun sortedDescendingLaw (Ljava/util/Collection;)Ljava/util/List; + public final fun sortedLaw (Ljava/util/Collection;)Ljava/util/List; + public final fun sortedWithLaw (Ljava/util/Collection;Ljava/util/Comparator;)Ljava/util/List; + public final fun subtractLaw (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/Set; + public final fun takeLaw (Ljava/util/Collection;I)Ljava/util/List; + public final fun takeWhileLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; + public final fun unionLaw (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/Set; + public final fun unzipLaw (Ljava/util/Collection;)Lkotlin/Pair; + public final fun zipLaw (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/List; + public final fun zipLaw (Ljava/util/Collection;Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; + public final fun zipWithNextLaw (Ljava/util/Collection;)Ljava/util/List; + public final fun zipWithNextLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; +} + +public final class arrow/analysis/laws/kotlin/ComparableRangeLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/ComparableRangeLaws; + public final fun rangeToLaw (Ljava/lang/Comparable;Ljava/lang/Comparable;)Lkotlin/ranges/ClosedRange; +} + +public final class arrow/analysis/laws/kotlin/DoubleArrayLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/DoubleArrayLaws; + public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[D + public final fun doubleArrayOfLaw ([D)[D + public final fun getLaw ([DI)D + public final fun setLaw ([DID)V +} + +public final class arrow/analysis/laws/kotlin/EnumLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/EnumLaws; + public final fun ordinalLaw (Ljava/lang/Enum;)I +} + +public final class arrow/analysis/laws/kotlin/FloatArrayLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/FloatArrayLaws; + public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[F + public final fun floatArrayOfLaw ([F)[F + public final fun getLaw ([FI)F + public final fun setLaw ([FIF)V +} + +public final class arrow/analysis/laws/kotlin/IntArrayLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/IntArrayLaws; + public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[I + public final fun getLaw ([II)I + public final fun intArrayOfLaw ([I)[I + public final fun setLaw ([III)V +} + +public final class arrow/analysis/laws/kotlin/IntLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/IntLaws; + public final fun countLeadingZeroBitsLaw (I)I + public final fun countOneBitsLaw (I)I + public final fun countTrailingZeroBitsLaw (I)I + public final fun divLaw (II)I + public final fun divLaw (IJ)J +} + +public final class arrow/analysis/laws/kotlin/ListLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/ListLaws; + public final fun asReversedLaw (Ljava/util/List;)Ljava/util/List; + public final fun component1Law (Ljava/util/List;)Ljava/lang/Object; + public final fun component2Law (Ljava/util/List;)Ljava/lang/Object; + public final fun component3Law (Ljava/util/List;)Ljava/lang/Object; + public final fun component4Law (Ljava/util/List;)Ljava/lang/Object; + public final fun component5Law (Ljava/util/List;)Ljava/lang/Object; + public final fun dropLastLaw (Ljava/util/List;I)Ljava/util/List; + public final fun elementAtLaw (Ljava/util/List;I)Ljava/lang/Object; + public final fun elementAtOrNullLaw (Ljava/util/List;I)Ljava/lang/Object; + public final fun emptyListLaw ()Ljava/util/List; + public final fun emptyListOfLaw ()Ljava/util/List; + public final fun emptyMutableListLaw ()Ljava/util/List; + public final fun firstLaw (Ljava/util/List;)Ljava/lang/Object; + public final fun firstOrNullLaw (Ljava/util/List;)Ljava/lang/Object; + public final fun getLaw (Ljava/util/List;I)Ljava/lang/Object; + public final fun getOrNullLaw (Ljava/util/List;I)Ljava/lang/Object; + public final fun indexOfFirstLaw (Ljava/util/List;Lkotlin/jvm/functions/Function1;)I + public final fun indexOfLastLaw (Ljava/util/List;Lkotlin/jvm/functions/Function1;)I + public final fun indexOfLaw (Ljava/util/List;Ljava/lang/Object;)I + public final fun isEmptyLaw (Ljava/util/List;)Z + public final fun lastIndexLaw (Ljava/util/List;)I + public final fun lastIndexOfLaw (Ljava/util/List;Ljava/lang/Object;)I + public final fun lastLaw (Ljava/util/List;)Ljava/lang/Object; + public final fun lastLaw (Ljava/util/List;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun lastOrNullLaw (Ljava/util/List;)Ljava/lang/Object; + public final fun listOfLaw ([Ljava/lang/Object;)Ljava/util/List; + public final fun listOfNotNullLaw (Ljava/lang/Object;)Ljava/util/List; + public final fun listOfNotNullLaw ([Ljava/lang/Object;)Ljava/util/List; + public final fun mutableListOfLaw ([Ljava/lang/Object;)Ljava/util/List; + public final fun orEmptyLaw (Ljava/util/List;)Ljava/util/List; + public final fun singleLaw (Ljava/util/List;)Ljava/lang/Object; + public final fun singleOrNullLaw (Ljava/util/List;)Ljava/lang/Object; + public final fun singletonListOfLaw (Ljava/lang/Object;)Ljava/util/List; + public final fun takeLastLaw (Ljava/util/List;I)Ljava/util/List; +} + +public final class arrow/analysis/laws/kotlin/LongArrayLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/LongArrayLaws; + public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[J + public final fun getLaw ([JI)J + public final fun longArrayOfLaw ([J)[J + public final fun setLaw ([JIJ)V +} + +public final class arrow/analysis/laws/kotlin/LongLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/LongLaws; + public final fun countLeadingZeroBitsLaw (J)I + public final fun countOneBitsLaw (J)I + public final fun countTrailingZeroBitsLaw (J)I + public final fun divLaw (JI)J + public final fun divLaw (JJ)J +} + +public final class arrow/analysis/laws/kotlin/MapEntryLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/MapEntryLaws; + public final fun component1Law (Ljava/util/Map$Entry;)Ljava/lang/Object; + public final fun component2Law (Ljava/util/Map$Entry;)Ljava/lang/Object; +} + +public final class arrow/analysis/laws/kotlin/MapLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/MapLaws; + public final fun emptyMapLaw ()Ljava/util/Map; + public final fun emptyMapOfLaw ()Ljava/util/Map; + public final fun emptyMutableMapLaw ()Ljava/util/Map; + public final fun entriesLaw (Ljava/util/Map;)Ljava/util/Set; + public final fun filterKeysLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun filterLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun filterNotLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun filterValuesLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun isEmptyLaw (Ljava/util/Map;)Z + public final fun isNotEmptyLaw (Ljava/util/Map;)Z + public final fun isNullOrEmptyLaw (Ljava/util/Map;)Z + public final fun keysLaw (Ljava/util/Map;)Ljava/util/Set; + public final fun mapKeysLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun mapOfLaw ([Lkotlin/Pair;)Ljava/util/Map; + public final fun mapValuesLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; + public final fun minusLaw (Ljava/util/Map;Ljava/lang/Object;)Ljava/util/Map; + public final fun minusLawWithElements (Ljava/util/Map;Ljava/util/Collection;)Ljava/util/Map; + public final fun mutableMapOfLaw ([Lkotlin/Pair;)Ljava/util/Map; + public final fun orEmptyLaw (Ljava/util/Map;)Ljava/util/Map; + public final fun plusLaw (Ljava/util/Map;Lkotlin/Pair;)Ljava/util/Map; + public final fun plusLawWithElements (Ljava/util/Map;Ljava/util/Collection;)Ljava/util/Map; + public final fun plusLawWithMap (Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; + public final fun sizeLaw (Ljava/util/Map;)I + public final fun valuesLaw (Ljava/util/Map;)Ljava/util/Collection; +} + +public final class arrow/analysis/laws/kotlin/MathLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/MathLaws; + public final fun absLaw (D)D + public final fun absLaw (F)F + public final fun absLaw (I)I + public final fun absLaw (J)J + public final fun absoluteValueLaw (D)D + public final fun absoluteValueLaw (F)F + public final fun absoluteValueLaw (I)I + public final fun absoluteValueLaw (J)J + public final fun maxLaw (DD)D + public final fun maxLaw (FF)F + public final fun maxLaw (II)I + public final fun maxLaw (JJ)J + public final fun minLaw (DD)D + public final fun minLaw (FF)F + public final fun minLaw (II)I + public final fun minLaw (JJ)J + public final fun signLaw (D)D + public final fun signLaw (F)F + public final fun signLaw (I)I + public final fun signLaw (J)I + public final fun signTopLevelLaw (D)D + public final fun signTopLevelLaw (F)F +} + +public final class arrow/analysis/laws/kotlin/ResultLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/ResultLaws; + public final fun failureLaw-gIAlu-s (Lkotlin/Result$Companion;Ljava/lang/Throwable;)Ljava/lang/Object; + public final fun getOrNullLaw (Ljava/lang/Object;)Ljava/lang/Object; + public final fun isFailureLaw (Ljava/lang/Object;)Z + public final fun mapLaw-KWTtemM (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public final fun successLaw-gIAlu-s (Lkotlin/Result$Companion;Ljava/lang/Object;)Ljava/lang/Object; +} + +public final class arrow/analysis/laws/kotlin/SetLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/SetLaws; + public final fun emptyMutableSetOfLaw ()Ljava/util/Set; + public final fun emptySetLaw ()Ljava/util/Set; + public final fun emptySetOfLaw ()Ljava/util/Set; + public final fun mutableSetOfLaw ([Ljava/lang/Object;)Ljava/util/Set; + public final fun orEmptyLaw (Ljava/util/Set;)Ljava/util/Set; + public final fun setOfLaw ([Ljava/lang/Object;)Ljava/util/Set; + public final fun setOfNotNullLaw (Ljava/lang/Object;)Ljava/util/Set; + public final fun setOfNotNullLaw ([Ljava/lang/Object;)Ljava/util/Set; +} + +public final class arrow/analysis/laws/kotlin/ShortArrayLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/ShortArrayLaws; + public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[S + public final fun getLaw ([SI)S + public final fun setLaw ([SIS)V + public final fun shortArrayOfLaw ([S)[S +} + +public final class arrow/analysis/laws/kotlin/ShortLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/ShortLaws; + public final fun countLeadingZeroBitsLaw (S)I + public final fun countOneBitsLaw (S)I + public final fun countTrailingZeroBitsLaw (S)I + public final fun divLaw (SI)I + public final fun divLaw (SJ)J +} + +public final class arrow/analysis/laws/kotlin/StringLaws { + public static final field INSTANCE Larrow/analysis/laws/kotlin/StringLaws; + public final fun plusLaw (Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; +} + +public final class arrow/analysis/laws/kotlin/UtilKt { + public static final fun TODOLaw ()Ljava/lang/Void; + public static final fun TODOLaw (Ljava/lang/String;)Ljava/lang/Void; + public static final fun hashCodeLaw (Ljava/lang/Object;)I + public static final fun lazyOfLaw (Ljava/lang/Object;)Lkotlin/Lazy; + public static final fun toLaw (Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair; +} + diff --git a/arrow-libs/analysis/analysis/laws/build.gradle.kts b/arrow-libs/analysis/analysis/laws/build.gradle.kts index 148c3d373..248cde65a 100644 --- a/arrow-libs/analysis/analysis/laws/build.gradle.kts +++ b/arrow-libs/analysis/analysis/laws/build.gradle.kts @@ -6,6 +6,7 @@ plugins { alias(libs.plugins.arrowGradleConfig.publish) alias(libs.plugins.arrowGradleConfig.versioning) alias(libs.plugins.arrowGradleConfig.formatter) + alias(libs.plugins.kotlin.binaryCompatibilityValidator) } kotlin { diff --git a/arrow-libs/analysis/analysis/types/api/arrow-analysis-types.api b/arrow-libs/analysis/analysis/types/api/arrow-analysis-types.api new file mode 100644 index 000000000..d0db085d6 --- /dev/null +++ b/arrow-libs/analysis/analysis/types/api/arrow-analysis-types.api @@ -0,0 +1,50 @@ +public abstract interface annotation class arrow/analysis/DoNotLookAtArguments : java/lang/annotation/Annotation { + public abstract fun dependencies ()[Ljava/lang/String; + public abstract fun formulae ()[Ljava/lang/String; + public abstract fun messages ()[Ljava/lang/String; +} + +public abstract interface annotation class arrow/analysis/Law : java/lang/annotation/Annotation { +} + +public abstract interface annotation class arrow/analysis/Laws : java/lang/annotation/Annotation { +} + +public abstract interface class arrow/analysis/Messager { + public abstract fun invoke ()Ljava/lang/String; +} + +public abstract interface annotation class arrow/analysis/PackagesWithLaws : java/lang/annotation/Annotation { + public abstract fun packages ()[Ljava/lang/String; +} + +public abstract interface annotation class arrow/analysis/Post : java/lang/annotation/Annotation { + public abstract fun dependencies ()[Ljava/lang/String; + public abstract fun formulae ()[Ljava/lang/String; + public abstract fun messages ()[Ljava/lang/String; +} + +public abstract interface annotation class arrow/analysis/Pre : java/lang/annotation/Annotation { + public abstract fun dependencies ()[Ljava/lang/String; + public abstract fun formulae ()[Ljava/lang/String; + public abstract fun messages ()[Ljava/lang/String; +} + +public abstract interface class arrow/analysis/Predicate { + public abstract fun invoke (Ljava/lang/Object;)Z +} + +public final class arrow/analysis/RefinementDSLKt { + public static final fun doNotLookAtArgumentsWhen (ZLarrow/analysis/Messager;)V + public static final fun invariant (Ljava/lang/Object;Larrow/analysis/Predicate;Larrow/analysis/Messager;)Ljava/lang/Object; + public static final fun post (Larrow/analysis/Predicate;Larrow/analysis/Messager;)V + public static final fun post (Ljava/lang/Object;Larrow/analysis/Predicate;Larrow/analysis/Messager;)Ljava/lang/Object; + public static final fun pre (ZLarrow/analysis/Messager;)V + public static final fun unsafeBlock (Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; + public static final fun unsafeCall (Ljava/lang/Object;)Ljava/lang/Object; +} + +public abstract interface annotation class arrow/analysis/Subject : java/lang/annotation/Annotation { + public abstract fun fqName ()Ljava/lang/String; +} + diff --git a/arrow-libs/analysis/analysis/types/build.gradle.kts b/arrow-libs/analysis/analysis/types/build.gradle.kts index 8c7b7fd5a..4a0a1e622 100644 --- a/arrow-libs/analysis/analysis/types/build.gradle.kts +++ b/arrow-libs/analysis/analysis/types/build.gradle.kts @@ -5,6 +5,7 @@ plugins { alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.publish) alias(libs.plugins.arrowGradleConfig.versioning) + alias(libs.plugins.kotlin.binaryCompatibilityValidator) } kotlin { From 5cff67d69fb63c5032e2efe79567a6f8d42199f1 Mon Sep 17 00:00:00 2001 From: Imran Malic Settuba <46971368+i-walker@users.noreply.github.com> Date: Mon, 4 Apr 2022 12:03:37 +0200 Subject: [PATCH 04/12] update arrow-grade-config (#30) * update * apply --- .../phases/analysis/solver/Primitive.kt | 20 ++++---- .../analysis/solver/check/Declarations.kt | 16 +++---- .../analysis/solver/check/Expressions.kt | 8 ++-- .../phases/analysis/solver/collect/FromDSL.kt | 14 +++--- .../meta/plugins/analysis/smt/Rationals.kt | 46 +++++++++---------- .../arrow/meta/plugins/analysis/smt/Solver.kt | 6 +-- .../phases/ir/ConstraintsAnnotations.kt | 6 +-- .../analysis/laws/kotlin/CharAndString.kt | 34 +++++++------- .../arrow/analysis/laws/kotlin/Collections.kt | 16 +++---- .../kotlin/arrow/analysis/laws/kotlin/Math.kt | 32 ++++++------- 10 files changed, 99 insertions(+), 99 deletions(-) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt index 90baa885e..0cbf09307 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt @@ -61,16 +61,16 @@ fun Solver.primitiveFormula( private val comparisonNames: List = listOf( - "kotlin.Any.equals", - "kotlin.Comparable.equals", - "kotlin.Comparable.compareTo", - ">", - ">=", - "<", - "<=", - "==", - "!=" - ) + "kotlin.Any.equals", + "kotlin.Comparable.equals", + "kotlin.Comparable.compareTo", + ">", + ">=", + "<", + "<=", + "==", + "!=" + ) .map { FqName(it) } internal fun CallableDescriptor.isComparison() = diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt index 4ea57c85f..afa1422f7 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt @@ -212,10 +212,10 @@ internal fun SolverState.postPrimaryConstructor( .flatMap { checkExpressionConstraints(solver.thisVariable, bodyExpression, data) } .flatMap { finalState -> checkClassDeclarationInConstructorContext( - solver.thisVariable, - klass.declarations, - finalState.data - ) + solver.thisVariable, + klass.declarations, + finalState.data + ) .onEach { checkPost(finalState.data) } } @@ -310,10 +310,10 @@ internal fun SolverState.checkSecondaryConstructor( } .flatMap { stateAfterPrimaryConstructorCall -> checkExpressionConstraints( - solver.thisVariable, - declaration.bodyExpression, - stateAfterPrimaryConstructorCall.data - ) + solver.thisVariable, + declaration.bodyExpression, + stateAfterPrimaryConstructorCall.data + ) .map { finalState -> checkPost(finalState.data) } } } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt index 9d24055ac..af0407bd7 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt @@ -998,8 +998,8 @@ private fun SolverState.checkCallArguments( val argUniqueName = solver.makeObjectVariable(newName(data.context, "vararg", expr, referencedElement)) checkExpressionConstraints(argUniqueName, expr, data).checkReturnInfo({ r, s -> - CallVarArgumentsInfo(r.left(), s.data) - }) { s -> + CallVarArgumentsInfo(r.left(), s.data) + }) { s -> cont { CallVarArgumentsInfo((argsUpToNow + listOf(argUniqueName)).right(), s.data) } } } @@ -1051,8 +1051,8 @@ private fun SolverState.checkCallArguments( val argUniqueName = solver.makeObjectVariable(newName(data.context, name, expr, referencedElement)) checkExpressionConstraints(argUniqueName, expr, data).checkReturnInfo({ r, s -> - CallArgumentsInfo(r.left(), s.data) - }) { s -> + CallArgumentsInfo(r.left(), s.data) + }) { s -> cont { CallArgumentsInfo( (argsUpToNow + listOf(CallArgumentVariable(name, argUniqueName))).right(), diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt index d81bc8fbf..cf377d168 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt @@ -148,13 +148,13 @@ private fun > Constructor?.constraintsFromConstructor( val isRequireOrAssert = call.isRequireCall() || call.isAssertCall() if (call.specialKind == SpecialKind.Pre) { rewritePrecondition( - solverState, - context, - parameters, - !isRequireOrAssert, - call, - formula.formula - ) + solverState, + context, + parameters, + !isRequireOrAssert, + call, + formula.formula + ) ?.let { preConstraints.add(NamedConstraint(formula.msg, it)) } } // in constructors 'require' and 'assert' have a double duty diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt index 9acd0ae00..8092d0c6c 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt @@ -22,35 +22,35 @@ internal fun Solver.rationalPlus(args: List): NumeralFormula.RationalFo } internal fun Solver.rationalNegate(args: List): NumeralFormula.RationalFormula? = - rationals { - if (args.size == 1) { - negate(args.rational().first()) - } else null -} + rationals { + if (args.size == 1) { + negate(args.rational().first()) + } else null + } internal fun Solver.rationalMinus(args: List): NumeralFormula.RationalFormula? = - rationals { - if (args.size == 2) { - val (left, right) = args.rational() - subtract(left, right) - } else null -} + rationals { + if (args.size == 2) { + val (left, right) = args.rational() + subtract(left, right) + } else null + } internal fun Solver.rationalDivide(args: List): NumeralFormula.RationalFormula? = - rationals { - if (args.size == 2) { - val (left, right) = args.rational() - divide(left, right) - } else null -} + rationals { + if (args.size == 2) { + val (left, right) = args.rational() + divide(left, right) + } else null + } internal fun Solver.rationalMultiply(args: List): NumeralFormula.RationalFormula? = - rationals { - if (args.size == 2) { - val (left, right) = args.rational() - multiply(left, right) - } else null -} + rationals { + if (args.size == 2) { + val (left, right) = args.rational() + multiply(left, right) + } else null + } internal fun Solver.rationalGreaterThan(args: List): BooleanFormula? = rationals { if (args.size == 2) { diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt index df4d5f4f3..2c4fae68b 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt @@ -81,9 +81,9 @@ class Solver(context: SolverContext, nameProvider: NameProvider) : } fun decimalValue(formula: ObjectFormula): NumeralFormula.RationalFormula = - uninterpretedFunctions { - callUF(decimalValueFun, formula) - } + uninterpretedFunctions { + callUF(decimalValueFun, formula) + } fun field(fieldName: String, formula: ObjectFormula): ObjectFormula = uninterpretedFunctions { callUF(fieldFun, integerFormulaManager.makeVariable(fieldName), formula) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt index 81d336e72..426c18f60 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt @@ -46,9 +46,9 @@ internal fun IrUtils.annotateWithConstraints(solverState: SolverState, fn: IrFun fn.addAnnotation(it) } notLookAnnotation( - declarationConstraints.doNotLookAtArgumentsWhen, - solverState.solver.formulaManager - ) + declarationConstraints.doNotLookAtArgumentsWhen, + solverState.solver.formulaManager + ) ?.let { fn.addAnnotation(it) } if (model.isALaw()) { getIrReturnedExpressionWithoutPostcondition(fn)?.let { fnDescriptor -> diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt index cca42c2d5..e04b791b7 100644 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt @@ -92,8 +92,8 @@ object CharSequenceLaws { @Law inline fun CharSequence.indexOfLawChar(element: Char, startIndex: Int, ignoreCase: Boolean): Int = indexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { "bounds for indexOf" } + if (this.length <= 0) (it == -1) else (it >= -1) + }) { "bounds for indexOf" } @Law inline fun CharSequence.indexOfLawString( element: String, @@ -101,8 +101,8 @@ object CharSequenceLaws { ignoreCase: Boolean ): Int = indexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { "bounds for indexOf" } + if (this.length <= 0) (it == -1) else (it >= -1) + }) { "bounds for indexOf" } @Law inline fun CharSequence.lastIndexOfLawChar( element: Char, @@ -110,8 +110,8 @@ object CharSequenceLaws { ignoreCase: Boolean ): Int = lastIndexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { "bounds for lastIndexOf" } + if (this.length <= 0) (it == -1) else (it >= -1) + }) { "bounds for lastIndexOf" } @Law inline fun CharSequence.lastIndexOfLawString( element: String, @@ -119,8 +119,8 @@ object CharSequenceLaws { ignoreCase: Boolean ): Int = lastIndexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { "bounds for lastIndexOf" } + if (this.length <= 0) (it == -1) else (it >= -1) + }) { "bounds for lastIndexOf" } @Law inline fun CharSequence.indexOfFirstLaw(predicate: (x: Char) -> Boolean): Int = indexOfFirst(predicate).post({ if (this.length <= 0) (it == -1) else (it >= -1) }) { @@ -166,8 +166,8 @@ object CharSequenceLaws { inline fun CharSequence.dropLaw(n: Int): CharSequence { pre(n >= 0) { "n must be non-negative" } return drop(n).post({ - if (this.length <= n) (it.length == 0) else (it.length == this.length - n) - }) { "bounds for drop" } + if (this.length <= n) (it.length == 0) else (it.length == this.length - n) + }) { "bounds for drop" } } @Law inline fun CharSequence.takeLaw(n: Int): CharSequence { @@ -178,8 +178,8 @@ object CharSequenceLaws { inline fun CharSequence.dropLastLaw(n: Int): CharSequence { pre(n >= 0) { "n must be non-negative" } return dropLast(n).post({ - if (this.length <= n) (it.length == 0) else (it.length == this.length - n) - }) { "bounds for drop" } + if (this.length <= n) (it.length == 0) else (it.length == this.length - n) + }) { "bounds for drop" } } @Law inline fun CharSequence.takeLastLaw(n: Int): CharSequence { @@ -239,9 +239,9 @@ object StringLaws { @Law inline fun String.plusLaw(other: CharSequence?): String = plus(other).post({ - when { - other == null -> it.length == this.length - else -> it.length == this.length + other.length - } - }) { "concatenation adds lengths" } + when { + other == null -> it.length == this.length + else -> it.length == this.length + other.length + } + }) { "concatenation adds lengths" } } diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt index 4b0f9ff42..0b327ba65 100644 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt @@ -159,8 +159,8 @@ object CollectionLaws { inline fun Collection.zipWithNextLaw(transform: (a: T, b: T) -> V): List { doNotLookAtArgumentsWhen(size < 2) { "empty lists have no elements" } return zipWithNext(transform).post({ - if (this.size < 2) (it.size == 0) else (it.size == this.size - 1) - }) { "size bounded by the smallest" } + if (this.size < 2) (it.size == 0) else (it.size == this.size - 1) + }) { "size bounded by the smallest" } } // operations which remove things @@ -322,8 +322,8 @@ object CollectionLaws { inline fun Collection.flatMapLaw(transform: (A) -> Iterable): List { doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } return flatMap(transform).post({ - if (size <= 0) it.size == 0 else /* true means no info */ true - }) { "size of empty list" } + if (size <= 0) it.size == 0 else /* true means no info */ true + }) { "size of empty list" } } @Law inline fun Collection.flatMapIndexedLaw( @@ -331,8 +331,8 @@ object CollectionLaws { ): List { doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } return flatMapIndexed(transform).post({ - if (size <= 0) it.size == 0 else /* true means no info */ true - }) { "size of empty list" } + if (size <= 0) it.size == 0 else /* true means no info */ true + }) { "size of empty list" } } @Law inline fun Collection>.flattenLaw(): List = @@ -529,8 +529,8 @@ object ListLaws { inline fun List.dropLastLaw(n: Int): List { pre(n >= 0) { "n must be non-negative" } return dropLast(n).post({ - if (this.size <= n) (it.size == 0) else (it.size == this.size - n) - }) { "bounds for drop" } + if (this.size <= n) (it.size == 0) else (it.size == this.size - n) + }) { "bounds for drop" } } @Law inline fun List.takeLastLaw(n: Int): List { diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt index bc7ad87f5..61f987ff5 100644 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt @@ -103,25 +103,25 @@ object MathLaws { @Law inline fun signTopLevelLaw(x: Double): Double = sign(x).post({ - it >= -1.0 && - it <= 1.0 && - when { - x == 0.0 -> it == 0.0 - x > 0.0 -> it == 1.0 - else -> it == -1.0 - } - }) { "sign bounds + definition" } + it >= -1.0 && + it <= 1.0 && + when { + x == 0.0 -> it == 0.0 + x > 0.0 -> it == 1.0 + else -> it == -1.0 + } + }) { "sign bounds + definition" } @Law inline fun signTopLevelLaw(x: Float): Float = sign(x).post({ - it >= -1.0F && - it <= 1.0F && - when { - x == 0.0F -> it == 0.0F - x > 0.0F -> it == 1.0F - else -> it == -1.0F - } - }) { "sign bounds + definition" } + it >= -1.0F && + it <= 1.0F && + when { + x == 0.0F -> it == 0.0F + x > 0.0F -> it == 1.0F + else -> it == -1.0F + } + }) { "sign bounds + definition" } @Law inline fun maxLaw(a: Int, b: Int): Int = From 4b6e6f710cd2bc77a38a107ebbdc6790f5e88834 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Date: Mon, 4 Apr 2022 23:23:15 +0200 Subject: [PATCH 05/12] Handle && and || in binary operators (#34) --- .../analysis/solver/check/Expressions.kt | 24 +++++++- .../meta/plugins/analysis/AnalysisTests.kt | 61 ++++++++++++++++++- 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt index af0407bd7..0e212af98 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt @@ -112,9 +112,8 @@ import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkConditionsI import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkInvariant import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkInvariantConsistency import arrow.meta.plugins.analysis.phases.analysis.solver.valueArgumentExpressions -import arrow.meta.plugins.analysis.smt.ObjectFormula +import arrow.meta.plugins.analysis.smt.* import arrow.meta.plugins.analysis.smt.renameObjectVariables -import arrow.meta.plugins.analysis.smt.substituteDeclarationConstraints import arrow.meta.plugins.analysis.smt.substituteObjectVariables import arrow.meta.plugins.analysis.types.PrimitiveType import arrow.meta.plugins.analysis.types.asFloatingLiteral @@ -1269,6 +1268,27 @@ private fun SolverState.checkBinaryExpression( } } } + (operator == "ANDAND" || operator == "OROR") -> { + val lhs = solver.makeObjectVariable(newName(data.context, "left", left)) + val rhs = solver.makeObjectVariable(newName(data.context, "right", right)) + checkExpressionConstraints(lhs, left, data).checkReturnInfo { stateAfterLhs -> + checkExpressionConstraints(rhs, right, data).checkReturnInfo { stateAfterRhs -> + cont { + when (operator) { + "ANDAND" -> solver.boolAnd(listOf(solver.boolValue(lhs), solver.boolValue(rhs))) + "OROR" -> solver.boolOr(listOf(solver.boolValue(lhs), solver.boolValue(rhs))) + else -> null + }?.let { + addConstraint( + NamedConstraint("boolean operator $operator", it), + stateAfterRhs.data.context + ) + } + stateAfterRhs + } + } + } + } else -> fallThrough(associatedVarName, expression, data) } } diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt index c9b2a166f..d61e30072 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt @@ -1939,8 +1939,65 @@ class AnalysisTests { Field(tag, field) """( withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles }, - isMultiplatform = true + withoutPlugin = { compiles } + ) + } + + @Test + fun `double conditional, part 1 (issue #31)`() { + """ + ${imports()} + + @JvmInline + value class String5till10(val value: String) { + init { + require(value.length >= 5) { "String should be minimal 5 characters" } + require(value.length <= 10) { "String should be maximum 10 characters" } + } + } + + fun getRandomString(): String = "hello!" + + // This works + fun f() { + val value = getRandomString() + if (value.length > 6) { + if (value.length < 10) { + String5till10(value) + } + } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } + ) + } + + @Test + fun `double conditional, part 2 (issue #31)`() { + """ + ${imports()} + + @JvmInline + value class String5till10(val value: String) { + init { + require(value.length >= 5) { "String should be minimal 5 characters" } + require(value.length <= 10) { "String should be maximum 10 characters" } + } + } + + fun getRandomString(): String = "hello!" + + // This does not + fun f() { + val value = getRandomString() + if (value.length > 6 && value.length < 10) { + String5till10(value) + } + } + """( + withPlugin = { compilesNoUnreachable }, + withoutPlugin = { compiles } ) } } From 5035c1e12533b6a674d5600ea134583322ae6ab0 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Date: Mon, 9 May 2022 11:11:26 +0200 Subject: [PATCH 06/12] Update route to compiler plug-ins + update versions (#38) --- .../analysis/example/build.gradle.kts | 3 +- .../analysis/laws/api/arrow-analysis-laws.api | 439 ------------------ .../analysis/analysis/laws/build.gradle.kts | 6 +- 3 files changed, 7 insertions(+), 441 deletions(-) delete mode 100644 arrow-libs/analysis/analysis/laws/api/arrow-analysis-laws.api diff --git a/arrow-libs/analysis/analysis/example/build.gradle.kts b/arrow-libs/analysis/analysis/example/build.gradle.kts index 6ce4b913e..61a6624ca 100644 --- a/arrow-libs/analysis/analysis/example/build.gradle.kts +++ b/arrow-libs/analysis/analysis/example/build.gradle.kts @@ -39,8 +39,9 @@ dependencies { tasks.compileKotlinJvm { kotlinOptions { + dependsOn(":arrow-analysis-laws:jar") freeCompilerArgs = listOf( - "-Xplugin=$rootDir/plugins/analysis/kotlin-plugin/build/libs/arrow-analysis-kotlin-plugin-$version.jar", + "-Xplugin=$rootDir/analysis/kotlin-plugin/build/libs/arrow-analysis-kotlin-plugin-$version.jar", "-P", "plugin:arrow.meta.plugin.compiler.analysis:generatedSrcOutputDir=$buildDir/generated/meta", "-P", "plugin:arrow.meta.plugin.compiler.analysis:baseDir=${project.rootProject.rootDir.path}" ) diff --git a/arrow-libs/analysis/analysis/laws/api/arrow-analysis-laws.api b/arrow-libs/analysis/analysis/laws/api/arrow-analysis-laws.api deleted file mode 100644 index 39b9ca44f..000000000 --- a/arrow-libs/analysis/analysis/laws/api/arrow-analysis-laws.api +++ /dev/null @@ -1,439 +0,0 @@ -public final class arrow/analysis/laws/kotlin/ArrayConversionsLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/ArrayConversionsLaws; - public final fun associateByLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun associateLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun associateWithLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun toListLaw ([Ljava/lang/Object;)Ljava/util/List; - public final fun toMapLaw ([Lkotlin/Pair;)Ljava/util/Map; - public final fun toSetLaw ([Ljava/lang/Object;)Ljava/util/Set; -} - -public final class arrow/analysis/laws/kotlin/ArrayLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/ArrayLaws; - public final fun component1Law ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun component2Law ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun component3Law ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun component4Law ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun component5Law ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun countLaw ([Ljava/lang/Object;)I - public final fun countLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)I - public final fun distinctByLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun distinctLaw ([Ljava/lang/Object;)Ljava/util/List; - public final fun elementAtLaw ([Ljava/lang/Object;I)Ljava/lang/Object; - public final fun elementAtOrNullLaw ([Ljava/lang/Object;I)Ljava/lang/Object; - public final fun filterIndexedLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun filterLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun filterNotLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun filterNotNullLaw ([Ljava/lang/Object;)Ljava/util/List; - public final fun firstLaw (Ljava/util/Collection;)Ljava/lang/Object; - public final fun firstLawWithPredicate ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun firstOrNullLaw ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun getLaw ([Ljava/lang/Object;I)Ljava/lang/Object; - public final fun indexOfFirstLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)I - public final fun indexOfLastLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)I - public final fun indexOfLaw ([Ljava/lang/Object;Ljava/lang/Object;)I - public final fun intersectLaw ([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Set; - public final fun isEmptyLaw ([Ljava/lang/Object;)Z - public final fun isNotEmptyLaw ([Ljava/lang/Object;)Z - public final fun isNullOrEmptyLaw ([Ljava/lang/Object;)Z - public final fun lastIndexLaw ([Ljava/lang/Object;)I - public final fun lastIndexOfLaw ([Ljava/lang/Object;Ljava/lang/Object;)I - public final fun lastLaw ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun lastLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun lastOrNullLaw ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun mapIndexedLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun mapIndexedNotNullLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun mapLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun mapNotNullLaw ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun noneLaw ([Ljava/lang/Object;)Z - public final fun randomLaw ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun randomOrNullLaw ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun setLaw ([Ljava/lang/Object;ILjava/lang/Object;)V - public final fun singleLaw ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun singleOrNullLaw ([Ljava/lang/Object;)Ljava/lang/Object; - public final fun sizeLaw ([Ljava/lang/Object;)I - public final fun subtractLaw ([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Set; - public final fun unionLaw ([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Set; -} - -public final class arrow/analysis/laws/kotlin/BooleanArrayLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/BooleanArrayLaws; - public final fun booleanArrayOfLaw ([Z)[Z - public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[Z - public final fun getLaw ([ZI)Z - public final fun setLaw ([ZIZ)V -} - -public final class arrow/analysis/laws/kotlin/ByteArrayLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/ByteArrayLaws; - public final fun byteArrayOfLaw ([B)[B - public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[B - public final fun getLaw ([BI)B - public final fun setLaw ([BIB)V -} - -public final class arrow/analysis/laws/kotlin/ByteLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/ByteLaws; - public final fun countLeadingZeroBitsLaw (B)I - public final fun countOneBitsLaw (B)I - public final fun countTrailingZeroBitsLaw (B)I - public final fun divLaw (BI)I - public final fun divLaw (BJ)J -} - -public final class arrow/analysis/laws/kotlin/CharArrayLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/CharArrayLaws; - public final fun charArrayOfLaw ([C)[C - public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[C - public final fun getLaw ([CI)C - public final fun setLaw ([CIC)V -} - -public final class arrow/analysis/laws/kotlin/CharSequenceConversionsLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/CharSequenceConversionsLaws; - public final fun associateByLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun associateLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun associateWithLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun toHashSetLaw (Ljava/lang/CharSequence;)Ljava/util/HashSet; - public final fun toListLaw (Ljava/lang/CharSequence;)Ljava/util/List; - public final fun toMutableListLaw (Ljava/lang/CharSequence;)Ljava/util/List; - public final fun toSetLaw (Ljava/lang/CharSequence;)Ljava/util/Set; -} - -public final class arrow/analysis/laws/kotlin/CharSequenceLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/CharSequenceLaws; - public final fun countLaw (Ljava/lang/CharSequence;)I - public final fun countLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)I - public final fun dropLastLaw (Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; - public final fun dropLaw (Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; - public final fun elementAtLaw (Ljava/lang/CharSequence;I)C - public final fun elementAtOrNullLaw (Ljava/lang/CharSequence;I)Ljava/lang/Character; - public final fun filterIndexedLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/lang/CharSequence; - public final fun filterLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/CharSequence; - public final fun filterNotLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/CharSequence; - public final fun firstLaw (Ljava/lang/CharSequence;)C - public final fun firstLawWithPredicate (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)C - public final fun firstOrNullLaw (Ljava/lang/CharSequence;)Ljava/lang/Character; - public final fun getLaw (Ljava/lang/CharSequence;I)C - public final fun indexOfFirstLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)I - public final fun indexOfLastLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)I - public final fun indexOfLawChar (Ljava/lang/CharSequence;CIZ)I - public final fun indexOfLawString (Ljava/lang/CharSequence;Ljava/lang/String;IZ)I - public final fun isEmptyLaw (Ljava/lang/CharSequence;)Z - public final fun isNotEmptyLaw (Ljava/lang/CharSequence;)Z - public final fun isNullOrEmptyLaw (Ljava/lang/CharSequence;)Z - public final fun lastIndexLaw (Ljava/lang/CharSequence;)I - public final fun lastIndexOfLawChar (Ljava/lang/CharSequence;CIZ)I - public final fun lastIndexOfLawString (Ljava/lang/CharSequence;Ljava/lang/String;IZ)I - public final fun lastLaw (Ljava/lang/CharSequence;)C - public final fun lastLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)C - public final fun lastOrNullLaw (Ljava/lang/CharSequence;)Ljava/lang/Character; - public final fun lengthLaw (Ljava/lang/CharSequence;)I - public final fun mapIndexedLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun mapIndexedNotNullLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun mapLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun mapNotNullLaw (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun noneLaw (Ljava/lang/CharSequence;)Z - public final fun randomLaw (Ljava/lang/CharSequence;)C - public final fun singleLaw (Ljava/lang/CharSequence;)C - public final fun singleOrNullLaw (Ljava/lang/CharSequence;)Ljava/lang/Character; - public final fun takeLastLaw (Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; - public final fun takeLaw (Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; - public final fun trimEndLaw (Ljava/lang/CharSequence;)Ljava/lang/CharSequence; - public final fun trimEndLaw (Ljava/lang/CharSequence;[C)Ljava/lang/CharSequence; - public final fun trimLaw (Ljava/lang/CharSequence;)Ljava/lang/CharSequence; - public final fun trimLaw (Ljava/lang/CharSequence;[C)Ljava/lang/CharSequence; - public final fun trimStartLaw (Ljava/lang/CharSequence;)Ljava/lang/CharSequence; - public final fun trimStartLaw (Ljava/lang/CharSequence;[C)Ljava/lang/CharSequence; -} - -public final class arrow/analysis/laws/kotlin/CollectionConversionsLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/CollectionConversionsLaws; - public final fun associateByLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun associateLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun associateWithLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun toListLaw (Ljava/util/Collection;)Ljava/util/List; - public final fun toMapLaw (Ljava/util/Collection;)Ljava/util/Map; - public final fun toSetLaw (Ljava/util/Collection;)Ljava/util/Set; -} - -public final class arrow/analysis/laws/kotlin/CollectionLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/CollectionLaws; - public final fun allLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Z - public final fun anyLaw (Ljava/util/Collection;)Z - public final fun anyLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Z - public final fun countLaw (Ljava/util/Collection;)I - public final fun countLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)I - public final fun distinctByLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun distinctLaw (Ljava/util/Collection;)Ljava/util/List; - public final fun dropLaw (Ljava/util/Collection;I)Ljava/util/List; - public final fun dropWhileLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun elementAtLaw (Ljava/util/Collection;I)Ljava/lang/Object; - public final fun elementAtOrNullLaw (Ljava/util/Collection;I)Ljava/lang/Object; - public final fun filterIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun filterLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun filterNotLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun filterNotNullLaw (Ljava/util/Collection;)Ljava/util/List; - public final fun firstLaw (Ljava/util/Collection;)Ljava/lang/Object; - public final fun firstLawWithPredicate (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun firstOrNullLaw (Ljava/util/Collection;)Ljava/lang/Object; - public final fun flatMapIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun flatMapLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun flattenLaw (Ljava/util/Collection;)Ljava/util/List; - public final fun forEachIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)V - public final fun forEachLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)V - public final fun indexOfFirstLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)I - public final fun indexOfLastLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)I - public final fun indexOfLaw (Ljava/util/Collection;Ljava/lang/Object;)I - public final fun intersectLaw (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/Set; - public final fun isEmptyLaw (Ljava/util/Collection;)Z - public final fun isNotEmptyLaw (Ljava/util/Collection;)Z - public final fun isNullOrEmptyLaw (Ljava/util/Collection;)Z - public final fun lastIndexOfLaw (Ljava/util/Collection;Ljava/lang/Object;)I - public final fun lastLaw (Ljava/util/Collection;)Ljava/lang/Object; - public final fun lastLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun lastOrNullLaw (Ljava/util/Collection;)Ljava/lang/Object; - public final fun mapIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun mapIndexedNotNullLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun mapLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun mapNotNullLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun minusLaw (Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List; - public final fun minusLawWithElements (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/List; - public final fun noneLaw (Ljava/util/Collection;)Z - public final fun onEachIndexedLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/Collection; - public final fun onEachLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/Collection; - public final fun orEmptyLaw (Ljava/util/Collection;)Ljava/util/Collection; - public final fun plusLaw (Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List; - public final fun plusLawWithElements (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/List; - public final fun randomLaw (Ljava/util/Collection;)Ljava/lang/Object; - public final fun randomOrNullLaw (Ljava/util/Collection;)Ljava/lang/Object; - public final fun reversedLaw (Ljava/util/Collection;)Ljava/util/List; - public final fun shuffledLaw (Ljava/util/Collection;)Ljava/util/List; - public final fun singleLaw (Ljava/util/Collection;)Ljava/lang/Object; - public final fun singleOrNullLaw (Ljava/util/Collection;)Ljava/lang/Object; - public final fun sizeLaw (Ljava/util/Collection;)I - public final fun sortedByDescendingLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun sortedByLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun sortedDescendingLaw (Ljava/util/Collection;)Ljava/util/List; - public final fun sortedLaw (Ljava/util/Collection;)Ljava/util/List; - public final fun sortedWithLaw (Ljava/util/Collection;Ljava/util/Comparator;)Ljava/util/List; - public final fun subtractLaw (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/Set; - public final fun takeLaw (Ljava/util/Collection;I)Ljava/util/List; - public final fun takeWhileLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public final fun unionLaw (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/Set; - public final fun unzipLaw (Ljava/util/Collection;)Lkotlin/Pair; - public final fun zipLaw (Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/List; - public final fun zipLaw (Ljava/util/Collection;Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; - public final fun zipWithNextLaw (Ljava/util/Collection;)Ljava/util/List; - public final fun zipWithNextLaw (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Ljava/util/List; -} - -public final class arrow/analysis/laws/kotlin/ComparableRangeLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/ComparableRangeLaws; - public final fun rangeToLaw (Ljava/lang/Comparable;Ljava/lang/Comparable;)Lkotlin/ranges/ClosedRange; -} - -public final class arrow/analysis/laws/kotlin/DoubleArrayLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/DoubleArrayLaws; - public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[D - public final fun doubleArrayOfLaw ([D)[D - public final fun getLaw ([DI)D - public final fun setLaw ([DID)V -} - -public final class arrow/analysis/laws/kotlin/EnumLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/EnumLaws; - public final fun ordinalLaw (Ljava/lang/Enum;)I -} - -public final class arrow/analysis/laws/kotlin/FloatArrayLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/FloatArrayLaws; - public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[F - public final fun floatArrayOfLaw ([F)[F - public final fun getLaw ([FI)F - public final fun setLaw ([FIF)V -} - -public final class arrow/analysis/laws/kotlin/IntArrayLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/IntArrayLaws; - public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[I - public final fun getLaw ([II)I - public final fun intArrayOfLaw ([I)[I - public final fun setLaw ([III)V -} - -public final class arrow/analysis/laws/kotlin/IntLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/IntLaws; - public final fun countLeadingZeroBitsLaw (I)I - public final fun countOneBitsLaw (I)I - public final fun countTrailingZeroBitsLaw (I)I - public final fun divLaw (II)I - public final fun divLaw (IJ)J -} - -public final class arrow/analysis/laws/kotlin/ListLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/ListLaws; - public final fun asReversedLaw (Ljava/util/List;)Ljava/util/List; - public final fun component1Law (Ljava/util/List;)Ljava/lang/Object; - public final fun component2Law (Ljava/util/List;)Ljava/lang/Object; - public final fun component3Law (Ljava/util/List;)Ljava/lang/Object; - public final fun component4Law (Ljava/util/List;)Ljava/lang/Object; - public final fun component5Law (Ljava/util/List;)Ljava/lang/Object; - public final fun dropLastLaw (Ljava/util/List;I)Ljava/util/List; - public final fun elementAtLaw (Ljava/util/List;I)Ljava/lang/Object; - public final fun elementAtOrNullLaw (Ljava/util/List;I)Ljava/lang/Object; - public final fun emptyListLaw ()Ljava/util/List; - public final fun emptyListOfLaw ()Ljava/util/List; - public final fun emptyMutableListLaw ()Ljava/util/List; - public final fun firstLaw (Ljava/util/List;)Ljava/lang/Object; - public final fun firstOrNullLaw (Ljava/util/List;)Ljava/lang/Object; - public final fun getLaw (Ljava/util/List;I)Ljava/lang/Object; - public final fun getOrNullLaw (Ljava/util/List;I)Ljava/lang/Object; - public final fun indexOfFirstLaw (Ljava/util/List;Lkotlin/jvm/functions/Function1;)I - public final fun indexOfLastLaw (Ljava/util/List;Lkotlin/jvm/functions/Function1;)I - public final fun indexOfLaw (Ljava/util/List;Ljava/lang/Object;)I - public final fun isEmptyLaw (Ljava/util/List;)Z - public final fun lastIndexLaw (Ljava/util/List;)I - public final fun lastIndexOfLaw (Ljava/util/List;Ljava/lang/Object;)I - public final fun lastLaw (Ljava/util/List;)Ljava/lang/Object; - public final fun lastLaw (Ljava/util/List;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun lastOrNullLaw (Ljava/util/List;)Ljava/lang/Object; - public final fun listOfLaw ([Ljava/lang/Object;)Ljava/util/List; - public final fun listOfNotNullLaw (Ljava/lang/Object;)Ljava/util/List; - public final fun listOfNotNullLaw ([Ljava/lang/Object;)Ljava/util/List; - public final fun mutableListOfLaw ([Ljava/lang/Object;)Ljava/util/List; - public final fun orEmptyLaw (Ljava/util/List;)Ljava/util/List; - public final fun singleLaw (Ljava/util/List;)Ljava/lang/Object; - public final fun singleOrNullLaw (Ljava/util/List;)Ljava/lang/Object; - public final fun singletonListOfLaw (Ljava/lang/Object;)Ljava/util/List; - public final fun takeLastLaw (Ljava/util/List;I)Ljava/util/List; -} - -public final class arrow/analysis/laws/kotlin/LongArrayLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/LongArrayLaws; - public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[J - public final fun getLaw ([JI)J - public final fun longArrayOfLaw ([J)[J - public final fun setLaw ([JIJ)V -} - -public final class arrow/analysis/laws/kotlin/LongLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/LongLaws; - public final fun countLeadingZeroBitsLaw (J)I - public final fun countOneBitsLaw (J)I - public final fun countTrailingZeroBitsLaw (J)I - public final fun divLaw (JI)J - public final fun divLaw (JJ)J -} - -public final class arrow/analysis/laws/kotlin/MapEntryLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/MapEntryLaws; - public final fun component1Law (Ljava/util/Map$Entry;)Ljava/lang/Object; - public final fun component2Law (Ljava/util/Map$Entry;)Ljava/lang/Object; -} - -public final class arrow/analysis/laws/kotlin/MapLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/MapLaws; - public final fun emptyMapLaw ()Ljava/util/Map; - public final fun emptyMapOfLaw ()Ljava/util/Map; - public final fun emptyMutableMapLaw ()Ljava/util/Map; - public final fun entriesLaw (Ljava/util/Map;)Ljava/util/Set; - public final fun filterKeysLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun filterLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun filterNotLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun filterValuesLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun isEmptyLaw (Ljava/util/Map;)Z - public final fun isNotEmptyLaw (Ljava/util/Map;)Z - public final fun isNullOrEmptyLaw (Ljava/util/Map;)Z - public final fun keysLaw (Ljava/util/Map;)Ljava/util/Set; - public final fun mapKeysLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun mapOfLaw ([Lkotlin/Pair;)Ljava/util/Map; - public final fun mapValuesLaw (Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; - public final fun minusLaw (Ljava/util/Map;Ljava/lang/Object;)Ljava/util/Map; - public final fun minusLawWithElements (Ljava/util/Map;Ljava/util/Collection;)Ljava/util/Map; - public final fun mutableMapOfLaw ([Lkotlin/Pair;)Ljava/util/Map; - public final fun orEmptyLaw (Ljava/util/Map;)Ljava/util/Map; - public final fun plusLaw (Ljava/util/Map;Lkotlin/Pair;)Ljava/util/Map; - public final fun plusLawWithElements (Ljava/util/Map;Ljava/util/Collection;)Ljava/util/Map; - public final fun plusLawWithMap (Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; - public final fun sizeLaw (Ljava/util/Map;)I - public final fun valuesLaw (Ljava/util/Map;)Ljava/util/Collection; -} - -public final class arrow/analysis/laws/kotlin/MathLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/MathLaws; - public final fun absLaw (D)D - public final fun absLaw (F)F - public final fun absLaw (I)I - public final fun absLaw (J)J - public final fun absoluteValueLaw (D)D - public final fun absoluteValueLaw (F)F - public final fun absoluteValueLaw (I)I - public final fun absoluteValueLaw (J)J - public final fun maxLaw (DD)D - public final fun maxLaw (FF)F - public final fun maxLaw (II)I - public final fun maxLaw (JJ)J - public final fun minLaw (DD)D - public final fun minLaw (FF)F - public final fun minLaw (II)I - public final fun minLaw (JJ)J - public final fun signLaw (D)D - public final fun signLaw (F)F - public final fun signLaw (I)I - public final fun signLaw (J)I - public final fun signTopLevelLaw (D)D - public final fun signTopLevelLaw (F)F -} - -public final class arrow/analysis/laws/kotlin/ResultLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/ResultLaws; - public final fun failureLaw-gIAlu-s (Lkotlin/Result$Companion;Ljava/lang/Throwable;)Ljava/lang/Object; - public final fun getOrNullLaw (Ljava/lang/Object;)Ljava/lang/Object; - public final fun isFailureLaw (Ljava/lang/Object;)Z - public final fun mapLaw-KWTtemM (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun successLaw-gIAlu-s (Lkotlin/Result$Companion;Ljava/lang/Object;)Ljava/lang/Object; -} - -public final class arrow/analysis/laws/kotlin/SetLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/SetLaws; - public final fun emptyMutableSetOfLaw ()Ljava/util/Set; - public final fun emptySetLaw ()Ljava/util/Set; - public final fun emptySetOfLaw ()Ljava/util/Set; - public final fun mutableSetOfLaw ([Ljava/lang/Object;)Ljava/util/Set; - public final fun orEmptyLaw (Ljava/util/Set;)Ljava/util/Set; - public final fun setOfLaw ([Ljava/lang/Object;)Ljava/util/Set; - public final fun setOfNotNullLaw (Ljava/lang/Object;)Ljava/util/Set; - public final fun setOfNotNullLaw ([Ljava/lang/Object;)Ljava/util/Set; -} - -public final class arrow/analysis/laws/kotlin/ShortArrayLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/ShortArrayLaws; - public final fun constructorLaw (ILkotlin/jvm/functions/Function1;)[S - public final fun getLaw ([SI)S - public final fun setLaw ([SIS)V - public final fun shortArrayOfLaw ([S)[S -} - -public final class arrow/analysis/laws/kotlin/ShortLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/ShortLaws; - public final fun countLeadingZeroBitsLaw (S)I - public final fun countOneBitsLaw (S)I - public final fun countTrailingZeroBitsLaw (S)I - public final fun divLaw (SI)I - public final fun divLaw (SJ)J -} - -public final class arrow/analysis/laws/kotlin/StringLaws { - public static final field INSTANCE Larrow/analysis/laws/kotlin/StringLaws; - public final fun plusLaw (Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; -} - -public final class arrow/analysis/laws/kotlin/UtilKt { - public static final fun TODOLaw ()Ljava/lang/Void; - public static final fun TODOLaw (Ljava/lang/String;)Ljava/lang/Void; - public static final fun hashCodeLaw (Ljava/lang/Object;)I - public static final fun lazyOfLaw (Ljava/lang/Object;)Lkotlin/Lazy; - public static final fun toLaw (Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair; -} - diff --git a/arrow-libs/analysis/analysis/laws/build.gradle.kts b/arrow-libs/analysis/analysis/laws/build.gradle.kts index 248cde65a..99abad769 100644 --- a/arrow-libs/analysis/analysis/laws/build.gradle.kts +++ b/arrow-libs/analysis/analysis/laws/build.gradle.kts @@ -42,7 +42,7 @@ tasks.compileKotlinJvm { kotlinOptions { dependsOn(":arrow-analysis-kotlin-plugin:jar") freeCompilerArgs = listOf( - "-Xplugin=$rootDir/plugins/analysis/kotlin-plugin/build/libs/arrow-analysis-kotlin-plugin-$version.jar", + "-Xplugin=$rootDir/analysis/kotlin-plugin/build/libs/arrow-analysis-kotlin-plugin-$version.jar", "-P", "plugin:arrow.meta.plugin.compiler.analysis:generatedSrcOutputDir=$buildDir/generated/meta", "-P", "plugin:arrow.meta.plugin.compiler.analysis:baseDir=${project.rootProject.rootDir.path}" ) @@ -56,3 +56,7 @@ tasks.compileKotlinJs { tasks.compileKotlinMetadata { kotlinOptions.suppressWarnings = true } + +apiValidation { + validationDisabled = true +} From fa351e6fd22c16012b058c0b587e82af6a047713 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 May 2022 12:03:18 +0200 Subject: [PATCH 07/12] Update all dependencies (#35) * Update all dependencies | datasource | package | from | to | | ----------- | ----------------------------------------------------------------------------------------------------------------------- | -------------- | ------------- | | github-tags | actions/checkout | v3.0.0 | v3.0.2 | | github-tags | actions/checkout | v3.0.0 | v3.0.2 | | github-tags | actions/checkout | v3.0.0 | v3.0.2 | | github-tags | actions/checkout | v3.0.0 | v3.0.2 | | github-tags | actions/setup-java | v3.1.0 | v3.3.0 | | github-tags | actions/setup-java | v3.0.0 | v3.3.0 | | github-tags | actions/setup-java | v3.1.0 | v3.3.0 | | github-tags | actions/setup-java | v3.1.0 | v3.3.0 | | github-tags | actions/setup-java | v3.1.0 | v3.3.0 | | github-tags | actions/setup-java | v3.1.0 | v3.3.0 | | github-tags | actions/setup-java | v3.1.0 | v3.3.0 | | github-tags | actions/setup-java | v3.1.0 | v3.3.0 | | github-tags | stefanzweifel/git-auto-commit-action | v4.14.0 | v4.14.1 | | maven | io.gitlab.arturbosch.detekt:io.gitlab.arturbosch.detekt.gradle.plugin | 1.19.0 | 1.20.0 | | maven | org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin | 0.8.0 | 0.9.0 | | maven | io.github.classgraph:classgraph | 4.8.143 | 4.8.146 | | maven | io.arrow-kt.arrow-gradle-config-versioning:io.arrow-kt.arrow-gradle-config-versioning.gradle.plugin | 0.10.1-alpha.1 | 0.10.1 | | maven | io.arrow-kt.arrow-gradle-config-publish:io.arrow-kt.arrow-gradle-config-publish.gradle.plugin | 0.10.1-alpha.1 | 0.10.1 | | maven | io.arrow-kt.arrow-gradle-config-nexus:io.arrow-kt.arrow-gradle-config-nexus.gradle.plugin | 0.10.1-alpha.1 | 0.10.1 | | maven | io.arrow-kt.arrow-gradle-config-kotlin:io.arrow-kt.arrow-gradle-config-kotlin.gradle.plugin | 0.10.1-alpha.1 | 0.10.1 | | maven | io.arrow-kt.arrow-gradle-config-formatter:io.arrow-kt.arrow-gradle-config-formatter.gradle.plugin | 0.10.1-alpha.1 | 0.10.1 | | maven | io.arrow-kt:arrow-gradle-plugin-commons | 1.6.1-alpha.4 | 1.6.1-alpha.5 | | maven | io.arrow-kt:arrow-meta-test | 1.6.1-alpha.4 | 1.6.1-alpha.5 | | maven | io.arrow-kt:arrow-meta | 1.6.1-alpha.4 | 1.6.1-alpha.5 | | maven | io.arrow-kt:arrow-optics | 1.0.1 | 1.1.2 | | maven | io.arrow-kt:arrow-core | 1.0.1 | 1.1.2 | | maven | io.arrow-kt:arrow-annotations | 1.0.1 | 1.1.2 | * Opt-in for internal API Co-authored-by: Renovate Bot Co-authored-by: Alejandro Serrano --- .../phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt | 2 ++ .../analysis/solver/ast/kotlin/elements/KotlinExpression.kt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt index 96b0af2a7..1acea71e0 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt @@ -15,7 +15,9 @@ import org.jetbrains.kotlin.psi.KtStringTemplateEntry import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.resolve.BindingContextUtils import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.utils.IDEAPluginsCompatibilityAPI +@OptIn(IDEAPluginsCompatibilityAPI::class) fun interface KotlinElement : Element { override fun impl(): KtElement diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt index f25e05f78..be46d1a94 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt @@ -9,7 +9,9 @@ import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.Kotli import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.psiUtil.lastBlockStatementOrThis import org.jetbrains.kotlin.resolve.calls.callUtil.getType +import org.jetbrains.kotlin.utils.IDEAPluginsCompatibilityAPI +@OptIn(IDEAPluginsCompatibilityAPI::class) fun interface KotlinExpression : Expression, KotlinElement { override fun impl(): KtExpression override fun type(context: ResolutionContext): Type? = From 6ca02c613644f3c0f3ba952d8a2518cd3723e315 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Date: Tue, 21 Mar 2023 09:03:23 +0100 Subject: [PATCH 08/12] Updates for Kotlin 1.8 (#56) --- .../analysis/analysis/common/build.gradle.kts | 1 + .../arrow/meta/continuations/ContSeq.kt | 10 +- .../phases/analysis/solver/Primitive.kt | 92 +++++++------- .../analysis/solver/ResolvedCallUtils.kt | 22 ++-- .../analysis/solver/check/Declarations.kt | 49 ++++---- .../analysis/solver/check/Expressions.kt | 114 +++++++++--------- .../solver/collect/ExpressionToFormula.kt | 34 +++--- .../analysis/solver/collect/FindDescriptor.kt | 14 ++- .../solver/collect/FromAnnotations.kt | 13 +- .../phases/analysis/solver/collect/FromDSL.kt | 9 +- .../phases/analysis/solver/errors/ErrorIds.kt | 36 ++++-- .../analysis/solver/errors/ErrorMessages.kt | 26 ++-- .../solver/search/ConstraintSearch.kt | 27 ++--- .../solver/state/SolverInteraction.kt | 6 +- .../analysis/smt/utils/FormulaToKotlin.kt | 3 +- .../analysis/java/AnalysisJavaPlugin.kt | 3 +- .../analysis/java/ast/JavaInterpreter.kt | 27 +++-- .../java/ast/JavaResolutionContext.kt | 6 +- .../descriptors/JavaAnnotationDescriptor.kt | 3 +- .../ast/descriptors/JavaFunctionDescriptor.kt | 3 +- .../ast/descriptors/JavaModuleDescriptor.kt | 6 +- .../ast/descriptors/JavaVariableDescriptor.kt | 3 +- .../analysis/java/ast/elements/JavaClass.kt | 6 +- .../java/ast/elements/JavaResolvedCall.kt | 6 +- .../plugin/gradle/AnalysisGradlePlugin.kt | 3 +- .../api/arrow-analysis-kotlin-plugin.api | 113 +---------------- .../analysis/kotlin-plugin/build.gradle.kts | 3 + .../main/kotlin/arrow/meta/AnalysisPlugin.kt | 2 +- .../meta/plugins/analysis/phases/Phases.kt | 3 +- .../ast/kotlin/KotlinResolutionContext.kt | 3 +- .../solver/ast/kotlin/KotlinResolvedCall.kt | 6 +- .../ast/kotlin/ast/KotlinInterpreter.kt | 8 +- .../kotlin/descriptors/KotlinMemberScope.kt | 6 +- .../descriptors/KotlinModuleDescriptor.kt | 6 +- .../ast/kotlin/elements/KotlinDeclaration.kt | 9 +- .../phases/ir/ConstraintsAnnotations.kt | 9 +- .../meta/plugins/analysis/phases/ir/Hints.kt | 3 +- ...n.compiler.plugin.CompilerPluginRegistrar} | 0 .../analysis/laws/kotlin/CharAndString.kt | 48 +++++--- .../arrow/analysis/laws/kotlin/Collections.kt | 24 ++-- .../kotlin/arrow/analysis/laws/kotlin/Math.kt | 52 +++++--- 41 files changed, 396 insertions(+), 421 deletions(-) rename arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/{org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar => org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar} (100%) diff --git a/arrow-libs/analysis/analysis/common/build.gradle.kts b/arrow-libs/analysis/analysis/common/build.gradle.kts index 7c5319d9b..d85ec320f 100644 --- a/arrow-libs/analysis/analysis/common/build.gradle.kts +++ b/arrow-libs/analysis/analysis/common/build.gradle.kts @@ -19,4 +19,5 @@ dependencies { api(libs.javaSmt) api(libs.apacheCommonsText) api(libs.sarif4k) + implementation(libs.kotlinx.serialization.core) } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt index f5b1f0f31..b448b6696 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt @@ -50,8 +50,8 @@ sealed class ContSeq { */ fun map(f: suspend ContSyntax.(A) -> B): ContSeq = ContSeq { // Weird hack for RestrictSuspension - val f = f as suspend ContSeqSyntax.(A) -> B - forEach { a -> yield(f(a)) } + val g = f as suspend ContSeqSyntax.(A) -> B + forEach { a -> yield(g(a)) } } /** Side-effecting version of map */ @@ -223,7 +223,8 @@ private class ContSeqBuilder : ContSeqSyntax, Iterator, Continuation return false - State_Ready, State_ManyReady -> return true + State_Ready, + State_ManyReady -> return true else -> throw exceptionalState() } @@ -236,7 +237,8 @@ private class ContSeqBuilder : ContSeqSyntax, Iterator, Continuation nextNotReady() + State_NotReady, + State_ManyNotReady -> nextNotReady() State_ManyReady -> { state = State_ManyNotReady nextIterator!!.next() diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt index 0cbf09307..9f34e7d9a 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt @@ -81,54 +81,60 @@ private fun Solver.comparisonFormula( resolvedCall: ResolvedCall, args: List ): BooleanFormula? = - resolvedCall.allArgumentExpressions(context).takeIf { it.size == 2 }?.let { - val ty1 = it[0].type.unwrapIfNullable().primitiveType() - val ty2 = it[1].type.unwrapIfNullable().primitiveType() - val op = (resolvedCall.callElement as? BinaryExpression)?.operationToken - when { - ty1 == PrimitiveType.BOOLEAN && ty2 == PrimitiveType.BOOLEAN -> + resolvedCall + .allArgumentExpressions(context) + .takeIf { it.size == 2 } + ?.let { + val ty1 = it[0].type.unwrapIfNullable().primitiveType() + val ty2 = it[1].type.unwrapIfNullable().primitiveType() + val op = (resolvedCall.callElement as? BinaryExpression)?.operationToken + when { + ty1 == PrimitiveType.BOOLEAN && ty2 == PrimitiveType.BOOLEAN -> + when (op) { + "==" -> boolEquivalence(args) + "!=" -> boolEquivalence(args)?.let { f -> not(f) } + else -> null + } + ty1 == PrimitiveType.INTEGRAL && ty2 == PrimitiveType.INTEGRAL -> + when (op) { + "==" -> intEquals(args) + "!=" -> intEquals(args)?.let { f -> not(f) } + ">" -> intGreaterThan(args) + ">=" -> intGreaterThanOrEquals(args) + "<" -> intLessThan(args) + "<=" -> intLessThanOrEquals(args) + else -> null + } + ty1 == PrimitiveType.RATIONAL && ty2 == PrimitiveType.RATIONAL -> + when (op) { + "==" -> rationalEquals(args) + "!=" -> rationalEquals(args)?.let { f -> not(f) } + ">" -> rationalGreaterThan(args) + ">=" -> rationalGreaterThanOrEquals(args) + "<" -> rationalLessThan(args) + "<=" -> rationalLessThanOrEquals(args) + else -> null + } + ty1 == null && ty2 == null -> // equality on objects when (op) { - "==" -> boolEquivalence(args) - "!=" -> boolEquivalence(args)?.let { f -> not(f) } - else -> null - } - ty1 == PrimitiveType.INTEGRAL && ty2 == PrimitiveType.INTEGRAL -> - when (op) { - "==" -> intEquals(args) - "!=" -> intEquals(args)?.let { f -> not(f) } - ">" -> intGreaterThan(args) - ">=" -> intGreaterThanOrEquals(args) - "<" -> intLessThan(args) - "<=" -> intLessThanOrEquals(args) - else -> null - } - ty1 == PrimitiveType.RATIONAL && ty2 == PrimitiveType.RATIONAL -> - when (op) { - "==" -> rationalEquals(args) - "!=" -> rationalEquals(args)?.let { f -> not(f) } - ">" -> rationalGreaterThan(args) - ">=" -> rationalGreaterThanOrEquals(args) - "<" -> rationalLessThan(args) - "<=" -> rationalLessThanOrEquals(args) - else -> null - } - ty1 == null && ty2 == null -> // equality on objects - when (op) { - "==" -> intEquals(args) - else -> null - } - else -> null + "==" -> intEquals(args) + else -> null + } + else -> null + } } - } private fun Solver.booleanFormula( descriptor: CallableDescriptor, args: List ): BooleanFormula? = when (descriptor.fqNameSafe) { - FqName("kotlin.Boolean.not"), FqName("!") -> boolNot(args) - FqName("kotlin.Boolean.and"), FqName("&&") -> boolAnd(args) - FqName("kotlin.Boolean.or"), FqName("||") -> boolOr(args) + FqName("kotlin.Boolean.not"), + FqName("!") -> boolNot(args) + FqName("kotlin.Boolean.and"), + FqName("&&") -> boolAnd(args) + FqName("kotlin.Boolean.or"), + FqName("||") -> boolOr(args) FqName("kotlin.Boolean.xor") -> boolXor(args) else -> null } @@ -158,7 +164,8 @@ private fun Solver.integralFormula( // "div", "/" -> intDivide(args) // not all SMT solvers support div "inc", "++" -> intPlus(args + listOf(integerFormulaManager.makeNumber(1))) - "dec", "--" -> intMinus(args + listOf(integerFormulaManager.makeNumber(1))) + "dec", + "--" -> intMinus(args + listOf(integerFormulaManager.makeNumber(1))) else -> null } @@ -187,6 +194,7 @@ private fun Solver.rationalFormula( // "div", "/" -> rationalDivide(args) // not all SMT solvers support div "inc", "++" -> rationalPlus(args + listOf(integerFormulaManager.makeNumber(1))) - "dec", "--" -> rationalMinus(args + listOf(integerFormulaManager.makeNumber(1))) + "dec", + "--" -> rationalMinus(args + listOf(integerFormulaManager.makeNumber(1))) else -> null } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt index 95fd6e7ec..69e205d8d 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt @@ -23,17 +23,18 @@ enum class SpecialKind { internal val ResolvedCall.specialKind: SpecialKind? get() = when (resultingDescriptor.fqNameSafe) { - FqName("arrow.analysis.pre"), FqName("arrow.analysis.RefinementDSLKt.pre") -> SpecialKind.Pre + FqName("arrow.analysis.pre"), + FqName("arrow.analysis.RefinementDSLKt.pre") -> SpecialKind.Pre FqName("kotlin.require") -> SpecialKind.Pre FqName(AssertExpression.FAKE_ASSERT_NAME) -> SpecialKind.Pre - FqName("arrow.analysis.post"), FqName("arrow.analysis.RefinementDSLKt.post") -> - SpecialKind.Post - FqName("arrow.analysis.invariant"), FqName("arrow.analysis.RefinementDSLKt.invariant") -> - SpecialKind.Invariant - FqName("arrow.analysis.unsafeCall"), FqName("arrow.analysis.RefinementDSLKt.unsafeCall") -> - SpecialKind.TrustCall - FqName("arrow.analysis.unsafeBlock"), FqName("arrow.analysis.RefinementDSLKt.unsafeBlock") -> - SpecialKind.TrustBlock + FqName("arrow.analysis.post"), + FqName("arrow.analysis.RefinementDSLKt.post") -> SpecialKind.Post + FqName("arrow.analysis.invariant"), + FqName("arrow.analysis.RefinementDSLKt.invariant") -> SpecialKind.Invariant + FqName("arrow.analysis.unsafeCall"), + FqName("arrow.analysis.RefinementDSLKt.unsafeCall") -> SpecialKind.TrustCall + FqName("arrow.analysis.unsafeBlock"), + FqName("arrow.analysis.RefinementDSLKt.unsafeBlock") -> SpecialKind.TrustBlock FqName("arrow.analysis.doNotLookAtArgumentsWhen"), FqName("arrow.analysis.RefinementDSLKt.doNotLookAtArgumentsWhen") -> SpecialKind.NotLookArgs else -> null @@ -94,8 +95,7 @@ internal fun ResolvedCall.allArgumentExpressions( */ internal fun ResolvedCall.getReceiverOrThisNamedArgument(): Expression? = this.getReceiverExpression() - ?: this.valueArguments - .entries + ?: this.valueArguments.entries .firstOrNull { (name, _) -> name.name.value.contains("this") } ?.value ?.arguments diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt index afa1422f7..50c73f6f8 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt @@ -97,9 +97,9 @@ internal fun SolverState.checkTopLevel( ParamInfo(solver, param.name.value, param.name.value, param.type, element) } val returnParam = - descriptor.returnType?.takeIf { descriptor !is ConstructorDescriptor }?.let { - ParamInfo(solver, RESULT_VAR_NAME, RESULT_VAR_NAME, it, declaration) - } + descriptor.returnType + ?.takeIf { descriptor !is ConstructorDescriptor } + ?.let { ParamInfo(solver, RESULT_VAR_NAME, RESULT_VAR_NAME, it, declaration) } // additional for 'this@info' val additional = if (declaration is NamedDeclaration) { @@ -226,25 +226,27 @@ private fun SolverState.introduceImplicitProperties( // if we have 'var' or 'var' in the parameters, // we need to assign them to fields // when the constructor is primary - klass.primaryConstructorParameters.filter { it.hasValOrVar() }.forEach { param -> - (context.descriptorFor(param) as? ValueParameterDescriptor) - ?.let { context.backingPropertyForConstructorParameter(it) } - ?.let { propertyDescriptor -> - val paramName = param.nameAsName?.value ?: THIS_VAR_NAME - addConstraint( - NamedConstraint( - "definition of property $paramName", - solver.objects { - equal( - solver.makeObjectVariable(paramName), - field(propertyDescriptor, solver.thisVariable) - ) - } - ), - context - ) - } - } + klass.primaryConstructorParameters + .filter { it.hasValOrVar() } + .forEach { param -> + (context.descriptorFor(param) as? ValueParameterDescriptor) + ?.let { context.backingPropertyForConstructorParameter(it) } + ?.let { propertyDescriptor -> + val paramName = param.nameAsName?.value ?: THIS_VAR_NAME + addConstraint( + NamedConstraint( + "definition of property $paramName", + solver.objects { + equal( + solver.makeObjectVariable(paramName), + field(propertyDescriptor, solver.thisVariable) + ) + } + ), + context + ) + } + } } private fun SolverState.checkSuperTypeEntries( @@ -373,8 +375,7 @@ private fun SolverState.checkDefaultParameters( when (declaration) { is DeclarationWithBody -> scopedBracket { - declaration - .valueParameters + declaration.valueParameters .filterNotNull() .mapNotNull { param -> val name = param.name diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt index 0e212af98..27c13f8e4 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt @@ -175,7 +175,8 @@ internal fun SolverState.checkExpressionConstraints( ) } is ReturnExpression -> checkReturnConstraints(expression, data) - is BreakExpression, is ContinueExpression -> { + is BreakExpression, + is ContinueExpression -> { val withLabel = expression as ExpressionWithLabel cont { StateAfter(ExplicitLoopReturn(withLabel.getLabelName()), data) } } @@ -572,9 +573,9 @@ internal fun SolverState.checkRegularFunctionCall( getConstraintsFor(resolvedCall) ?: primitiveConstraints(data.context, resolvedCall) val doNotLook = callConstraints?.doNotLookAtArgumentsWhen.orEmpty() ContSeq { - if (doNotLook.isNotEmpty()) yield(true) - yield(false) - } + if (doNotLook.isNotEmpty()) yield(true) + yield(false) + } .flatMap { r -> continuationBracket.map { r } } .flatMap { doNotLookCase -> if (doNotLookCase) { @@ -767,9 +768,9 @@ private fun SolverState.checkReceiverWithPossibleSafeDot( // we do so by yielding 'true' and 'false' in that case, // and only 'true' when we use a "regular dot" . ContSeq { - if (wholeExpr is SafeQualifiedExpression) yield(false) - yield(true) - } + if (wholeExpr is SafeQualifiedExpression) yield(false) + yield(true) + } .flatMap { r -> continuationBracket.map { r } } .flatMap { definitelyNotNull -> solverTrace.add("?. case $definitelyNotNull") @@ -795,24 +796,24 @@ private fun SolverState.checkReceiverWithPossibleSafeDot( } } else { // the non-null case of ?., or simply regular . doOnlyWhenNotNull(receiverExpr, dataAfterReceiver.noReturn()) { rcv -> - ContSeq.unit.map { - val notNullCstr = - NamedConstraint( - "$receiverName is not null (?.)", - solver.isNotNull(receiverName) - ) - val inconsistent = - checkConditionsInconsistencies( - listOf(notNullCstr), - data.context, - rcv, - dataAfterReceiver.branch.get(), - reportIfInconsistent = false - ) - ensure(!inconsistent) - dataAfterReceiver.addBranch(solver.isNotNull(receiverName)).noReturn() + ContSeq.unit.map { + val notNullCstr = + NamedConstraint( + "$receiverName is not null (?.)", + solver.isNotNull(receiverName) + ) + val inconsistent = + checkConditionsInconsistencies( + listOf(notNullCstr), + data.context, + rcv, + dataAfterReceiver.branch.get(), + reportIfInconsistent = false + ) + ensure(!inconsistent) + dataAfterReceiver.addBranch(solver.isNotNull(receiverName)).noReturn() + } } - } .flatMap { stateAfterNotNullReceiver -> block(stateAfterNotNullReceiver.data) } } } @@ -833,9 +834,9 @@ private fun SolverState.checkElvisOperator( val left = solver.makeObjectVariable(leftName) return checkExpressionConstraints(leftName, leftExpr, data).checkReturnInfo { stateAfterLeft -> ContSeq { - yield(false) - yield(true) - } + yield(false) + yield(true) + } .flatMap { r -> continuationBracket.map { r } } .flatMap { definitelyNotNull -> if (!definitelyNotNull) { // the null case of ?: @@ -896,9 +897,9 @@ private fun SolverState.checkAsOperator( val left = solver.makeObjectVariable(leftName) return checkExpressionConstraints(leftName, leftExpr, data).checkReturnInfo { stateAfterLeft -> ContSeq { - if (kind == TypeCastExpresionKind.QUESTION_TYPE_CAST) yield(true) - yield(false) - } + if (kind == TypeCastExpresionKind.QUESTION_TYPE_CAST) yield(true) + yield(false) + } .flatMap { r -> continuationBracket.map { r } } .flatMap { asFails -> if (asFails) { @@ -997,8 +998,8 @@ private fun SolverState.checkCallArguments( val argUniqueName = solver.makeObjectVariable(newName(data.context, "vararg", expr, referencedElement)) checkExpressionConstraints(argUniqueName, expr, data).checkReturnInfo({ r, s -> - CallVarArgumentsInfo(r.left(), s.data) - }) { s -> + CallVarArgumentsInfo(r.left(), s.data) + }) { s -> cont { CallVarArgumentsInfo((argsUpToNow + listOf(argUniqueName)).right(), s.data) } } } @@ -1050,8 +1051,8 @@ private fun SolverState.checkCallArguments( val argUniqueName = solver.makeObjectVariable(newName(data.context, name, expr, referencedElement)) checkExpressionConstraints(argUniqueName, expr, data).checkReturnInfo({ r, s -> - CallArgumentsInfo(r.left(), s.data) - }) { s -> + CallArgumentsInfo(r.left(), s.data) + }) { s -> cont { CallArgumentsInfo( (argsUpToNow + listOf(CallArgumentVariable(name, argUniqueName))).right(), @@ -1141,8 +1142,7 @@ private fun SolverState.checkStringTemplate( expression: StringTemplateExpression, data: CheckData ): ContSeq = - expression - .entries + expression.entries .filterIsInstance() .map { checkExpressionConstraints("str", it.expression, data) } .sequence() @@ -1175,7 +1175,8 @@ private fun SolverState.checkStringTemplate( } private fun Type.getField(fieldName: String): DeclarationDescriptor? = - descriptor?.unsubstitutedMemberScope + descriptor + ?.unsubstitutedMemberScope ?.getContributedDescriptors { it == fieldName } ?.singleOrNull { it.name.value == fieldName && it.isField() } @@ -1271,7 +1272,7 @@ private fun SolverState.checkBinaryExpression( (operator == "ANDAND" || operator == "OROR") -> { val lhs = solver.makeObjectVariable(newName(data.context, "left", left)) val rhs = solver.makeObjectVariable(newName(data.context, "right", right)) - checkExpressionConstraints(lhs, left, data).checkReturnInfo { stateAfterLhs -> + checkExpressionConstraints(lhs, left, data).checkReturnInfo { _ -> checkExpressionConstraints(rhs, right, data).checkReturnInfo { stateAfterRhs -> cont { when (operator) { @@ -1436,18 +1437,18 @@ private fun SolverState.checkNonFunctionDeclarationExpression( val invariant = obtainInvariant(body, data) // assert the invariant if found and check its consistency doOnlyWhenNotNull(invariant, Unit) { (invBody, invFormula: BooleanFormula) -> - ContSeq.unit.map { - val renamed = solver.renameObjectVariables(invFormula, mapOf(RESULT_VAR_NAME to smtName)) - val inconsistentInvariant = - checkInvariantConsistency( - NamedConstraint("invariant in $declName", renamed), - data.context, - invBody, - data.branch.get() - ) - ensure(!inconsistentInvariant) + ContSeq.unit.map { + val renamed = solver.renameObjectVariables(invFormula, mapOf(RESULT_VAR_NAME to smtName)) + val inconsistentInvariant = + checkInvariantConsistency( + NamedConstraint("invariant in $declName", renamed), + data.context, + invBody, + data.branch.get() + ) + ensure(!inconsistentInvariant) + } } - } .flatMap { // this gives back a new temporary name for the body checkBodyAgainstInvariants(declaration, declName, invariant?.second, body, data) @@ -1776,9 +1777,9 @@ private fun SolverState.checkForExpression( data: CheckData ): ContSeq = ContSeq { - yield(LoopPlace.INSIDE_LOOP) - yield(LoopPlace.AFTER_LOOP) - } + yield(LoopPlace.INSIDE_LOOP) + yield(LoopPlace.AFTER_LOOP) + } .flatMap { when (it) { LoopPlace.INSIDE_LOOP -> @@ -1884,9 +1885,9 @@ private fun SolverState.checkTryExpression( ): ContSeq = inScope(data) { ContSeq { - yield(expression.tryBlock) - yieldAll(expression.catchClauses) - } + yield(expression.tryBlock) + yieldAll(expression.catchClauses) + } .flatMap { r -> continuationBracket.map { r } } .flatMap { when (it) { @@ -1896,7 +1897,8 @@ private fun SolverState.checkTryExpression( // if we had a throw, this will eventually end in a catch is ExplicitThrowReturn -> // is the thrown exception something in our own catch? - if (doesAnyCatchMatch( + if ( + doesAnyCatchMatch( stateAfter.returnInfo.exceptionType, expression.catchClauses, data diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt index 631a55459..8a54665b8 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt @@ -87,9 +87,9 @@ private fun SolverState.expressionToFormula( ex is LambdaExpression -> recur(ex.bodyExpression) // basic blocks ex is BlockExpression -> - ex.statements.mapNotNull { recur(it) as? BooleanFormula }.let { conditions -> - solver.boolAndList(conditions) - } + ex.statements + .mapNotNull { recur(it) as? BooleanFormula } + .let { conditions -> solver.boolAndList(conditions) } ex is ConstantExpression -> ex.type(context)?.let { ty -> solver.makeConstant(ty, ex) } ex is ThisExpression -> // reference to this solver.makeObjectVariable("this") @@ -190,12 +190,14 @@ private fun SolverState.fieldFormula( descriptor: CallableDescriptor, args: List> ): ObjectFormula? = - descriptor.takeIf { it.isField() }?.let { - // create a field, the 'this' may be missing - val thisExpression = - (args.getOrNull(0)?.second as? ObjectFormula) ?: solver.makeObjectVariable("this") - field(descriptor, thisExpression) - } + descriptor + .takeIf { it.isField() } + ?.let { + // create a field, the 'this' may be missing + val thisExpression = + (args.getOrNull(0)?.second as? ObjectFormula) ?: solver.makeObjectVariable("this") + field(descriptor, thisExpression) + } /** * Turns a named constant expression into a smt [Formula] represented as a constant declared in the @@ -219,8 +221,8 @@ internal fun Element.isResultReference(bindingContext: ResolutionContext): Boole val expArg = parent.resolvedArg("predicate") as? ExpressionValueArgument val lambdaArg = (expArg?.valueArgument as? ExpressionLambdaArgument)?.getLambdaExpression() - ?: (expArg?.valueArgument as? ExpressionResolvedValueArgument)?.argumentExpression as? - LambdaExpression + ?: (expArg?.valueArgument as? ExpressionResolvedValueArgument)?.argumentExpression + as? LambdaExpression val params = lambdaArg?.functionLiteral?.valueParameters?.map { it.text }.orEmpty() + listOf("it") this.text in params.distinct() @@ -228,7 +230,9 @@ internal fun Element.isResultReference(bindingContext: ResolutionContext): Boole ?: false internal fun Element.getPostOrInvariantParent(bindingContext: ResolutionContext): ResolvedCall? = - this.parents().mapNotNull { it.getResolvedCall(bindingContext) }.firstOrNull { call -> - val kind = call.specialKind - kind == SpecialKind.Post || kind == SpecialKind.Invariant - } + this.parents() + .mapNotNull { it.getResolvedCall(bindingContext) } + .firstOrNull { call -> + val kind = call.specialKind + kind == SpecialKind.Post || kind == SpecialKind.Invariant + } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt index dbd775a5b..5bed9412a 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt @@ -87,13 +87,15 @@ private fun ResolutionContext.obtainDeclaration( // the type either strictly checks // or we need to look for the best match return current.firstOrNull { it.isCompatibleWith(compatibleWith) } - ?: current.filter { it.isLooselyCompatibleWith(compatibleWith) }.minWithOrNull { o1, o2 -> - when { - o1.isLooselyCompatibleWith(o2) -> -1 - o2.isLooselyCompatibleWith(o1) -> 1 - else -> 0 + ?: current + .filter { it.isLooselyCompatibleWith(compatibleWith) } + .minWithOrNull { o1, o2 -> + when { + o1.isLooselyCompatibleWith(o2) -> -1 + o2.isLooselyCompatibleWith(o1) -> 1 + else -> 0 + } } - } } /** diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt index de31d25e2..3bbc62763 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt @@ -46,9 +46,9 @@ private fun SolverState.collectFromLocalDeclarations( localDeclarations: List, bindingTrace: ResolutionContext ) { - localDeclarations.flatMap { it.gather { it.hasInterestingAnnotation } }.forEach { - addConstraintsFromAnnotations(it, bindingTrace) - } + localDeclarations + .flatMap { it.gather { it.hasInterestingAnnotation } } + .forEach { addConstraintsFromAnnotations(it, bindingTrace) } } private fun SolverState.collectFromClasspath( @@ -67,7 +67,9 @@ private fun SolverState.collectFromClasspath( .gather( initialPackages = listOf(FqName("arrow.analysis.hints")), addSubPackages = false - ) { it.hasPackageWithLawsAnnotation } + ) { + it.hasPackageWithLawsAnnotation + } .flatMap { it.packageWithLawsAnnotation?.argumentValueAsArrayOfString("packages").orEmpty() } @@ -141,7 +143,8 @@ internal fun SolverState.parseFormula( """ (declare-fun this () $VALUE_TYPE) (declare-fun $RESULT_VAR_NAME () $VALUE_TYPE) - """.trimIndent() + """.trimIndent( + ) val fullString = "$params\n$deps\n$rest\n(assert $formula)" return solver.parse(fullString) } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt index cf377d168..de1459da5 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt @@ -43,7 +43,8 @@ public fun Declaration.collectConstraintsFromDSL( context: ResolutionContext, descriptor: DeclarationDescriptor ) { - if (this is ClassOrObject && + if ( + this is ClassOrObject && hasImplicitPrimaryConstructor() && getAnonymousInitializers().isNotEmpty() && !descriptor.hasPackageWithLawsAnnotation @@ -80,7 +81,8 @@ public fun Declaration.collectConstraintsFromDSL( constraintsFromFunctionLike(solverState, context, emptyList()) else -> Triple(arrayListOf(), arrayListOf(), arrayListOf()) }.let { (preConstraints, postConstraints, notLookConstraints) -> - if (preConstraints.isNotEmpty() || + if ( + preConstraints.isNotEmpty() || postConstraints.isNotEmpty() || notLookConstraints.isNotEmpty() ) { @@ -253,7 +255,8 @@ private fun Element.elementToConstraint( ): Pair? { val call = getResolvedCall(context) val kind = call?.specialKind - return if (kind == SpecialKind.Pre || kind == SpecialKind.Post || kind == SpecialKind.NotLookArgs + return if ( + kind == SpecialKind.Pre || kind == SpecialKind.Post || kind == SpecialKind.NotLookArgs ) { val predicateArg = call.singleArg("predicate", context) ?: call.singleArg("value", context) val result = solverState.topLevelExpressionToFormula(predicateArg, context, parameters, false) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt index 92bc6a4c2..cf59800bd 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt @@ -44,7 +44,8 @@ sealed interface ErrorIds { The compiler won't catch these errors in its own analysis phase (like it would do with a type error), since this is perfectly good code. However, it seems desirable for the programmer to know that a particular language feature cannot be used in these blocks. - """.trimIndent() + """.trimIndent( + ) } enum class Laws : ErrorIds { @@ -63,7 +64,8 @@ sealed interface ErrorIds { - It must call **exactly one** function at the end, - The call must use the parameters **in order**. - """.trimIndent() + """.trimIndent( + ) } enum class Unsupported : ErrorIds { @@ -90,7 +92,8 @@ sealed interface ErrorIds { ```kotlin val wrong = 1 / 0 // does not satisfy '0 != 0' in Int.div law ``` - """.trimIndent() + """.trimIndent( + ) }, UnsatBodyPost { override val shortDescription: String @@ -110,7 +113,8 @@ sealed interface ErrorIds { // does not satisfy 'x + x > 1' } ``` - """.trimIndent() + """.trimIndent( + ) }, UnsatInvariants { override val shortDescription: String @@ -129,7 +133,8 @@ sealed interface ErrorIds { ... } ``` - """.trimIndent() + """.trimIndent( + ) } } @@ -149,7 +154,8 @@ sealed interface ErrorIds { ... } ``` - """.trimIndent() + """.trimIndent( + ) }, InconsistentDefaultValues { override val fullDescription: String @@ -164,7 +170,8 @@ sealed interface ErrorIds { ... } ``` - """.trimIndent() + """.trimIndent( + ) }, InconsistentConditions { override val fullDescription: String @@ -185,7 +192,8 @@ sealed interface ErrorIds { } } ``` - """.trimIndent() + """.trimIndent( + ) override val level: SeverityLevel get() = SeverityLevel.Warning @@ -197,7 +205,8 @@ sealed interface ErrorIds { The post-conditions gathered after calling a function imply that this function could not be called at all. _This is really uncommon in practice_. - """.trimIndent() + """.trimIndent( + ) override val level: SeverityLevel get() = SeverityLevel.Warning @@ -216,7 +225,8 @@ sealed interface ErrorIds { } ``` - """.trimIndent() + """.trimIndent( + ) }; override val shortDescription: String @@ -235,7 +245,8 @@ sealed interface ErrorIds { the one declared in its parent. This guarantees that we can always replace a call to the parent with a call to the child (Liskov Substitution Principle). - """.trimIndent() + """.trimIndent( + ) }, NotStrongerPostcondition { override val shortDescription: String @@ -248,7 +259,8 @@ sealed interface ErrorIds { the one declared in its parent. This guarantees that we can always replace a call to the parent with a call to the child (Liskov Substitution Principle). - """.trimIndent() + """.trimIndent( + ) } } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt index 9b66dca55..a443cc3bd 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt @@ -126,7 +126,8 @@ object ErrorMessages { | -> unsatisfiable constraint: `${callPreCondition.formula.dumpKotlinLike()}` | -> ${template(callPreCondition, this)} | -> ${branch(branch)} - """.trimMargin() + """.trimMargin( + ) /** * (attached to the return value) @@ -151,7 +152,8 @@ object ErrorMessages { ): String = """|declaration `${declaration.name}` fails to satisfy the post-condition: ${postCondition.formula.dumpKotlinLike()} | -> ${branch(branch)} - """.trimMargin() + """.trimMargin( + ) /** * (attached to the new value): the invariant declared for a mutable variable is not satisfied @@ -177,7 +179,8 @@ object ErrorMessages { """|invariants are not satisfied in `${expression.text}` | -> unsatisfiable constraint: `${constraint.formula.dumpKotlinLike()}` | -> ${branch(branch)} - """.trimMargin() + """.trimMargin( + ) } /** @@ -262,7 +265,8 @@ object ErrorMessages { ): String = """|unreachable code due to conflicting conditions: ${unsatCore.dumpKotlinLike()} | -> ${branch(branch)} - """.trimMargin() + """.trimMargin( + ) /** * (attached to the function call): the post-conditions gathered after calling a function imply @@ -274,7 +278,8 @@ object ErrorMessages { ): String = """|unreachable code due to post-conditions: ${unsatCore.dumpKotlinLike()} | -> ${branch(branch)} - """.trimMargin() + """.trimMargin( + ) /** * (attached to a local declaration): there is no way in which the invariant attached to a @@ -296,19 +301,22 @@ object ErrorMessages { ): String = """|invariants are inconsistent: ${it.dumpKotlinLike()} | -> ${branch(branch)} - """.trimMargin() + """.trimMargin( + ) } object Liskov { internal fun KotlinPrinter.notWeakerPrecondition(constraint: NamedConstraint): String = """|pre-condition `${constraint.msg}` is not weaker than those from overridden members | -> problematic constraint: `${constraint.formula.dumpKotlinLike()}` - """.trimMargin() + """.trimMargin( + ) internal fun KotlinPrinter.notStrongerPostcondition(constraint: NamedConstraint): String = """|post-condition `${constraint.msg}` from overridden member is not satisfied | -> problematic constraint: `${constraint.formula.dumpKotlinLike()}` - """.trimMargin() + """.trimMargin( + ) } object Exception { @@ -329,7 +337,7 @@ object ErrorMessages { ?.joinToString(separator = System.lineSeparator()) { referencedElement -> val el = referencedElement.element val argsMapping = referencedElement.reference - argsMapping?.let { (param, resolvedArg) -> + argsMapping?.let { (param, _) -> val paramPsi = param.element() val location = paramPsi?.let { paramPsi.location() } "`${el.text}` bound to param `${param.name}` in `${param.containingDeclaration?.fqNameSafe}` ${location?.link() ?: ""}" diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt index 9c3c96ee2..f2c01ec97 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt @@ -66,8 +66,7 @@ internal fun SolverState.getPostInvariantsForType(type: ClassDescriptor): List getConstraintsFor(primary)?.post else -> - type - .constructors + type.constructors .map { secondary -> getConstraintsFor(secondary)?.post } .takeIf { list -> list.isNotEmpty() && list.all { it != null } } ?.filterNotNull() // this is a bit redundant, but won't compile otherwise @@ -97,15 +96,17 @@ internal fun SolverState.typeInvariants( ): List { // invariants from the type val invariants = - type.descriptor?.let { getPostInvariantsForType(it) }?.let { constraints -> - // replace $result by new name - constraints.map { - NamedConstraint( - "${it.msg} (invariant from $type)", - solver.substituteObjectVariables(it.formula, mapOf(RESULT_VAR_NAME to result)) - ) + type.descriptor + ?.let { getPostInvariantsForType(it) } + ?.let { constraints -> + // replace $result by new name + constraints.map { + NamedConstraint( + "${it.msg} (invariant from $type)", + solver.substituteObjectVariables(it.formula, mapOf(RESULT_VAR_NAME to result)) + ) + } } - } ?: emptyList() // invariants from property code val fieldEqs = fieldEqualitiesInvariants(type, result, context) @@ -159,8 +160,7 @@ internal fun SolverState.fieldEqualitiesInvariants( internal fun SolverState.getOverriddenConstraintsFor( descriptor: DeclarationDescriptor ): DeclarationConstraints? = - descriptor - .withAliasUnwrapped + descriptor.withAliasUnwrapped .overriddenDescriptors() ?.mapNotNull { overriddenDescriptor -> getConstraintsFor(overriddenDescriptor) } ?.takeIf { it.isNotEmpty() } @@ -201,8 +201,7 @@ internal fun SolverState.primitiveConstraints( dispatch + descriptor.valueParameters.map { param -> val tyFromArg = - call - .valueArguments + call.valueArguments .filterKeys { it.name == param.name } .values .singleOrNull() diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt index 4d2569e59..c954a9fa1 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt @@ -81,14 +81,14 @@ internal fun SolverState.additionalFieldConstraints( formulae: Iterable, context: ResolutionContext ): Set = - solver - .formulaManager + solver.formulaManager .fieldNames(formulae.map { it.formula }) .flatMap { (fieldName, appliedTo) -> val fqName = FqName(fieldName) val descriptor = context.descriptorFor(fqName).getOrNull(0) val constraints = singleConstraintsFromFqName(fqName) - if (descriptor != null && + if ( + descriptor != null && constraints != null && constraints.pre.isEmpty() && constraints.post.size == 1 diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt index 4d868db8a..65fa49079 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt @@ -98,7 +98,8 @@ internal class DefaultKotlinPrinter( ): Void? { val (render, name, negatedName) = pFunctionDeclaration.toKotlin() when (render) { - Render.Hidden, Render.Unsupported -> { + Render.Hidden, + Render.Unsupported -> { pArgs.forEach { arg -> fmgr.visit(arg, this) } } Render.Negation -> { diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt index 03115f633..8c51478cc 100644 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt @@ -122,8 +122,7 @@ public class AnalysisJavaPlugin : Plugin { ) { val obtainedPackages = mutableListOf() todo.forEach { descriptor -> - ctx - .resolver + ctx.resolver .tree(descriptor) ?.visitRecursively( object : OurTreeVisitor(Unit) { diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt index fe08055ed..c9911aff1 100644 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt @@ -1,4 +1,4 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") +@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE", "UNCHECKED_CAST") package arrow.meta.plugins.analysis.java.ast @@ -126,8 +126,8 @@ public fun A.model(ctx: AnalysisContext): B = is PackageElement -> JavaPackageDescriptor(ctx, this) as B is VariableElement -> when (this.kind) { - ElementKind.PARAMETER, ElementKind.EXCEPTION_PARAMETER -> - JavaParameterDescriptor(ctx, this) as B + ElementKind.PARAMETER, + ElementKind.EXCEPTION_PARAMETER -> JavaParameterDescriptor(ctx, this) as B ElementKind.LOCAL_VARIABLE -> JavaLocalVariableDescriptor(ctx, this) as B ElementKind.FIELD -> JavaFieldDescriptor(ctx, this) as B ElementKind.ENUM_CONSTANT -> JavaEnumConstantDescriptor(ctx, this) as B @@ -137,7 +137,8 @@ public fun A.model(ctx: AnalysisContext): B = when (this.kind) { ElementKind.METHOD -> JavaSimpleFunctionDescriptor(ctx, this) as B ElementKind.CONSTRUCTOR -> JavaConstructorDescriptor(ctx, this) as B - ElementKind.STATIC_INIT, ElementKind.INSTANCE_INIT -> TODO("not yet supported") + ElementKind.STATIC_INIT, + ElementKind.INSTANCE_INIT -> TODO("not yet supported") else -> throw IllegalArgumentException("incorrect ExecutableElement case") } is TypeElement -> JavaClassDescriptor(ctx, this) as B @@ -146,21 +147,21 @@ public fun A.model(ctx: AnalysisContext): B = } public fun < - A : Tree, - B : arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element> A.modelCautious( - ctx: AnalysisContext -): B? = + A : Tree, B : arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element> A + .modelCautious(ctx: AnalysisContext): B? = when (this) { - is CompilationUnitTree, is PackageTree, is ModuleTree, is DirectiveTree, is ImportTree -> null + is CompilationUnitTree, + is PackageTree, + is ModuleTree, + is DirectiveTree, + is ImportTree -> null is ModifiersTree -> null else -> this.model(ctx) } public fun < - A : Tree, - B : arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element> A.model( - ctx: AnalysisContext -): B = + A : Tree, B : arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element> A + .model(ctx: AnalysisContext): B = when (this) { is ArrayTypeTree, is ParameterizedTypeTree, diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt index 2f37a058f..4cf023cf7 100644 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt @@ -57,7 +57,8 @@ public class JavaResolutionContext( object : OurTreeVisitor(Unit) { override fun visitMethodInvocation(node: MethodInvocationTree, p: Unit?) { node.methodSelect?.toString()?.let { calleeText -> - if (calleeText == "pre" || + if ( + calleeText == "pre" || calleeText.endsWith(".pre") || calleeText == "post" || calleeText.endsWith(".post") || @@ -120,8 +121,7 @@ public class JavaResolutionContext( (declaration as? JavaElement)?.let { ctx.resolver.resolve(it.impl())?.model(ctx) } private val diagnosticSource: DiagnosticSource - get() = - ctx.unit?.let { DiagnosticSource(it.sourceFile, ctx.logger) } ?: DiagnosticSource.NO_SOURCE + get() = DiagnosticSource(ctx.unit.sourceFile, ctx.logger) private fun report(element: Element, builder: (JCTree) -> JCDiagnostic) { (element as? JavaElement)?.let { elt -> diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt index f17a5737d..a82699cd3 100644 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt @@ -17,8 +17,7 @@ public class JavaAnnotationDescriptor( ) : AnnotationDescriptor { private val inside: Map get() = - ctx - .elements + ctx.elements .getElementValuesWithDefaults(impl) .map { (k, v) -> k.simpleName.toString() to v } .toMap() diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt index 695e0994b..cedc5a58e 100644 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt @@ -58,8 +58,7 @@ public open class JavaFunctionDescriptor( null -> emptyList() else -> klass.asType().allSupertypes(ctx).flatMap { parent -> - ctx - .types + ctx.types .asElement(parent) ?.enclosedElements .orEmpty() diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt index c7d18eb0a..811dbb559 100644 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt @@ -14,15 +14,13 @@ public class JavaModuleDescriptor( private val impl: ModuleElement ) : JavaDescriptor(ctx, impl), ModuleDescriptor { override fun getPackage(pck: String): PackageViewDescriptor? = - impl - .enclosedElements + impl.enclosedElements .filterIsInstance() .firstOrNull { it.fqName == pck } ?.model(ctx) override fun getSubPackagesOf(fqName: FqName): List = - impl - .enclosedElements + impl.enclosedElements .filterIsInstance() .filter { it.fqName.startsWith(fqName.name + ".") } .map { it.model(ctx) } diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt index 42ed0ebcb..ffb77104d 100644 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt @@ -13,7 +13,8 @@ public open class JavaVariableDescriptor(ctx: AnalysisContext, private val impl: override val isVar: Boolean get() = when (impl.kind) { - ElementKind.LOCAL_VARIABLE, ElementKind.FIELD -> true + ElementKind.LOCAL_VARIABLE, + ElementKind.FIELD -> true else -> false } override val isConst: Boolean = impl.constantValue != null diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt index 1d4973d03..e6ba6c44e 100644 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt @@ -75,9 +75,9 @@ public class JavaClass(private val ctx: AnalysisContext, private val impl: Class override val anonymousInitializers: List = emptyList() override val properties: List = emptyList() override val functions: List = - this@JavaClass.declarations.mapNotNull { it as? JavaMethod }.filter { - it !is JavaConstructor - } + this@JavaClass.declarations + .mapNotNull { it as? JavaMethod } + .filter { it !is JavaConstructor } override val enumEntries: List = emptyList() // TODO override val allCompanionObjects: List = emptyList() override val declarations: List = this@JavaClass.declarations diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt index c2e471989..86bcf1d0c 100644 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt +++ b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt @@ -47,15 +47,13 @@ public class JavaResolvedCall( override val typeArguments: Map get() = - resultingDescriptor - .typeParameters + resultingDescriptor.typeParameters .zip(typeArgs) .map { (descr, tree) -> descr to ctx.resolver.resolveType(tree)!!.model(ctx) } .toMap() override val valueArguments: Map get() = - resultingDescriptor - .valueParameters + resultingDescriptor.valueParameters .zip(arguments) .map { (descr, tree) -> descr to diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt index a13fde323..f7868b2ad 100644 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt @@ -15,7 +15,8 @@ public class AnalysisGradlePlugin : ArrowMetaGradlePlugin { override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = // do not run on test targets - if (kotlinCompilation.compilationName.endsWith( + if ( + kotlinCompilation.compilationName.endsWith( KotlinCompilation.TEST_COMPILATION_NAME, ignoreCase = true ) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api b/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api index 61220513d..90458e2f0 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api +++ b/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api @@ -2,120 +2,9 @@ public final class arrow/meta/AnalysisMetaCliProcessor : arrow/meta/MetaCliProce public fun ()V } -public class arrow/meta/AnalysisPlugin : arrow/meta/Meta { +public final class arrow/meta/AnalysisPlugin : arrow/meta/Meta { public fun ()V - public fun IrGeneration (Larrow/meta/dsl/codegen/ir/IrSyntax;Lkotlin/jvm/functions/Function3;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun additionalSources (Lkotlin/jvm/functions/Function4;)Larrow/meta/phases/analysis/CollectAdditionalSources; - public fun analysis (Lkotlin/jvm/functions/Function7;Lkotlin/jvm/functions/Function5;)Larrow/meta/phases/analysis/AnalysisHandler; - public fun callChecker (Lkotlin/jvm/functions/Function4;)Larrow/meta/phases/config/StorageComponentContainer; - public fun codegen (Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/asm/Codegen; - public fun compilerContextService ()Larrow/meta/phases/config/StorageComponentContainer; - public fun declarationAttributeAlterer (Lkotlin/jvm/functions/Function7;)Larrow/meta/phases/resolve/DeclarationAttributeAlterer; - public fun declarationChecker (Lkotlin/jvm/functions/Function4;)Larrow/meta/phases/config/StorageComponentContainer; - public fun enableIr ()Larrow/meta/phases/ExtensionPhase; - public fun extraImports (Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/analysis/ExtraImports; public fun intercept (Larrow/meta/phases/CompilerContext;)Ljava/util/List; - public fun irAnonymousInitializer (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irBlock (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irBlockBody (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irBody (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irBranch (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irBreak (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irBreakContinue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irCallableReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irCatch (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irClass (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irClassReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irComposite (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irConst (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irConstructor (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irConstructorCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irContainerExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irContinue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irDeclaration (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irDeclarationReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irDelegatingConstructorCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irDoWhileLoop (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irDump (Larrow/meta/Meta;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irDumpKotlinLike (Larrow/meta/Meta;Lorg/jetbrains/kotlin/ir/util/KotlinLikeDumpOptions;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irDynamicExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irDynamicMemberExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irDynamicOperatorExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irElseBranch (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irEnumConstructorCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irEnumEntry (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irErrorCallExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irErrorDeclaration (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irErrorExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irExpressionBody (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irField (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irFieldAccess (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irFile (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irFunction (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irFunctionAccess (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irFunctionReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irGetClass (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irGetEnumValue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irGetField (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irGetObjectValue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irGetValue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irInstanceInitializerCall (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irLocalDelegatedProperty (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irLocalDelegatedPropertyReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irLoop (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irMemberAccess (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irModuleFragment (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irProperty (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irPropertyReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irReturn (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irSetField (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irSetValue (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irSimpleFunction (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irSingletonReference (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irSpreadElement (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irStringConcatenation (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irSuspendableExpression (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irSuspensionPoint (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irSyntheticBody (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irThrow (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irTry (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irTypeAlias (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irTypeOperator (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irTypeParameter (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irValueAccess (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irValueParameter (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irVararg (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irVariable (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irWhen (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun irWhileLoop (Larrow/meta/Meta;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/codegen/ir/IRGeneration; - public fun meta ([Larrow/meta/phases/ExtensionPhase;)Ljava/util/List; - public fun packageFragmentProvider (Lkotlin/jvm/functions/Function7;)Larrow/meta/phases/resolve/PackageProvider; - public fun packageFragmentProvider (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/resolve/PackageProvider;Larrow/meta/phases/CompilerContext;)V - public fun preprocessedVirtualFileFactory (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/analysis/PreprocessedVirtualFileFactory; - public fun registerAnalysisHandler (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/analysis/AnalysisHandler;Larrow/meta/phases/CompilerContext;)V - public fun registerClassBuilder (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/codegen/asm/ClassBuilder;Larrow/meta/phases/CompilerContext;)V - public fun registerCodegen (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/codegen/asm/Codegen;Larrow/meta/phases/CompilerContext;)V - public fun registerCollectAdditionalSources (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/analysis/CollectAdditionalSources;Larrow/meta/phases/CompilerContext;)V - public fun registerCompilerConfiguration (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/config/Config;Larrow/meta/phases/CompilerContext;)V - public fun registerDeclarationAttributeAlterer (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/resolve/DeclarationAttributeAlterer;Larrow/meta/phases/CompilerContext;)V - public fun registerExtraImports (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/analysis/ExtraImports;Larrow/meta/phases/CompilerContext;)V - public fun registerIRGeneration (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/codegen/ir/IRGeneration;Larrow/meta/phases/CompilerContext;)V - public fun registerMetaAnalyzer ()Larrow/meta/phases/ExtensionPhase; - public fun registerMetaComponents (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Lorg/jetbrains/kotlin/config/CompilerConfiguration;Larrow/meta/phases/CompilerContext;)V - public fun registerPreprocessedVirtualFileFactory (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/analysis/PreprocessedVirtualFileFactory;Larrow/meta/phases/CompilerContext;)V - public fun registerProjectComponents (Lorg/jetbrains/kotlin/com/intellij/mock/MockProject;Lorg/jetbrains/kotlin/config/CompilerConfiguration;)V - public fun registerStorageComponentContainer (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/config/StorageComponentContainer;Larrow/meta/phases/CompilerContext;)V - public fun registerSyntheticResolver (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/resolve/synthetics/SyntheticResolver;Larrow/meta/phases/CompilerContext;)V - public fun registerSyntheticScopeProvider (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;Larrow/meta/phases/resolve/synthetics/SyntheticScopeProvider;Larrow/meta/phases/CompilerContext;)V - public fun registerSyntheticScopeProviderIfNeeded (Lorg/jetbrains/kotlin/com/intellij/openapi/project/Project;)V - public fun storageComponent (Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function4;)Larrow/meta/phases/config/StorageComponentContainer; - public fun suppressDiagnostic (Lkotlin/jvm/functions/Function1;)Larrow/meta/phases/ExtensionPhase; - public fun suppressDiagnosticWithTrace (Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/ExtensionPhase; - public fun syntheticResolver (Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/resolve/synthetics/SyntheticResolver; - public fun syntheticScopes (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)Larrow/meta/phases/ExtensionPhase; - public fun updateConfig (Lkotlin/jvm/functions/Function2;)Larrow/meta/phases/config/Config; } public class arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm : org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages$Extension { diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts index 45b43e828..a2ea89e43 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts @@ -27,4 +27,7 @@ dependencies { testRuntimeOnly(projects.arrowAnalysisTypes) testRuntimeOnly(projects.arrowAnalysisKotlinPlugin) testRuntimeOnly(libs.arrowCore) + + testImplementation(libs.ksp.api) + testImplementation(libs.ksp.lib) } diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt index 1a1f10b87..867673578 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt @@ -3,7 +3,7 @@ package arrow.meta import arrow.meta.phases.CompilerContext import arrow.meta.plugins.analysis.phases.analysisPhases -open class AnalysisPlugin : Meta { +class AnalysisPlugin : Meta() { override fun intercept(ctx: CompilerContext): List = listOf("Arrow Analysis" { meta(analysisPhases()) }) } diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt index b1395445f..c03428bd7 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt @@ -113,7 +113,8 @@ internal fun Meta.analysisPhases(): ExtensionPhase = }, ), declarationChecker { declaration, descriptor, context -> - if (isInStage(context.moduleDescriptor, Stage.Init) || + if ( + isInStage(context.moduleDescriptor, Stage.Init) || isInStage(context.moduleDescriptor, Stage.CollectConstraints) ) { setStageAs(context.moduleDescriptor, Stage.CollectConstraints) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt index 86df5ea7a..0954202c9 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt @@ -81,7 +81,8 @@ class KotlinResolutionContext( override fun Element.constraintsDSLElements(): List { val results = hashSetOf() val visitor = callExpressionRecursiveVisitor { - if (it.calleeExpression?.text == "pre" || + if ( + it.calleeExpression?.text == "pre" || it.calleeExpression?.text == "post" || it.calleeExpression?.text == "require" || it.calleeExpression?.text == "doNotLookAtArgumentsWhen" diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt index f037bd011..6e8b70adf 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt @@ -24,12 +24,14 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver class KotlinResolvedCall( val impl: org.jetbrains.kotlin.resolve.calls.model.ResolvedCall< - out org.jetbrains.kotlin.descriptors.CallableDescriptor> + out org.jetbrains.kotlin.descriptors.CallableDescriptor + > ) : ResolvedCall { fun impl(): org.jetbrains.kotlin.resolve.calls.model.ResolvedCall< - out org.jetbrains.kotlin.descriptors.CallableDescriptor> = impl + out org.jetbrains.kotlin.descriptors.CallableDescriptor + > = impl override val callElement: Element get() = impl().call.callElement.model() diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt index 454befb57..3e8661ba3 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt @@ -19,9 +19,8 @@ private fun A.repr(unit: @Suppress("UNCHECKED_CAST") fun A.repr(): B = this as B -fun < - A : org.jetbrains.kotlin.descriptors.DeclarationDescriptor, B : DeclarationDescriptor> A.model(): - B = +fun A + .model(): B = when (this) { is SimpleFunctionDescriptor -> KotlinSimpleFunctionDescriptor(this).repr() is TypeAliasConstructorDescriptor -> KotlinTypeAliasConstructorDescriptor(this).repr() @@ -61,7 +60,8 @@ fun A.model(): B = } is KtBinaryExpressionWithTypeRHS -> when (this.operationReference.getReferencedName()) { - "as", "as?" -> KotlinTypeCastExpression(this).repr() + "as", + "as?" -> KotlinTypeCastExpression(this).repr() else -> KotlinDefaultExpression(this).repr() } is KtNameReferenceExpression -> KotlinNameReferenceExpression(this).repr() diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt index 2f1432289..846ee2fd9 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt @@ -22,7 +22,7 @@ fun interface KotlinMemberScope : MemberScope { override fun getContributedDescriptors( filter: (name: String) -> Boolean ): List = - impl().getContributedDescriptors(DescriptorKindFilter.ALL) { filter(it.toString()) }.map { - it.model() - } + impl() + .getContributedDescriptors(DescriptorKindFilter.ALL) { filter(it.toString()) } + .map { it.model() } } diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt index b36d5fc55..8b8084ad5 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt @@ -15,9 +15,9 @@ class KotlinModuleDescriptor(val impl: org.jetbrains.kotlin.descriptors.ModuleDe impl().getPackage(org.jetbrains.kotlin.name.FqName(pck)).model() override fun getSubPackagesOf(fqName: FqName): List = - impl().getSubPackagesOf(org.jetbrains.kotlin.name.FqName(fqName.name)) { true }.map { - FqName(it.asString()) - } + impl() + .getSubPackagesOf(org.jetbrains.kotlin.name.FqName(fqName.name)) { true } + .map { FqName(it.asString()) } override val stableName: Name? get() = impl().stableName?.let { Name(it.asString()) } diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt index d3666199d..04b07d598 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt @@ -14,7 +14,10 @@ fun interface KotlinDeclaration : Declaration, KotlinExpression, KotlinModifierL get() = impl().name override val parents: List get() = - impl().parents.filter { it !is KtFile }.filterIsInstance().toList().map { - it.model() - } + impl() + .parents + .filter { it !is KtFile } + .filterIsInstance() + .toList() + .map { it.model() } } diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt index 426c18f60..982c7c2c7 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt @@ -34,7 +34,8 @@ import org.sosy_lab.java_smt.api.FormulaManager internal fun IrUtils.annotateWithConstraints(solverState: SolverState, fn: IrFunction) { if (!solverState.hadParseErrors()) { val model = - fn.toIrBasedDescriptor() + fn + .toIrBasedDescriptor() .model() val declarationConstraints = solverState.getConstraintsFor(model) if (declarationConstraints != null) { @@ -86,8 +87,7 @@ private fun getIrReturnedExpressionWithoutPostcondition(function: IrFunction): F is IrMemberAccessExpression<*> -> when (val symbol = veryLast.symbol) { is IrFunctionSymbol -> - symbol - .owner + symbol.owner .toIrBasedDescriptor() .model() else -> null @@ -179,8 +179,7 @@ private fun IrUtils.annotation( } private fun IrUtils.arrayOfStrings(values: List): IrVarargImpl? = - moduleFragment - .descriptor + moduleFragment.descriptor .getPackage(FqName("kotlin")) .memberScope .getContributedDescriptors { it.asString() == "arrayOf" } diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt index 346473045..52d26b168 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt @@ -32,7 +32,8 @@ fun hints(descriptor: ModuleDescriptor, packages: Set): String { | |@PackagesWithLaws([$packageList]) |class hints_$hintPackageName { } - |""".trimMargin() + |""".trimMargin( + ) } enum class HintState { diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar similarity index 100% rename from arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar rename to arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt index e04b791b7..8346064da 100644 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt @@ -92,8 +92,10 @@ object CharSequenceLaws { @Law inline fun CharSequence.indexOfLawChar(element: Char, startIndex: Int, ignoreCase: Boolean): Int = indexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { "bounds for indexOf" } + if (this.length <= 0) (it == -1) else (it >= -1) + }) { + "bounds for indexOf" + } @Law inline fun CharSequence.indexOfLawString( element: String, @@ -101,8 +103,10 @@ object CharSequenceLaws { ignoreCase: Boolean ): Int = indexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { "bounds for indexOf" } + if (this.length <= 0) (it == -1) else (it >= -1) + }) { + "bounds for indexOf" + } @Law inline fun CharSequence.lastIndexOfLawChar( element: Char, @@ -110,8 +114,10 @@ object CharSequenceLaws { ignoreCase: Boolean ): Int = lastIndexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { "bounds for lastIndexOf" } + if (this.length <= 0) (it == -1) else (it >= -1) + }) { + "bounds for lastIndexOf" + } @Law inline fun CharSequence.lastIndexOfLawString( element: String, @@ -119,8 +125,10 @@ object CharSequenceLaws { ignoreCase: Boolean ): Int = lastIndexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { "bounds for lastIndexOf" } + if (this.length <= 0) (it == -1) else (it >= -1) + }) { + "bounds for lastIndexOf" + } @Law inline fun CharSequence.indexOfFirstLaw(predicate: (x: Char) -> Boolean): Int = indexOfFirst(predicate).post({ if (this.length <= 0) (it == -1) else (it >= -1) }) { @@ -166,8 +174,10 @@ object CharSequenceLaws { inline fun CharSequence.dropLaw(n: Int): CharSequence { pre(n >= 0) { "n must be non-negative" } return drop(n).post({ - if (this.length <= n) (it.length == 0) else (it.length == this.length - n) - }) { "bounds for drop" } + if (this.length <= n) (it.length == 0) else (it.length == this.length - n) + }) { + "bounds for drop" + } } @Law inline fun CharSequence.takeLaw(n: Int): CharSequence { @@ -178,8 +188,10 @@ object CharSequenceLaws { inline fun CharSequence.dropLastLaw(n: Int): CharSequence { pre(n >= 0) { "n must be non-negative" } return dropLast(n).post({ - if (this.length <= n) (it.length == 0) else (it.length == this.length - n) - }) { "bounds for drop" } + if (this.length <= n) (it.length == 0) else (it.length == this.length - n) + }) { + "bounds for drop" + } } @Law inline fun CharSequence.takeLastLaw(n: Int): CharSequence { @@ -239,9 +251,11 @@ object StringLaws { @Law inline fun String.plusLaw(other: CharSequence?): String = plus(other).post({ - when { - other == null -> it.length == this.length - else -> it.length == this.length + other.length - } - }) { "concatenation adds lengths" } + when { + other == null -> it.length == this.length + else -> it.length == this.length + other.length + } + }) { + "concatenation adds lengths" + } } diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt index 0b327ba65..f59e7023f 100644 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt @@ -159,8 +159,10 @@ object CollectionLaws { inline fun Collection.zipWithNextLaw(transform: (a: T, b: T) -> V): List { doNotLookAtArgumentsWhen(size < 2) { "empty lists have no elements" } return zipWithNext(transform).post({ - if (this.size < 2) (it.size == 0) else (it.size == this.size - 1) - }) { "size bounded by the smallest" } + if (this.size < 2) (it.size == 0) else (it.size == this.size - 1) + }) { + "size bounded by the smallest" + } } // operations which remove things @@ -322,8 +324,10 @@ object CollectionLaws { inline fun Collection.flatMapLaw(transform: (A) -> Iterable): List { doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } return flatMap(transform).post({ - if (size <= 0) it.size == 0 else /* true means no info */ true - }) { "size of empty list" } + if (size <= 0) it.size == 0 else /* true means no info */ true + }) { + "size of empty list" + } } @Law inline fun Collection.flatMapIndexedLaw( @@ -331,8 +335,10 @@ object CollectionLaws { ): List { doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } return flatMapIndexed(transform).post({ - if (size <= 0) it.size == 0 else /* true means no info */ true - }) { "size of empty list" } + if (size <= 0) it.size == 0 else /* true means no info */ true + }) { + "size of empty list" + } } @Law inline fun Collection>.flattenLaw(): List = @@ -529,8 +535,10 @@ object ListLaws { inline fun List.dropLastLaw(n: Int): List { pre(n >= 0) { "n must be non-negative" } return dropLast(n).post({ - if (this.size <= n) (it.size == 0) else (it.size == this.size - n) - }) { "bounds for drop" } + if (this.size <= n) (it.size == 0) else (it.size == this.size - n) + }) { + "bounds for drop" + } } @Law inline fun List.takeLastLaw(n: Int): List { diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt index 61f987ff5..7d4fe1cb4 100644 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt +++ b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt @@ -65,7 +65,9 @@ object MathLaws { this > 0 -> it == 1 else -> it == -1 } - }) { "sign bounds + definition" } + }) { + "sign bounds + definition" + } @Law inline fun Long.signLaw(): Int = sign.post({ @@ -76,7 +78,9 @@ object MathLaws { this > 0L -> it == 1 else -> it == -1 } - }) { "sign bounds + definition" } + }) { + "sign bounds + definition" + } @Law inline fun Double.signLaw(): Double = sign.post({ @@ -87,7 +91,9 @@ object MathLaws { this > 0.0 -> it == 1.0 else -> it == -1.0 } - }) { "sign bounds + definition" } + }) { + "sign bounds + definition" + } @Law inline fun Float.signLaw(): Float = sign.post({ @@ -98,30 +104,36 @@ object MathLaws { this > 0.0F -> it == 1.0F else -> it == -1.0F } - }) { "sign bounds + definition" } + }) { + "sign bounds + definition" + } @Law inline fun signTopLevelLaw(x: Double): Double = sign(x).post({ - it >= -1.0 && - it <= 1.0 && - when { - x == 0.0 -> it == 0.0 - x > 0.0 -> it == 1.0 - else -> it == -1.0 - } - }) { "sign bounds + definition" } + it >= -1.0 && + it <= 1.0 && + when { + x == 0.0 -> it == 0.0 + x > 0.0 -> it == 1.0 + else -> it == -1.0 + } + }) { + "sign bounds + definition" + } @Law inline fun signTopLevelLaw(x: Float): Float = sign(x).post({ - it >= -1.0F && - it <= 1.0F && - when { - x == 0.0F -> it == 0.0F - x > 0.0F -> it == 1.0F - else -> it == -1.0F - } - }) { "sign bounds + definition" } + it >= -1.0F && + it <= 1.0F && + when { + x == 0.0F -> it == 0.0F + x > 0.0F -> it == 1.0F + else -> it == -1.0F + } + }) { + "sign bounds + definition" + } @Law inline fun maxLaw(a: Int, b: Int): Int = From 61b3bd62baa86d45e292a0ced209a292cf5f72d6 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Date: Sun, 30 Apr 2023 10:19:21 +0200 Subject: [PATCH 09/12] Update Kotlin and Arrow versions (#60) Co-authored-by: Simon Vergauwen --- .../analysis/analysis/common/build.gradle.kts | 3 ++ .../analysis/solver/check/EntryPoint.kt | 2 +- .../solver/collect/FromAnnotations.kt | 4 +- .../phases/analysis/solver/errors/ErrorIds.kt | 48 +++++++++---------- .../analysis/solver/errors/ErrorMessages.kt | 48 ++++++++----------- .../analysis/example/build.gradle.kts | 5 ++ .../java-gradle-plugin/build.gradle.kts | 7 +++ .../analysis/java-plugin/build.gradle.kts | 3 ++ .../kotlin-gradle-plugin/build.gradle.kts | 7 +++ .../analysis/kotlin-plugin/build.gradle.kts | 3 ++ .../meta/plugins/analysis/phases/ir/Hints.kt | 4 +- .../analysis/analysis/laws/build.gradle.kts | 4 ++ .../analysis/analysis/types/build.gradle.kts | 4 ++ 13 files changed, 85 insertions(+), 57 deletions(-) diff --git a/arrow-libs/analysis/analysis/common/build.gradle.kts b/arrow-libs/analysis/analysis/common/build.gradle.kts index d85ec320f..dbaf91f03 100644 --- a/arrow-libs/analysis/analysis/common/build.gradle.kts +++ b/arrow-libs/analysis/analysis/common/build.gradle.kts @@ -10,6 +10,9 @@ plugins { kotlin { explicitApi = null + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) + } } dependencies { diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt index a6e2e0c05..6aad5f6bf 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt @@ -143,7 +143,7 @@ public fun SolverState.checkDeclarationConstraints( /** * Only elements which are not * - inside another "callable declaration" (function, property, etc.) (b/c this is not yet - * supported) + * supported) * - or constructors (b/c they are handled at the level of class) */ private fun Declaration.shouldBeAnalyzed() = !(this.parents.any { it is CallableDeclaration }) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt index 3bbc62763..3015220e7 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt @@ -143,8 +143,8 @@ internal fun SolverState.parseFormula( """ (declare-fun this () $VALUE_TYPE) (declare-fun $RESULT_VAR_NAME () $VALUE_TYPE) - """.trimIndent( - ) + """ + .trimIndent() val fullString = "$params\n$deps\n$rest\n(assert $formula)" return solver.parse(fullString) } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt index cf59800bd..f9501eeaa 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt @@ -44,8 +44,8 @@ sealed interface ErrorIds { The compiler won't catch these errors in its own analysis phase (like it would do with a type error), since this is perfectly good code. However, it seems desirable for the programmer to know that a particular language feature cannot be used in these blocks. - """.trimIndent( - ) + """ + .trimIndent() } enum class Laws : ErrorIds { @@ -64,8 +64,8 @@ sealed interface ErrorIds { - It must call **exactly one** function at the end, - The call must use the parameters **in order**. - """.trimIndent( - ) + """ + .trimIndent() } enum class Unsupported : ErrorIds { @@ -92,8 +92,8 @@ sealed interface ErrorIds { ```kotlin val wrong = 1 / 0 // does not satisfy '0 != 0' in Int.div law ``` - """.trimIndent( - ) + """ + .trimIndent() }, UnsatBodyPost { override val shortDescription: String @@ -113,8 +113,8 @@ sealed interface ErrorIds { // does not satisfy 'x + x > 1' } ``` - """.trimIndent( - ) + """ + .trimIndent() }, UnsatInvariants { override val shortDescription: String @@ -133,8 +133,8 @@ sealed interface ErrorIds { ... } ``` - """.trimIndent( - ) + """ + .trimIndent() } } @@ -154,8 +154,8 @@ sealed interface ErrorIds { ... } ``` - """.trimIndent( - ) + """ + .trimIndent() }, InconsistentDefaultValues { override val fullDescription: String @@ -170,8 +170,8 @@ sealed interface ErrorIds { ... } ``` - """.trimIndent( - ) + """ + .trimIndent() }, InconsistentConditions { override val fullDescription: String @@ -192,8 +192,8 @@ sealed interface ErrorIds { } } ``` - """.trimIndent( - ) + """ + .trimIndent() override val level: SeverityLevel get() = SeverityLevel.Warning @@ -205,8 +205,8 @@ sealed interface ErrorIds { The post-conditions gathered after calling a function imply that this function could not be called at all. _This is really uncommon in practice_. - """.trimIndent( - ) + """ + .trimIndent() override val level: SeverityLevel get() = SeverityLevel.Warning @@ -225,8 +225,8 @@ sealed interface ErrorIds { } ``` - """.trimIndent( - ) + """ + .trimIndent() }; override val shortDescription: String @@ -245,8 +245,8 @@ sealed interface ErrorIds { the one declared in its parent. This guarantees that we can always replace a call to the parent with a call to the child (Liskov Substitution Principle). - """.trimIndent( - ) + """ + .trimIndent() }, NotStrongerPostcondition { override val shortDescription: String @@ -259,8 +259,8 @@ sealed interface ErrorIds { the one declared in its parent. This guarantees that we can always replace a call to the parent with a call to the child (Liskov Substitution Principle). - """.trimIndent( - ) + """ + .trimIndent() } } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt index a443cc3bd..7ee25be09 100644 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt +++ b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt @@ -31,6 +31,7 @@ import org.sosy_lab.java_smt.api.Model * // c -> h() * // d -> f(g(2), h()) * ``` + * * We can leverage this information to write better error messages. If we have a constraint which * states b > 0, we can replace it with g(2) > 0. */ @@ -41,7 +42,6 @@ object ErrorMessages { * SMT formulae. * * For example, we cannot translate method calls to SMT: - * * ```kotlin * fun f(xs: List[String]): String { * pre({ !xs.get(0).isEmpty() }) { ... } @@ -95,14 +95,13 @@ object ErrorMessages { * * See [arrow.meta.plugins.analysis.phases.analysis.solver.checkImplicationOf] for the code which * produces the errors. - * * - The _one_ constraint name and Boolean formula which could not be satisfied. * - A _counter-example_ (also called a _model_), which is an assignment of values to - * variableswhich show a specific instance in which the constraint is false. + * variableswhich show a specific instance in which the constraint is false. * - In the `f` function above in the `UnsatBodyPost` epigraph, one such counter-example is `x == - * 0`, since in that case `0 + 0 > 1` is false. + * 0`, since in that case `0 + 0 > 1` is false. * - By looking at the values of the model for the arguments, we can derive one specific trace for - * which the function fails. + * which the function fails. */ object Unsatisfiability { @@ -111,7 +110,6 @@ object ErrorMessages { * property, function) call are not satisfied. * * For example: - * * ```kotlin * val wrong = 1 / 0 // does not satisfy '0 != 0' in Int.div law * ``` @@ -126,8 +124,8 @@ object ErrorMessages { | -> unsatisfiable constraint: `${callPreCondition.formula.dumpKotlinLike()}` | -> ${template(callPreCondition, this)} | -> ${branch(branch)} - """.trimMargin( - ) + """ + .trimMargin() /** * (attached to the return value) @@ -135,7 +133,6 @@ object ErrorMessages { * the post-condition declared in a function body is not true. * * For example: - * * ```kotlin * fun f(x: Int): Int { * pre(x >= 0) { "non-negative" } @@ -152,15 +149,14 @@ object ErrorMessages { ): String = """|declaration `${declaration.name}` fails to satisfy the post-condition: ${postCondition.formula.dumpKotlinLike()} | -> ${branch(branch)} - """.trimMargin( - ) + """ + .trimMargin() /** * (attached to the new value): the invariant declared for a mutable variable is not satisfied * by the new value. * * For example: - * * ```kotlin * fun g(): Int { * var r = 1.invariant({ it > 0 }) { "it > 0" } @@ -179,8 +175,8 @@ object ErrorMessages { """|invariants are not satisfied in `${expression.text}` | -> unsatisfiable constraint: `${constraint.formula.dumpKotlinLike()}` | -> ${branch(branch)} - """.trimMargin( - ) + """ + .trimMargin() } /** @@ -205,7 +201,6 @@ object ErrorMessages { * The set of pre-conditions given to the function leaves no possible way to call the function. * * For example: - * * ```kotlin * fun h(x: Int): Int { * pre({ x > 0 }) { "greater than 0" } @@ -226,7 +221,6 @@ object ErrorMessages { * The default values do not satisfy the pre-conditions. * * For example: - * * ```kotlin * fun h(x: Int = 0): Int { * pre({ x > 0 }) { "greater than 0" } @@ -245,7 +239,6 @@ object ErrorMessages { * condition it hangs upon conflicts with the rest of the information about the function. * * For example, if a condition goes against a pre-condition: - * * ```kotlin * fun i(x: Int): Int { * pre({ x > 0 }) { "greater than 0" } @@ -265,8 +258,8 @@ object ErrorMessages { ): String = """|unreachable code due to conflicting conditions: ${unsatCore.dumpKotlinLike()} | -> ${branch(branch)} - """.trimMargin( - ) + """ + .trimMargin() /** * (attached to the function call): the post-conditions gathered after calling a function imply @@ -278,15 +271,14 @@ object ErrorMessages { ): String = """|unreachable code due to post-conditions: ${unsatCore.dumpKotlinLike()} | -> ${branch(branch)} - """.trimMargin( - ) + """ + .trimMargin() /** * (attached to a local declaration): there is no way in which the invariant attached to a * declaration may be satisfied. * * For example: - * * ```kotlin * fun j(x: Int): Int { * pre({ x > 0 }) { "greater than 0" } @@ -301,22 +293,22 @@ object ErrorMessages { ): String = """|invariants are inconsistent: ${it.dumpKotlinLike()} | -> ${branch(branch)} - """.trimMargin( - ) + """ + .trimMargin() } object Liskov { internal fun KotlinPrinter.notWeakerPrecondition(constraint: NamedConstraint): String = """|pre-condition `${constraint.msg}` is not weaker than those from overridden members | -> problematic constraint: `${constraint.formula.dumpKotlinLike()}` - """.trimMargin( - ) + """ + .trimMargin() internal fun KotlinPrinter.notStrongerPostcondition(constraint: NamedConstraint): String = """|post-condition `${constraint.msg}` from overridden member is not satisfied | -> problematic constraint: `${constraint.formula.dumpKotlinLike()}` - """.trimMargin( - ) + """ + .trimMargin() } object Exception { diff --git a/arrow-libs/analysis/analysis/example/build.gradle.kts b/arrow-libs/analysis/analysis/example/build.gradle.kts index 61a6624ca..4d9b402e1 100644 --- a/arrow-libs/analysis/analysis/example/build.gradle.kts +++ b/arrow-libs/analysis/analysis/example/build.gradle.kts @@ -4,12 +4,17 @@ plugins { id(libs.plugins.kotlin.multiplatform.get().pluginId) alias(libs.plugins.arrowGradleConfig.kotlin) alias(libs.plugins.arrowGradleConfig.formatter) + alias(libs.plugins.arrowGradleConfig.versioning) } kotlin { explicitApi = null + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) + } + sourceSets { commonMain { dependencies { diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts index fa84d345c..b6726ad7e 100644 --- a/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts @@ -16,6 +16,13 @@ tasks.processResources { } } +kotlin { + explicitApi = null + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) + } +} + dependencies { api(libs.arrowGradlePluginCommons) runtimeOnly(libs.classgraph) diff --git a/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts index 7db842494..41e8bcfa1 100644 --- a/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts @@ -9,6 +9,9 @@ plugins { kotlin { explicitApi = null + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) + } } dependencies { diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts index 5db746687..c2151c827 100644 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts @@ -16,6 +16,13 @@ tasks.processResources { } } +kotlin { + explicitApi = null + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) + } +} + dependencies { api(libs.arrowGradlePluginCommons) runtimeOnly(libs.classgraph) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts index a2ea89e43..c99d8858d 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts +++ b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts @@ -10,6 +10,9 @@ plugins { kotlin { explicitApi = null + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) + } } dependencies { diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt index 52d26b168..0c2e0e514 100644 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt +++ b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt @@ -32,8 +32,8 @@ fun hints(descriptor: ModuleDescriptor, packages: Set): String { | |@PackagesWithLaws([$packageList]) |class hints_$hintPackageName { } - |""".trimMargin( - ) + |""" + .trimMargin() } enum class HintState { diff --git a/arrow-libs/analysis/analysis/laws/build.gradle.kts b/arrow-libs/analysis/analysis/laws/build.gradle.kts index 99abad769..8c1875eea 100644 --- a/arrow-libs/analysis/analysis/laws/build.gradle.kts +++ b/arrow-libs/analysis/analysis/laws/build.gradle.kts @@ -12,6 +12,10 @@ plugins { kotlin { explicitApi = null + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) + } + sourceSets { commonMain { dependencies { diff --git a/arrow-libs/analysis/analysis/types/build.gradle.kts b/arrow-libs/analysis/analysis/types/build.gradle.kts index 4a0a1e622..46fc442f1 100644 --- a/arrow-libs/analysis/analysis/types/build.gradle.kts +++ b/arrow-libs/analysis/analysis/types/build.gradle.kts @@ -11,6 +11,10 @@ plugins { kotlin { explicitApi = null + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) + } + sourceSets { commonMain { dependencies { From 78387a85fd3aa0944b1fa4355429f5e68ee0f6e0 Mon Sep 17 00:00:00 2001 From: raulraja Date: Sun, 2 Feb 2025 01:12:21 +0100 Subject: [PATCH 10/12] Update to latest kotlin version --- .../common/api/arrow-analysis-common.api | 2065 ---------- .../analysis/analysis/common/build.gradle.kts | 26 - .../analysis/common/gradle.properties | 6 - .../arrow/meta/continuations/ContSeq.kt | 292 -- .../phases/analysis/solver/Constants.kt | 4 - .../analysis/solver/DeclarationUtils.kt | 95 - .../phases/analysis/solver/DescriptorUtils.kt | 222 - .../phases/analysis/solver/Primitive.kt | 200 - .../analysis/solver/ResolvedCallUtils.kt | 175 - .../solver/ast/context/ResolutionContext.kt | 27 - .../solver/ast/context/ResolvedCall.kt | 21 - .../ast/context/descriptors/AnalysisResult.kt | 7 - .../ast/context/descriptors/Annotated.kt | 25 - .../descriptors/AnnotationDescriptor.kt | 16 - .../ast/context/descriptors/Annotations.kt | 16 - .../context/descriptors/CallableDescriptor.kt | 13 - .../descriptors/CallableMemberDescriptor.kt | 12 - .../context/descriptors/ClassDescriptor.kt | 38 - .../descriptors/ClassifierDescriptor.kt | 8 - .../ClassifierDescriptorWithTypeParameters.kt | 8 - .../descriptors/ConstructorDescriptor.kt | 6 - .../descriptors/DeclarationDescriptor.kt | 12 - .../DeclarationDescriptorWithVisibility.kt | 5 - .../descriptors/DefaultValueArgument.kt | 7 - .../descriptors/ExpressionValueArgument.kt | 7 - .../context/descriptors/FieldDescriptor.kt | 5 - .../context/descriptors/FunctionDescriptor.kt | 25 - .../descriptors/LocalVariableDescriptor.kt | 3 - .../context/descriptors/MemberDescriptor.kt | 9 - .../ast/context/descriptors/MemberScope.kt | 23 - .../ast/context/descriptors/Modality.kt | 8 - .../context/descriptors/ModuleDescriptor.kt | 10 - .../solver/ast/context/descriptors/Named.kt | 7 - .../descriptors/PackageFragmentDescriptor.kt | 3 - .../descriptors/PackageViewDescriptor.kt | 8 - .../descriptors/ParameterDescriptor.kt | 3 - .../descriptors/PropertyAccessorDescriptor.kt | 5 - .../context/descriptors/PropertyDescriptor.kt | 8 - .../ReceiverParameterDescriptor.kt | 5 - .../ast/context/descriptors/ReceiverValue.kt | 8 - .../descriptors/ResolvedValueArgument.kt | 7 - .../descriptors/SimpleFunctionDescriptor.kt | 3 - .../TypeAliasConstructorDescriptor.kt | 6 - .../descriptors/TypeAliasDescriptor.kt | 14 - .../context/descriptors/TypeConstructor.kt | 11 - .../descriptors/TypeParameterDescriptor.kt | 13 - .../context/descriptors/ValueDescriptor.kt | 7 - .../descriptors/ValueParameterDescriptor.kt | 13 - .../descriptors/VariableAccessorDescriptor.kt | 5 - .../context/descriptors/VariableDescriptor.kt | 7 - .../VariableDescriptorWithAccessors.kt | 9 - .../ast/context/descriptors/Visibility.kt | 6 - .../solver/ast/context/elements/Annotated.kt | 6 - .../context/elements/AnnotatedExpression.kt | 5 - .../solver/ast/context/elements/Annotation.kt | 6 - .../ast/context/elements/AnnotationEntry.kt | 7 - .../elements/AnnotationUseSiteTarget.kt | 13 - .../context/elements/AnnotationsContainer.kt | 3 - .../context/elements/AnonymousInitializer.kt | 6 - .../context/elements/ArrayAccessExpression.kt | 6 - .../ast/context/elements/AssertExpression.kt | 13 - .../context/elements/AssignmentExpression.kt | 11 - .../ast/context/elements/BinaryExpression.kt | 11 - .../ast/context/elements/BlockExpression.kt | 7 - .../ast/context/elements/BreakExpression.kt | 3 - .../ast/context/elements/CallElement.kt | 8 - .../ast/context/elements/CallExpression.kt | 3 - .../context/elements/CallableDeclaration.kt | 8 - .../elements/CallableReferenceExpression.kt | 5 - .../ast/context/elements/CatchClause.kt | 7 - .../solver/ast/context/elements/Class.kt | 12 - .../solver/ast/context/elements/ClassBody.kt | 9 - .../ast/context/elements/ClassInitializer.kt | 3 - .../elements/ClassLiteralExpression.kt | 3 - .../ast/context/elements/ClassOrObject.kt | 8 - .../elements/CompilerMessageSourceLocation.kt | 10 - .../context/elements/ConstantExpression.kt | 3 - .../ast/context/elements/Constructor.kt | 5 - .../elements/ConstructorCalleeExpression.kt | 6 - .../elements/ConstructorDelegationCall.kt | 6 - ...onstructorDelegationReferenceExpression.kt | 5 - .../context/elements/ContinueExpression.kt | 3 - .../ast/context/elements/Declaration.kt | 6 - .../context/elements/DeclarationContainer.kt | 5 - .../context/elements/DeclarationWithBody.kt | 12 - .../elements/DeclarationWithInitializer.kt | 6 - .../elements/DelegatedSuperTypeEntry.kt | 5 - .../elements/DestructuringDeclaration.kt | 6 - .../elements/DestructuringDeclarationEntry.kt | 3 - .../ast/context/elements/DoWhileExpression.kt | 3 - .../elements/DotQualifiedExpression.kt | 3 - .../context/elements/DoubleColonExpression.kt | 7 - .../solver/ast/context/elements/Element.kt | 14 - .../solver/ast/context/elements/EnumEntry.kt | 5 - .../solver/ast/context/elements/Expression.kt | 9 - .../elements/ExpressionLambdaArgument.kt | 3 - .../ExpressionResolvedValueArgument.kt | 6 - .../elements/ExpressionValueArgumentName.kt | 3 - .../context/elements/ExpressionWithLabel.kt | 7 - .../ast/context/elements/FinallySection.kt | 5 - .../ast/context/elements/ForExpression.kt | 7 - .../solver/ast/context/elements/FqName.kt | 5 - .../solver/ast/context/elements/Function.kt | 5 - .../ast/context/elements/FunctionLiteral.kt | 6 - .../ast/context/elements/IfExpression.kt | 7 - .../ast/context/elements/InitializerList.kt | 5 - .../elements/InstanceExpressionWithLabel.kt | 5 - .../ast/context/elements/IsExpression.kt | 8 - .../elements/LabelReferenceExpression.kt | 3 - .../ast/context/elements/LabeledExpression.kt | 5 - .../ast/context/elements/LambdaArgument.kt | 5 - .../ast/context/elements/LambdaExpression.kt | 8 - .../ast/context/elements/LoopExpression.kt | 5 - .../ast/context/elements/ModifierList.kt | 6 - .../ast/context/elements/ModifierListOwner.kt | 5 - .../solver/ast/context/elements/Name.kt | 5 - .../elements/NameReferenceExpression.kt | 3 - .../solver/ast/context/elements/Named.kt | 5 - .../ast/context/elements/NamedDeclaration.kt | 6 - .../ast/context/elements/NamedFunction.kt | 3 - .../ast/context/elements/NullExpression.kt | 3 - .../ast/context/elements/ObjectDeclaration.kt | 6 - .../elements/ObjectLiteralExpression.kt | 5 - .../context/elements/OperationExpression.kt | 5 - .../elements/OperationReferenceExpression.kt | 5 - .../solver/ast/context/elements/Parameter.kt | 13 - .../ast/context/elements/ParameterList.kt | 6 - .../elements/ParenthesizedExpression.kt | 5 - .../ast/context/elements/PostfixExpression.kt | 5 - .../ast/context/elements/PrefixExpression.kt | 3 - .../context/elements/PrimaryConstructor.kt | 3 - .../ast/context/elements/ProjectionKind.kt | 8 - .../solver/ast/context/elements/Property.kt | 17 - .../ast/context/elements/PropertyAccessor.kt | 10 - .../ast/context/elements/PropertyDelegate.kt | 5 - .../ast/context/elements/PureClassOrObject.kt | 19 - .../ast/context/elements/PureElement.kt | 5 - .../context/elements/QualifiedExpression.kt | 6 - .../context/elements/ReferenceExpression.kt | 3 - .../ast/context/elements/ReturnExpression.kt | 6 - .../elements/SafeQualifiedExpression.kt | 3 - .../context/elements/SecondaryConstructor.kt | 5 - .../solver/ast/context/elements/SelfType.kt | 5 - .../context/elements/SimpleNameExpression.kt | 6 - .../elements/StringTemplateExpression.kt | 11 - .../ast/context/elements/SuperExpression.kt | 5 - .../context/elements/SuperTypeCallEntry.kt | 3 - .../ast/context/elements/SuperTypeEntry.kt | 3 - .../ast/context/elements/SuperTypeList.kt | 5 - .../context/elements/SuperTypeListEntry.kt | 5 - .../elements/SynchronizedExpression.kt | 6 - .../ast/context/elements/ThisExpression.kt | 3 - .../elements/ThreePieceForExpression.kt | 7 - .../ast/context/elements/ThrowExpression.kt | 5 - .../ast/context/elements/TryExpression.kt | 7 - .../solver/ast/context/elements/TypeAlias.kt | 6 - .../ast/context/elements/TypeArgumentList.kt | 5 - .../context/elements/TypeCastExpression.kt | 15 - .../ast/context/elements/TypeConstraint.kt | 6 - .../context/elements/TypeConstraintList.kt | 5 - .../ast/context/elements/TypeElement.kt | 5 - .../ast/context/elements/TypeParameter.kt | 8 - .../ast/context/elements/TypeParameterList.kt | 5 - .../elements/TypeParameterListOwner.kt | 8 - .../ast/context/elements/TypeProjection.kt | 6 - .../ast/context/elements/TypeReference.kt | 5 - .../ast/context/elements/UnaryExpression.kt | 6 - .../ast/context/elements/ValueArgument.kt | 7 - .../ast/context/elements/ValueArgumentList.kt | 5 - .../ast/context/elements/ValueArgumentName.kt | 6 - .../context/elements/VariableDeclaration.kt | 5 - .../ast/context/elements/WhenCondition.kt | 3 - .../context/elements/WhenConditionInRange.kt | 7 - .../elements/WhenConditionIsPattern.kt | 6 - .../elements/WhenConditionWithExpression.kt | 5 - .../solver/ast/context/elements/WhenEntry.kt | 7 - .../ast/context/elements/WhenExpression.kt | 8 - .../ast/context/elements/WhileExpression.kt | 3 - .../context/elements/WhileExpressionBase.kt | 5 - .../analysis/solver/ast/context/types/Type.kt | 40 - .../ast/context/types/TypeProjection.kt | 7 - .../solver/ast/context/types/Types.kt | 5 - .../solver/ast/context/types/Variance.kt | 7 - .../analysis/solver/check/Declarations.kt | 396 -- .../analysis/solver/check/EntryPoint.kt | 155 - .../analysis/solver/check/Expressions.kt | 1988 --------- .../analysis/solver/check/Parameters.kt | 48 - .../analysis/solver/check/model/CheckData.kt | 35 - .../analysis/solver/check/model/Condition.kt | 56 - .../solver/check/model/ControlFlowFn.kt | 23 - .../solver/check/model/CurrentBranch.kt | 18 - .../solver/check/model/CurrentVarInfo.kt | 24 - .../analysis/solver/check/model/LoopPlace.kt | 6 - .../analysis/solver/check/model/Return.kt | 24 - .../solver/check/model/ReturnPoints.kt | 38 - .../analysis/solver/check/model/StateAfter.kt | 23 - .../analysis/solver/check/model/VarInfo.kt | 36 - .../solver/collect/ExpressionToFormula.kt | 238 -- .../analysis/solver/collect/FindDescriptor.kt | 204 - .../solver/collect/FromAnnotations.kt | 150 - .../phases/analysis/solver/collect/FromDSL.kt | 290 -- .../collect/model/DeclarationConstraints.kt | 10 - .../solver/collect/model/NamedConstraint.kt | 5 - .../phases/analysis/solver/errors/ErrorIds.kt | 274 -- .../analysis/solver/errors/ErrorMessages.kt | 347 -- .../solver/search/ConstraintSearch.kt | 259 -- .../solver/state/SolverInteraction.kt | 272 -- .../analysis/solver/state/SolverState.kt | 143 - .../plugins/analysis/sarif/ReportedError.kt | 12 - .../plugins/analysis/sarif/SarifReporter.kt | 121 - .../meta/plugins/analysis/smt/Booleans.kt | 106 - .../plugins/analysis/smt/FormulaExtensions.kt | 161 - .../arrow/meta/plugins/analysis/smt/Ints.kt | 77 - .../meta/plugins/analysis/smt/Rationals.kt | 81 - .../arrow/meta/plugins/analysis/smt/Solver.kt | 186 - .../analysis/smt/utils/FieldProvider.kt | 74 - .../analysis/smt/utils/FormulaToKotlin.kt | 164 - .../analysis/smt/utils/NameProvider.kt | 29 - .../meta/plugins/analysis/types/Literals.kt | 24 - .../plugins/analysis/types/PrimitiveType.kt | 35 - .../analysis/example/build.gradle.kts | 58 - .../analysis/example/gradle.properties | 6 - .../kotlin/arrow/analysis/BadExample.kt | 89 - .../analysis/java-example/build.gradle.kts | 36 - .../analysis/java-example/gradle.properties | 6 - .../java-example/src/main/java/Example.java | 9 - .../api/arrow-analysis-java-gradle-plugin.api | 6 - .../java-gradle-plugin/build.gradle.kts | 54 - .../java-gradle-plugin/gradle.properties | 6 - .../plugin/gradle/AnalysisJavaGradlePlugin.kt | 34 - .../io.arrow-kt.analysis.java.properties | 1 - .../plugin/gradle/analysis.plugin.properties | 1 - .../api/arrow-analysis-java-plugin.api | 1177 ------ .../analysis/java-plugin/build.gradle.kts | 33 - .../analysis/java-plugin/gradle.properties | 6 - .../plugins/analysis/java/AnalysisContext.kt | 56 - .../analysis/java/AnalysisJavaPlugin.kt | 234 -- .../analysis/java/AnalysisJavaProcessor.kt | 52 - .../plugins/analysis/java/AnalysisMessages.kt | 50 - .../meta/plugins/analysis/java/Resolver.kt | 50 - .../plugins/analysis/java/TaskListener.kt | 45 - .../analysis/java/ast/AnnotationUtils.kt | 113 - .../analysis/java/ast/JavaInterpreter.kt | 245 -- .../java/ast/JavaResolutionContext.kt | 177 - .../descriptors/JavaAnnotationDescriptor.kt | 41 - .../java/ast/descriptors/JavaAnnotations.kt | 22 - .../ast/descriptors/JavaClassDescriptor.kt | 76 - .../descriptors/JavaConstructorDescriptor.kt | 24 - .../java/ast/descriptors/JavaDescriptor.kt | 31 - .../ast/descriptors/JavaDescriptorUtils.kt | 54 - .../descriptors/JavaEnumConstantDescriptor.kt | 70 - .../ast/descriptors/JavaFieldDescriptor.kt | 64 - .../ast/descriptors/JavaFunctionDescriptor.kt | 70 - .../JavaLocalVariableDescriptor.kt | 15 - .../ast/descriptors/JavaMemberDescriptor.kt | 36 - .../java/ast/descriptors/JavaMemberScope.kt | 31 - .../ast/descriptors/JavaModuleDescriptor.kt | 29 - .../ast/descriptors/JavaPackageDescriptor.kt | 20 - .../descriptors/JavaParameterDescriptor.kt | 27 - .../JavaReceiverParameterDescriptor.kt | 57 - .../JavaSimpleFunctionDescriptor.kt | 15 - .../JavaTypeParameterDescriptor.kt | 32 - .../ast/descriptors/JavaValueDescriptor.kt | 35 - .../ast/descriptors/JavaVariableDescriptor.kt | 22 - .../analysis/java/ast/elements/JavaAsIs.kt | 43 - .../analysis/java/ast/elements/JavaAssert.kt | 138 - .../java/ast/elements/JavaAssignment.kt | 84 - .../analysis/java/ast/elements/JavaBlock.kt | 33 - .../analysis/java/ast/elements/JavaCall.kt | 123 - .../analysis/java/ast/elements/JavaClass.kt | 111 - .../java/ast/elements/JavaConditional.kt | 62 - .../java/ast/elements/JavaControlStatement.kt | 44 - .../analysis/java/ast/elements/JavaElement.kt | 63 - .../java/ast/elements/JavaElementUtils.kt | 46 - .../java/ast/elements/JavaException.kt | 54 - .../java/ast/elements/JavaFakeReference.kt | 32 - .../java/ast/elements/JavaIdentifier.kt | 45 - .../analysis/java/ast/elements/JavaLabeled.kt | 23 - .../analysis/java/ast/elements/JavaLambda.kt | 86 - .../analysis/java/ast/elements/JavaLiteral.kt | 22 - .../analysis/java/ast/elements/JavaLoop.kt | 59 - .../java/ast/elements/JavaMemberReference.kt | 23 - .../analysis/java/ast/elements/JavaMethod.kt | 102 - .../ast/elements/JavaParameterOrVariable.kt | 80 - .../java/ast/elements/JavaParenthesized.kt | 17 - .../java/ast/elements/JavaResolvedCall.kt | 117 - .../ast/elements/JavaResolvedValueArgument.kt | 54 - .../java/ast/elements/JavaSourceLocation.kt | 33 - .../java/ast/elements/JavaSynchronized.kt | 20 - .../java/ast/elements/JavaTreeUtils.kt | 436 -- .../java/ast/elements/JavaTypeElements.kt | 49 - .../java/ast/elements/JavaTypeParameter.kt | 19 - .../java/ast/elements/JavaTypeProjection.kt | 22 - .../analysis/java/ast/types/JavaType.kt | 69 - .../java/ast/types/JavaTypeConstructor.kt | 29 - .../ast/types/JavaTypeParameterConstructor.kt | 26 - .../java/ast/types/JavaTypeProjection.kt | 24 - .../analysis/java/ast/types/JavaTypeUtils.kt | 14 - .../services/com.sun.source.util.Plugin | 1 - .../javax.annotation.processing.Processor | 1 - .../plugins/analysis/java/AnalysisTests.kt | 307 -- .../arrow/meta/plugins/analysis/java/Utils.kt | 46 - .../arrow-analysis-kotlin-gradle-plugin.api | 17 - .../kotlin-gradle-plugin/build.gradle.kts | 50 - .../kotlin-gradle-plugin/gradle.properties | 6 - .../plugin/gradle/AnalysisGradlePlugin.kt | 32 - .../io.arrow-kt.analysis.kotlin.properties | 1 - .../plugin/gradle/analysis.plugin.properties | 1 - .../api/arrow-analysis-kotlin-plugin.api | 3662 ----------------- .../analysis/kotlin-plugin/build.gradle.kts | 36 - .../analysis/kotlin-plugin/gradle.properties | 6 - .../errors/MetaDefaultErrorMessagesJvm.java | 35 - .../plugins/analysis/errors/MetaErrors.java | 35 - .../plugins/analysis/errors/RenderString.java | 16 - .../main/kotlin/arrow/meta/AnalysisPlugin.kt | 11 - .../meta/plugins/analysis/phases/Phases.kt | 242 -- .../ast/kotlin/KotlinResolutionContext.kt | 215 - .../solver/ast/kotlin/KotlinResolvedCall.kt | 81 - .../ast/kotlin/ast/KotlinInterpreter.kt | 152 - .../ast/kotlin/descriptors/KotlinAnnotated.kt | 9 - .../descriptors/KotlinAnnotationDescriptor.kt | 35 - .../kotlin/descriptors/KotlinAnnotations.kt | 23 - .../descriptors/KotlinCallableDescriptor.kt | 49 - .../KotlinCallableMemberDescriptor.kt | 40 - .../descriptors/KotlinClassDescriptor.kt | 65 - .../descriptors/KotlinClassifierDescriptor.kt | 15 - ...nClassifierDescriptorWithTypeParameters.kt | 24 - .../KotlinConstructorDescriptor.kt | 17 - .../KotlinDeclarationDescriptor.kt | 38 - ...tlinDeclarationDescriptorWithVisibility.kt | 17 - .../descriptors/KotlinDefaultValueArgument.kt | 27 - .../KotlinExpressionValueArgument.kt | 33 - .../descriptors/KotlinFieldDescriptor.kt | 12 - .../descriptors/KotlinFunctionDescriptor.kt | 34 - .../KotlinLocalVariableDescriptor.kt | 9 - .../descriptors/KotlinMemberDescriptor.kt | 35 - .../kotlin/descriptors/KotlinMemberScope.kt | 28 - .../descriptors/KotlinModuleDescriptor.kt | 24 - .../ast/kotlin/descriptors/KotlinNamed.kt | 10 - .../KotlinPackageFragmentDescriptor.kt | 10 - .../KotlinPackageViewDescriptor.kt | 18 - .../descriptors/KotlinParameterDescriptor.kt | 7 - .../KotlinPropertyAccessorDescriptor.kt | 15 - .../descriptors/KotlinPropertyDescriptor.kt | 21 - .../KotlinReceiverParameterDescriptor.kt | 14 - .../kotlin/descriptors/KotlinReceiverValue.kt | 15 - .../KotlinResolvedValueArgument.kt | 12 - .../KotlinSimpleFunctionDescriptor.kt | 31 - .../KotlinTypeAliasConstructorDescriptor.kt | 17 - .../descriptors/KotlinTypeAliasDescriptor.kt | 21 - .../descriptors/KotlinTypeConstructor.kt | 24 - .../KotlinTypeParameterDescriptor.kt | 30 - .../kotlin/descriptors/KotlinValueArgument.kt | 26 - .../descriptors/KotlinValueDescriptor.kt | 11 - .../KotlinValueParameterDescriptor.kt | 27 - .../KotlinVariableAccessorDescriptor.kt | 13 - .../descriptors/KotlinVariableDescriptor.kt | 20 - .../KotlinVariableDescriptorWithAccessors.kt | 18 - .../kotlin/descriptors/KotlinVisibility.kt | 11 - .../ast/kotlin/elements/KotlinAnnotated.kt | 16 - .../elements/KotlinAnnotatedExpression.kt | 14 - .../ast/kotlin/elements/KotlinAnnotation.kt | 15 - .../kotlin/elements/KotlinAnnotationEntry.kt | 18 - .../elements/KotlinAnnotationsContainer.kt | 8 - .../elements/KotlinAnonymousInitializer.kt | 15 - .../elements/KotlinArrayAccessExpression.kt | 15 - .../elements/KotlinAssignmentExpression.kt | 20 - .../kotlin/elements/KotlinBinaryExpression.kt | 20 - .../kotlin/elements/KotlinBlockExpression.kt | 16 - .../kotlin/elements/KotlinBreakExpression.kt | 9 - .../ast/kotlin/elements/KotlinCallElement.kt | 22 - .../kotlin/elements/KotlinCallExpression.kt | 9 - .../elements/KotlinCallableDeclaration.kt | 21 - .../KotlinCallableReferenceExpression.kt | 14 - .../ast/kotlin/elements/KotlinCatchClause.kt | 18 - .../solver/ast/kotlin/elements/KotlinClass.kt | 34 - .../ast/kotlin/elements/KotlinClassBody.kt | 25 - .../kotlin/elements/KotlinClassInitializer.kt | 9 - .../elements/KotlinClassLiteralExpression.kt | 9 - .../kotlin/elements/KotlinClassOrObject.kt | 24 - .../KotlinCompilerMessageSourceLocation.kt | 20 - .../elements/KotlinConstantExpression.kt | 9 - .../KotlinConstantStringExpression.kt | 14 - .../ast/kotlin/elements/KotlinConstructor.kt | 12 - .../KotlinConstructorCalleeExpression.kt | 16 - .../KotlinConstructorDelegationCall.kt | 13 - ...onstructorDelegationReferenceExpression.kt | 12 - .../elements/KotlinContinueExpression.kt | 9 - .../ast/kotlin/elements/KotlinDeclaration.kt | 23 - .../elements/KotlinDeclarationContainer.kt | 12 - .../elements/KotlinDeclarationWithBody.kt | 29 - .../KotlinDeclarationWithInitializer.kt | 15 - .../kotlin/elements/KotlinDefaultElement.kt | 7 - .../elements/KotlinDefaultExpression.kt | 7 - .../elements/KotlinDelegatedSuperTypeEntry.kt | 13 - .../KotlinDestructuringDeclaration.kt | 15 - .../KotlinDestructuringDeclarationEntry.kt | 11 - .../elements/KotlinDoWhileExpression.kt | 9 - .../elements/KotlinDotQualifiedExpression.kt | 9 - .../elements/KotlinDoubleColonExpression.kt | 16 - .../ast/kotlin/elements/KotlinElement.kt | 53 - .../ast/kotlin/elements/KotlinEnumEntry.kt | 9 - .../ast/kotlin/elements/KotlinExpression.kt | 23 - .../KotlinExpressionLambdaArgument.kt | 9 - .../elements/KotlinExpressionValueArgument.kt | 22 - .../KotlinExpressionValueArgumentName.kt | 15 - .../elements/KotlinExpressionWithLabel.kt | 17 - .../kotlin/elements/KotlinFinallySection.kt | 12 - .../kotlin/elements/KotlinForExpression.kt | 18 - .../ast/kotlin/elements/KotlinFunction.kt | 18 - .../kotlin/elements/KotlinFunctionLiteral.kt | 14 - .../ast/kotlin/elements/KotlinIfExpression.kt | 16 - .../kotlin/elements/KotlinInitializerList.kt | 13 - .../KotlinInstanceExpressionWithLabel.kt | 9 - .../ast/kotlin/elements/KotlinIsExpression.kt | 21 - .../KotlinLabelReferenceExpression.kt | 9 - .../elements/KotlinLabeledExpression.kt | 12 - .../kotlin/elements/KotlinLambdaArgument.kt | 12 - .../kotlin/elements/KotlinLambdaExpression.kt | 20 - .../kotlin/elements/KotlinLoopExpression.kt | 12 - .../ast/kotlin/elements/KotlinModifierList.kt | 15 - .../elements/KotlinModifierListOwner.kt | 13 - .../elements/KotlinNameReferenceExpression.kt | 9 - .../kotlin/elements/KotlinNamedDeclaration.kt | 16 - .../kotlin/elements/KotlinNamedFunction.kt | 9 - .../kotlin/elements/KotlinNullExpression.kt | 12 - .../elements/KotlinObjectDeclaration.kt | 13 - .../elements/KotlinObjectLiteralExpression.kt | 13 - .../elements/KotlinOperationExpression.kt | 12 - .../KotlinOperationReferenceExpression.kt | 10 - .../ast/kotlin/elements/KotlinParameter.kt | 31 - .../kotlin/elements/KotlinParameterList.kt | 8 - .../elements/KotlinParenthesizedExpression.kt | 12 - .../elements/KotlinPrimaryConstructor.kt | 10 - .../kotlin/elements/KotlinProjectionKind.kt | 8 - .../ast/kotlin/elements/KotlinProperty.kt | 45 - .../kotlin/elements/KotlinPropertyAccessor.kt | 29 - .../kotlin/elements/KotlinPropertyDelegate.kt | 12 - .../elements/KotlinPureClassOrObject.kt | 43 - .../elements/KotlinQualifiedExpression.kt | 14 - .../elements/KotlinReferenceExpression.kt | 8 - .../kotlin/elements/KotlinReturnExpression.kt | 16 - .../elements/KotlinSafeQualifiedExpression.kt | 9 - .../elements/KotlinSecondaryConstructor.kt | 13 - .../ast/kotlin/elements/KotlinSelfType.kt | 12 - .../elements/KotlinSimpleNameExpression.kt | 12 - .../KotlinStringTemplateExpression.kt | 27 - .../kotlin/elements/KotlinSuperExpression.kt | 13 - .../elements/KotlinSuperTypeCallEntry.kt | 9 - .../kotlin/elements/KotlinSuperTypeEntry.kt | 8 - .../kotlin/elements/KotlinSuperTypeList.kt | 13 - .../elements/KotlinSuperTypeListEntry.kt | 12 - .../kotlin/elements/KotlinThisExpression.kt | 9 - .../kotlin/elements/KotlinThrowExpression.kt | 12 - .../kotlin/elements/KotlinTryExpression.kt | 18 - .../ast/kotlin/elements/KotlinTypeAlias.kt | 12 - .../kotlin/elements/KotlinTypeArgumentList.kt | 12 - .../elements/KotlinTypeCastExpression.kt | 27 - .../kotlin/elements/KotlinTypeConstraint.kt | 15 - .../elements/KotlinTypeConstraintList.kt | 12 - .../ast/kotlin/elements/KotlinTypeElement.kt | 12 - .../kotlin/elements/KotlinTypeParameter.kt | 23 - .../elements/KotlinTypeParameterList.kt | 12 - .../elements/KotlinTypeParameterListOwner.kt | 21 - .../kotlin/elements/KotlinTypeProjection.kt | 22 - .../kotlin/elements/KotlinTypeReference.kt | 13 - .../kotlin/elements/KotlinUnaryExpression.kt | 16 - .../elements/KotlinValueArgumentList.kt | 12 - .../elements/KotlinValueArgumentName.kt | 15 - .../elements/KotlinVariableDeclaration.kt | 9 - .../kotlin/elements/KotlinWhenCondition.kt | 8 - .../elements/KotlinWhenConditionInRange.kt | 18 - .../elements/KotlinWhenConditionIsPattern.kt | 15 - .../KotlinWhenConditionWithExpression.kt | 13 - .../ast/kotlin/elements/KotlinWhenEntry.kt | 17 - .../kotlin/elements/KotlinWhenExpression.kt | 22 - .../kotlin/elements/KotlinWhileExpression.kt | 9 - .../elements/KotlinWhileExpressionBase.kt | 12 - .../solver/ast/kotlin/types/KotlinType.kt | 86 - .../ast/kotlin/types/KotlinTypeProjection.kt | 19 - .../phases/ir/ConstraintsAnnotations.kt | 205 - .../meta/plugins/analysis/phases/ir/Hints.kt | 42 - ...otlin.compiler.plugin.CommandLineProcessor | 1 - ...in.compiler.plugin.CompilerPluginRegistrar | 1 - .../test/kotlin/arrow/meta/plugins/Utils.kt | 18 - .../meta/plugins/analysis/AnalysisTests.kt | 2131 ---------- .../analysis/analysis/laws/build.gradle.kts | 66 - .../analysis/analysis/laws/gradle.properties | 6 - .../arrow/analysis/laws/kotlin/Array.kt | 400 -- .../analysis/laws/kotlin/CharAndString.kt | 261 -- .../arrow/analysis/laws/kotlin/Collections.kt | 734 ---- .../kotlin/arrow/analysis/laws/kotlin/Enum.kt | 15 - .../kotlin/arrow/analysis/laws/kotlin/Math.kt | 179 - .../arrow/analysis/laws/kotlin/Numbers.kt | 113 - .../arrow/analysis/laws/kotlin/Ranges.kt | 17 - .../arrow/analysis/laws/kotlin/Result.kt | 34 - .../kotlin/arrow/analysis/laws/kotlin/Util.kt | 28 - arrow-libs/analysis/analysis/types/README.md | 199 - .../types/api/arrow-analysis-types.api | 50 - .../analysis/analysis/types/build.gradle.kts | 37 - .../analysis/analysis/types/gradle.properties | 6 - .../kotlin/arrow/analysis/RefinementDSL.kt | 80 - gradle.properties | 2 + gradle/projects.libs.versions.toml | 14 +- libs/arrow-meta/api/arrow-meta.api | 135 +- .../src/main/kotlin/arrow/meta/Meta.kt | 2 +- .../kotlin/arrow/meta/MetaCliProcessor.kt | 6 +- .../arrow/meta/dsl/analysis/AnalysisSyntax.kt | 26 +- .../arrow/meta/dsl/codegen/asm/AsmSyntax.kt | 10 +- .../arrow/meta/dsl/codegen/ir/IrSyntax.kt | 206 +- .../arrow/meta/dsl/config/ConfigSyntax.kt | 16 +- .../arrow/meta/dsl/resolve/ResolveSyntax.kt | 60 +- .../main/kotlin/arrow/meta/internal/Noop.kt | 18 + .../main/kotlin/arrow/meta/internal/Utils.kt | 8 +- .../internal/registry/InternalRegistry.kt | 106 +- .../arrow/meta/phases/CompilerContext.kt | 9 +- .../meta/phases/analysis/AnalysisContext.kt | 3 + .../meta/phases/analysis/AnalysisHandler.kt | 4 +- .../analysis/CollectAdditionalSources.kt | 2 +- .../arrow/meta/phases/analysis/KtUtils.kt | 5 +- .../phases/analysis/MetaFileViewProvider.kt | 2 +- .../PreprocessedVirtualFileFactory.kt | 2 + .../meta/phases/codegen/asm/ClassBuilder.kt | 2 +- .../phases/codegen/asm/ClassGeneration.kt | 2 +- .../arrow/meta/phases/codegen/asm/Codegen.kt | 4 +- .../arrow/meta/phases/codegen/ir/IrUtils.kt | 61 +- .../config/StorageComponentContainer.kt | 4 +- .../resolve/DeclarationAttributeAlterer.kt | 2 +- .../meta/phases/resolve/PackageProvider.kt | 2 +- .../arrow/meta/phases/resolve/TypeUtils.kt | 2 +- .../resolve/synthetics/SyntheticResolver.kt | 12 +- .../synthetics/SyntheticScopeProvider.kt | 18 +- .../arrow/meta/ir/plugin/IrSyntaxPlugin.kt | 2 +- .../arrow/meta/ir/syntax/IrSyntaxTest.kt | 4 +- .../plugin/gradle/ArrowMetaGradlePlugin.kt | 6 +- .../arrow/meta/plugin/testing/Compilation.kt | 6 +- .../plugin/testing/CompilationAssertions.kt | 6 +- .../meta/plugin/testing/CompilationData.kt | 4 +- .../meta/plugin/testing/CompilerTestDSL.kt | 23 +- .../testing/ExampleCommandLineProcessor.kt | 2 +- .../arrow/meta/plugin/testing/ExampleTest.kt | 42 +- 541 files changed, 443 insertions(+), 28843 deletions(-) delete mode 100644 arrow-libs/analysis/analysis/common/api/arrow-analysis-common.api delete mode 100644 arrow-libs/analysis/analysis/common/build.gradle.kts delete mode 100644 arrow-libs/analysis/analysis/common/gradle.properties delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Constants.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DeclarationUtils.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtils.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Parameters.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/ReportedError.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/SarifReporter.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Booleans.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/FormulaExtensions.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Ints.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FieldProvider.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/NameProvider.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/Literals.kt delete mode 100644 arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/PrimitiveType.kt delete mode 100644 arrow-libs/analysis/analysis/example/build.gradle.kts delete mode 100644 arrow-libs/analysis/analysis/example/gradle.properties delete mode 100644 arrow-libs/analysis/analysis/example/src/commonMain/kotlin/arrow/analysis/BadExample.kt delete mode 100644 arrow-libs/analysis/analysis/java-example/build.gradle.kts delete mode 100644 arrow-libs/analysis/analysis/java-example/gradle.properties delete mode 100644 arrow-libs/analysis/analysis/java-example/src/main/java/Example.java delete mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/api/arrow-analysis-java-gradle-plugin.api delete mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts delete mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/gradle.properties delete mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin.kt delete mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.java.properties delete mode 100644 arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties delete mode 100644 arrow-libs/analysis/analysis/java-plugin/api/arrow-analysis-java-plugin.api delete mode 100644 arrow-libs/analysis/analysis/java-plugin/build.gradle.kts delete mode 100644 arrow-libs/analysis/analysis/java-plugin/gradle.properties delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisContext.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaProcessor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisMessages.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/Resolver.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/TaskListener.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/AnnotationUtils.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtils.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAsIs.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssert.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaBlock.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaCall.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaConditional.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaControlStatement.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElement.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtils.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaException.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLambda.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLoop.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMethod.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtils.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElements.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaType.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtils.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/com.sun.source.util.Plugin delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/javax.annotation.processing.Processor delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/AnalysisTests.kt delete mode 100644 arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/Utils.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/api/arrow-analysis-kotlin-gradle-plugin.api delete mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts delete mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/gradle.properties delete mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.kotlin.properties delete mode 100644 arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/gradle.properties delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm.java delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaErrors.java delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/RenderString.java delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinType.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/Utils.kt delete mode 100644 arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt delete mode 100644 arrow-libs/analysis/analysis/laws/build.gradle.kts delete mode 100644 arrow-libs/analysis/analysis/laws/gradle.properties delete mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Array.kt delete mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt delete mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt delete mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Enum.kt delete mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt delete mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Numbers.kt delete mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Ranges.kt delete mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Result.kt delete mode 100644 arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Util.kt delete mode 100644 arrow-libs/analysis/analysis/types/README.md delete mode 100644 arrow-libs/analysis/analysis/types/api/arrow-analysis-types.api delete mode 100644 arrow-libs/analysis/analysis/types/build.gradle.kts delete mode 100644 arrow-libs/analysis/analysis/types/gradle.properties delete mode 100644 arrow-libs/analysis/analysis/types/src/commonMain/kotlin/arrow/analysis/RefinementDSL.kt diff --git a/arrow-libs/analysis/analysis/common/api/arrow-analysis-common.api b/arrow-libs/analysis/analysis/common/api/arrow-analysis-common.api deleted file mode 100644 index 56161ac20..000000000 --- a/arrow-libs/analysis/analysis/common/api/arrow-analysis-common.api +++ /dev/null @@ -1,2065 +0,0 @@ -public abstract class arrow/meta/continuations/ContSeq { - public static final field Companion Larrow/meta/continuations/ContSeq$Companion; - public final fun drain ()V - public final fun flatMap (Lkotlin/jvm/functions/Function1;)Larrow/meta/continuations/ContSeq; - public final fun forEach (Lkotlin/jvm/functions/Function1;)V - public abstract fun iterator ()Ljava/util/Iterator; - public final fun map (Lkotlin/jvm/functions/Function3;)Larrow/meta/continuations/ContSeq; - public final fun onEach (Lkotlin/jvm/functions/Function1;)Larrow/meta/continuations/ContSeq; - public final fun toList ()Ljava/util/List; - public final fun toSet ()Ljava/util/Set; - public final fun void ()Larrow/meta/continuations/ContSeq; - public final fun zip (Larrow/meta/continuations/ContSeq;Lkotlin/jvm/functions/Function2;)Larrow/meta/continuations/ContSeq; -} - -public final class arrow/meta/continuations/ContSeq$Builder : arrow/meta/continuations/ContSeq { - public fun (Lkotlin/jvm/functions/Function2;)V - public fun iterator ()Ljava/util/Iterator; -} - -public final class arrow/meta/continuations/ContSeq$Companion { - public final fun empty ()Larrow/meta/continuations/ContSeq; - public final fun getAbort ()Larrow/meta/continuations/ContSeq; - public final fun getUnit ()Larrow/meta/continuations/ContSeq; - public final fun invoke (Larrow/meta/continuations/ContSeq$Iterable;)Larrow/meta/continuations/ContSeq; - public final fun invoke (Lkotlin/jvm/functions/Function2;)Larrow/meta/continuations/ContSeq; - public final fun invoke ([Ljava/lang/Object;)Larrow/meta/continuations/ContSeq; -} - -public final class arrow/meta/continuations/ContSeq$Iterable : arrow/meta/continuations/ContSeq { - public fun (Larrow/meta/continuations/ContSeq$Iterable;)V - public fun iterator ()Ljava/util/Iterator; -} - -public final class arrow/meta/continuations/ContSeq$VarArg : arrow/meta/continuations/ContSeq { - public fun ([Ljava/lang/Object;)V - public fun iterator ()Ljava/util/Iterator; -} - -public final class arrow/meta/continuations/ContSeqKt { - public static final fun asContSeq (Ljava/lang/Iterable;)Larrow/meta/continuations/ContSeq; - public static final fun cont (Lkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; - public static final fun doOnlyWhen (ZLjava/lang/Object;Lkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; - public static final fun doOnlyWhen (ZLkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; - public static final fun doOnlyWhenNotNull (Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Larrow/meta/continuations/ContSeq; - public static final fun nested (Ljava/util/List;)Larrow/meta/continuations/ContSeq; - public static final fun sequence (Ljava/util/List;)Larrow/meta/continuations/ContSeq; -} - -public abstract interface class arrow/meta/continuations/ContSeqSyntax : arrow/meta/continuations/ContSyntax { - public abstract fun yield (Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public abstract fun yieldAll (Larrow/meta/continuations/ContSeq;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public abstract fun yieldAll (Ljava/lang/Iterable;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public abstract fun yieldAll (Ljava/util/Iterator;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public abstract fun yieldAll (Lkotlin/sequences/Sequence;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -} - -public final class arrow/meta/continuations/ContSeqSyntax$DefaultImpls { - public static fun ensure (Larrow/meta/continuations/ContSeqSyntax;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static fun yieldAll (Larrow/meta/continuations/ContSeqSyntax;Larrow/meta/continuations/ContSeq;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static fun yieldAll (Larrow/meta/continuations/ContSeqSyntax;Ljava/lang/Iterable;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static fun yieldAll (Larrow/meta/continuations/ContSeqSyntax;Lkotlin/sequences/Sequence;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -} - -public abstract interface class arrow/meta/continuations/ContSyntax { - public abstract fun abort (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public abstract fun ensure (ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; -} - -public final class arrow/meta/continuations/ContSyntax$DefaultImpls { - public static fun ensure (Larrow/meta/continuations/ContSyntax;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ArgumentExpression { - public fun (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ZZLjava/util/List;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public final fun component3 ()Z - public final fun component4 ()Z - public final fun component5 ()Ljava/util/List; - public final fun copy (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ZZLjava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/ArgumentExpression; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ArgumentExpression;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ZZLjava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ArgumentExpression; - public fun equals (Ljava/lang/Object;)Z - public final fun getExpression ()Ljava/util/List; - public final fun getName ()Ljava/lang/String; - public final fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun hashCode ()I - public final fun isSpread ()Z - public final fun isVarArg ()Z - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtilsKt { - public static final fun gather (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public static final fun gather (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;Ljava/util/List;ZLkotlin/jvm/functions/Function1;)Ljava/util/List; - public static synthetic fun gather$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;Ljava/util/List;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/util/List; - public static final fun isALaw (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z - public static final fun isCompatibleWith (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z - public static final fun isField (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z - public static final fun isLooselyCompatibleWith (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z - public static final fun overriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Ljava/util/Collection; - public static final fun sameVarity (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/PrimitiveKt { - public static final fun primitiveFormula (Larrow/meta/plugins/analysis/smt/Solver;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall;Ljava/util/List;)Lorg/sosy_lab/java_smt/api/Formula; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind : java/lang/Enum { - public static final field Invariant Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; - public static final field NotLookArgs Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; - public static final field Post Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; - public static final field Pre Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; - public static final field TrustBlock Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; - public static final field TrustCall Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/SpecialKind; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext { - public abstract fun backingPropertyForConstructorParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; - public abstract fun constraintsDSLElements (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Ljava/util/List; - public abstract fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public abstract fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; - public abstract fun getModule ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor; - public abstract fun getTypes ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types; - public abstract fun handleError (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public abstract fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall { - public abstract fun getCallElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public abstract fun getDispatchReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public abstract fun getExtensionReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getResultingDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor; - public abstract fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun getTypeArguments ()Ljava/util/Map; - public abstract fun getValueArguments ()Ljava/util/Map; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult : java/lang/Enum { - public static final field Completed Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; - public static final field ParsingError Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; - public static final field Retry Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated { - public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public abstract fun getHasDoNotLookAtArgumentsAnnotation ()Z - public abstract fun getHasPackageWithLawsAnnotation ()Z - public abstract fun getHasPreOrPostAnnotation ()Z - public abstract fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotatedKt { - public static final fun getHasInterestingAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated;)Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor { - public abstract fun argumentValueAsArrayOfString (Ljava/lang/String;)Ljava/util/List; - public abstract fun argumentValueAsString (Ljava/lang/String;)Ljava/lang/String; - public abstract fun getAllValueArguments ()Ljava/util/Map; - public abstract fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations { - public abstract fun findAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public abstract fun getImpl ()Ljava/lang/Object; - public abstract fun hasAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Z - public abstract fun isEmpty ()Z - public abstract fun iterable ()Ljava/lang/Iterable; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { - public abstract fun getAllParameters ()Ljava/util/List; - public abstract fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public abstract fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public abstract fun getOverriddenDescriptors ()Ljava/util/Collection; - public abstract fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun getTypeParameters ()Ljava/util/List; - public abstract fun getValueParameters ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor { - public abstract fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind : java/lang/Enum { - public static final field DECLARATION Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public static final field DELEGATION Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public static final field FAKE_OVERRIDE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public static final field SYNTHESIZED Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { - public abstract fun getCompanionObjectDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public abstract fun getCompleteUnsubstitutedScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public abstract fun getConstructors ()Ljava/util/Collection; - public abstract fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public abstract fun getSealedSubclasses ()Ljava/util/Collection; - public abstract fun getStaticScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public abstract fun getSuperTypes ()Ljava/util/Collection; - public abstract fun getThisAsReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public abstract fun getUnsubstitutedInnerClassesScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public abstract fun getUnsubstitutedMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public abstract fun getUnsubstitutedPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; - public abstract fun isCompanionObject ()Z - public abstract fun isData ()Z - public abstract fun isEnumEntry ()Z - public abstract fun isFun ()Z - public abstract fun isInline ()Z - public abstract fun isValue ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind : java/lang/Enum { - public static final field ANNOTATION_CLASS Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public static final field CLASS Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public static final field ENUM_CLASS Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public static final field ENUM_ENTRY Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public static final field INTERFACE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public static final field OBJECT Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$DefaultImpls { - public static fun getCompleteUnsubstitutedScope (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor { - public abstract fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor { - public abstract fun getDeclaredTypeParameters ()Ljava/util/List; - public abstract fun isInner ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CombinedMemberScope : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope { - public fun (Ljava/util/Collection;)V - public fun getClassifierNames ()Ljava/util/Set; - public fun getContributedDescriptors (Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public fun getFunctionNames ()Ljava/util/Set; - public fun getVariableNames ()Ljava/util/Set; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor { - public abstract fun getConstructedClass ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public abstract fun isPrimary ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named { - public abstract fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public abstract fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun impl ()Ljava/lang/Object; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { - public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument { - public abstract fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument { - public abstract fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated { - public abstract fun getCorrespondingProperty ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor { - public abstract fun isInfix ()Z - public abstract fun isInline ()Z - public abstract fun isOperator ()Z - public abstract fun isSuspend ()Z - public abstract fun isTailrec ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptorKt { - public static final fun getWithAliasUnwrapped (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static final fun getWithAliasUnwrapped (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor { -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { - public abstract fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public abstract fun isActual ()Z - public abstract fun isExpect ()Z - public abstract fun isExternal ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope { - public abstract fun getClassifierNames ()Ljava/util/Set; - public abstract fun getContributedDescriptors (Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public abstract fun getFunctionNames ()Ljava/util/Set; - public abstract fun getVariableNames ()Ljava/util/Set; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality : java/lang/Enum { - public static final field ABSTRACT Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public static final field FINAL Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public static final field OPEN Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public static final field SEALED Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { - public abstract fun getPackage (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor; - public abstract fun getStableName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun getSubPackagesOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named { - public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { - public abstract fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun getMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor { -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor { - public abstract fun getOverriddenDescriptors ()Ljava/util/Collection; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors { - public abstract fun getAccessors ()Ljava/util/List; - public abstract fun getBackingField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; - public abstract fun getDelegateField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; - public abstract fun isSetterProjectedOut ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor { - public abstract fun getValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue { - public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun isClassReceiver ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument { - public abstract fun getArguments ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor { -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor { - public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor; - public abstract fun getUnderlyingConstructorDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters { - public abstract fun getClassDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public abstract fun getConstructors ()Ljava/util/Collection; - public abstract fun getExpandedType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun getUnderlyingType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor { - public abstract fun getDeclarationDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; - public abstract fun getParameters ()Ljava/util/List; - public abstract fun getSupertypes ()Ljava/util/Collection; - public abstract fun isDenotable ()Z - public abstract fun isFinal ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor { - public abstract fun getIndex ()I - public abstract fun getUpperBounds ()Ljava/util/List; - public abstract fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public abstract fun isCapturedFromOuterDeclaration ()Z - public abstract fun isReified ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor { - public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor { - public abstract fun declaresDefaultValue ()Z - public abstract fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getIndex ()I - public abstract fun getVarargElementType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun isCrossinline ()Z - public abstract fun isNoinline ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor { - public abstract fun getCorrespondingVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor { - public abstract fun isConst ()Z - public abstract fun isLateInit ()Z - public abstract fun isVar ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor { - public abstract fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; - public abstract fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; - public abstract fun isDelegated ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors$DefaultImpls { - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility { - public abstract fun getName ()Ljava/lang/String; - public abstract fun isPublicAPI ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getAnnotationEntries ()Ljava/util/List; - public abstract fun getAnnotations ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer { - public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation { - public abstract fun getEntries ()Ljava/util/List; - public abstract fun getUseSiteTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement { - public abstract fun getShortName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun getUseSiteTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget : java/lang/Enum { - public static final field CONSTRUCTOR_PARAMETER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static final field FIELD Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static final field FILE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static final field PROPERTY Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static final field PROPERTY_DELEGATE_FIELD Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static final field PROPERTY_GETTER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static final field PROPERTY_SETTER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static final field RECEIVER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static final field SETTER_PARAMETER Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration { - public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression { - public abstract fun getArrayExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getIndexExpressions ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression$Companion; - public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getDetail ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression$Companion { - public final fun getFAKE_ASSERT_NAME ()Ljava/lang/String; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { - public abstract fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getOperationToken ()Ljava/lang/String; - public abstract fun getOperationTokenRpr ()Ljava/lang/String; - public abstract fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { - public abstract fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getOperationToken ()Ljava/lang/String; - public abstract fun getOperationTokenRpr ()Ljava/lang/String; - public abstract fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getFirstStatement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getImplicitReturnFromLast ()Z - public abstract fun getStatements ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getLambdaArguments ()Ljava/util/List; - public abstract fun getTypeArguments ()Ljava/util/List; - public abstract fun getValueArguments ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner { - public abstract fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public abstract fun getValueParameters ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression { - public abstract fun getCallableReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getCatchBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getCatchParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; - public abstract fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject { - public abstract fun getProperties ()Ljava/util/List; - public abstract fun isData ()Z - public abstract fun isEnum ()Z - public abstract fun isInline ()Z - public abstract fun isInner ()Z - public abstract fun isInterface ()Z - public abstract fun isSealed ()Z - public abstract fun isValue ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class$DefaultImpls { - public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getAllCompanionObjects ()Ljava/util/List; - public abstract fun getAnonymousInitializers ()Ljava/util/List; - public abstract fun getEnumEntries ()Ljava/util/List; - public abstract fun getFunctions ()Ljava/util/List; - public abstract fun getProperties ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject { - public abstract fun getAnonymousInitializers ()Ljava/util/List; - public abstract fun getPrimaryConstructorParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public abstract fun isAnnotation ()Z - public abstract fun isTopLevel ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject$DefaultImpls { - public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation { - public abstract fun getColumn ()I - public abstract fun getColumnEnd ()I - public abstract fun getLine ()I - public abstract fun getLineContent ()Ljava/lang/String; - public abstract fun getLineEnd ()I - public abstract fun getPath ()Ljava/lang/String; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function { - public abstract fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression { - public abstract fun getConstructorReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun isCallToThis ()Z - public abstract fun isImplicit ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression { - public abstract fun isThis ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner { - public abstract fun getName ()Ljava/lang/String; - public abstract fun getParents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer { - public abstract fun getDeclarations ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration { - public abstract fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public abstract fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getValueParameters ()Ljava/util/List; - public abstract fun hasBlockBody ()Z - public abstract fun hasBody ()Z - public abstract fun hasDeclaredReturnType ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration { - public abstract fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun hasInitializer ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry { - public abstract fun getDelegateExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer { - public abstract fun getEntries ()Ljava/util/List; - public abstract fun isVar ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getHasQuestionMarks ()Z - public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun isEmptyLHS ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement { - public abstract fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public abstract fun getText ()Ljava/lang/String; - public abstract fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public abstract fun impl ()Ljava/lang/Object; - public abstract fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public abstract fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class { - public abstract fun hasInitializer ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry$DefaultImpls { - public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument { - public abstract fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun isSpread ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getLabelName ()Ljava/lang/String; - public abstract fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getFinalExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression { - public abstract fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; - public abstract fun getLoopParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; - public abstract fun getLoopRange ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName { - public fun (Ljava/lang/String;)V - public final fun component1 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun equals (Ljava/lang/Object;)Z - public final fun getName ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody { - public abstract fun isLocal ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function { - public abstract fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun hasParameterSpecification ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getThenExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getEntries ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { - public abstract fun getLeftHandSide ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun isNegated ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { - public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument { - public abstract fun getLambdaExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getFunctionLiteral ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral; - public abstract fun getValueParameters ()Ljava/util/List; - public abstract fun hasDeclaredReturnType ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer { - public abstract fun getAnnotationEntries ()Ljava/util/List; - public abstract fun getAnnotations ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated { - public abstract fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name { - public fun (Ljava/lang/String;)V - public final fun component1 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun equals (Ljava/lang/Object;)Z - public final fun getValue ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named { - public abstract fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named { - public abstract fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject { - public abstract fun isCompanion ()Z - public abstract fun isObjectLiteral ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration$DefaultImpls { - public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getObjectDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression { - public abstract fun isConventionOperator ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration { - public abstract fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; - public abstract fun getOwnerFunction ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody; - public abstract fun hasDefaultValue ()Z - public abstract fun hasValOrVar ()Z - public abstract fun isCatchParameter ()Z - public abstract fun isLoopParameter ()Z - public abstract fun isMutable ()Z - public abstract fun isVarArg ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList { - public abstract fun getOwnerFunction ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody; - public abstract fun getParameters ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression { - public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor { -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind : java/lang/Enum { - public static final field IN Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; - public static final field NONE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; - public static final field OUT Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; - public static final field STAR Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration { - public abstract fun getAccessors ()Ljava/util/List; - public abstract fun getDelegate ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate; - public abstract fun getDelegateExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getDelegateExpressionOrInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor; - public abstract fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor; - public abstract fun hasBody ()Z - public abstract fun hasDelegate ()Z - public abstract fun hasDelegateExpression ()Z - public abstract fun hasDelegateExpressionOrInitializer ()Z - public abstract fun isLocal ()Z - public abstract fun isMember ()Z - public abstract fun isTopLevel ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner { - public abstract fun getParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; - public abstract fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public abstract fun getProperty ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; - public abstract fun getReturnTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun isGetter ()Z - public abstract fun isSetter ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement { - public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; - public abstract fun getCompanionObjects ()Ljava/util/List; - public abstract fun getName ()Ljava/lang/String; - public abstract fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; - public abstract fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public abstract fun getPrimaryConstructorParameters ()Ljava/util/List; - public abstract fun getSecondaryConstructors ()Ljava/util/List; - public abstract fun getSuperTypeListEntries ()Ljava/util/List; - public abstract fun hasExplicitPrimaryConstructor ()Z - public abstract fun hasPrimaryConstructor ()Z - public abstract fun isLocal ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement { - public abstract fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getSelectorExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel { - public abstract fun getLabeledExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getReturnedExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor { - public abstract fun getDelegationCall ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement { - public abstract fun getTypeArgumentsAsTypes ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression { - public abstract fun getReferencedName ()Ljava/lang/String; - public abstract fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntry { -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntry { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;)V - public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryExpression; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryExpression; - public fun equals (Ljava/lang/Object;)Z - public final fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryString : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntry { - public fun (Ljava/lang/String;)V - public final fun component1 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryString; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryString;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateEntryString; - public fun equals (Ljava/lang/Object;)Z - public final fun getString ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getEntries ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel { - public abstract fun getSuperTypeQualifier ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getEntries ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry { - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public abstract fun getSubject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression { - public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getInitializer ()Ljava/util/List; - public abstract fun getUpdate ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getThrownExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getCatchClauses ()Ljava/util/List; - public abstract fun getFinallyBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection; - public abstract fun getTryBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration { - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun isTopLevel ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList { - public abstract fun getArguments ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind : java/lang/Enum { - public static final field POSITIVE_TYPE_CAST Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; - public static final field QUESTION_TYPE_CAST Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { - public abstract fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; - public abstract fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getOperationToken ()Ljava/lang/String; - public abstract fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint { - public abstract fun getBoundTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun getSubjectTypeParameterName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList { - public abstract fun getConstraints ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getTypeArgumentsAsTypes ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter { - public abstract fun getExtendsBounds ()Ljava/util/List; - public abstract fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList { - public abstract fun getParameters ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration { - public abstract fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public abstract fun getTypeConstraints ()Ljava/util/List; - public abstract fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public abstract fun getTypeParameters ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection { - public abstract fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer { - public abstract fun getTypeElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { - public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument { - public abstract fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; - public abstract fun isExternal ()Z - public abstract fun isNamed ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList { - public abstract fun getArguments ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { - public abstract fun getAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun getReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer { - public abstract fun isVar ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition { - public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression; - public abstract fun getRangeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun isNegated ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition { - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun isNegated ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition { - public abstract fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getConditions ()Ljava/util/List; - public abstract fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun isElse ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression { - public abstract fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getEntries ()Ljava/util/List; - public abstract fun getSubjectExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getSubjectVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase { -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression { - public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type : java/lang/Comparable { - public abstract fun compareTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)I - public abstract fun getArguments ()Ljava/util/List; - public abstract fun getDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public abstract fun getUnwrappedNotNullableType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun intersectIfPossible (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun isAnyOrNullableAny ()Z - public abstract fun isBoolean ()Z - public abstract fun isByte ()Z - public abstract fun isChar ()Z - public abstract fun isDouble ()Z - public abstract fun isEqualTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Z - public abstract fun isFloat ()Z - public abstract fun isInt ()Z - public abstract fun isLong ()Z - public abstract fun isMarkedNullable ()Z - public abstract fun isNullable ()Z - public abstract fun isShort ()Z - public abstract fun isString ()Z - public abstract fun isSubtypeOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Z - public abstract fun isTypeParameter ()Z - public abstract fun isUnsignedNumberType ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type$DefaultImpls { - public static fun compareTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)I - public static fun intersectIfPossible (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection { - public abstract fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun isStarProjection ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types { - public abstract fun getNothingType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance : java/lang/Enum { - public static final field In Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public static final field Invariant Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public static final field Out Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPointKt { - public static final fun checkDeclarationConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)V -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo { - public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo$Companion; - public fun (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Z)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Ljava/lang/String; - public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public final fun component4 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun component5 ()Z - public final fun copy (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Z)Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;ZILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo; - public fun equals (Ljava/lang/Object;)Z - public final fun getElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun getName ()Ljava/lang/String; - public final fun getSmtName ()Ljava/lang/String; - public final fun getThisFromConstructor ()Z - public final fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo$Companion { - public final fun invoke (Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Z)Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo; - public static synthetic fun invoke$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo$Companion;Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;ZILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/ParamInfo; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch;)V - public final fun addBranch (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public final fun addBranch (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public final fun addReturnPoint (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public final fun addVarInfo (Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public static synthetic fun addVarInfo$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public final fun addVarInfos (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext; - public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; - public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; - public final fun component4 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; - public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public fun equals (Ljava/lang/Object;)Z - public final fun getBranch ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; - public final fun getContext ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext; - public final fun getReturnPoints ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; - public final fun getVarInfo ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; - public fun hashCode ()I - public final fun replaceTopMostReturnPoint (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public fun toString ()Ljava/lang/String; -} - -public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition { - public synthetic fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;ZLarrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun getWhole ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun isElse ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior;)V - public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun component3 ()Ljava/lang/String; - public final fun component4 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; - public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn; - public fun equals (Ljava/lang/Object;)Z - public final fun getArgumentName ()Ljava/lang/String; - public final fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getReturnBehavior ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; - public final fun getTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior : java/lang/Enum { - public static final field RETURNS_ARGUMENT Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; - public static final field RETURNS_BLOCK_RESULT Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn$ReturnBehavior; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch { - public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch$Companion; - public fun (Ljava/util/List;)V - public final fun add (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; - public final fun add (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; - public final fun get ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch$Companion { - public final fun new ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo { - public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo$Companion; - public fun (Ljava/util/List;)V - public final fun add (Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; - public final fun add (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; - public static synthetic fun add$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; - public final fun copy (Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo;Ljava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; - public fun equals (Ljava/lang/Object;)Z - public final fun get (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo$Companion { - public final fun new ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitBlockReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitReturn { - public fun (Ljava/lang/String;)V - public final fun component1 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitBlockReturn; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitBlockReturn;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitBlockReturn; - public fun equals (Ljava/lang/Object;)Z - public final fun getReturnPoint ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitLoopReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitReturn { - public fun (Ljava/lang/String;)V - public final fun component1 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitLoopReturn; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitLoopReturn;Ljava/lang/String;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitLoopReturn; - public fun equals (Ljava/lang/Object;)Z - public final fun getReturnPoint ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return { -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitThrowReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitReturn { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)V - public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitThrowReturn; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitThrowReturn;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ExplicitThrowReturn; - public fun equals (Ljava/lang/Object;)Z - public final fun getExceptionType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace : java/lang/Enum { - public static final field AFTER_LOOP Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace; - public static final field INSIDE_LOOP Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/MissingElseBlockExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;)V - public fun getFirstStatement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getImplicitReturnFromLast ()Z - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getStatements ()Ljava/util/List; - public fun getText ()Ljava/lang/String; - public final fun getThenExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public final fun getWhole ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun impl ()Ljava/lang/Object; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/NoReturn : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return { - public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/NoReturn; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return { -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints { - public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints$Companion; - public fun (Lkotlin/Pair;Ljava/util/Map;)V - public final fun addAndReplaceTopMost (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; - public final fun component1 ()Lkotlin/Pair; - public final fun component2 ()Ljava/util/Map; - public final fun copy (Lkotlin/Pair;Ljava/util/Map;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints;Lkotlin/Pair;Ljava/util/Map;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; - public fun equals (Ljava/lang/Object;)Z - public final fun getNamedReturnPointVariableNames ()Ljava/util/Map; - public final fun getTopMostReturnPointVariableName ()Lkotlin/Pair; - public fun hashCode ()I - public final fun replaceTopMost (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints$Companion { - public final fun new (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/SimpleCondition : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;ZLarrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)V - public final fun getPredicate ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;)V - public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return; - public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return;Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; - public fun equals (Ljava/lang/Object;)Z - public final fun getData ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData; - public final fun getReturnInfo ()Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; - public final fun withData (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; - public final fun withReturn (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfterKt { - public static final fun noReturn (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter; - public static final fun noReturn (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData;Lkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/SubjectCondition : arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition;ZLarrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)V - public final fun getCheck ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo { - public static final field Companion Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo$Companion; - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;Lkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Ljava/lang/String; - public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun component4 ()Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun copy (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; - public fun equals (Ljava/lang/Object;)Z - public final fun getInvariant ()Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun getName ()Ljava/lang/String; - public final fun getOrigin ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun getSmtName ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo$Companion { - public final fun invoke (Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; - public static synthetic fun invoke$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo$Companion;Larrow/meta/plugins/analysis/smt/Solver;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; - public final fun unsafeCreate (Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; - public static synthetic fun unsafeCreate$default (Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo$Companion;Ljava/lang/String;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptorKt { - public static final fun findDescriptorFromLocalLaw (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotationsKt { - public static final fun collectConstraintsFromAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Ljava/util/List;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Lkotlin/Pair; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSLKt { - public static final fun collectConstraintsFromDSL (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)V -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V - public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public final fun component2 ()Ljava/util/List; - public final fun component3 ()Ljava/util/List; - public final fun component4 ()Ljava/util/List; - public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; - public fun equals (Ljava/lang/Object;)Z - public final fun getDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public final fun getDoNotLookAtArgumentsWhen ()Ljava/util/List; - public final fun getPost ()Ljava/util/List; - public final fun getPre ()Ljava/util/List; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint { - public fun (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/BooleanFormula;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun copy (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint;Ljava/lang/String;Lorg/sosy_lab/java_smt/api/BooleanFormula;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint; - public fun equals (Ljava/lang/Object;)Z - public final fun getFormula ()Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun getMsg ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { - public abstract fun getFullDescription ()Ljava/lang/String; - public abstract fun getId ()Ljava/lang/String; - public abstract fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public abstract fun getName ()Ljava/lang/String; - public abstract fun getShortDescription ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$DefaultImpls { - public static fun getFullDescription (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;)Ljava/lang/String; - public static fun getId (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;)Ljava/lang/String; - public static fun getLevel (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { - public static final field IllegalState Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception; - public static final field OtherException Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception; - public fun getFullDescription ()Ljava/lang/String; - public fun getId ()Ljava/lang/String; - public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public synthetic fun getName ()Ljava/lang/String; - public fun getShortDescription ()Ljava/lang/String; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Exception; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { - public static final field InconsistentBodyPre Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; - public static final field InconsistentCallPost Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; - public static final field InconsistentConditions Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; - public static final field InconsistentDefaultValues Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; - public static final field InconsistentInvariants Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; - public synthetic fun (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun getFullDescription ()Ljava/lang/String; - public fun getId ()Ljava/lang/String; - public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public synthetic fun getName ()Ljava/lang/String; - public fun getShortDescription ()Ljava/lang/String; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Inconsistency; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { - public static final field CouldNotResolveSubject Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; - public static final field LawMustCallFunction Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; - public static final field LawMustHaveParametersInOrder Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; - public static final field SubjectWithoutName Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; - public fun getFullDescription ()Ljava/lang/String; - public fun getId ()Ljava/lang/String; - public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public synthetic fun getName ()Ljava/lang/String; - public fun getShortDescription ()Ljava/lang/String; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Laws; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { - public static final field NotStrongerPostcondition Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov; - public static final field NotWeakerPrecondition Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov; - public synthetic fun (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun getFullDescription ()Ljava/lang/String; - public fun getId ()Ljava/lang/String; - public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public synthetic fun getName ()Ljava/lang/String; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Liskov; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { - public static final field ErrorParsingPredicate Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; - public static final field UnexpectedFieldInitBlock Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; - public static final field UnexpectedReference Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; - public static final field WarningParsingPredicate Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; - public fun getFullDescription ()Ljava/lang/String; - public fun getId ()Ljava/lang/String; - public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public synthetic fun getName ()Ljava/lang/String; - public fun getShortDescription ()Ljava/lang/String; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Parsing; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { - public static final field UnsatBodyPost Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; - public static final field UnsatCallPre Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; - public static final field UnsatInvariants Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; - public synthetic fun (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun getFullDescription ()Ljava/lang/String; - public fun getId ()Ljava/lang/String; - public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public synthetic fun getName ()Ljava/lang/String; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsatisfiability; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsupported : java/lang/Enum, arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds { - public static final field UnsupportedExpression Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsupported; - public fun getFullDescription ()Ljava/lang/String; - public fun getId ()Ljava/lang/String; - public fun getLevel ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public synthetic fun getName ()Ljava/lang/String; - public fun getShortDescription ()Ljava/lang/String; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsupported; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds$Unsupported; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages { - public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Exception { - public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Exception; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Inconsistency { - public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Inconsistency; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Liskov { - public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Liskov; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Parsing { - public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Parsing; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Unsatisfiability { - public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Unsatisfiability; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Unsupported { - public static final field INSTANCE Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages$Unsupported; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel : java/lang/Enum { - public static final field Error Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public static final field Info Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public static final field Unsupported Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public static final field Warning Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/errors/SeverityLevel; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearchKt { - public static final fun getConstraintsFor (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; - public static final fun getConstraintsFor (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState { - public fun (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Larrow/meta/plugins/analysis/smt/utils/NameProvider;Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;Ljava/util/List;Larrow/meta/plugins/analysis/smt/utils/FieldProvider;Ljava/util/Set;)V - public synthetic fun (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Larrow/meta/plugins/analysis/smt/utils/NameProvider;Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;Ljava/util/List;Larrow/meta/plugins/analysis/smt/utils/FieldProvider;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun addConstraint (Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)V - public final fun bracket (Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; - public final fun component3 ()Larrow/meta/plugins/analysis/smt/utils/NameProvider; - public final fun component4 ()Larrow/meta/plugins/analysis/smt/Solver; - public final fun component5 ()Lorg/sosy_lab/java_smt/api/ProverEnvironment; - public final fun component6 ()Ljava/util/Map; - public final fun component7 ()Ljava/util/List; - public final fun component8 ()Larrow/meta/plugins/analysis/smt/utils/FieldProvider; - public final fun copy (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Larrow/meta/plugins/analysis/smt/utils/NameProvider;Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;Ljava/util/List;Larrow/meta/plugins/analysis/smt/utils/FieldProvider;Ljava/util/Set;)Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Larrow/meta/plugins/analysis/smt/utils/NameProvider;Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;Ljava/util/List;Larrow/meta/plugins/analysis/smt/utils/FieldProvider;Ljava/util/Set;ILjava/lang/Object;)Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState; - public fun equals (Ljava/lang/Object;)Z - public final fun field (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; - public final fun getCallableConstraints ()Ljava/util/Map; - public final fun getContinuationBracket ()Larrow/meta/continuations/ContSeq; - public final fun getFieldProvider ()Larrow/meta/plugins/analysis/smt/utils/FieldProvider; - public final fun getNames ()Larrow/meta/plugins/analysis/smt/utils/NameProvider; - public final fun getProver ()Lorg/sosy_lab/java_smt/api/ProverEnvironment; - public final fun getSolver ()Larrow/meta/plugins/analysis/smt/Solver; - public final fun getSolverTrace ()Ljava/util/List; - public final fun hadParseErrors ()Z - public fun hashCode ()I - public final fun newName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Ljava/lang/String; - public final fun newName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/Pair;)Ljava/lang/String; - public final fun notifyModuleProcessed (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)V - public final fun notifySarifReport (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun scopedBracket (Lkotlin/jvm/functions/Function0;)Larrow/meta/continuations/ContSeq; - public final fun signalParseErrors ()V - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverStateKt { - public static final fun getAsField (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/sarif/ReportedError { - public fun (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;Ljava/util/List;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds; - public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun component4 ()Ljava/lang/String; - public final fun component5 ()Ljava/util/List; - public final fun copy (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;Ljava/util/List;)Larrow/meta/plugins/analysis/sarif/ReportedError; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/sarif/ReportedError;Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/sarif/ReportedError; - public fun equals (Ljava/lang/Object;)Z - public final fun getElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun getErrorsId ()Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds; - public final fun getId ()Ljava/lang/String; - public final fun getMsg ()Ljava/lang/String; - public final fun getReferences ()Ljava/util/List; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/sarif/SarifReporterKt { - public static final fun sarifFileContent (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String; - public static final fun toResults (Ljava/lang/String;Ljava/util/List;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/smt/FormulaExtensionsKt { - public static final fun extractSingleVariable (Lorg/sosy_lab/java_smt/api/FormulaManager;Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; - public static final fun fieldNames (Lorg/sosy_lab/java_smt/api/FormulaManager;Ljava/lang/Iterable;)Ljava/util/Set; - public static final fun fieldNames (Lorg/sosy_lab/java_smt/api/FormulaManager;Lorg/sosy_lab/java_smt/api/Formula;)Ljava/util/Set; - public static final fun isFieldCall (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/Formula;)Z - public static final fun isSingleVariable (Lorg/sosy_lab/java_smt/api/FormulaManager;Lorg/sosy_lab/java_smt/api/Formula;)Z - public static final fun renameDeclarationConstraints (Larrow/meta/plugins/analysis/smt/Solver;Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints;Ljava/util/Map;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; - public static final fun substituteDeclarationConstraints (Larrow/meta/plugins/analysis/smt/Solver;Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints;Ljava/util/Map;)Larrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints; - public static final fun substituteVariable (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/Formula;Ljava/util/Map;)Lorg/sosy_lab/java_smt/api/Formula; - public static final fun substituteWithFix (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/Formula;Ljava/util/Map;)Lorg/sosy_lab/java_smt/api/Formula; -} - -public final class arrow/meta/plugins/analysis/smt/Solver : arrow/meta/plugins/analysis/smt/utils/KotlinPrinter, org/sosy_lab/java_smt/api/BooleanFormulaManager, org/sosy_lab/java_smt/api/FormulaManager, org/sosy_lab/java_smt/api/SolverContext { - public static final field Companion Larrow/meta/plugins/analysis/smt/Solver$Companion; - public fun (Lorg/sosy_lab/java_smt/api/SolverContext;Larrow/meta/plugins/analysis/smt/utils/NameProvider;)V - public fun and (Ljava/util/Collection;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun and (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun and ([Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun applyTactic (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/Tactic;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun arrays (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun bitvectors (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun boolValue (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun booleans (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public fun close ()V - public final fun decimalValue (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/NumeralFormula$RationalFormula; - public fun dumpFormula (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/common/Appender; - public fun dumpKotlinLike (Ljava/util/List;)Ljava/lang/String; - public fun dumpKotlinLike (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; - public fun dumpKotlinLikeOrRemove (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; - public fun equivalence (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun escape (Ljava/lang/String;)Ljava/lang/String; - public fun extractVariables (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/util/Map; - public fun extractVariablesAndUFs (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/util/Map; - public final fun field (Ljava/lang/String;Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; - public final fun floatingPoint (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun formulae (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public fun getArrayFormulaManager ()Lorg/sosy_lab/java_smt/api/ArrayFormulaManager; - public fun getBitvectorFormulaManager ()Lorg/sosy_lab/java_smt/api/BitvectorFormulaManager; - public final fun getBoolValueFun ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; - public fun getBooleanFormulaManager ()Lorg/sosy_lab/java_smt/api/BooleanFormulaManager; - public final fun getDecimalValueFun ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; - public final fun getFieldFun ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; - public fun getFloatingPointFormulaManager ()Lorg/sosy_lab/java_smt/api/FloatingPointFormulaManager; - public fun getFormulaManager ()Lorg/sosy_lab/java_smt/api/FormulaManager; - public fun getFormulaType (Lorg/sosy_lab/java_smt/api/Formula;)Lorg/sosy_lab/java_smt/api/FormulaType; - public final fun getIntValueFun ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; - public fun getIntegerFormulaManager ()Lorg/sosy_lab/java_smt/api/IntegerFormulaManager; - public fun getQuantifiedFormulaManager ()Lorg/sosy_lab/java_smt/api/QuantifiedFormulaManager; - public fun getRationalFormulaManager ()Lorg/sosy_lab/java_smt/api/RationalFormulaManager; - public final fun getResultVariable ()Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; - public fun getSLFormulaManager ()Lorg/sosy_lab/java_smt/api/SLFormulaManager; - public fun getSolverName ()Lorg/sosy_lab/java_smt/SolverContextFactory$Solvers; - public fun getStringFormulaManager ()Lorg/sosy_lab/java_smt/api/StringFormulaManager; - public final fun getThisVariable ()Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; - public fun getUFManager ()Lorg/sosy_lab/java_smt/api/UFManager; - public fun getVersion ()Ljava/lang/String; - public fun ifThenElse (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/Formula;Lorg/sosy_lab/java_smt/api/Formula;)Lorg/sosy_lab/java_smt/api/Formula; - public fun implication (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun intValue (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; - public final fun ints (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public fun isFalse (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Z - public final fun isNotNull (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun isNull (Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun isNullFn ()Lorg/sosy_lab/java_smt/api/FunctionDeclaration; - public fun isTrue (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Z - public fun isValidName (Ljava/lang/String;)Z - public fun makeApplication (Lorg/sosy_lab/java_smt/api/FunctionDeclaration;Ljava/util/List;)Lorg/sosy_lab/java_smt/api/Formula; - public fun makeApplication (Lorg/sosy_lab/java_smt/api/FunctionDeclaration;[Lorg/sosy_lab/java_smt/api/Formula;)Lorg/sosy_lab/java_smt/api/Formula; - public final fun makeBooleanObjectVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun makeDecimalObjectVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/NumeralFormula$RationalFormula; - public fun makeFalse ()Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun makeIntegerObjectVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; - public final fun makeObjectVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/NumeralFormula$IntegerFormula; - public fun makeTrue ()Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun makeVariable (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun makeVariable (Lorg/sosy_lab/java_smt/api/FormulaType;Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/Formula; - public fun mirroredElement (Ljava/lang/String;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; - public fun newOptimizationProverEnvironment ([Lorg/sosy_lab/java_smt/api/SolverContext$ProverOptions;)Lorg/sosy_lab/java_smt/api/OptimizationProverEnvironment; - public fun newProverEnvironment ([Lorg/sosy_lab/java_smt/api/SolverContext$ProverOptions;)Lorg/sosy_lab/java_smt/api/ProverEnvironment; - public fun newProverEnvironmentWithInterpolation ([Lorg/sosy_lab/java_smt/api/SolverContext$ProverOptions;)Lorg/sosy_lab/java_smt/api/InterpolatingProverEnvironment; - public fun not (Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun objects (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public fun or (Ljava/util/Collection;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun or (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun or ([Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun parse (Ljava/lang/String;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public final fun quantified (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun rationals (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public final fun separationLogic (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public fun simplify (Lorg/sosy_lab/java_smt/api/Formula;)Lorg/sosy_lab/java_smt/api/Formula; - public fun substitute (Lorg/sosy_lab/java_smt/api/Formula;Ljava/util/Map;)Lorg/sosy_lab/java_smt/api/Formula; - public fun toConjunction ()Ljava/util/stream/Collector; - public fun toConjunctionArgs (Lorg/sosy_lab/java_smt/api/BooleanFormula;Z)Ljava/util/Set; - public fun toDisjunction ()Ljava/util/stream/Collector; - public fun toDisjunctionArgs (Lorg/sosy_lab/java_smt/api/BooleanFormula;Z)Ljava/util/Set; - public fun transformRecursively (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/visitors/BooleanFormulaTransformationVisitor;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun transformRecursively (Lorg/sosy_lab/java_smt/api/Formula;Lorg/sosy_lab/java_smt/api/visitors/FormulaTransformationVisitor;)Lorg/sosy_lab/java_smt/api/Formula; - public fun translateFrom (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/FormulaManager;)Lorg/sosy_lab/java_smt/api/BooleanFormula; - public fun unescape (Ljava/lang/String;)Ljava/lang/String; - public final fun uninterpretedFunctions (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; - public fun visit (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/visitors/BooleanFormulaVisitor;)Ljava/lang/Object; - public fun visit (Lorg/sosy_lab/java_smt/api/Formula;Lorg/sosy_lab/java_smt/api/visitors/FormulaVisitor;)Ljava/lang/Object; - public fun visitRecursively (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/visitors/BooleanFormulaVisitor;)V - public fun visitRecursively (Lorg/sosy_lab/java_smt/api/Formula;Lorg/sosy_lab/java_smt/api/visitors/FormulaVisitor;)V - public fun xor (Lorg/sosy_lab/java_smt/api/BooleanFormula;Lorg/sosy_lab/java_smt/api/BooleanFormula;)Lorg/sosy_lab/java_smt/api/BooleanFormula; -} - -public final class arrow/meta/plugins/analysis/smt/Solver$Companion { - public final fun getBOOL_VALUE_NAME ()Ljava/lang/String; - public final fun getDECIMAL_VALUE_NAME ()Ljava/lang/String; - public final fun getFIELD_FUNCTION_NAME ()Ljava/lang/String; - public final fun getINT_VALUE_NAME ()Ljava/lang/String; - public final fun getIS_NULL_FUNCTION_NAME ()Ljava/lang/String; - public final fun invoke (Larrow/meta/plugins/analysis/smt/utils/NameProvider;)Larrow/meta/plugins/analysis/smt/Solver; -} - -public final class arrow/meta/plugins/analysis/smt/SolverKt { - public static final fun getFieldFormulaType ()Lorg/sosy_lab/java_smt/api/FormulaType; - public static final fun getObjectFormulaType ()Lorg/sosy_lab/java_smt/api/FormulaType; -} - -public final class arrow/meta/plugins/analysis/smt/utils/FieldProvider { - public static final field Companion Larrow/meta/plugins/analysis/smt/utils/FieldProvider$Companion; - public fun (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;Ljava/util/Map;J)V - public final fun introduce (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)J -} - -public final class arrow/meta/plugins/analysis/smt/utils/FieldProvider$Companion { - public final fun invoke (Larrow/meta/plugins/analysis/smt/Solver;Lorg/sosy_lab/java_smt/api/ProverEnvironment;)Larrow/meta/plugins/analysis/smt/utils/FieldProvider; -} - -public abstract interface class arrow/meta/plugins/analysis/smt/utils/KotlinPrinter { - public abstract fun dumpKotlinLike (Ljava/util/List;)Ljava/lang/String; - public abstract fun dumpKotlinLike (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; - public abstract fun dumpKotlinLikeOrRemove (Lorg/sosy_lab/java_smt/api/Formula;)Ljava/lang/String; - public abstract fun mirroredElement (Ljava/lang/String;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; -} - -public final class arrow/meta/plugins/analysis/smt/utils/KotlinPrinter$DefaultImpls { - public static fun dumpKotlinLike (Larrow/meta/plugins/analysis/smt/utils/KotlinPrinter;Ljava/util/List;)Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/smt/utils/NameProvider { - public fun ()V - public final fun mirroredElement (Ljava/lang/String;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; - public final fun recordNewName (Ljava/lang/String;Larrow/meta/plugins/analysis/smt/utils/ReferencedElement;)Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/smt/utils/ReferencedElement { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/Pair;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)V - public final fun component1 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun component2 ()Lkotlin/Pair; - public final fun component3 ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public final fun copy (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/Pair;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; - public static synthetic fun copy$default (Larrow/meta/plugins/analysis/smt/utils/ReferencedElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Lkotlin/Pair;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;ILjava/lang/Object;)Larrow/meta/plugins/analysis/smt/utils/ReferencedElement; - public fun equals (Ljava/lang/Object;)Z - public final fun getElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun getReference ()Lkotlin/Pair; - public final fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/types/LiteralsKt { - public static final fun asFloatingLiteral (Ljava/lang/String;)Ljava/math/BigDecimal; - public static final fun asIntegerLiteral (Ljava/lang/String;)Ljava/math/BigInteger; -} - -public final class arrow/meta/plugins/analysis/types/PrimitiveType : java/lang/Enum { - public static final field BOOLEAN Larrow/meta/plugins/analysis/types/PrimitiveType; - public static final field CHAR Larrow/meta/plugins/analysis/types/PrimitiveType; - public static final field INTEGRAL Larrow/meta/plugins/analysis/types/PrimitiveType; - public static final field RATIONAL Larrow/meta/plugins/analysis/types/PrimitiveType; - public static final field STRING Larrow/meta/plugins/analysis/types/PrimitiveType; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/types/PrimitiveType; - public static fun values ()[Larrow/meta/plugins/analysis/types/PrimitiveType; -} - -public final class arrow/meta/plugins/analysis/types/PrimitiveTypeKt { - public static final fun primitiveType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/types/PrimitiveType; - public static final fun unwrapIfNullable (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - diff --git a/arrow-libs/analysis/analysis/common/build.gradle.kts b/arrow-libs/analysis/analysis/common/build.gradle.kts deleted file mode 100644 index dbaf91f03..000000000 --- a/arrow-libs/analysis/analysis/common/build.gradle.kts +++ /dev/null @@ -1,26 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - id(libs.plugins.kotlin.jvm.get().pluginId) - alias(libs.plugins.arrowGradleConfig.kotlin) - alias(libs.plugins.arrowGradleConfig.publish) - alias(libs.plugins.arrowGradleConfig.versioning) - alias(libs.plugins.kotlin.binaryCompatibilityValidator) -} - -kotlin { - explicitApi = null - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) - } -} - -dependencies { - compileOnly(libs.kotlin.stdlibJDK8) - api(libs.arrowCore) - api(projects.arrowAnalysisTypes) - api(libs.javaSmt) - api(libs.apacheCommonsText) - api(libs.sarif4k) - implementation(libs.kotlinx.serialization.core) -} diff --git a/arrow-libs/analysis/analysis/common/gradle.properties b/arrow-libs/analysis/analysis/common/gradle.properties deleted file mode 100644 index b0a6511c9..000000000 --- a/arrow-libs/analysis/analysis/common/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Maven publishing configuration -POM_NAME=Arrow Analysis Common Behavior -POM_ARTIFACT_ID=arrow-analysis-common -POM_PACKAGING=jar - -pom.name=Arrow Analysis Common Behavior diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt deleted file mode 100644 index b448b6696..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/continuations/ContSeq.kt +++ /dev/null @@ -1,292 +0,0 @@ -@file:OptIn(ExperimentalTypeInference::class) - -package arrow.meta.continuations - -import kotlin.coroutines.Continuation -import kotlin.coroutines.CoroutineContext -import kotlin.coroutines.EmptyCoroutineContext -import kotlin.coroutines.RestrictsSuspension -import kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED -import kotlin.coroutines.intrinsics.createCoroutineUnintercepted -import kotlin.coroutines.intrinsics.suspendCoroutineUninterceptedOrReturn -import kotlin.coroutines.resume -import kotlin.experimental.ExperimentalTypeInference - -/** - * ContSeq is multi-shot control-flow streaming type. It can emit 0..n elements, and it has ability - * to abort processing elements at any given time in the stream without aborting the whole stream. - * - * It's lazy, and thus allows for passing it around for composition. - * - * It requires **explicit** running by using a terminal operator such as [drain], [forEach], - * [toList] or [toSet]. - * - * Besides that [ContSeq] exposes APIs that you mind find on any other `Monad`. - */ -sealed class ContSeq { - - abstract operator fun iterator(): Iterator - - /** Alias for for-looping over all elements. Most efficient way to derive combinators. */ - inline fun forEach(f: (A) -> Unit) { - for (t in iterator()) f(t) - } - - /** Turns [ContSeq] into an in-memory representation as a [List] */ - fun toList(): List = mutableListOf().apply { this@ContSeq.forEach(::add) } - - /** Turns [ContSeq] into an in-memory representation as a [Set] */ - fun toSet(): Set = mutableSetOf().apply { this@ContSeq.forEach(::add) } - - /** Throws away the output of every emission */ - fun void(): ContSeq = map {} - - /** Runs the sequence of computations, but ignore the output of every computation */ - fun drain(): Unit = forEach {} - - /** - * Maps every element in the sequence with `f`, and allows for aborting the mapped value using - * [ContSyntax.abort] or [ContSyntax.ensure]. - */ - fun map(f: suspend ContSyntax.(A) -> B): ContSeq = ContSeq { - // Weird hack for RestrictSuspension - val g = f as suspend ContSeqSyntax.(A) -> B - forEach { a -> yield(g(a)) } - } - - /** Side-effecting version of map */ - inline fun onEach(crossinline f: (A) -> Unit): ContSeq = map { it.also(f) } - - fun flatMap(f: (A) -> ContSeq): ContSeq = ContSeq { forEach { a -> yieldAll(f(a)) } } - - inline fun zip(fb: ContSeq, crossinline f: (A, B) -> C): ContSeq = flatMap { a -> - fb.map { b -> f(a, b) } - } - - class VarArg(private val aas: Array) : ContSeq() { - override fun iterator(): Iterator = aas.iterator() - } - - class Iterable(private val aas: Iterable) : ContSeq() { - override fun iterator(): Iterator = aas.iterator() - } - - class Builder(private val block: suspend ContSeqSyntax.() -> Unit) : ContSeq() { - override fun iterator(): Iterator = - ContSeqBuilder().apply { - nextStep = block.createCoroutineUnintercepted(receiver = this, completion = this) - } - } - - /** Smart-constructors */ - companion object { - val unit: ContSeq = ContSeq(Unit) - - val abort: ContSeq = ContSeq { abort() } - - fun empty(): ContSeq = EMPTY - - operator fun invoke(aas: Iterable): ContSeq = Iterable(aas) - - operator fun invoke(vararg aas: A): ContSeq = VarArg(aas) - - /** Builds a [Sequence] lazily yielding values one by one. */ - operator fun invoke( - @BuilderInference block: suspend ContSeqSyntax.() -> Unit - ): ContSeq = Builder(block) - } -} - -/** Smart constructor for single-shot [ContSeq] effect. */ -inline fun cont(crossinline f: () -> A): ContSeq = ContSeq { yield(f()) } - -/** Convert any [Iterable] into a [ContSeq] */ -fun Iterable.asContSeq(): ContSeq = ContSeq { yieldAll(this@asContSeq) } - -/** Execute a list of [ContSeq] and gather the values. */ -fun List>.sequence(): ContSeq> = - if (isEmpty()) ContSeq(emptyList()) else ContSeq(flatMap { it.toList() }) - -fun List>.nested(): ContSeq> = - if (isEmpty()) { - cont { emptyList() } - } else { - first().flatMap { x -> drop(1).nested().map { xs -> listOf(x) + xs } } - } - -/** Execute a side effect only when some condition holds. */ -inline fun doOnlyWhen(condition: Boolean, crossinline f: () -> ContSeq): ContSeq = - if (condition) f() else ContSeq.unit - -/** Execute a side effect only when some condition holds. */ -inline fun doOnlyWhen( - condition: Boolean, - value: A, - crossinline f: () -> ContSeq -): ContSeq = if (condition) f() else cont { value } - -/** Execute a side effect only when some condition holds. */ -inline fun doOnlyWhenNotNull( - thing: T?, - value: A, - crossinline f: (T) -> ContSeq -): ContSeq { - return if (thing != null) f(thing) else cont { value } -} - -/** - * [ContSyntax] exposes [abort] which allows for interruption of the computation, meaning that when - * `abort` is encountered the `Cont` will be interrupted and will not yield a value. - * - * However it's a **pure** interruption of the computation, meaning it doesn't involve throwing - * exceptions or halting the program. Other functions like `guard` or `ensureNotNull` are utility - * derivation of `abort`. - */ -sealed interface ContSyntax { - suspend fun abort(): A - - suspend fun ensure(condition: Boolean): Unit = if (condition) Unit else abort() -} - -/** - * The scope for yielding values of a [ContSeq], provides [yield] and [yieldAll] suspension - * functions. - */ -@RestrictsSuspension -sealed interface ContSeqSyntax : ContSyntax { - suspend fun yield(value: A) - suspend fun yieldAll(iterator: Iterator) - suspend fun yieldAll(elements: Iterable) { - if (elements is Collection && elements.isEmpty()) return - return yieldAll(elements.iterator()) - } - - suspend fun yieldAll(sequence: Sequence) = yieldAll(sequence.iterator()) - suspend fun yieldAll(sequence: ContSeq) = yieldAll(sequence.iterator()) -} - -// Internal State Machinery -// The Builder's state: -// Starts in `State_NotReady` which means no values are available, -// This state should never be reach-able by the user since it only resides in this side when -// executing the lambda `suspend ContSeqSyntax.() -> Unit`. -// It either goes to `State_Done` without any values emitted, -// or `yield` gets called while executing the lambda changing the state to `State_Ready` with any -// amount values emitted. -// -// When a value yielded and consumed, the state machine is in (`State_Ready`) and it will go back to -// `State_NotReady`. -// This will also allow the lambda `suspend ContSeqSyntax.() -> Unit` until a next `yield` is -// found, -// or the lambda finishes either putting the state back to `State_Ready` or `State_Done`. -// -// So the state machine composes the `suspend function` from `yield` with the downstream logic, -// and it interleaves those composed functions by changing between `State_NotReady` and -// `State_Ready`. -// -// State_ManyReady & State_ManyNotReady do the same thing, but single there is a value inside -// [nextIterator] instead of [nextValue]. -// -// When a developer mistake was made, then the mechanism will run into `State_Failed` and throw an -// exception. -private typealias State = Int - -private const val State_NotReady: State = 0 -private const val State_ManyNotReady: State = 1 -private const val State_ManyReady: State = 2 -private const val State_Ready: State = 3 -private const val State_Done: State = 4 -private const val State_Failed: State = 5 - -private val EMPTY: ContSeq = ContSeq {} - -private class ContSeqBuilder : ContSeqSyntax, Iterator, Continuation { - private var state = State_NotReady - private var nextValue: T? = null - private var nextIterator: Iterator? = null - var nextStep: Continuation? = null - - override suspend fun abort(): A { - state = State_Done - return suspendCoroutineUninterceptedOrReturn { COROUTINE_SUSPENDED } - } - - override fun hasNext(): Boolean { - while (true) { - when (state) { - State_NotReady -> {} - State_ManyNotReady -> - if (nextIterator!!.hasNext()) { - state = State_ManyReady - return true - } else { - nextIterator = null - } - State_Done -> return false - State_Ready, - State_ManyReady -> return true - else -> throw exceptionalState() - } - - state = State_Failed - val step = nextStep!! - nextStep = null - step.resume(Unit) - } - } - - override fun next(): T = - when (state) { - State_NotReady, - State_ManyNotReady -> nextNotReady() - State_ManyReady -> { - state = State_ManyNotReady - nextIterator!!.next() - } - State_Ready -> { - state = State_NotReady - @Suppress("UNCHECKED_CAST") val result = nextValue as T - nextValue = null - result - } - else -> throw exceptionalState() - } - - private fun nextNotReady(): T { - if (!hasNext()) throw NoSuchElementException() else return next() - } - - private fun exceptionalState(): Throwable = - when (state) { - State_Done -> NoSuchElementException() - State_Failed -> IllegalStateException("Iterator has failed.") - else -> IllegalStateException("Unexpected state of the iterator: $state") - } - - override suspend fun yield(value: T) { - nextValue = value - state = State_Ready - return suspendCoroutineUninterceptedOrReturn { c -> - nextStep = c - COROUTINE_SUSPENDED - } - } - - override suspend fun yieldAll(iterator: Iterator) { - if (!iterator.hasNext()) return - nextIterator = iterator - state = State_ManyReady - return suspendCoroutineUninterceptedOrReturn { c -> - nextStep = c - COROUTINE_SUSPENDED - } - } - - override fun resumeWith(result: Result) { - result.getOrThrow() - state = State_Done - } - - override val context: CoroutineContext - get() = EmptyCoroutineContext -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Constants.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Constants.kt deleted file mode 100644 index 3ee99fdd4..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Constants.kt +++ /dev/null @@ -1,4 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver - -internal const val RESULT_VAR_NAME = "${'$'}result" -internal const val THIS_VAR_NAME = "this" diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DeclarationUtils.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DeclarationUtils.kt deleted file mode 100644 index 676d9cc0b..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DeclarationUtils.kt +++ /dev/null @@ -1,95 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Class -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationContainer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PureClassOrObject -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.check.stableBody - -internal fun DeclarationContainer?.singleFieldGroups( - context: ResolutionContext -): Set> = listOfNotNull(this).singleFieldGroups(context) - -internal fun Iterable.singleFieldGroups( - context: ResolutionContext -): Set> { - val result = mutableSetOf>() - forEach { - it.declarations.forEach { decl -> - val descriptor = context.descriptorFor(decl) - if (descriptor?.isField() == true) { - result.joinElements(setOfNotNull(descriptor, decl.asSingleField(context))) - } - } - } - return result -} - -internal fun MutableSet>.joinElements( - elements: Set -) { - val inElement = { s: DeclarationDescriptor -> elements.any { e -> s.fqNameSafe == e.fqNameSafe } } - val wanted = filter { set -> set.any(inElement) } - removeAll(wanted.toSet()) - add((wanted.flatten().filterNot(inElement) + elements).toSet()) -} - -/** - * Finds whether a declaration is a simple field reference, like in - * - * class A(val n: Int) { fun getValue() = n } - * - * This is specially relevant for Java getters - */ -internal fun Declaration.asSingleField(context: ResolutionContext): CallableDescriptor? = - when (val body = stableBody()) { - is BlockExpression -> { - val filtered = - body.statements.mapNotNull { stmt -> - val call = stmt.getResolvedCall(context) - when (call?.specialKind) { - null -> stmt - SpecialKind.Post -> call.getReceiverOrThisNamedArgument() - else -> null // drop the other special calls - } - } - filtered.singleOrNull()?.let { single -> - when { - single is ReturnExpression -> single.returnedExpression?.findSingleField(context) - body.implicitReturnFromLast -> single.findSingleField(context) - else -> null - } - } - } - is ReturnExpression -> body.returnedExpression?.findSingleField(context) - else -> null - } - -private fun Expression.findSingleField(context: ResolutionContext): CallableDescriptor? = - getResolvedCall(context)?.resultingDescriptor?.takeIf { it.isField() } - -private fun ClassOrObject.isInterfaceOrEnum(): Boolean = - when (this) { - is Class -> this.isInterface() || this.isEnum() - else -> false - } - -private fun ClassOrObject.isCompanionObject(): Boolean = - fqName != null && - this.parents.any { parent -> - parent is PureClassOrObject && - parent.companionObjects.any { companion -> fqName == companion?.fqName } - } - -internal fun ClassOrObject.hasImplicitPrimaryConstructor(): Boolean = - !isInterfaceOrEnum() && - !isCompanionObject() && - hasPrimaryConstructor() && - primaryConstructor == null diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtils.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtils.kt deleted file mode 100644 index 2a8093abe..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/DescriptorUtils.kt +++ /dev/null @@ -1,222 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FunctionDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints -import arrow.meta.plugins.analysis.smt.Solver -import arrow.meta.plugins.analysis.smt.renameDeclarationConstraints -import java.util.LinkedList - -/** Obtain the descriptors which have been overridden by a declaration, if they exist */ -fun DeclarationDescriptor.overriddenDescriptors(): Collection? = - when (this) { - is CallableMemberDescriptor -> this.overriddenDescriptors - else -> null - } - -internal val DeclarationDescriptor.topMostOverriden: DeclarationDescriptor - get() = overriddenDescriptors()?.first { it.overriddenDescriptors().isNullOrEmpty() } ?: this - -/** - * returns true if we have declared something with a @Law or lives inside an object that inherits - * Laws - */ -fun DeclarationDescriptor.isALaw(): Boolean = - annotations().hasAnnotation(FqName("arrow.analysis.Law")) - -/** returns true if the type inherits Laws */ -internal fun DeclarationDescriptor?.isLawsType(): Boolean = - this?.annotations()?.hasAnnotation(FqName("arrow.analysis.Laws")) ?: false - -/** - * check if a descriptor is compatible with other, in the sense that they refer to a function with - * the same signature - */ -fun DeclarationDescriptor.isCompatibleWith(other: DeclarationDescriptor): Boolean = - when { - this is CallableDescriptor && other is CallableDescriptor -> { - // we have to ignore the parameters which come from Laws - val params1 = - this.allParameters.filter { param -> - !param.type.descriptor.isLawsType() && - !(this is ConstructorDescriptor && param is ReceiverParameterDescriptor) - } - val params2 = - other.allParameters.filter { param -> - !param.type.descriptor.isLawsType() && - !(other is ConstructorDescriptor && param is ReceiverParameterDescriptor) - } - params1.size == params2.size && - params1.zip(params2).all { (p1, p2) -> - sameVarity(p1, p2) && (p1.type.isEqualTo(p2.type) || p1.type.isTypeParameter()) - } - } - else -> true - } - -/** - * check if a descriptor is compatible with other, in the sense that the arguments are (possibly) - * supertypes - */ -fun DeclarationDescriptor.isLooselyCompatibleWith(other: DeclarationDescriptor): Boolean = - when { - this is CallableDescriptor && other is CallableDescriptor -> { - // we have to ignore the parameters which come from Laws - val params1 = - this.allParameters.filter { param -> - !param.type.descriptor.isLawsType() && - !(this is ConstructorDescriptor && param is ReceiverParameterDescriptor) - } - val params2 = - other.allParameters.filter { param -> - !param.type.descriptor.isLawsType() && - !(other is ConstructorDescriptor && param is ReceiverParameterDescriptor) - } - params1.size == params2.size && - params1.zip(params2).all { (p1, p2) -> sameVarity(p1, p2) && p2.type.isSubtypeOf(p1.type) } - } - else -> true - } - -fun sameVarity(p1: ParameterDescriptor, p2: ParameterDescriptor): Boolean = - when { - p1 is ValueParameterDescriptor && p2 is ValueParameterDescriptor -> - (p1.varargElementType == null && p2.varargElementType == null) || - (p1.varargElementType != null && p2.varargElementType != null) - else -> true - } - -/** should we treat a node as a field and create 'field(name, x)'? */ -fun DeclarationDescriptor.isField(): Boolean = - when (this) { - is PropertyDescriptor -> hasOneReceiver() && !(returnType?.descriptor?.isFun ?: false) - is FunctionDescriptor -> - valueParameters.isEmpty() && hasOneReceiver() && !(returnType?.descriptor?.isFun ?: false) - else -> false - } - -/** has a dispatch or extension receiver, but not both */ -internal fun CallableDescriptor.hasOneReceiver(): Boolean = - (extensionReceiverParameter != null && dispatchReceiverParameter == null) || - (extensionReceiverParameter == null && dispatchReceiverParameter != null) - -/** Gather all descriptors which satisfy a predicate, going inside every element recursively. */ -fun DeclarationDescriptor.gather( - predicate: (DeclarationDescriptor) -> Boolean -): List { - // we fake the initial scope - val fakeMemberScope = - object : MemberScope { - override fun getClassifierNames(): Set = - throw IllegalStateException("not available here") - override fun getFunctionNames(): Set = throw IllegalStateException("not available here") - override fun getVariableNames(): Set = throw IllegalStateException("not available here") - override fun getContributedDescriptors( - filter: (name: String) -> Boolean - ): List = - listOf(this@gather).filter { decl -> filter(decl.name.value) } - } - val scopesWorklist = LinkedList(listOf(fakeMemberScope)) - // initialize place for results - val result = mutableListOf() - - // the work - while (scopesWorklist.isNotEmpty()) { - // work to do in a member scope - val scope = scopesWorklist.remove() - // 1. get all descriptors - val descriptors = scope.getContributedDescriptors { true } - // 2. add the interesting ones to the result - result.addAll(descriptors.filter(predicate)) - // 3. add all new member scopes to the worklist - scopesWorklist.addAll( - descriptors.filterIsInstance().map { it.completeUnsubstitutedScope } - ) - scopesWorklist.addAll( - descriptors.filterIsInstance().mapNotNull { - it.classDescriptor?.completeUnsubstitutedScope - } - ) - } - - return result.toList() -} - -/** Gather all descriptors which satisfy a predicate, going inside every element recursively. */ -fun ModuleDescriptor.gather( - initialPackages: List = listOf(FqName("")), - addSubPackages: Boolean, - predicate: (DeclarationDescriptor) -> Boolean -): List { - // initialize worklists - val packagesWorklist = LinkedList(initialPackages) - val scopesWorklist = LinkedList() - // initialize place for results - val result = mutableListOf() - - // the work - while (true) { - if (scopesWorklist.isNotEmpty()) { - // work to do in a member scope - val scope = scopesWorklist.remove() - // 1. get all descriptors - val descriptors = scope.getContributedDescriptors { true } - // 2. add the interesting ones to the result - result.addAll(descriptors.filter(predicate)) - // 3. add all new member scopes to the worklist - scopesWorklist.addAll( - descriptors.filterIsInstance().map { it.completeUnsubstitutedScope } - ) - scopesWorklist.addAll( - descriptors.filterIsInstance().mapNotNull { - it.classDescriptor?.completeUnsubstitutedScope - } - ) - } else if (packagesWorklist.isNotEmpty()) { - // work to do in a package - val pkg = packagesWorklist.remove() - // 1. add the scope to the worklist - getPackage(pkg.name)?.memberScope?.let { scopesWorklist.add(it) } - // 2. add the subpackages to the worklist - if (addSubPackages) packagesWorklist.addAll(getSubPackagesOf(pkg)) - } else { - break - } - } - - return result.toList() -} - -/** Rename the conditions from one descriptor to the names of another */ -internal fun Solver.renameConditions( - constraints: DeclarationConstraints, - to: DeclarationDescriptor -): DeclarationConstraints { - val fromParams = - (constraints.descriptor as? CallableDescriptor)?.valueParameters?.map { it.name.value } - val toParams = (to as? CallableDescriptor)?.valueParameters?.map { it.name.value } - return if (fromParams != null && toParams != null) { - val renamed = renameDeclarationConstraints(constraints, fromParams.zip(toParams).toMap()) - DeclarationConstraints(to, renamed.pre, renamed.post, renamed.doNotLookAtArgumentsWhen) - } else { - DeclarationConstraints( - to, - constraints.pre, - constraints.post, - constraints.doNotLookAtArgumentsWhen - ) - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt deleted file mode 100644 index 9f34e7d9a..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/Primitive.kt +++ /dev/null @@ -1,200 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.smt.Solver -import arrow.meta.plugins.analysis.smt.boolAnd -import arrow.meta.plugins.analysis.smt.boolEquivalence -import arrow.meta.plugins.analysis.smt.boolNot -import arrow.meta.plugins.analysis.smt.boolOr -import arrow.meta.plugins.analysis.smt.boolXor -import arrow.meta.plugins.analysis.smt.intEquals -import arrow.meta.plugins.analysis.smt.intGreaterThan -import arrow.meta.plugins.analysis.smt.intGreaterThanOrEquals -import arrow.meta.plugins.analysis.smt.intLessThan -import arrow.meta.plugins.analysis.smt.intLessThanOrEquals -import arrow.meta.plugins.analysis.smt.intMinus -import arrow.meta.plugins.analysis.smt.intNegate -import arrow.meta.plugins.analysis.smt.intPlus -import arrow.meta.plugins.analysis.smt.rationalEquals -import arrow.meta.plugins.analysis.smt.rationalGreaterThan -import arrow.meta.plugins.analysis.smt.rationalGreaterThanOrEquals -import arrow.meta.plugins.analysis.smt.rationalLessThan -import arrow.meta.plugins.analysis.smt.rationalLessThanOrEquals -import arrow.meta.plugins.analysis.smt.rationalMinus -import arrow.meta.plugins.analysis.smt.rationalNegate -import arrow.meta.plugins.analysis.smt.rationalPlus -import arrow.meta.plugins.analysis.types.PrimitiveType -import arrow.meta.plugins.analysis.types.primitiveType -import arrow.meta.plugins.analysis.types.unwrapIfNullable -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.Formula -import org.sosy_lab.java_smt.api.NumeralFormula - -/* - * Most of the information in this file refers to - * https://kotlinlang.org/docs/basic-types.html - */ - -fun Solver.primitiveFormula( - context: ResolutionContext, - resolvedCall: ResolvedCall, - args: List -): Formula? { - val descriptor = resolvedCall.resultingDescriptor - val returnTy = descriptor.returnType?.primitiveType() - val argTys = descriptor.allParameters.map { param -> param.type.primitiveType() } - return when { - descriptor.isComparison() -> comparisonFormula(context, resolvedCall, args) - returnTy == PrimitiveType.BOOLEAN && argTys.all { it == PrimitiveType.BOOLEAN } -> - booleanFormula(descriptor, args) - returnTy == PrimitiveType.INTEGRAL && argTys.all { it == PrimitiveType.INTEGRAL } -> - integralFormula(descriptor, args) - returnTy == PrimitiveType.RATIONAL && argTys.all { it == PrimitiveType.RATIONAL } -> - rationalFormula(descriptor, args) - else -> null - } -} - -private val comparisonNames: List = - listOf( - "kotlin.Any.equals", - "kotlin.Comparable.equals", - "kotlin.Comparable.compareTo", - ">", - ">=", - "<", - "<=", - "==", - "!=" - ) - .map { FqName(it) } - -internal fun CallableDescriptor.isComparison() = - (listOf(this) + overriddenDescriptors).any { comparisonNames.contains(it.fqNameSafe) } - -private fun Solver.comparisonFormula( - context: ResolutionContext, - resolvedCall: ResolvedCall, - args: List -): BooleanFormula? = - resolvedCall - .allArgumentExpressions(context) - .takeIf { it.size == 2 } - ?.let { - val ty1 = it[0].type.unwrapIfNullable().primitiveType() - val ty2 = it[1].type.unwrapIfNullable().primitiveType() - val op = (resolvedCall.callElement as? BinaryExpression)?.operationToken - when { - ty1 == PrimitiveType.BOOLEAN && ty2 == PrimitiveType.BOOLEAN -> - when (op) { - "==" -> boolEquivalence(args) - "!=" -> boolEquivalence(args)?.let { f -> not(f) } - else -> null - } - ty1 == PrimitiveType.INTEGRAL && ty2 == PrimitiveType.INTEGRAL -> - when (op) { - "==" -> intEquals(args) - "!=" -> intEquals(args)?.let { f -> not(f) } - ">" -> intGreaterThan(args) - ">=" -> intGreaterThanOrEquals(args) - "<" -> intLessThan(args) - "<=" -> intLessThanOrEquals(args) - else -> null - } - ty1 == PrimitiveType.RATIONAL && ty2 == PrimitiveType.RATIONAL -> - when (op) { - "==" -> rationalEquals(args) - "!=" -> rationalEquals(args)?.let { f -> not(f) } - ">" -> rationalGreaterThan(args) - ">=" -> rationalGreaterThanOrEquals(args) - "<" -> rationalLessThan(args) - "<=" -> rationalLessThanOrEquals(args) - else -> null - } - ty1 == null && ty2 == null -> // equality on objects - when (op) { - "==" -> intEquals(args) - else -> null - } - else -> null - } - } - -private fun Solver.booleanFormula( - descriptor: CallableDescriptor, - args: List -): BooleanFormula? = - when (descriptor.fqNameSafe) { - FqName("kotlin.Boolean.not"), - FqName("!") -> boolNot(args) - FqName("kotlin.Boolean.and"), - FqName("&&") -> boolAnd(args) - FqName("kotlin.Boolean.or"), - FqName("||") -> boolOr(args) - FqName("kotlin.Boolean.xor") -> boolXor(args) - else -> null - } - -private fun Solver.integralFormula( - descriptor: CallableDescriptor, - args: List -): NumeralFormula.IntegerFormula? = - when (descriptor.name.value) { - "plus" -> intPlus(args) - "unaryPlus" -> (args.getOrNull(0) as? NumeralFormula.IntegerFormula) - "+" -> - when (args.size) { - 2 -> intPlus(args) - 1 -> (args.getOrNull(0) as? NumeralFormula.IntegerFormula) - else -> throw IllegalArgumentException("+ with weird # of parameters") - } - "minus" -> intMinus(args) - "unaryMinus" -> intNegate(args) - "-" -> - when (args.size) { - 2 -> intMinus(args) - 1 -> intNegate(args) - else -> throw IllegalArgumentException("- with weird # of parameters") - } - // "times", "*" -> intMultiply(args) // not all SMT solvers support multiplication - // "div", "/" -> intDivide(args) // not all SMT solvers support div - "inc", - "++" -> intPlus(args + listOf(integerFormulaManager.makeNumber(1))) - "dec", - "--" -> intMinus(args + listOf(integerFormulaManager.makeNumber(1))) - else -> null - } - -private fun Solver.rationalFormula( - descriptor: CallableDescriptor, - args: List -): NumeralFormula.RationalFormula? = - when (descriptor.name.value) { - "plus" -> rationalPlus(args) - "unaryPlus" -> (args.getOrNull(0) as? NumeralFormula.RationalFormula) - "+" -> - when (args.size) { - 2 -> rationalPlus(args) - 1 -> (args.getOrNull(0) as? NumeralFormula.RationalFormula) - else -> throw IllegalArgumentException("+ with weird # of parameters") - } - "minus" -> rationalMinus(args) - "unaryMinus" -> rationalNegate(args) - "-" -> - when (args.size) { - 2 -> rationalMinus(args) - 1 -> rationalNegate(args) - else -> throw IllegalArgumentException("- with weird # of parameters") - } - // "times", "*" -> rationalMultiply(args) // not all SMT solvers support multiplication - // "div", "/" -> rationalDivide(args) // not all SMT solvers support div - "inc", - "++" -> rationalPlus(args + listOf(integerFormulaManager.makeNumber(1))) - "dec", - "--" -> rationalMinus(args + listOf(integerFormulaManager.makeNumber(1))) - else -> null - } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt deleted file mode 100644 index 69e205d8d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ResolvedCallUtils.kt +++ /dev/null @@ -1,175 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DefaultValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssertExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -enum class SpecialKind { - Pre, - Post, - Invariant, - TrustCall, - TrustBlock, - NotLookArgs -} - -internal val ResolvedCall.specialKind: SpecialKind? - get() = - when (resultingDescriptor.fqNameSafe) { - FqName("arrow.analysis.pre"), - FqName("arrow.analysis.RefinementDSLKt.pre") -> SpecialKind.Pre - FqName("kotlin.require") -> SpecialKind.Pre - FqName(AssertExpression.FAKE_ASSERT_NAME) -> SpecialKind.Pre - FqName("arrow.analysis.post"), - FqName("arrow.analysis.RefinementDSLKt.post") -> SpecialKind.Post - FqName("arrow.analysis.invariant"), - FqName("arrow.analysis.RefinementDSLKt.invariant") -> SpecialKind.Invariant - FqName("arrow.analysis.unsafeCall"), - FqName("arrow.analysis.RefinementDSLKt.unsafeCall") -> SpecialKind.TrustCall - FqName("arrow.analysis.unsafeBlock"), - FqName("arrow.analysis.RefinementDSLKt.unsafeBlock") -> SpecialKind.TrustBlock - FqName("arrow.analysis.doNotLookAtArgumentsWhen"), - FqName("arrow.analysis.RefinementDSLKt.doNotLookAtArgumentsWhen") -> SpecialKind.NotLookArgs - else -> null - } - -/** Returns `true` if [this] resolved call is calling [kotlin.require] */ -internal fun ResolvedCall.isRequireCall(): Boolean = - resultingDescriptor.fqNameSafe == FqName("kotlin.require") - -/** Returns `true` if [this] resolved call is calling Java's built-in [assert] */ -internal fun ResolvedCall.isAssertCall(): Boolean = - resultingDescriptor.fqNameSafe == FqName(AssertExpression.FAKE_ASSERT_NAME) - -/** Returns 'true' if the resolved call represents `?:` */ -internal fun ResolvedCall.isElvisOperator(): Boolean = - resultingDescriptor.fqNameSafe == FqName("") - -/** Returns `true` if the function has either a dispatch or an extension receiver */ -internal fun ResolvedCall.hasReceiver() = - this.resultingDescriptor.dispatchReceiverParameter != null || - this.resultingDescriptor.extensionReceiverParameter != null - -/** Returns 'true' if the only receiver is a class */ -internal fun ResolvedCall.hasClassReceiver() = - extensionReceiver == null && dispatchReceiver != null && dispatchReceiver!!.isClassReceiver - -/** Information about an argument in a resolved call */ -data class ArgumentExpression( - val name: String, - val type: Type, - val isVarArg: Boolean, - val isSpread: Boolean, - val expression: List -) - -/** - * Get all argument expressions for [this] call including extension receiver, dispatch receiver, and - * all value arguments - */ -internal fun ResolvedCall.allArgumentExpressions( - context: ResolutionContext -): List = - listOfNotNull( - (dispatchReceiver ?: extensionReceiver)?.type?.let { - ArgumentExpression( - "this", - it, - isVarArg = false, - isSpread = false, - listOfNotNull(getReceiverExpression()) - ) - } - ) + valueArgumentExpressions(context) - -/** - * this is needed because in Java we call 'post' as > post(thing, predicate, message) whereas in - * Kotlin we use it as extension method > thing.post(predicate, message) - */ -internal fun ResolvedCall.getReceiverOrThisNamedArgument(): Expression? = - this.getReceiverExpression() - ?: this.valueArguments.entries - .firstOrNull { (name, _) -> name.name.value.contains("this") } - ?.value - ?.arguments - ?.getOrNull(0) - ?.argumentExpression - -/** Get all value arguments for [this] call */ -internal fun ResolvedCall.valueArgumentExpressions( - context: ResolutionContext -): List = - valueArguments.mapNotNull { (param, resolvedArg) -> - val containingType = - if (param.type.isTypeParameter() || param.type.isAnyOrNullableAny()) - (param.containingDeclaration?.containingDeclaration as? ClassDescriptor)?.defaultType - ?: context.types.nothingType - else param.type - when { - resolvedArg is DefaultValueArgument && resolvedArg.valueArgument == null -> - param.defaultValue?.let { defaultValue -> - ArgumentExpression( - param.name.value, - containingType, - isVarArg = param.varargElementType != null, - isSpread = false, - listOf(defaultValue) - ) - } - else -> - ArgumentExpression( - param.name.value, - containingType, - isVarArg = param.varargElementType != null, - isSpread = resolvedArg.arguments.singleOrNull()?.isSpread ?: false, - resolvedArg.arguments.mapNotNull { it.argumentExpression } - ) - } - } - -/** Obtains the expression from the argument with a given [argumentName] */ -internal fun ResolvedCall.arg(argumentName: String, context: ResolutionContext): List? = - allArgumentExpressions(context).find { it.name == argumentName }?.expression - -/** - * Obtains the expression from the argument with a given [argumentName], which should not be a - * vararg - */ -internal fun ResolvedCall.singleArg(argumentName: String, context: ResolutionContext): Expression? = - allArgumentExpressions(context).find { it.name == argumentName }?.expression?.singleOrNull() - -/** - * Obtains the [ResolvedValueArgument] information for the argument with the given [argumentName] - */ -internal fun ResolvedCall.resolvedArg(argumentName: String): ResolvedValueArgument? = - valueArguments.firstNotNullOfOrNull { (descriptor, resolvedArg) -> - resolvedArg.takeIf { descriptor.name.value == argumentName } - } - -/** Obtains the information about the argument whose expression is [arg] */ -internal fun ResolvedCall.referencedArg( - arg: Expression? -): Pair? = - valueArguments.toList().firstOrNull { (_, resolvedArg) -> - resolvedArg.arguments.any { valueArg -> valueArg.argumentExpression?.impl() == arg?.impl() } - } - -internal fun Expression.inTrustedEnvironment(context: ResolutionContext): Boolean { - val parents = parents() - // where does the 2 come from? - // - parent 0 -> ValueArgument - // - parent 1 -> ValueArgumentList - // - parent 2 -> potential CallExpression - val trustCall = - parents.getOrNull(2)?.getResolvedCall(context)?.specialKind == SpecialKind.TrustCall - val trustBlock = - parents.any { it.getResolvedCall(context)?.specialKind == SpecialKind.TrustBlock } - return trustCall || trustBlock -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext.kt deleted file mode 100644 index ca92045f0..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext.kt +++ /dev/null @@ -1,27 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Types -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds - -interface ResolutionContext { - val types: Types - fun handleError(error: ErrorIds, element: Element, msg: String): Unit - fun type(typeReference: TypeReference?): Type? - fun Element.constraintsDSLElements(): List - fun descriptorFor(fqName: FqName): List - fun descriptorFor(declaration: Declaration): DeclarationDescriptor? - fun backingPropertyForConstructorParameter( - parameter: ValueParameterDescriptor - ): PropertyDescriptor? - - val module: ModuleDescriptor -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall.kt deleted file mode 100644 index 1a86ca673..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall.kt +++ /dev/null @@ -1,21 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface ResolvedCall { - val callElement: Element - fun getReceiverExpression(): Expression? - fun getReturnType(): Type - val dispatchReceiver: ReceiverValue? - val extensionReceiver: ReceiverValue? - val resultingDescriptor: CallableDescriptor - val valueArguments: Map - val typeArguments: Map -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult.kt deleted file mode 100644 index 33d7518a6..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnalysisResult.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -enum class AnalysisResult { - Retry, - Completed, - ParsingError -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated.kt deleted file mode 100644 index dc7a9754b..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated.kt +++ /dev/null @@ -1,25 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName - -interface Annotated { - fun annotations(): Annotations - - val hasPreOrPostAnnotation: Boolean - get() = - annotations().run { - hasAnnotation(FqName("arrow.analysis.Pre")) || hasAnnotation(FqName("arrow.analysis.Post")) - } - - val hasPackageWithLawsAnnotation: Boolean - get() = annotations().hasAnnotation(FqName("arrow.analysis.PackagesWithLaws")) - - val packageWithLawsAnnotation: AnnotationDescriptor? - get() = annotations().findAnnotation(FqName("arrow.analysis.PackagesWithLaws")) - - val hasDoNotLookAtArgumentsAnnotation: Boolean - get() = annotations().hasAnnotation(FqName("arrow.analysis.DoNotLookAtArguments")) -} - -val Annotated.hasInterestingAnnotation: Boolean - get() = hasPreOrPostAnnotation || hasDoNotLookAtArgumentsAnnotation diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor.kt deleted file mode 100644 index 9d4436095..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface AnnotationDescriptor { - val allValueArguments: Map - - fun argumentValueAsString(argName: String): String? - fun argumentValueAsArrayOfString(argName: String): List - - val fqName: FqName? - - val type: Type -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations.kt deleted file mode 100644 index c13fa6817..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName - -interface Annotations { - - fun iterable(): Iterable - - val impl: Any - - fun findAnnotation(fqName: FqName): AnnotationDescriptor? - - fun hasAnnotation(fqName: FqName): Boolean - - fun isEmpty(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor.kt deleted file mode 100644 index 584007737..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface CallableDescriptor : DeclarationDescriptor { - val allParameters: List - val extensionReceiverParameter: ReceiverParameterDescriptor? - val dispatchReceiverParameter: ReceiverParameterDescriptor? - val typeParameters: List - val returnType: Type? - val valueParameters: List - val overriddenDescriptors: Collection -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor.kt deleted file mode 100644 index cca653a56..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface CallableMemberDescriptor : CallableDescriptor, MemberDescriptor { - val kind: Kind - - enum class Kind { - DECLARATION, - FAKE_OVERRIDE, - DELEGATION, - SYNTHESIZED - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor.kt deleted file mode 100644 index 8d089ed5e..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor.kt +++ /dev/null @@ -1,38 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface ClassDescriptor : DeclarationDescriptor, ClassifierDescriptorWithTypeParameters { - - val unsubstitutedMemberScope: MemberScope - val staticScope: MemberScope - val unsubstitutedInnerClassesScope: MemberScope - val completeUnsubstitutedScope: MemberScope - get() = - CombinedMemberScope( - listOf(unsubstitutedMemberScope, staticScope, unsubstitutedInnerClassesScope) - ) - - val constructors: Collection - val companionObjectDescriptor: ClassDescriptor? - val kind: ClassKind - val isCompanionObject: Boolean - val isData: Boolean - val isInline: Boolean - val isFun: Boolean - val isValue: Boolean - val isEnumEntry: Boolean - val thisAsReceiverParameter: ReceiverParameterDescriptor - val unsubstitutedPrimaryConstructor: ConstructorDescriptor? - val sealedSubclasses: Collection - val superTypes: Collection - - enum class ClassKind { - CLASS, - INTERFACE, - ENUM_CLASS, - ENUM_ENTRY, - ANNOTATION_CLASS, - OBJECT - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor.kt deleted file mode 100644 index 9264fe8d7..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface ClassifierDescriptor { - val typeConstructor: TypeConstructor - val defaultType: Type -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters.kt deleted file mode 100644 index 32f1ce709..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface ClassifierDescriptorWithTypeParameters : - ClassifierDescriptor, DeclarationDescriptorWithVisibility, MemberDescriptor { - val isInner: Boolean - - val declaredTypeParameters: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor.kt deleted file mode 100644 index 424c0cc6e..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface ConstructorDescriptor : FunctionDescriptor { - val constructedClass: ClassDescriptor - val isPrimary: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor.kt deleted file mode 100644 index 0276f91da..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName - -interface DeclarationDescriptor : Named, Annotated { - val containingDeclaration: DeclarationDescriptor? - val containingPackage: FqName? - fun element(): Element? - val fqNameSafe: FqName - fun impl(): Any -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility.kt deleted file mode 100644 index 5429a02bc..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface DeclarationDescriptorWithVisibility : DeclarationDescriptor { - val visibility: Visibility -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument.kt deleted file mode 100644 index 71fa7d37a..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument - -interface DefaultValueArgument : ResolvedValueArgument { - val valueArgument: ValueArgument? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument.kt deleted file mode 100644 index 1292d8255..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument - -interface ExpressionValueArgument : ResolvedValueArgument { - val valueArgument: ValueArgument? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor.kt deleted file mode 100644 index 3239764b6..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface FieldDescriptor : Annotated { - val correspondingProperty: PropertyDescriptor -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor.kt deleted file mode 100644 index 78ac31841..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor.kt +++ /dev/null @@ -1,25 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface FunctionDescriptor : CallableMemberDescriptor { - val isOperator: Boolean - val isInfix: Boolean - val isInline: Boolean - val isTailrec: Boolean - val isSuspend: Boolean -} - -/** Removes the indirection from type aliases in a descriptor. */ -val DeclarationDescriptor.withAliasUnwrapped: DeclarationDescriptor - get() = - when (this) { - is FunctionDescriptor -> this.withAliasUnwrapped - else -> this - } - -/** Removes the indirection from type aliases in a descriptor. */ -val FunctionDescriptor.withAliasUnwrapped: FunctionDescriptor - get() = - when (this) { - is TypeAliasConstructorDescriptor -> this.underlyingConstructorDescriptor.withAliasUnwrapped - else -> this - } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor.kt deleted file mode 100644 index 274bc36d5..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface LocalVariableDescriptor : VariableDescriptor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor.kt deleted file mode 100644 index 82412d769..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface MemberDescriptor : DeclarationDescriptor { - val modality: Modality - val visibility: Visibility - val isExpect: Boolean - val isActual: Boolean - val isExternal: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope.kt deleted file mode 100644 index 0922ff091..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope.kt +++ /dev/null @@ -1,23 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name - -interface MemberScope { - fun getClassifierNames(): Set - - fun getFunctionNames(): Set - - fun getVariableNames(): Set - - fun getContributedDescriptors(filter: (name: String) -> Boolean): List -} - -class CombinedMemberScope(private val scopes: Collection) : MemberScope { - override fun getClassifierNames(): Set = scopes.flatMap { it.getClassifierNames() }.toSet() - override fun getFunctionNames(): Set = scopes.flatMap { it.getFunctionNames() }.toSet() - override fun getVariableNames(): Set = scopes.flatMap { it.getVariableNames() }.toSet() - override fun getContributedDescriptors( - filter: (name: String) -> Boolean - ): List = - scopes.flatMap { it.getContributedDescriptors(filter) }.distinctBy { it.impl() } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality.kt deleted file mode 100644 index 65d910e7a..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -enum class Modality { - FINAL, - SEALED, - OPEN, - ABSTRACT -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor.kt deleted file mode 100644 index 072d1a517..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor.kt +++ /dev/null @@ -1,10 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name - -interface ModuleDescriptor : DeclarationDescriptor { - fun getPackage(pck: String): PackageViewDescriptor? - fun getSubPackagesOf(fqName: FqName): List - val stableName: Name? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named.kt deleted file mode 100644 index 424f4e624..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name - -interface Named { - val name: Name -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor.kt deleted file mode 100644 index 91dd3d2d1..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface PackageFragmentDescriptor : DeclarationDescriptor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor.kt deleted file mode 100644 index 5c36ee64d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName - -interface PackageViewDescriptor : DeclarationDescriptor { - val memberScope: MemberScope - val fqName: FqName -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor.kt deleted file mode 100644 index 33f28c536..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface ParameterDescriptor : ValueDescriptor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor.kt deleted file mode 100644 index ff8c40d5e..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface PropertyAccessorDescriptor : VariableAccessorDescriptor { - override val overriddenDescriptors: Collection -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor.kt deleted file mode 100644 index 70b495ffc..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface PropertyDescriptor : VariableDescriptorWithAccessors, CallableMemberDescriptor { - val isSetterProjectedOut: Boolean - val accessors: List - val backingField: FieldDescriptor? - val delegateField: FieldDescriptor? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor.kt deleted file mode 100644 index a902306ec..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface ReceiverParameterDescriptor : ParameterDescriptor { - val value: ReceiverValue -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue.kt deleted file mode 100644 index 6bc38cf41..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface ReceiverValue { - val type: Type - val isClassReceiver: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument.kt deleted file mode 100644 index 290da38a3..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument - -interface ResolvedValueArgument { - val arguments: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor.kt deleted file mode 100644 index 214a2476c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface SimpleFunctionDescriptor : FunctionDescriptor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor.kt deleted file mode 100644 index 2aca498d5..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface TypeAliasConstructorDescriptor : ConstructorDescriptor { - val underlyingConstructorDescriptor: ConstructorDescriptor - fun getContainingDeclaration(): TypeAliasDescriptor -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor.kt deleted file mode 100644 index 42fbf64a7..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor.kt +++ /dev/null @@ -1,14 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface TypeAliasDescriptor : ClassifierDescriptorWithTypeParameters { - - val underlyingType: Type - - val expandedType: Type - - val classDescriptor: ClassDescriptor? - - val constructors: Collection -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor.kt deleted file mode 100644 index 527055790..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor.kt +++ /dev/null @@ -1,11 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface TypeConstructor { - val parameters: List - val supertypes: Collection - val isFinal: Boolean - val isDenotable: Boolean - val declarationDescriptor: ClassifierDescriptor? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor.kt deleted file mode 100644 index 8b9e65ca2..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance - -interface TypeParameterDescriptor : ClassifierDescriptor { - val isReified: Boolean - val variance: Variance - val upperBounds: List - - val index: Int - val isCapturedFromOuterDeclaration: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor.kt deleted file mode 100644 index a4ec11f4f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface ValueDescriptor : CallableDescriptor { - val type: Type -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor.kt deleted file mode 100644 index 482ac4b5d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface ValueParameterDescriptor : VariableDescriptor, ParameterDescriptor { - val index: Int - val isCrossinline: Boolean - val isNoinline: Boolean - val varargElementType: Type? - fun declaresDefaultValue(): Boolean - val defaultValue: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor.kt deleted file mode 100644 index 857c5efea..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface VariableAccessorDescriptor : FunctionDescriptor { - val correspondingVariable: VariableDescriptorWithAccessors -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor.kt deleted file mode 100644 index fd4ab99fb..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface VariableDescriptor : ValueDescriptor { - val isVar: Boolean - val isConst: Boolean - val isLateInit: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors.kt deleted file mode 100644 index cf9c47d00..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface VariableDescriptorWithAccessors : VariableDescriptor { - val getter: VariableAccessorDescriptor? - - val isDelegated: Boolean - - val setter: VariableAccessorDescriptor? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility.kt deleted file mode 100644 index 2c349c6d1..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors - -interface Visibility { - val isPublicAPI: Boolean - val name: String -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated.kt deleted file mode 100644 index d04c0fdc5..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface Annotated : Element { - fun getAnnotations(): List - val annotationEntries: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression.kt deleted file mode 100644 index c0381ece7..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface AnnotatedExpression : Annotated, AnnotationsContainer { - val baseExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation.kt deleted file mode 100644 index 928ccba4a..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface Annotation { - val entries: List - val useSiteTarget: AnnotationUseSiteTarget? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry.kt deleted file mode 100644 index d51a8043f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface AnnotationEntry : CallElement { - val typeReference: TypeReference? - val useSiteTarget: AnnotationUseSiteTarget? - val shortName: Name? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget.kt deleted file mode 100644 index 9093c7b42..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -enum class AnnotationUseSiteTarget { - FIELD, - FILE, - PROPERTY, - PROPERTY_GETTER, - PROPERTY_SETTER, - RECEIVER, - CONSTRUCTOR_PARAMETER, - SETTER_PARAMETER, - PROPERTY_DELEGATE_FIELD -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer.kt deleted file mode 100644 index 37ed913cb..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface AnnotationsContainer : Element diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer.kt deleted file mode 100644 index 457010075..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface AnonymousInitializer : Declaration { - val containingDeclaration: Declaration - val body: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression.kt deleted file mode 100644 index 9a2c495e9..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ArrayAccessExpression : ReferenceExpression { - val arrayExpression: Expression? - val indexExpressions: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression.kt deleted file mode 100644 index 053d242a5..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -// this represents the following Java -// > assert condition ; -// > assert condition : detail ; -interface AssertExpression : Expression { - val condition: Expression - val detail: Expression? - - companion object { - val FAKE_ASSERT_NAME: String = "" - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression.kt deleted file mode 100644 index 2a0677cf4..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression.kt +++ /dev/null @@ -1,11 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface AssignmentExpression : OperationExpression { - /** The token as appears in the source code (+, -, ...) */ - val operationToken: String - - /** One of the codes from [org.jetbrains.kotlin.lexer.KtTokens] (PLUS, MINUS, ...) */ - val operationTokenRpr: String - val left: Expression? - val right: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression.kt deleted file mode 100644 index e4e43a970..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression.kt +++ /dev/null @@ -1,11 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface BinaryExpression : OperationExpression { - /** The token as appears in the source code (+, -, ...) */ - val operationToken: String - - /** One of the codes from [org.jetbrains.kotlin.lexer.KtTokens] (PLUS, MINUS, ...) */ - val operationTokenRpr: String - val left: Expression? - val right: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression.kt deleted file mode 100644 index 1707375d7..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface BlockExpression : Element, Expression { - val firstStatement: Expression? - val statements: List - val implicitReturnFromLast: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression.kt deleted file mode 100644 index a0b7e71d5..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface BreakExpression : ExpressionWithLabel diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement.kt deleted file mode 100644 index ddf0ab26c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface CallElement : Element { - val calleeExpression: Expression? - val valueArguments: List - val lambdaArguments: List - val typeArguments: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression.kt deleted file mode 100644 index 3e421b709..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface CallExpression : CallElement, ReferenceExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration.kt deleted file mode 100644 index 644f688c2..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface CallableDeclaration : NamedDeclaration, TypeParameterListOwner { - val valueParameterList: ParameterList? - val valueParameters: List - val receiverTypeReference: TypeReference? - val typeReference: TypeReference? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression.kt deleted file mode 100644 index 119135304..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface CallableReferenceExpression : DoubleColonExpression { - val callableReference: SimpleNameExpression -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause.kt deleted file mode 100644 index 6d28271bb..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface CatchClause : Element { - val parameterList: ParameterList? - val catchParameter: Parameter? - val catchBody: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class.kt deleted file mode 100644 index b3ad1ffdc..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface Class : ClassOrObject { - fun getProperties(): List - fun isInterface(): Boolean - fun isEnum(): Boolean - fun isData(): Boolean - fun isSealed(): Boolean - fun isInner(): Boolean - fun isInline(): Boolean - fun isValue(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody.kt deleted file mode 100644 index 01d275be6..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ClassBody : DeclarationContainer, Element { - val anonymousInitializers: List - val properties: List - val functions: List - val enumEntries: List - val allCompanionObjects: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer.kt deleted file mode 100644 index 7b897ddf1..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ClassInitializer : AnonymousInitializer diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression.kt deleted file mode 100644 index d427e9ec0..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ClassLiteralExpression : DoubleColonExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject.kt deleted file mode 100644 index b241f0b49..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ClassOrObject : NamedDeclaration, PureClassOrObject { - fun getAnonymousInitializers(): List - fun isTopLevel(): Boolean - fun getPrimaryConstructorParameterList(): ParameterList? = primaryConstructor?.valueParameterList - fun isAnnotation(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation.kt deleted file mode 100644 index ff63d7181..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation.kt +++ /dev/null @@ -1,10 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface CompilerMessageSourceLocation { - val column: Int - val columnEnd: Int - val line: Int - val lineContent: String? - val lineEnd: Int - val path: String -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression.kt deleted file mode 100644 index 008dc6816..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ConstantExpression : Expression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor.kt deleted file mode 100644 index 1656feab1..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface Constructor> : Function { - fun getContainingClassOrObject(): ClassOrObject -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression.kt deleted file mode 100644 index c80b7e945..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ConstructorCalleeExpression { - val typeReference: TypeReference? - val constructorReferenceExpression: SimpleNameExpression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall.kt deleted file mode 100644 index 297412127..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ConstructorDelegationCall : Element, CallElement { - val isImplicit: Boolean - val isCallToThis: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression.kt deleted file mode 100644 index 6b07f0e46..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ConstructorDelegationReferenceExpression : Expression, ReferenceExpression { - val isThis: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression.kt deleted file mode 100644 index 7d8745037..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ContinueExpression : ExpressionWithLabel diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration.kt deleted file mode 100644 index 53a9841b7..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface Declaration : Expression, ModifierListOwner { - val name: String? - val parents: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer.kt deleted file mode 100644 index af62a41b9..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface DeclarationContainer { - val declarations: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody.kt deleted file mode 100644 index 5701a07f8..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface DeclarationWithBody : Declaration { - val bodyExpression: Expression? - fun hasBlockBody(): Boolean - fun hasBody(): Boolean - fun hasDeclaredReturnType(): Boolean - fun body(): Expression? - - val valueParameters: List - val bodyBlockExpression: BlockExpression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer.kt deleted file mode 100644 index 1b33add28..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface DeclarationWithInitializer : Declaration { - val initializer: Expression? - fun hasInitializer(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry.kt deleted file mode 100644 index 7a8134db7..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface DelegatedSuperTypeEntry : SuperTypeListEntry { - val delegateExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration.kt deleted file mode 100644 index 936d164cd..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface DestructuringDeclaration : DeclarationWithInitializer { - val entries: List - val isVar: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry.kt deleted file mode 100644 index 2e74eeb84..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface DestructuringDeclarationEntry : VariableDeclaration diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression.kt deleted file mode 100644 index 930d3191c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface DoWhileExpression : WhileExpressionBase diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression.kt deleted file mode 100644 index ba21ff00c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface DotQualifiedExpression : QualifiedExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression.kt deleted file mode 100644 index 55a346c25..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface DoubleColonExpression : Expression { - val receiverExpression: Expression? - val hasQuestionMarks: Boolean - val isEmptyLHS: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element.kt deleted file mode 100644 index df252ec77..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element.kt +++ /dev/null @@ -1,14 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor - -interface Element : PureElement { - val text: String - fun impl(): Any - fun getResolvedCall(context: ResolutionContext): ResolvedCall? - fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? - fun parents(): List - fun location(): CompilerMessageSourceLocation? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry.kt deleted file mode 100644 index af05cdeb9..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface EnumEntry : Class { - fun hasInitializer(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression.kt deleted file mode 100644 index a34e6fad2..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -interface Expression : Element { - fun type(context: ResolutionContext): Type? - fun lastBlockStatementOrThis(): Expression -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument.kt deleted file mode 100644 index 0fcb878a1..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ExpressionLambdaArgument : LambdaArgument diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument.kt deleted file mode 100644 index 6626288a1..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ExpressionResolvedValueArgument { - val argumentExpression: Expression? - val isSpread: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName.kt deleted file mode 100644 index 0f70fa9b1..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionValueArgumentName.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ExpressionValueArgumentName : ValueArgumentName diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel.kt deleted file mode 100644 index c7dfcd71b..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ExpressionWithLabel : Expression { - fun getTargetLabel(): SimpleNameExpression? - fun getLabelName(): String? - fun getLabelNameAsName(): Name? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection.kt deleted file mode 100644 index cbb8b7ccd..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface FinallySection : Element { - val finalExpression: BlockExpression -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression.kt deleted file mode 100644 index 99920bf7b..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ForExpression : LoopExpression { - val loopParameter: Parameter? - val destructuringDeclaration: DestructuringDeclaration? - val loopRange: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName.kt deleted file mode 100644 index b8c7d4025..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -data class FqName(val name: String) { - override fun toString(): String = name -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function.kt deleted file mode 100644 index 4d6890ec6..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface Function : DeclarationWithBody, CallableDeclaration { - val isLocal: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral.kt deleted file mode 100644 index 22eb9180f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface FunctionLiteral : Function { - fun hasParameterSpecification(): Boolean - override val bodyExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression.kt deleted file mode 100644 index 063aba212..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface IfExpression : Expression { - val condition: Expression? - val thenExpression: Expression? - val elseExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList.kt deleted file mode 100644 index 7ac66783d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface InitializerList : Element { - val entries: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel.kt deleted file mode 100644 index 301302749..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface InstanceExpressionWithLabel : ExpressionWithLabel { - // val instanceReference: ReferenceExpression // unused -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression.kt deleted file mode 100644 index 519c8fc8e..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface IsExpression : Expression, OperationExpression { - val leftHandSide: Expression - val typeReference: TypeReference? - override val operationReference: SimpleNameExpression - val isNegated: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression.kt deleted file mode 100644 index e1a372e49..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface LabelReferenceExpression : SimpleNameExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression.kt deleted file mode 100644 index 8c3904179..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface LabeledExpression : ExpressionWithLabel { - val baseExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument.kt deleted file mode 100644 index c8ca98474..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface LambdaArgument : ValueArgument { - fun getLambdaExpression(): LambdaExpression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression.kt deleted file mode 100644 index 2958e94af..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface LambdaExpression : Expression { - val functionLiteral: FunctionLiteral - val valueParameters: List - val bodyExpression: Expression? - fun hasDeclaredReturnType(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression.kt deleted file mode 100644 index b8b75d473..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface LoopExpression : Expression { - val body: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList.kt deleted file mode 100644 index 36be56382..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ModifierList : AnnotationsContainer { - val annotations: List - val annotationEntries: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner.kt deleted file mode 100644 index c9707bf6f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ModifierListOwner : Annotated { - val modifierList: ModifierList? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name.kt deleted file mode 100644 index b2ac7d635..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -data class Name(val value: String) { - override fun toString(): String = value -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression.kt deleted file mode 100644 index 28fcf5d10..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface NameReferenceExpression : SimpleNameExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named.kt deleted file mode 100644 index 5663ddc0c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Named.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface Named { - val nameAsName: Name? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration.kt deleted file mode 100644 index e4618ad11..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface NamedDeclaration : Declaration, Named { - val nameAsSafeName: Name - val fqName: FqName? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction.kt deleted file mode 100644 index 368a57477..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface NamedFunction : Function, DeclarationWithInitializer diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression.kt deleted file mode 100644 index b13fad168..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface NullExpression : ConstantExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration.kt deleted file mode 100644 index 74b58331f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ObjectDeclaration : ClassOrObject { - fun isCompanion(): Boolean - fun isObjectLiteral(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression.kt deleted file mode 100644 index 7b669fa3a..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ObjectLiteralExpression : Expression { - val objectDeclaration: ObjectDeclaration -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression.kt deleted file mode 100644 index a4415fab6..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface OperationExpression : Expression { - val operationReference: SimpleNameExpression -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression.kt deleted file mode 100644 index ec9bf9361..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface OperationReferenceExpression : SimpleNameExpression { - fun isConventionOperator(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter.kt deleted file mode 100644 index 05bc316ed..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface Parameter : CallableDeclaration { - fun hasDefaultValue(): Boolean - val defaultValue: Expression? - val isMutable: Boolean - val isVarArg: Boolean - fun hasValOrVar(): Boolean - val destructuringDeclaration: DestructuringDeclaration? - val isLoopParameter: Boolean - val isCatchParameter: Boolean - val ownerFunction: DeclarationWithBody? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList.kt deleted file mode 100644 index d8b1ec0d3..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ParameterList { - val parameters: List - val ownerFunction: DeclarationWithBody? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression.kt deleted file mode 100644 index ad5b0526b..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ParenthesizedExpression : Expression { - val expression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression.kt deleted file mode 100644 index cf008c2ce..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PostfixExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface PostfixExpression : UnaryExpression { - override val baseExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression.kt deleted file mode 100644 index 62292cce8..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrefixExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface PrefixExpression : UnaryExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor.kt deleted file mode 100644 index 65208b42d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface PrimaryConstructor : Constructor diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind.kt deleted file mode 100644 index f3bd5e52c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -enum class ProjectionKind { - IN, - OUT, - STAR, - NONE -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property.kt deleted file mode 100644 index 95fe08660..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property.kt +++ /dev/null @@ -1,17 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface Property : VariableDeclaration { - val isLocal: Boolean - val isMember: Boolean - val isTopLevel: Boolean - val accessors: List - val getter: PropertyAccessor? - val setter: PropertyAccessor? - fun hasDelegate(): Boolean - val delegate: PropertyDelegate? - fun hasDelegateExpression(): Boolean - val delegateExpression: Expression? - fun hasDelegateExpressionOrInitializer(): Boolean - val delegateExpressionOrInitializer: Expression? - fun hasBody(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor.kt deleted file mode 100644 index 3d6e48784..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor.kt +++ /dev/null @@ -1,10 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface PropertyAccessor : DeclarationWithBody, ModifierListOwner, DeclarationWithInitializer { - val isSetter: Boolean - val isGetter: Boolean - val parameterList: ParameterList? - val parameter: Parameter? - val returnTypeReference: TypeReference? - val property: Property -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate.kt deleted file mode 100644 index 3f3264efe..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface PropertyDelegate : Element { - val expression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject.kt deleted file mode 100644 index b747b79ad..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject.kt +++ /dev/null @@ -1,19 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface PureClassOrObject : PureElement, DeclarationContainer { - val name: String? - val isLocal: Boolean - - val superTypeListEntries: List - - val companionObjects: List - fun hasExplicitPrimaryConstructor(): Boolean - fun hasPrimaryConstructor(): Boolean - val primaryConstructor: PrimaryConstructor? - val primaryConstructorModifierList: ModifierList? - - val primaryConstructorParameters: List - - val secondaryConstructors: List - val body: ClassBody? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement.kt deleted file mode 100644 index c3febec71..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureElement.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface PureElement { - val psiOrParent: Element -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression.kt deleted file mode 100644 index 5c6f2633f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface QualifiedExpression : Expression { - val receiverExpression: Expression - val selectorExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression.kt deleted file mode 100644 index 885a3a4f8..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ReferenceExpression : Expression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression.kt deleted file mode 100644 index 66cc1b5f6..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ReturnExpression : ExpressionWithLabel { - val returnedExpression: Expression? - val labeledExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression.kt deleted file mode 100644 index 60cd7b39e..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SafeQualifiedExpression : Expression, QualifiedExpression diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor.kt deleted file mode 100644 index 63b9002a6..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SecondaryConstructor : Constructor { - fun getDelegationCall(): ConstructorDelegationCall? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType.kt deleted file mode 100644 index cdcbab012..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SelfType : TypeElement { - override val typeArgumentsAsTypes: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression.kt deleted file mode 100644 index 5a582a905..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SimpleNameExpression : ReferenceExpression { - fun getReferencedName(): String - fun getReferencedNameAsName(): Name -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression.kt deleted file mode 100644 index 42e36710d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression.kt +++ /dev/null @@ -1,11 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -sealed interface StringTemplateEntry - -data class StringTemplateEntryString(val string: String) : StringTemplateEntry - -data class StringTemplateEntryExpression(val expression: Expression) : StringTemplateEntry - -interface StringTemplateExpression : Expression { - val entries: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression.kt deleted file mode 100644 index 2a3ae3dd3..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SuperExpression : InstanceExpressionWithLabel { - val superTypeQualifier: TypeReference? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry.kt deleted file mode 100644 index 75cb3bbcd..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SuperTypeCallEntry : SuperTypeListEntry, CallElement diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry.kt deleted file mode 100644 index 2cdc9a39f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SuperTypeEntry : SuperTypeListEntry diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList.kt deleted file mode 100644 index 9421f3e12..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SuperTypeList : Element { - val entries: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry.kt deleted file mode 100644 index e9a31729f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SuperTypeListEntry { - val typeReference: TypeReference? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression.kt deleted file mode 100644 index 2ff973820..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface SynchronizedExpression : Expression { - val subject: Expression - val block: BlockExpression -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression.kt deleted file mode 100644 index 4a664510b..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ThisExpression : InstanceExpressionWithLabel diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression.kt deleted file mode 100644 index 031bf5562..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ThreePieceForExpression : LoopExpression { - val initializer: List - val condition: Expression? - val update: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression.kt deleted file mode 100644 index 5ad6d0307..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ThrowExpression : Expression { - val thrownExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression.kt deleted file mode 100644 index 0e6cd7b8d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TryExpression : Expression { - val tryBlock: BlockExpression - val catchClauses: List - val finallyBlock: FinallySection? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias.kt deleted file mode 100644 index d5d3a6023..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TypeAlias : NamedDeclaration { - fun isTopLevel(): Boolean - fun getTypeReference(): TypeReference? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList.kt deleted file mode 100644 index 8399e8c2d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TypeArgumentList { - val arguments: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression.kt deleted file mode 100644 index 1ca68faef..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -enum class TypeCastExpresionKind { - POSITIVE_TYPE_CAST, - QUESTION_TYPE_CAST -} - -interface TypeCastExpression : OperationExpression { - /** The token as appears in the source code (+, -, ...) */ - val operationToken: String - - val left: Expression? - val right: TypeReference? - val kind: TypeCastExpresionKind -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint.kt deleted file mode 100644 index 5b2e61591..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TypeConstraint { - val subjectTypeParameterName: SimpleNameExpression? - val boundTypeReference: TypeReference? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList.kt deleted file mode 100644 index 0679d4285..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TypeConstraintList { - val constraints: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement.kt deleted file mode 100644 index fd99a803c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TypeElement : Element { - val typeArgumentsAsTypes: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter.kt deleted file mode 100644 index 2a19c80e3..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance - -interface TypeParameter { - val variance: Variance - val extendsBounds: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList.kt deleted file mode 100644 index ff9b06129..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TypeParameterList { - val parameters: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner.kt deleted file mode 100644 index 492547571..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TypeParameterListOwner : NamedDeclaration { - val typeParameterList: TypeParameterList? - val typeConstraintList: TypeConstraintList? - val typeConstraints: List - val typeParameters: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection.kt deleted file mode 100644 index eca109845..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TypeProjection { - val projectionKind: ProjectionKind - val typeReference: TypeReference? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference.kt deleted file mode 100644 index 1d1c0ff39..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface TypeReference : Annotated, AnnotationsContainer { - val typeElement: TypeElement? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression.kt deleted file mode 100644 index 6571bb1d8..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface UnaryExpression : Expression, OperationExpression { - val baseExpression: Expression? - override val operationReference: SimpleNameExpression -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument.kt deleted file mode 100644 index 21b3151ef..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ValueArgument : ExpressionResolvedValueArgument { - fun getArgumentName(): ValueArgumentName? - fun isNamed(): Boolean - fun isExternal(): Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList.kt deleted file mode 100644 index e1110f6b5..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ValueArgumentList { - val arguments: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName.kt deleted file mode 100644 index 0d641dc20..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface ValueArgumentName { - val asName: Name - val referenceExpression: SimpleNameExpression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration.kt deleted file mode 100644 index 178002ea6..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface VariableDeclaration : CallableDeclaration, DeclarationWithInitializer { - val isVar: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition.kt deleted file mode 100644 index aefa9b8b3..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface WhenCondition : Element diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange.kt deleted file mode 100644 index 6a9a5016c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface WhenConditionInRange : WhenCondition { - val isNegated: Boolean - val rangeExpression: Expression? - val operationReference: OperationReferenceExpression -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern.kt deleted file mode 100644 index 89ac5301f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface WhenConditionIsPattern : WhenCondition { - val isNegated: Boolean - val typeReference: TypeReference? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression.kt deleted file mode 100644 index 0e48db3fa..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface WhenConditionWithExpression : WhenCondition { - val expression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry.kt deleted file mode 100644 index 00111759d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface WhenEntry : Element { - val isElse: Boolean - val expression: Expression? - val conditions: List -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression.kt deleted file mode 100644 index ba2a1179c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface WhenExpression : Expression { - val entries: List - val subjectVariable: Property? - val subjectExpression: Expression? - val elseExpression: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression.kt deleted file mode 100644 index 3bb7e6151..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression.kt +++ /dev/null @@ -1,3 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface WhileExpression : WhileExpressionBase diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase.kt deleted file mode 100644 index f06a17718..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements - -interface WhileExpressionBase : LoopExpression { - val condition: Expression? -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type.kt deleted file mode 100644 index e2d4fa7a7..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type.kt +++ /dev/null @@ -1,40 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor - -interface Type : Comparable { - val descriptor: ClassDescriptor? - val unwrappedNotNullableType: Type - val isMarkedNullable: Boolean - val arguments: List - - fun isBoolean(): Boolean - fun isNullable(): Boolean - fun isSubtypeOf(other: Type): Boolean - fun isEqualTo(other: Type): Boolean - fun isInt(): Boolean - fun isLong(): Boolean - fun isFloat(): Boolean - fun isDouble(): Boolean - fun isTypeParameter(): Boolean - fun isAnyOrNullableAny(): Boolean - fun isByte(): Boolean - fun isShort(): Boolean - fun isUnsignedNumberType(): Boolean - fun isChar(): Boolean - fun isString(): Boolean - - override fun compareTo(other: Type): Int = - when { - this.isSubtypeOf(other) -> -1 - other.isSubtypeOf(this) -> 1 - else -> 0 - } - - fun intersectIfPossible(other: Type): Type? = - when { - other.isSubtypeOf(this) -> other - this.isSubtypeOf(other) -> this - else -> null - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection.kt deleted file mode 100644 index 96f0c7b82..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types - -interface TypeProjection { - val projectionKind: Variance - val type: Type - val isStarProjection: Boolean -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types.kt deleted file mode 100644 index 7b95a890a..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types - -interface Types { - val nothingType: Type -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance.kt deleted file mode 100644 index e02e1c8cf..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types - -enum class Variance { - In, - Out, - Invariant -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt deleted file mode 100644 index 50c73f6f8..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Declarations.kt +++ /dev/null @@ -1,396 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check - -import arrow.meta.continuations.ContSeq -import arrow.meta.continuations.cont -import arrow.meta.continuations.doOnlyWhen -import arrow.meta.continuations.doOnlyWhenNotNull -import arrow.meta.continuations.sequence -import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.THIS_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Constructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DelegatedSuperTypeEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeCallEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.CheckData -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.CurrentBranch -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.CurrentVarInfo -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.NoReturn -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ReturnPoints -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.VarInfo -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.noReturn -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.isALaw -import arrow.meta.plugins.analysis.phases.analysis.solver.search.getConstraintsFor -import arrow.meta.plugins.analysis.phases.analysis.solver.search.getImmediateConstraintsFor -import arrow.meta.plugins.analysis.phases.analysis.solver.search.getOverriddenConstraintsFor -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkDefaultValueInconsistency -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkLiskovStrongerPostcondition -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkLiskovWeakerPrecondition -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkPostConditionsImplication -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkPreconditionsInconsistencies -import arrow.meta.plugins.analysis.smt.ObjectFormula -import arrow.meta.plugins.analysis.smt.substituteDeclarationConstraints - -// 2.1: declarations -// ----------------- -/** - * When the solver is in the prover state check this [declaration] body and constraints for - * - pre-condition inconsistencies, - * - whether the body satisfy all the pre-conditions in calls, - * - whether the post-condition really holds. - */ -internal fun SolverState.checkTopLevel( - context: ResolutionContext, - descriptor: DeclarationDescriptor, - declaration: Declaration, - isConstructor: Boolean, - resultName: ObjectFormula, - bodyCheck: (data: CheckData, checkPost: (finalData: CheckData) -> Unit) -> ContSeq -): ContSeq = - continuationBracket.flatMap { - // bring the constraints in (if there are any) - val constraints = - getConstraintsFor(descriptor)?.let { - solver.substituteDeclarationConstraints(it, mapOf(RESULT_VAR_NAME to resultName)) - } - // initialize the check data - val initialVarInfo = - if (descriptor is CallableDescriptor) { - val thisParam = - when (descriptor) { - is ConstructorDescriptor -> - ParamInfo( - solver, - THIS_VAR_NAME, - THIS_VAR_NAME, - descriptor.constructedClass.defaultType, - declaration, - true - ) - else -> - (descriptor.extensionReceiverParameter ?: descriptor.dispatchReceiverParameter)?.let { - ParamInfo(solver, THIS_VAR_NAME, THIS_VAR_NAME, it.type, declaration) - } - } - val valueParams = - descriptor.valueParameters.map { param -> - val element = - (declaration as? DeclarationWithBody)?.valueParameters?.firstOrNull { - it?.name == param.name.value - } - ParamInfo(solver, param.name.value, param.name.value, param.type, element) - } - val returnParam = - descriptor.returnType - ?.takeIf { descriptor !is ConstructorDescriptor } - ?.let { ParamInfo(solver, RESULT_VAR_NAME, RESULT_VAR_NAME, it, declaration) } - // additional for 'this@info' - val additional = - if (declaration is NamedDeclaration) { - // Add 'this@functionName' - declaration.nameAsName?.let { name -> - VarInfo(solver, "this@$name", THIS_VAR_NAME, declaration) - } - } else null - // introduce non-nullability and invariants of parameters - initialParameters(thisParam, valueParams, returnParam, context) + listOfNotNull(additional) - } else emptyList() - val data = - CheckData( - context, - ReturnPoints.new(declaration, resultName), - CurrentVarInfo(initialVarInfo), - CurrentBranch.new() - ) - - ContSeq.unit - .map { - // check consistency of pre-conditions - val inconsistentPreconditions = - checkPreconditionsInconsistencies(constraints, data.context, declaration) - ensure(!inconsistentPreconditions) - } - .flatMap { checkDefaultParameters(declaration, data) } - .map { - // check Liskov conditions - val liskovOk = checkLiskovConditions(declaration, descriptor, data.context) - ensure(liskovOk) - } - .flatMap { - // check the body - bodyCheck(data) { finalData -> - // and finally check the post-conditions - checkPostConditionsImplication( - constraints, - isConstructor, - finalData.context, - declaration, - finalData.branch.get() - ) - } - } - } - -internal fun SolverState.checkTopLevelDeclarationWithBody( - context: ResolutionContext, - descriptor: DeclarationDescriptor, - declaration: Declaration, - body: Expression? -): ContSeq = - checkTopLevel(context, descriptor, declaration, isConstructor = false, solver.resultVariable) { - data, - checkPost -> - // only check body when we are not in a @Law - doOnlyWhen(!descriptor.isALaw()) { - checkExpressionConstraints(solver.resultVariable, body, data).map { finalState -> - checkPost(finalState.data) - } - } - } - -internal fun SolverState.checkPrimaryConstructor( - context: ResolutionContext, - descriptor: DeclarationDescriptor, - declaration: PrimaryConstructor -): ContSeq = - checkTopLevel(context, descriptor, declaration, isConstructor = true, solver.thisVariable) { - data, - checkPost -> - postPrimaryConstructor( - context, - declaration.getContainingClassOrObject(), - declaration.bodyExpression, - data, - checkPost - ) - } - -internal fun SolverState.checkImplicitPrimaryConstructor( - context: ResolutionContext, - descriptor: DeclarationDescriptor, - klass: ClassOrObject -): ContSeq = - checkTopLevel(context, descriptor, klass, isConstructor = true, solver.thisVariable) { - data, - checkPost -> - postPrimaryConstructor(context, klass, null, data, checkPost) - } - -internal fun SolverState.postPrimaryConstructor( - context: ResolutionContext, - klass: ClassOrObject, - bodyExpression: Expression?, - data: CheckData, - checkPost: (finalData: CheckData) -> Unit -): ContSeq = - ContSeq.unit - .flatMap { - // introduce 'val' and 'var' from the constructor - introduceImplicitProperties(context, klass) - } - .flatMap { - // call the superclass constructors - // (this will ultimately check the Liskov for classes) - checkSuperTypeEntries(context, klass.superTypeListEntries, data) - } - .flatMap { checkExpressionConstraints(solver.thisVariable, bodyExpression, data) } - .flatMap { finalState -> - checkClassDeclarationInConstructorContext( - solver.thisVariable, - klass.declarations, - finalState.data - ) - .onEach { checkPost(finalState.data) } - } - -private fun SolverState.introduceImplicitProperties( - context: ResolutionContext, - klass: ClassOrObject -): ContSeq = cont { - // if we have 'var' or 'var' in the parameters, - // we need to assign them to fields - // when the constructor is primary - klass.primaryConstructorParameters - .filter { it.hasValOrVar() } - .forEach { param -> - (context.descriptorFor(param) as? ValueParameterDescriptor) - ?.let { context.backingPropertyForConstructorParameter(it) } - ?.let { propertyDescriptor -> - val paramName = param.nameAsName?.value ?: THIS_VAR_NAME - addConstraint( - NamedConstraint( - "definition of property $paramName", - solver.objects { - equal( - solver.makeObjectVariable(paramName), - field(propertyDescriptor, solver.thisVariable) - ) - } - ), - context - ) - } - } -} - -private fun SolverState.checkSuperTypeEntries( - context: ResolutionContext, - superTypeListEntries: List, - data: CheckData -): ContSeq = - superTypeListEntries - .mapNotNull { entry -> - when (entry) { - is DelegatedSuperTypeEntry -> entry.delegateExpression - is SuperTypeCallEntry -> entry.calleeExpression - else -> null - } - } - .map { expr -> - doOnlyWhenNotNull(expr.getResolvedCall(context), Unit) { call -> - checkRegularFunctionCall(solver.thisVariable, call, expr, data) - } - } - .sequence() - .void() - -private fun SolverState.checkClassDeclarationInConstructorContext( - thisRef: ObjectFormula, - declarations: List, - data: CheckData -): ContSeq = - declarations - .map { decl -> - when (decl) { - is Constructor<*> -> ContSeq.unit // do not check any other constructor - is AnonymousInitializer -> checkExpressionConstraints(thisRef, decl.body, data) - is Property -> - doOnlyWhenNotNull(data.context.descriptorFor(decl), NoReturn) { descriptor -> - val result = field(descriptor, solver.makeObjectVariable(THIS_VAR_NAME)) - checkExpressionConstraints(result, decl.stableBody(), data) - } - else -> ContSeq.unit - } - } - .sequence() - .void() - -internal fun SolverState.checkSecondaryConstructor( - context: ResolutionContext, - descriptor: DeclarationDescriptor, - declaration: SecondaryConstructor -): ContSeq = - checkTopLevel(context, descriptor, declaration, isConstructor = true, solver.thisVariable) { - data, - checkPost -> - ContSeq.unit - .flatMap { - // delegate into the primary constructor, if available - doOnlyWhenNotNull(declaration.getDelegationCall(), data.noReturn()) { delegation -> - doOnlyWhenNotNull(delegation.getResolvedCall(context), data.noReturn()) { call -> - doOnlyWhenNotNull(delegation.calleeExpression, data.noReturn()) { calleeExpression -> - checkRegularFunctionCall(solver.thisVariable, call, calleeExpression, data) - } - } - } - } - .flatMap { stateAfterPrimaryConstructorCall -> - checkExpressionConstraints( - solver.thisVariable, - declaration.bodyExpression, - stateAfterPrimaryConstructorCall.data - ) - .map { finalState -> checkPost(finalState.data) } - } - } - -internal fun SolverState.checkEnumEntry( - context: ResolutionContext, - descriptor: DeclarationDescriptor, - entry: EnumEntry -): ContSeq = - checkTopLevel(context, descriptor, entry, isConstructor = false, solver.thisVariable) { - data, - checkPost -> - ContSeq.unit - .flatMap { - // the supertype entries in an enumeration is the enum itself - checkSuperTypeEntries(context, entry.superTypeListEntries, data) - } - .flatMap { - checkClassDeclarationInConstructorContext(solver.thisVariable, entry.declarations, data) - } - .map { checkPost(data) } - } - -/** Check that the constraints respect subtyping, in particular the Liskov Substitution Principle */ -private fun SolverState.checkLiskovConditions( - declaration: Declaration, - descriptor: DeclarationDescriptor, - context: ResolutionContext -): Boolean { - val immediateConstraints = getImmediateConstraintsFor(descriptor) - val overriddenConstraints = getOverriddenConstraintsFor(descriptor) - return if (immediateConstraints != null && overriddenConstraints != null) { - // pre-conditions should be weaker, - // so the immediate ones should be implied by the overridden ones - val liskovPreOk = bracket { - overriddenConstraints.pre.forEach { addConstraint(it, context) } - immediateConstraints.pre.all { checkLiskovWeakerPrecondition(it, context, declaration) } - } - // post-conditions should be stronger, - // so the overridden ones should be implied by the immediate ones - val liskovPostOk = bracket { - immediateConstraints.post.forEach { addConstraint(it, context) } - overriddenConstraints.post.all { checkLiskovStrongerPostcondition(it, context, declaration) } - } - // check that both things are OK - liskovPreOk && liskovPostOk - } else { - true - } -} - -/** Check that the values of default parameters satisfy the preconditions */ -private fun SolverState.checkDefaultParameters( - declaration: Declaration, - data: CheckData -): ContSeq = - when (declaration) { - is DeclarationWithBody -> - scopedBracket { - declaration.valueParameters - .filterNotNull() - .mapNotNull { param -> - val name = param.name - val defaultValue = param.defaultValue - if (name != null && defaultValue != null) { - checkExpressionConstraints(name, defaultValue, data) - } else { - null - } - } - .sequence() - .map { - val inconsistentDefaults = checkDefaultValueInconsistency(data.context, declaration) - ensure(!inconsistentDefaults) - } - } - else -> cont {} - } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt deleted file mode 100644 index 6aad5f6bf..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/EntryPoint.kt +++ /dev/null @@ -1,155 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check - -import arrow.meta.continuations.ContSeq -import arrow.meta.continuations.doOnlyWhen -import arrow.meta.continuations.doOnlyWhenNotNull -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeAlias -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages -import arrow.meta.plugins.analysis.phases.analysis.solver.hasImplicitPrimaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState - -/* [NOTE: which do we use continuations?] - * It might look odd that we create continuations when checking - * the body, instead of simply performing the steps. - * - * The reason to do so is to have the ability to decide whether - * and how to execute the "remainder of the analysis". For example: - * - if we find a `return`, we ought to stop, since no further - * statement is executed; - * - if we are in a condition, the "remainder of the analysis" - * ought to be executed more than once; in fact once per possible - * execution flow. - * - * What makes the problem complicated, and brings in continuations, - * is that these decisions may have to be made within an argument: - * - * ``` - * f(if (x > 0) 3 else 2) - * ``` - * - * yet they must affect the global ongoing computations. Continuations - * allow us to do so by saying that checking `if (x > 0) 3 else 2` - * is the current computation, and checking `f(...)` the "remainder". - * Thus, the conditional `if` can duplicate the check of the "remainder". - */ - -/** When the solver is in the prover state check this [declaration] body constraints */ -public fun SolverState.checkDeclarationConstraints( - context: ResolutionContext, - declaration: Declaration, - descriptor: DeclarationDescriptor -) { - if (!hadParseErrors() && declaration.shouldBeAnalyzed() && descriptor.shouldBeAnalyzed()) { - // trace - solverTrace.add("CHECKING ${descriptor.fqNameSafe.name}") - // now go on and check the body - try { - when (declaration) { - is TypeAlias -> ContSeq.unit // type alias have no checks - is PrimaryConstructor -> checkPrimaryConstructor(context, descriptor, declaration) - is SecondaryConstructor -> checkSecondaryConstructor(context, descriptor, declaration) - is EnumEntry -> checkEnumEntry(context, descriptor, declaration) - is ClassOrObject -> - doOnlyWhen( - declaration.hasImplicitPrimaryConstructor() && !descriptor.hasPackageWithLawsAnnotation - ) { - descriptor as ClassDescriptor - checkImplicitPrimaryConstructor( - context, - descriptor.constructors.single { it.isPrimary }, - declaration - ) - } - is Property -> - when { - declaration.stableBody() != null -> - checkTopLevelDeclarationWithBody( - context, - descriptor, - declaration, - declaration.stableBody() - ) - declaration.delegate != null -> - checkTopLevelDeclarationWithBody( - context, - descriptor, - declaration, - declaration.delegate?.expression - ) - declaration.getter != null || declaration.setter != null -> { - // no body, maybe we have getter and setter - descriptor as PropertyDescriptor - ContSeq.unit - .map { - doOnlyWhenNotNull(declaration.getter, Unit) { getterDecl -> - doOnlyWhenNotNull(descriptor.getter, Unit) { getterDescr -> - checkTopLevelDeclarationWithBody( - context, - getterDescr, - getterDecl, - getterDecl.body() - ) - } - } - } - .map { - doOnlyWhenNotNull(declaration.setter, Unit) { setterDecl -> - doOnlyWhenNotNull(descriptor.setter, Unit) { setterDescr -> - checkTopLevelDeclarationWithBody( - context, - setterDescr, - setterDecl, - setterDecl.body() - ) - } - } - } - } - else -> ContSeq.unit - } - else -> - checkTopLevelDeclarationWithBody( - context, - descriptor, - declaration, - declaration.stableBody() - ) - }.drain() - } catch (e: IllegalStateException) { - val msg = ErrorMessages.Exception.illegalState(solverTrace) - context.handleError(ErrorIds.Exception.IllegalState, declaration, msg) - } catch (e: Exception) { - val msg = ErrorMessages.Exception.otherException(e) - context.handleError(ErrorIds.Exception.OtherException, declaration, msg) - } - // trace - solverTrace.add("FINISH ${descriptor.fqNameSafe.name}") - } -} - -/** - * Only elements which are not - * - inside another "callable declaration" (function, property, etc.) (b/c this is not yet - * supported) - * - or constructors (b/c they are handled at the level of class) - */ -private fun Declaration.shouldBeAnalyzed() = !(this.parents.any { it is CallableDeclaration }) - -private fun DeclarationDescriptor.shouldBeAnalyzed() = - when (this) { - is MemberDescriptor -> !isExpect && !isExternal - else -> true - } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt deleted file mode 100644 index 27c13f8e4..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Expressions.kt +++ /dev/null @@ -1,1988 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check - -import arrow.core.Either -import arrow.core.left -import arrow.core.right -import arrow.meta.continuations.ContSeq -import arrow.meta.continuations.asContSeq -import arrow.meta.continuations.cont -import arrow.meta.continuations.doOnlyWhenNotNull -import arrow.meta.continuations.nested -import arrow.meta.continuations.sequence -import arrow.meta.plugins.analysis.phases.analysis.solver.ArgumentExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.SpecialKind -import arrow.meta.plugins.analysis.phases.analysis.solver.THIS_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.LocalVariableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotatedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssignmentExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BreakExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableReferenceExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CatchClause -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ContinueExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithInitializer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoWhileExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoubleColonExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionWithLabel -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FinallySection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ForExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Function -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IfExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IsExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LabeledExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LoopExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NullExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParenthesizedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.QualifiedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SafeQualifiedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntryString -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SynchronizedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThreePieceForExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThrowExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpresionKind -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.VariableDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionIsPattern -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionWithExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhileExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.CheckData -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.Condition -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ControlFlowFn -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ExplicitBlockReturn -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ExplicitLoopReturn -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ExplicitReturn -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.ExplicitThrowReturn -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.LoopPlace -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.MissingElseBlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.NoReturn -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.SimpleCondition -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.StateAfter -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.SubjectCondition -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.VarInfo -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.noReturn -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.topLevelExpressionToFormula -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages -import arrow.meta.plugins.analysis.phases.analysis.solver.getReceiverOrThisNamedArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.hasReceiver -import arrow.meta.plugins.analysis.phases.analysis.solver.inTrustedEnvironment -import arrow.meta.plugins.analysis.phases.analysis.solver.isElvisOperator -import arrow.meta.plugins.analysis.phases.analysis.solver.isField -import arrow.meta.plugins.analysis.phases.analysis.solver.referencedArg -import arrow.meta.plugins.analysis.phases.analysis.solver.search.getConstraintsFor -import arrow.meta.plugins.analysis.phases.analysis.solver.search.primitiveConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.search.typeInvariants -import arrow.meta.plugins.analysis.phases.analysis.solver.singleArg -import arrow.meta.plugins.analysis.phases.analysis.solver.specialKind -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import arrow.meta.plugins.analysis.phases.analysis.solver.state.addAndCheckConsistency -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkCallPostConditionsInconsistencies -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkCallPreConditionsImplication -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkConditionsInconsistencies -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkInvariant -import arrow.meta.plugins.analysis.phases.analysis.solver.state.checkInvariantConsistency -import arrow.meta.plugins.analysis.phases.analysis.solver.valueArgumentExpressions -import arrow.meta.plugins.analysis.smt.* -import arrow.meta.plugins.analysis.smt.renameObjectVariables -import arrow.meta.plugins.analysis.smt.substituteObjectVariables -import arrow.meta.plugins.analysis.types.PrimitiveType -import arrow.meta.plugins.analysis.types.asFloatingLiteral -import arrow.meta.plugins.analysis.types.asIntegerLiteral -import arrow.meta.plugins.analysis.types.primitiveType -import arrow.meta.plugins.analysis.types.unwrapIfNullable -import org.apache.commons.text.StringEscapeUtils -import org.sosy_lab.java_smt.api.BooleanFormula - -// 2.2: expressions -// ---------------- - -internal fun SolverState.checkExpressionConstraints( - associatedVarName: String, - expression: Expression?, - data: CheckData -): ContSeq = - checkExpressionConstraints(solver.makeObjectVariable(associatedVarName), expression, data) - -internal fun SolverState.checkExpressionConstraintsWithNewName( - prefix: String, - expression: Expression?, - data: CheckData -): ContSeq = - checkExpressionConstraints(newName(data.context, prefix, expression), expression, data) - -/** - * Produces a continuation that when invoked recursively checks an [expression] set of constraints - */ -internal fun SolverState.checkExpressionConstraints( - associatedVarName: ObjectFormula, - expression: Expression?, - data: CheckData -): ContSeq = - ContSeq.unit - .map { - if (expression != null) - solverTrace.add("BEGIN ${expression.text.take(50)} ${expression.javaClass.name}") - } - .flatMap { - when (expression) { - // these two simply recur into their underlying expressions - is ParenthesizedExpression -> - checkExpressionConstraints(associatedVarName, expression.expression, data) - is AnnotatedExpression -> - checkExpressionConstraints(associatedVarName, expression.baseExpression, data) - is SynchronizedExpression -> - checkExpressionConstraintsWithNewName("subject", expression.subject, data) - .checkReturnInfo { stateAfter -> - checkExpressionConstraints(associatedVarName, expression.block, stateAfter.data) - } - is BlockExpression -> - inScope(data) { // new variables are local to that block - checkBlockExpression( - associatedVarName, - expression.statements, - expression.implicitReturnFromLast, - data - ) - } - is ReturnExpression -> checkReturnConstraints(expression, data) - is BreakExpression, - is ContinueExpression -> { - val withLabel = expression as ExpressionWithLabel - cont { StateAfter(ExplicitLoopReturn(withLabel.getLabelName()), data) } - } - is CallableReferenceExpression -> - data.noReturn { - // for now we do nothing with function references - } - is LambdaExpression -> checkLambda(expression, data) - is ThrowExpression -> checkThrowConstraints(expression, data) - is NullExpression -> checkNullExpression(associatedVarName, data) - is StringTemplateExpression -> checkStringTemplate(associatedVarName, expression, data) - is ConstantExpression -> checkConstantExpression(associatedVarName, expression, data) - is ThisExpression -> - // both 'this' and 'this@name' are available in the variable info - checkNameExpression(associatedVarName, expression.text, data) - is SimpleNameExpression -> { - val resolvedCall = expression.getResolvedCall(data.context) - when (resolvedCall?.resultingDescriptor) { - is CallableMemberDescriptor -> - checkCallExpression(associatedVarName, expression, resolvedCall, data) - is ValueDescriptor -> - checkNameExpression(associatedVarName, expression.getReferencedName(), data) - else -> data.noReturn {} // this should not happen - } - } - is LabeledExpression -> checkLabeledExpression(associatedVarName, expression, data) - is IfExpression -> - checkConditional(associatedVarName, null, expression.computeConditions(), data) - is WhenExpression -> - checkConditional( - associatedVarName, - expression.subjectExpression, - expression.computeConditions(), - data - ) - is LoopExpression -> checkLoopExpression(expression, data) - is FinallySection -> - // use a "fake" block with a single expression - checkBlockExpression(associatedVarName, listOf(expression), false, data) - is TryExpression -> checkTryExpression(associatedVarName, expression, data) - is TypeCastExpression -> - checkAsOperator(associatedVarName, expression.kind, expression.left, expression, data) - is IsExpression -> { - val subject = expression.leftHandSide - val subjectName = solver.makeObjectVariable(newName(data.context, "is", subject)) - checkExpressionConstraints(subjectName, subject, data).checkReturnInfo { stateAfter -> - cont { - checkIsExpression( - associatedVarName, - expression.isNegated, - expression.typeReference, - subjectName, - data - ) - stateAfter - } - } - } - is AssignmentExpression -> checkAssignmentExpression(expression, data) - is BinaryExpression -> checkBinaryExpression(associatedVarName, expression, data) - is Function -> checkFunctionDeclarationExpression(expression, data) - is Declaration -> - // we get additional info about the subject, but it's irrelevant here - checkNonFunctionDeclarationExpression(expression, data).map { it.second } - is Expression -> fallThrough(associatedVarName, expression, data) - else -> data.noReturn {} - } - } - .onEach { - if (expression != null) - solverTrace.add("END ${expression.text.take(50)} ${expression.javaClass.name}") - } - -private fun SolverState.fallThrough( - associatedVarName: ObjectFormula, - expression: Expression, - data: CheckData -): ContSeq = - when (val call = expression.getResolvedCall(data.context)) { - // fall-through: treat as a call - is ResolvedCall -> checkCallExpression(associatedVarName, expression, call, data) - // otherwise, report as unsupported - else -> - when (val variable = expression.getVariableDescriptor(data.context)) { - is VariableDescriptor -> { - val receiverExpr = - when (expression) { - is QualifiedExpression -> expression.receiverExpression - is DoubleColonExpression -> expression.receiverExpression - else -> null - } - checkVariableAsFunctionCall(associatedVarName, variable, receiverExpr, expression, data) - } - else -> - data.noReturn { - val msg = ErrorMessages.Unsupported.unsupportedExpression(expression) - data.context.handleError(ErrorIds.Unsupported.UnsupportedExpression, expression, msg) - } - } - } - -private fun Declaration.isVar(): Boolean = - when (this) { - is VariableDeclaration -> this.isVar - else -> false - } - -/** - * Checks each statement in a block expression in order. We need our own function because only the - * *last* statement is the one assigned as the "return value" of the block. - */ -private fun SolverState.checkBlockExpression( - associatedVarName: ObjectFormula, - expressions: List, - implicitReturnFromLast: Boolean, - data: CheckData -): ContSeq = - when { - expressions.isEmpty() -> data.noReturn {} - // special case for finally { } - expressions.firstOrNull() is FinallySection -> { - val first = expressions.first() as FinallySection - val remainder = expressions.drop(1) - checkBlockExpression(associatedVarName, remainder, implicitReturnFromLast, data).onEach { - stateAfterRest -> - // override the return of the finally with the return of the try or catch - doOnlyWhenNotNull(first.finalExpression, data) { finalExpression -> - checkExpressionConstraintsWithNewName("finally", finalExpression, data).map { - stateAfterRest - } - } - } - } - expressions.size == 1 && - implicitReturnFromLast -> // this is the last element, so it's the return value of the - // expression - checkExpressionConstraints(associatedVarName, expressions[0], data) - else -> { - val first = expressions.first() - val remainder = expressions.drop(1) - // we need to carefully thread the data in the state, - // since it holds the information about variables - checkExpressionConstraintsWithNewName("stmt", first, data).checkReturnInfo { stateAfter -> - checkBlockExpression(associatedVarName, remainder, implicitReturnFromLast, stateAfter.data) - } - } - } - -/** Checks a block which introduces a label or scope. */ -private fun SolverState.checkLabeledExpression( - associatedVarName: ObjectFormula, - expression: LabeledExpression, - data: CheckData -): ContSeq { - val labelName = expression.getLabelName()!! - // add the return point to the list and recur - val updatedData = data.addReturnPoint(labelName, associatedVarName) - return checkExpressionConstraints(associatedVarName, expression.baseExpression, updatedData) - .map { stateAfter -> - // if we have reached the point where the label was introduced, - // then we are done with the block, and we can keep going - val r = stateAfter.returnInfo - if (r is ExplicitBlockReturn && r.returnPoint == labelName) { - stateAfter.withReturn(NoReturn) - } else { - stateAfter - } - } -} - -/** - * Checks a 'return' or 'return@label' statement. At the end it aborts the current computation, - * because after a return there's nothing else to be checked. - */ -private fun SolverState.checkReturnConstraints( - expression: ReturnExpression, - data: CheckData -): ContSeq { - // figure out the right variable to assign - // - if 'return@label', find the label in the recorded return points - // - otherwise, it should be the top-most one - val label = expression.getLabelName() - val returnVarName = - label.let { data.returnPoints.namedReturnPointVariableNames[it] } - ?: data.returnPoints.topMostReturnPointVariableName.second - // assign it, and signal that we explicitly return - return checkExpressionConstraints(returnVarName, expression.returnedExpression, data).map { - stateAfter -> - stateAfter.withReturn(ExplicitBlockReturn(label)) - } -} - -/** Checks a 'throw', by simply returning the type of the exception */ -private fun SolverState.checkThrowConstraints( - expression: ThrowExpression, - data: CheckData -): ContSeq { - return checkExpressionConstraintsWithNewName("throw", expression.thrownExpression, data).map { - stateAfter -> - stateAfter.withReturn( - expression.thrownExpression?.type(data.context)?.let { ty -> ExplicitThrowReturn(ty) } - ?: ExplicitThrowReturn(null) - ) - } -} - -/** - * Produces a continuation that when invoked recursively checks the call [resolvedCall] starting - * from its arguments - */ -private fun SolverState.checkCallExpression( - associatedVarName: ObjectFormula, - expression: Expression, - resolvedCall: ResolvedCall, - data: CheckData -): ContSeq { - val specialKind = resolvedCall.specialKind - val specialControlFlow = controlFlowAnyFunction(data.context, resolvedCall) - return when { - specialKind == SpecialKind.Pre || - specialKind == SpecialKind.NotLookArgs -> // ignore calls to 'pre' or not looking at args - data.noReturn {} - specialKind == SpecialKind.Post -> // ignore post arguments - checkExpressionConstraints( - associatedVarName, - resolvedCall.getReceiverOrThisNamedArgument(), - data - ) - specialKind == SpecialKind.Invariant -> // ignore invariant arguments - checkExpressionConstraints( - associatedVarName, - resolvedCall.getReceiverOrThisNamedArgument(), - data - ) - specialKind == SpecialKind.TrustCall || specialKind == SpecialKind.TrustBlock -> { - val arg = resolvedCall.valueArgumentExpressions(data.context).getOrNull(0) - checkExpressionConstraints(associatedVarName, arg?.expression?.singleOrNull(), data) - } - specialControlFlow != null -> - checkControlFlowFunctionCall(associatedVarName, expression, specialControlFlow, data) - resolvedCall.isElvisOperator() -> - doOnlyWhenNotNull(resolvedCall.singleArg("left", data.context), data.noReturn()) { left -> - doOnlyWhenNotNull(resolvedCall.singleArg("right", data.context), data.noReturn()) { right -> - checkElvisOperator(associatedVarName, left, right, data) - } - } - else -> checkRegularFunctionCall(associatedVarName, resolvedCall, expression, data) - } -} - -/** - * Special treatment for special control flow functions ([also], [apply], [let], [run], [with]) - * https://kotlinlang.org/docs/scope-functions.html#function-selection - */ -private fun controlFlowAnyFunction( - context: ResolutionContext, - resolvedCall: ResolvedCall -): ControlFlowFn? { - val thisElement = - resolvedCall.singleArg("this", context) ?: resolvedCall.singleArg("receiver", context) - val blockElement = resolvedCall.singleArg("block", context) as? LambdaExpression - val bodyElement = blockElement?.bodyExpression - return if (blockElement != null && bodyElement != null) { - if (thisElement != null) { - when (resolvedCall.resultingDescriptor.fqNameSafe) { - FqName("kotlin.also") -> { - val argumentName = blockElement.valueParameters.getOrNull(0)?.nameAsName?.value ?: "it" - ControlFlowFn( - thisElement, - bodyElement, - argumentName, - ControlFlowFn.ReturnBehavior.RETURNS_ARGUMENT - ) - } - FqName("kotlin.apply") -> - ControlFlowFn( - thisElement, - bodyElement, - "this", - ControlFlowFn.ReturnBehavior.RETURNS_ARGUMENT - ) - FqName("kotlin.let") -> { - val argumentName = blockElement.valueParameters.getOrNull(0)?.nameAsName?.value ?: "it" - ControlFlowFn( - thisElement, - bodyElement, - argumentName, - ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT - ) - } - FqName("kotlin.run") -> - ControlFlowFn( - thisElement, - bodyElement, - "this", - ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT - ) - FqName("kotlin.with") -> - ControlFlowFn( - thisElement, - bodyElement, - "this", - ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT - ) - else -> null - } - } else { - when (resolvedCall.resultingDescriptor.fqNameSafe) { - // 'run' can also be called without a receiver - // https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/run.html - FqName("kotlin.run") -> - ControlFlowFn( - null /* thisElement == null */, - bodyElement, - "this", - ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT - ) - else -> null - } - } - } else { - null - } -} - -/** Checks special control flow functions ([also], [apply], [let], [run]) */ -private fun SolverState.checkControlFlowFunctionCall( - associatedVarName: ObjectFormula, - wholeExpr: Expression, - info: ControlFlowFn, - data: CheckData -): ContSeq { - val thisName = - when (info.returnBehavior) { - ControlFlowFn.ReturnBehavior.RETURNS_ARGUMENT -> associatedVarName - ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT -> - solver.makeObjectVariable(newName(data.context, THIS_VAR_NAME, info.target)) - } - val returnName = - when (info.returnBehavior) { - ControlFlowFn.ReturnBehavior.RETURNS_ARGUMENT -> - solver.makeObjectVariable(newName(data.context, "ret", info.target)) - ControlFlowFn.ReturnBehavior.RETURNS_BLOCK_RESULT -> associatedVarName - } - return checkReceiverWithPossibleSafeDot( - associatedVarName, - wholeExpr, - null, - thisName, - info.target, - data - ) { newData -> - inScope(newData) { - // add the name to the context, - // being careful not overriding any existing name - val newVarInfo: VarInfo? = - info.target?.let { - val smtName = newName(newData.context, info.argumentName, info.target) - // add the constraint to make the parameter equal - val formula = solver.objects { equal(solver.makeObjectVariable(smtName), thisName) } - addConstraint(NamedConstraint("introduce argument for lambda", formula), data.context) - VarInfo(solver, info.argumentName, smtName, info.target, null) - } - // check the body in this new context - checkExpressionConstraints( - returnName, - info.body, - newData.addVarInfos(listOfNotNull(newVarInfo)) - ) - } - } -} - -/** Checks any function call which is not a special case */ -internal fun SolverState.checkRegularFunctionCall( - associatedVarName: ObjectFormula, - resolvedCall: ResolvedCall, - expression: Expression, - data: CheckData -): ContSeq { - val receiverExpr = resolvedCall.getReceiverExpression() - val referencedArg = resolvedCall.referencedArg(receiverExpr) - val receiverName = - solver.makeObjectVariable(newName(data.context, THIS_VAR_NAME, receiverExpr, referencedArg)) - return checkReceiverWithPossibleSafeDot( - associatedVarName, - expression, - resolvedCall, - receiverName, - receiverExpr, // - data - ) { dataAfterReceiver -> - val callConstraints = - getConstraintsFor(resolvedCall) ?: primitiveConstraints(data.context, resolvedCall) - val doNotLook = callConstraints?.doNotLookAtArgumentsWhen.orEmpty() - ContSeq { - if (doNotLook.isNotEmpty()) yield(true) - yield(false) - } - .flatMap { r -> continuationBracket.map { r } } - .flatMap { doNotLookCase -> - if (doNotLookCase) { - // case when we do not have to look at arguments - // 1. introduce the facts when we do not go - val renamedNotLook = - doNotLook.map { c -> - NamedConstraint( - c.msg, - solver.substituteObjectVariables(c.formula, mapOf(THIS_VAR_NAME to receiverName)) - ) - } - addAndCheckConsistency(renamedNotLook, data.context) { /* do nothing on failure */} - val dataAfterNotLook = - dataAfterReceiver.addBranch(renamedNotLook.map(NamedConstraint::formula)) - // 2. introduce the postconditions - checkCallableDescriptor( - associatedVarName, - resolvedCall.resultingDescriptor, - callConstraints, - emptyList(), // this assumes that the post-condition does not mention arguments - preconditionsCheck = {}, - resolvedCall.hasReceiver(), - receiverName, - resolvedCall.getReturnType(), - expression, - dataAfterNotLook - ) - } else { - // introduce the fact that we are looking at the arguments, if present - val dataAfterNotLook = - if (doNotLook.isNotEmpty()) { - val renamedNotLook = - doNotLook.map { c -> - NamedConstraint( - "! ${c.msg}", - solver.not( - solver.substituteObjectVariables( - c.formula, - mapOf(THIS_VAR_NAME to receiverName) - ) - ) - ) - } - addAndCheckConsistency(renamedNotLook, data.context) { /* do nothing on failure */} - dataAfterReceiver.addBranch(renamedNotLook.map(NamedConstraint::formula)) - } else dataAfterReceiver - // regular case, check the arguments and move on normally - checkCallArguments(resolvedCall, dataAfterNotLook).flatMap { - (returnOrContinue, dataAfterArgs) -> - returnOrContinue.fold( - { r -> cont { StateAfter(r, dataAfterArgs) } }, - { argVars -> - checkCallableDescriptor( - associatedVarName, - resolvedCall.resultingDescriptor, - callConstraints, - argVars, - preconditionsCheck = { reworkedConstraints -> - whenNotTrusted(expression, data) { - checkCallPreConditionsImplication( - reworkedConstraints, - dataAfterArgs.context, - expression, - resolvedCall, - dataAfterArgs.branch.get() - ) - } - }, - resolvedCall.hasReceiver(), - receiverName, - resolvedCall.getReturnType(), - expression, - dataAfterArgs - ) - } - ) - } - } - } - } -} - -internal fun SolverState.checkVariableAsFunctionCall( - associatedVarName: ObjectFormula, - descriptor: VariableDescriptor, - receiverExpr: Expression?, - expression: Expression, - data: CheckData -): ContSeq { - val receiverName = solver.makeObjectVariable(newName(data.context, THIS_VAR_NAME, receiverExpr)) - val callConstraints = getConstraintsFor(descriptor) - return checkCallableDescriptor( - associatedVarName, - descriptor, - callConstraints, - emptyList(), - preconditionsCheck = {}, - receiverExpr != null, - receiverName, - descriptor.type, - expression, - data - ) -} - -/** Checks something similar to a function call, which could also be a variable reference */ -private fun SolverState.checkCallableDescriptor( - associatedVarName: ObjectFormula, - descriptor: CallableDescriptor, - obtainedConstraints: DeclarationConstraints?, - argVars: List, - preconditionsCheck: (DeclarationConstraints?) -> Unit, - hasReceiver: Boolean, - receiverName: ObjectFormula, - returnType: Type, - expression: Expression, - data: CheckData -): ContSeq = - ContSeq.unit.map { - // rename with the arguments - val callConstraints = - obtainedConstraints?.let { declInfo -> - val completeRenaming = - argVars.toMap() + (RESULT_VAR_NAME to associatedVarName) + (THIS_VAR_NAME to receiverName) - solver.substituteDeclarationConstraints(declInfo, completeRenaming) - } - // check any preconditions - preconditionsCheck(callConstraints) - // add a constraint for fields: result == field(name, value) - if (descriptor.isField()) { - val fieldConstraint = - solver.ints { - val argName = if (hasReceiver) receiverName else argVars[0].assignedSmtVariable - NamedConstraint( - "${expression.text} == ${descriptor.fqNameSafe.name}($argName)", - equal(associatedVarName, field(descriptor, argName)) - ) - } - addConstraint(fieldConstraint, data.context) - } - // if the result is not null - if (!returnType.isNullable()) { - addConstraint( - NamedConstraint("$associatedVarName is not null", solver.isNotNull(associatedVarName)), - data.context - ) - } - // there's no point in continuing if we are in an inconsistent position - val inconsistentPostConditions = - checkCallPostConditionsInconsistencies( - callConstraints, - data.context, - expression, - data.branch.get() - ) - ensure(!inconsistentPostConditions) - data.noReturn() - } - -/** Handles the possibility of a function call being done with ?. */ -private fun SolverState.checkReceiverWithPossibleSafeDot( - associatedVarName: ObjectFormula, - wholeExpr: Expression, - resolvedCall: ResolvedCall?, - receiverName: ObjectFormula, - receiverExpr: Expression?, - data: CheckData, - block: (CheckData) -> ContSeq -): ContSeq = - when { - (receiverExpr != null) && (receiverExpr.impl() == wholeExpr.impl()) -> { - // this happens in some weird cases, just keep going - solverTrace.add("weird case") - block(data) - } - (receiverExpr == null) && (resolvedCall?.hasReceiver() == true) -> - // special case, no receiver, but implicitly it's 'this' - checkNameExpression(receiverName, "this", data).flatMap { stateAfter -> - block(stateAfter.data) - } - else -> - checkExpressionConstraints(receiverName, receiverExpr, data).checkReturnInfo { - stateAfterReceiver -> - val dataAfterReceiver = stateAfterReceiver.data - // here comes a trick: when the method is access with the "safe dot" ?. - // we need to create two different "branches", - // one for the case in which the value is null, one for when it isn't - // x?.f(..) <=> if (x == null) null else x.f(..) - // we do so by yielding 'true' and 'false' in that case, - // and only 'true' when we use a "regular dot" . - ContSeq { - if (wholeExpr is SafeQualifiedExpression) yield(false) - yield(true) - } - .flatMap { r -> continuationBracket.map { r } } - .flatMap { definitelyNotNull -> - solverTrace.add("?. case $definitelyNotNull") - if (!definitelyNotNull) { // the null case of ?. - ContSeq.unit.map { - val nullReceiver = - NamedConstraint("$receiverName is null (?.)", solver.isNull(receiverName)) - val nullResult = - NamedConstraint( - "$associatedVarName is null (?.)", - solver.isNull(associatedVarName) - ) - val inconsistent = - checkConditionsInconsistencies( - listOf(nullReceiver, nullResult), - dataAfterReceiver.context, - receiverExpr!!, - dataAfterReceiver.branch.get(), - reportIfInconsistent = false - ) - ensure(!inconsistent) - dataAfterReceiver.addBranch(solver.isNull(receiverName)).noReturn() - } - } else { // the non-null case of ?., or simply regular . - doOnlyWhenNotNull(receiverExpr, dataAfterReceiver.noReturn()) { rcv -> - ContSeq.unit.map { - val notNullCstr = - NamedConstraint( - "$receiverName is not null (?.)", - solver.isNotNull(receiverName) - ) - val inconsistent = - checkConditionsInconsistencies( - listOf(notNullCstr), - data.context, - rcv, - dataAfterReceiver.branch.get(), - reportIfInconsistent = false - ) - ensure(!inconsistent) - dataAfterReceiver.addBranch(solver.isNotNull(receiverName)).noReturn() - } - } - .flatMap { stateAfterNotNullReceiver -> block(stateAfterNotNullReceiver.data) } - } - } - } - } - -/** - * Checks leftExpr ?: rightExpr This is very similar to [checkReceiverWithPossibleSafeDot], but it's - * hard to abstract between both due to small details - */ -private fun SolverState.checkElvisOperator( - associatedVarName: ObjectFormula, - leftExpr: Expression, - rightExpr: Expression, - data: CheckData -): ContSeq { - val leftName = newName(data.context, "left", leftExpr) - val left = solver.makeObjectVariable(leftName) - return checkExpressionConstraints(leftName, leftExpr, data).checkReturnInfo { stateAfterLeft -> - ContSeq { - yield(false) - yield(true) - } - .flatMap { r -> continuationBracket.map { r } } - .flatMap { definitelyNotNull -> - if (!definitelyNotNull) { // the null case of ?: - ContSeq.unit - .map { - val nullLeft = NamedConstraint("$leftName is null (?:)", solver.isNull(left)) - val inconsistent = - checkConditionsInconsistencies( - listOf(nullLeft), - data.context, - leftExpr, - data.branch.get(), - reportIfInconsistent = false - ) - ensure(!inconsistent) - } - .flatMap { - // then the result is whatever we get from the right - checkExpressionConstraints( - associatedVarName, - rightExpr, - stateAfterLeft.data.addBranch(solver.isNull(left)) - ) - } - } else { // the non-null case of ?: - ContSeq.unit - .map { - val notNullLeft = NamedConstraint("$leftName is not null", solver.isNotNull(left)) - val resultIsLeft = - NamedConstraint( - "$leftName is result of ?:", - solver.objects { equal(left, associatedVarName) } - ) - val inconsistent = - checkConditionsInconsistencies( - listOf(notNullLeft, resultIsLeft), - data.context, - leftExpr, - data.branch.get(), - reportIfInconsistent = false - ) - ensure(!inconsistent) - } - .map { stateAfterLeft.data.addBranch(solver.isNotNull(left)).noReturn() } - } - } - } -} - -private fun SolverState.checkAsOperator( - associatedVarName: ObjectFormula, - kind: TypeCastExpresionKind, - leftExpr: Expression?, - whole: Expression, - data: CheckData -): ContSeq { - val leftName = newName(data.context, "left", leftExpr) - val left = solver.makeObjectVariable(leftName) - return checkExpressionConstraints(leftName, leftExpr, data).checkReturnInfo { stateAfterLeft -> - ContSeq { - if (kind == TypeCastExpresionKind.QUESTION_TYPE_CAST) yield(true) - yield(false) - } - .flatMap { r -> continuationBracket.map { r } } - .flatMap { asFails -> - if (asFails) { - // one possibility is that 'as?' fails, regardless of what 'left' is - val formulaNullResult = solver.isNull(associatedVarName) - val nullResult = NamedConstraint("$associatedVarName is null (as?)", formulaNullResult) - ContSeq.unit - .map { - val inconsistent = - checkConditionsInconsistencies( - listOf(nullResult), - data.context, - whole, - data.branch.get(), - reportIfInconsistent = false - ) - ensure(!inconsistent) - } - .map { stateAfterLeft.data.addBranch(formulaNullResult).noReturn() } - } else { - // if 'as' does not fail, then the result is equal to 'left' - val formulaEqualsLeft = solver.objects { equal(left, associatedVarName) } - val resultEqualsLeft = NamedConstraint("$associatedVarName is $left", formulaEqualsLeft) - ContSeq.unit - .map { - val inconsistent = - checkConditionsInconsistencies( - listOf(resultEqualsLeft), - data.context, - whole, - data.branch.get(), - reportIfInconsistent = false - ) - ensure(!inconsistent) - } - .map { stateAfterLeft.data.addBranch(formulaEqualsLeft).noReturn() } - } - } - } -} - -internal data class CallArgumentsInfo( - val returnOrVariables: Either>, - val data: CheckData -) { - internal companion object { - fun init(data: CheckData) = CallArgumentsInfo(emptyList().right(), data) - } -} - -internal data class CallVarArgumentsInfo( - val returnOrVariables: Either>, - val data: CheckData -) { - internal companion object { - fun init(data: CheckData) = CallVarArgumentsInfo(emptyList().right(), data) - } -} - -internal data class CallArgumentVariable( - val parameterName: String, - val assignedSmtVariable: ObjectFormula -) - -private fun List.toMap() = associate { (name, smt) -> name to smt } - -/** - * Recursively perform check on arguments, including extension receiver and dispatch receiver - * - * [NOTE: argument renaming] this function creates a new name for each argument, based on the formal - * parameter name; this creates a renaming for the original constraints - */ -private fun SolverState.checkCallArguments( - resolvedCall: ResolvedCall, - data: CheckData -): ContSeq { - // why is this so complicated? - // in theory, we just need to run checkExpressionConstraints over each argument - // (in fact, the original implementation just did that, and then called .sequence()) - // alas, Kotlin allows arguments to include 'return' (yes, really!) - // so we need to check after each step whether a ExplicitReturn has been generated - // and in that case we stop the check of any more arguments - // (stopping there is important, since introducing additional constraints from - // other arguments may not be right in the general case) - - // version for varargs - fun accVarArg( - upToNow: ContSeq, - expr: Expression - ): ContSeq = - upToNow.flatMap { (result, data) -> - result.fold( - { r -> cont { CallVarArgumentsInfo(r.left(), data) } }, - { argsUpToNow -> - val referencedElement = resolvedCall.referencedArg(expr) - val argUniqueName = - solver.makeObjectVariable(newName(data.context, "vararg", expr, referencedElement)) - checkExpressionConstraints(argUniqueName, expr, data).checkReturnInfo({ r, s -> - CallVarArgumentsInfo(r.left(), s.data) - }) { s -> - cont { CallVarArgumentsInfo((argsUpToNow + listOf(argUniqueName)).right(), s.data) } - } - } - ) - } - - // version for regular parameters - fun acc( - upToNow: ContSeq, - current: ArgumentExpression - ): ContSeq = - upToNow.flatMap { (result, data) -> - result.fold( - { r -> cont { CallArgumentsInfo(r.left(), data) } }, - { argsUpToNow -> - val (name, ty, isVarArg, isSpread, maybeMultipleExpr) = current - if (isVarArg && !isSpread) { - maybeMultipleExpr.fold(cont { CallVarArgumentsInfo.init(data) }, ::accVarArg).flatMap { - (returnOrVar, data) -> - returnOrVar.fold( - { r -> cont { CallArgumentsInfo(r.left(), data) } }, - { _ -> // we don't really care about the names of the generated variables - cont { - // record the length of the array - val allArgsUniqueName = - solver.makeObjectVariable(newName(data.context, name, null)) - ty.getField("size")?.let { sizeDecl -> - solver - .ints { - equal( - solver.intValue(field(sizeDecl, allArgsUniqueName)), - makeNumber(maybeMultipleExpr.size.toLong()) - ) - } - .let { addConstraint(NamedConstraint("vararg length", it), data.context) } - } - // return as usual - CallArgumentsInfo( - (argsUpToNow + listOf(CallArgumentVariable(name, allArgsUniqueName))).right(), - data - ) - } - } - ) - } - } else { - val expr = maybeMultipleExpr.singleOrNull() - val referencedElement = resolvedCall.referencedArg(expr) - val argUniqueName = - solver.makeObjectVariable(newName(data.context, name, expr, referencedElement)) - checkExpressionConstraints(argUniqueName, expr, data).checkReturnInfo({ r, s -> - CallArgumentsInfo(r.left(), s.data) - }) { s -> - cont { - CallArgumentsInfo( - (argsUpToNow + listOf(CallArgumentVariable(name, argUniqueName))).right(), - s.data - ) - } - } - } - } - ) - } - - return resolvedCall - .valueArgumentExpressions(data.context) - .fold(cont { CallArgumentsInfo.init(data) }, ::acc) -} - -private fun SolverState.checkNullExpression( - associatedVarName: ObjectFormula, - data: CheckData -): ContSeq = - data.noReturn { - addConstraint( - NamedConstraint("$associatedVarName is null (== null)", solver.isNull(associatedVarName)), - data.context - ) - } - -/** - * This function produces a constraint that makes the desired variable name equal to the value - * encoded in the constant and adds it to the [SolverState.prover] constraints. - */ -private fun SolverState.checkConstantExpression( - associatedVarName: ObjectFormula, - expression: ConstantExpression, - data: CheckData -): ContSeq = - data.noReturn { - val type = expression.type(data.context)?.unwrapIfNullable() - when (type?.primitiveType()) { - PrimitiveType.BOOLEAN -> - expression.text.toBooleanStrictOrNull()?.let { - solver.booleans { - if (it) solver.boolValue(associatedVarName) - else not(solver.boolValue(associatedVarName)) - } - } - PrimitiveType.INTEGRAL -> - expression.text.asIntegerLiteral()?.let { - solver.ints { equal(solver.intValue(associatedVarName), makeNumber(it)) } - } - PrimitiveType.RATIONAL -> - expression.text.asFloatingLiteral()?.let { - solver.rationals { equal(solver.decimalValue(associatedVarName), makeNumber(it)) } - } - PrimitiveType.STRING -> { - // record the length of the string - StringEscapeUtils.unescapeJava(expression.text.trim('"'))?.let { stringLiteral -> - type.getField("length")?.let { lengthDecl -> - solver.ints { - equal( - solver.intValue(field(lengthDecl, associatedVarName)), - makeNumber(stringLiteral.length.toLong()) - ) - } - } - } - } - else -> null - }?.let { - addConstraint( - NamedConstraint( - "${expression.text} checkConstantExpression $associatedVarName ${expression.text}", - it - ), - data.context - ) - addConstraint( - NamedConstraint("${expression.text} is not null", solver.isNotNull(associatedVarName)), - data.context - ) - } - } - -private fun SolverState.checkStringTemplate( - associatedVarName: ObjectFormula, - expression: StringTemplateExpression, - data: CheckData -): ContSeq = - expression.entries - .filterIsInstance() - .map { checkExpressionConstraints("str", it.expression, data) } - .sequence() - .flatMap { - data.noReturn { - val type = expression.type(data.context)?.unwrapIfNullable() - val minimalLength = - expression.entries.filterIsInstance().sumOf { - StringEscapeUtils.unescapeJava(it.string.trim('"')).length - } - type?.getField("length")?.let { lengthDecl -> - addConstraint( - NamedConstraint( - "$associatedVarName minimal length", - solver.ints { - greaterOrEquals( - solver.intValue(field(lengthDecl, associatedVarName)), - makeNumber(minimalLength.toLong()) - ) - } - ), - data.context - ) - } - addConstraint( - NamedConstraint("${expression.text} is not null", solver.isNotNull(associatedVarName)), - data.context - ) - } - } - -private fun Type.getField(fieldName: String): DeclarationDescriptor? = - descriptor - ?.unsubstitutedMemberScope - ?.getContributedDescriptors { it == fieldName } - ?.singleOrNull { it.name.value == fieldName && it.isField() } - -private fun SolverState.checkAssignmentExpression( - expression: AssignmentExpression, - data: CheckData -): ContSeq { - - // in cases in which we don't do anything special - // we simply look at the rhs to check for problems - // there, but without assigning it at all - fun onlyRhs(): ContSeq = checkExpressionConstraints("rhs", expression.right, data) - - // early termination if we cannot resolve the left side - val left = expression.left ?: return onlyRhs() - val leftCall = left.getResolvedCall(data.context) - val leftReceiver = leftCall?.getReceiverExpression() - return when (val leftDescr = leftCall?.resultingDescriptor) { - is LocalVariableDescriptor -> { - when { - leftDescr.isVar -> { // assignment to mutable variable - // we introduce a new name because we don't want to introduce - // any additional information about the variable, - // we should only have that declared in the invariant - val refName = leftDescr.name.toString() - val newName = newName(data.context, refName, left) - val invariant = data.varInfo.get(refName)?.invariant - checkBodyAgainstInvariants(expression, newName, invariant, expression.right, data).map { - it.second - } // and then we forget about the new name - } - // no more cases, since by the Kotlin and Java rules - // 'val's / 'final var's must be initialized at declaration time - else -> null - } - } - is PropertyDescriptor -> { - when { - // nothing for variables from properties or fields - leftDescr.isVar -> null - // the interesting case is when we are initializing - // a variable in a constructor - leftDescr.dispatchReceiverParameter != null && - leftDescr.isField() && - (leftReceiver == null || leftReceiver is ThisExpression) -> { - // here we are - data.varInfo.get(THIS_VAR_NAME)?.let { info -> - checkExpressionConstraints( - field(leftDescr, solver.makeObjectVariable(info.smtName)), - expression.right, - data - ) - } - } - else -> null - } - } - else -> null - } - ?: onlyRhs() -} - -/** Check special binary cases, and make the other fall-through */ -private fun SolverState.checkBinaryExpression( - associatedVarName: ObjectFormula, - expression: BinaryExpression, - data: CheckData -): ContSeq { - val operator = expression.operationTokenRpr - val left = expression.left - val right = expression.right - return when { - // this is x == null, or x != null - (operator == "EQEQ" || operator == "EXCLEQ") && right is NullExpression -> { - val newName = solver.makeObjectVariable(newName(data.context, "checkNull", left)) - checkExpressionConstraints(newName, left, data).checkReturnInfo { stateAfter -> - cont { - when (operator) { - "EQEQ" -> solver.isNull(newName) - "EXCLEQ" -> solver.isNotNull(newName) - else -> null - }?.let { - val cstr = solver.booleans { equivalence(solver.boolValue(associatedVarName), it) } - addConstraint( - NamedConstraint("$associatedVarName is null?", cstr), - stateAfter.data.context - ) - } - stateAfter - } - } - } - (operator == "ANDAND" || operator == "OROR") -> { - val lhs = solver.makeObjectVariable(newName(data.context, "left", left)) - val rhs = solver.makeObjectVariable(newName(data.context, "right", right)) - checkExpressionConstraints(lhs, left, data).checkReturnInfo { _ -> - checkExpressionConstraints(rhs, right, data).checkReturnInfo { stateAfterRhs -> - cont { - when (operator) { - "ANDAND" -> solver.boolAnd(listOf(solver.boolValue(lhs), solver.boolValue(rhs))) - "OROR" -> solver.boolOr(listOf(solver.boolValue(lhs), solver.boolValue(rhs))) - else -> null - }?.let { - addConstraint( - NamedConstraint("boolean operator $operator", it), - stateAfterRhs.data.context - ) - } - stateAfterRhs - } - } - } - } - else -> fallThrough(associatedVarName, expression, data) - } -} - -/** - * Checks (x is Something) expressions We do not track types, so in theory this should not affect - * our analysis However, in the specific case in which 'Something' is not nullable we can also - * ensure that 'x' is not null This is different from 'x != null' in that we do not generate - * associatedVarName <=> not (null x) But rather associatedVarName ==> not (null x) - */ -private fun SolverState.checkIsExpression( - associatedVarName: ObjectFormula, - isNegated: Boolean, - typeReference: TypeReference?, - subjectName: ObjectFormula, - data: CheckData -) { - if (!isNegated) { - val invariants = - (data.context.type(typeReference)?.let { typeInvariants(it, subjectName, data.context) }) - // in the worst case, we know that it is not null - ?: listOf(NamedConstraint("$associatedVarName is not null", solver.isNotNull(subjectName))) - invariants.forEach { cstr -> - val constraint = - NamedConstraint( - "$associatedVarName => ${cstr.msg}", - solver.booleanFormulaManager.implication( - solver.boolValue(associatedVarName), - cstr.formula - ) - ) - addConstraint(constraint, data.context) - } - } -} - -/** Checks the body of a lambda expression, but does nothing in particular with it */ -internal fun SolverState.checkLambda(expr: LambdaExpression, data: CheckData): ContSeq { - val itParam = - expr.type(data.context)?.takeIf { expr.valueParameters.isEmpty() }?.singleFunctionArgument() - return checkFunctionBody( - expr, - null, - expr.valueParameters, - itParam, - expr.functionLiteral.typeReference, - expr.bodyExpression, - data - ) -} - -/** Checks whether we have a type (x: A) -> B, and returns the A */ -internal fun Type.singleFunctionArgument() = - this.takeIf { it.descriptor?.fqNameSafe == FqName("kotlin.Function1") } - ?.arguments - ?.getOrNull(0) - ?.type - -/** Checks the body of a local function, but does nothing in particular with it */ -private fun SolverState.checkFunctionDeclarationExpression( - declaration: Function, - data: CheckData -): ContSeq = - checkFunctionBody( - declaration, - declaration.receiverTypeReference, - declaration.valueParameters, - null, - declaration.typeReference, - declaration.stableBody(), - data - ) - -/** Shared code between lambda expressions and local function declarations */ -internal fun SolverState.checkFunctionBody( - wholeExpr: Expression, - receiverType: TypeReference?, - valueParameters: List, - itType: Type?, - resultType: TypeReference?, - body: Expression?, - data: CheckData -): ContSeq = - // We need to introduce new arguments - // and a new return point - inScope(data) { - scopedBracket { - // add information about parameters - val thisParam = - receiverType?.let { - val thisSmtName = newName(data.context, THIS_VAR_NAME, wholeExpr) - ParamInfo(THIS_VAR_NAME, thisSmtName, data.context.type(it), wholeExpr) - } - val itParam = - itType?.let { - val smtName = newName(data.context, "it", wholeExpr) - ParamInfo("it", smtName, itType, wholeExpr) - } - val valueParams = - valueParameters.mapNotNull { param -> - param.name?.let { name -> - val smtName = newName(data.context, name, param) - ParamInfo(name, smtName, param.type(data.context), param) - } - } + listOfNotNull(itParam) - val resultSmtName = newName(data.context, RESULT_VAR_NAME, wholeExpr) - val resultParam = - resultType?.let { - ParamInfo(RESULT_VAR_NAME, resultSmtName, data.context.type(it), wholeExpr) - } - val newParams = initialParameters(thisParam, valueParams, resultParam, data.context) - val newData = - data - .addVarInfos(newParams) // add new names from arguments - .replaceTopMostReturnPoint( - null, - solver.makeObjectVariable(resultSmtName) - ) // add the new return point - data.noReturn { - // and now go and check the body - checkExpressionConstraints(resultSmtName, body, newData) - .drain() // execute until the end, so any bracket is closed - } - } - } - -/** - * This function produces a continuation that makes the desired variable name equal to the value - * encoded in the named expression. - */ -private fun SolverState.checkNonFunctionDeclarationExpression( - declaration: Declaration, - data: CheckData -): ContSeq> = - doOnlyWhenNotNull(declaration.stableBody(), Pair(null, data.noReturn())) { body -> - val declName = - when (declaration) { - // use the given name if available - is NamedDeclaration -> declaration.nameAsSafeName.value - else -> newName(data.context, "decl", body) - } - // we need to create a new one to prevent shadowing - val smtName = newName(data.context, declName, body) - // find out whether we have an invariant - val invariant = obtainInvariant(body, data) - // assert the invariant if found and check its consistency - doOnlyWhenNotNull(invariant, Unit) { (invBody, invFormula: BooleanFormula) -> - ContSeq.unit.map { - val renamed = solver.renameObjectVariables(invFormula, mapOf(RESULT_VAR_NAME to smtName)) - val inconsistentInvariant = - checkInvariantConsistency( - NamedConstraint("invariant in $declName", renamed), - data.context, - invBody, - data.branch.get() - ) - ensure(!inconsistentInvariant) - } - } - .flatMap { - // this gives back a new temporary name for the body - checkBodyAgainstInvariants(declaration, declName, invariant?.second, body, data) - } - .map { (newVarName, stateAfter) -> - // if it's not a var, we state it's equal to the one - // we've introduced while checking the invariants - // this means the solver can use everything it may - // gather about it - if (!declaration.isVar()) { - solver.objects { - addConstraint( - NamedConstraint( - "$declName $smtName = $newVarName", - equal(solver.makeObjectVariable(smtName), solver.makeObjectVariable(newVarName)) - ), - data.context - ) - } - } - // update the list of variables in scope - val newData = - stateAfter.data.addVarInfo(solver, declName, smtName, declaration, invariant?.second) - // and then keep going - Pair(newVarName, stateAfter.withData(newData)) - } - } - -/** Checks the possible invariants of a declaration, and its body. */ -private fun SolverState.checkBodyAgainstInvariants( - element: Element, - declName: String, - invariant: BooleanFormula?, - body: Expression?, - data: CheckData -): ContSeq> { - val newName = newName(data.context, declName, body) - return checkExpressionConstraints(newName, body, data) - .onEach { - whenNotTrusted(body, data) { - invariant?.let { - val renamed = solver.renameObjectVariables(it, mapOf(RESULT_VAR_NAME to newName)) - checkInvariant( - NamedConstraint("assignment to `${element.text}`", renamed), - data.context, - element, - data.branch.get() - ) - } - } - } - .map { r -> Pair(newName, r) } -} - -private fun SolverState.obtainInvariant( - expression: Expression, - data: CheckData -): Pair? = - expression - .getResolvedCall(data.context) - ?.takeIf { it.specialKind == SpecialKind.Invariant } - ?.singleArg("predicate", data.context) - ?.let { expr: Expression -> - topLevelExpressionToFormula(expr, data.context, emptyList(), true)?.let { formula -> - expr to formula - } - } - -/** - * This function produces a continuation that makes the desired variable name equal to the value - * encoded in the named expression and adds the resulting boolean formula to the - * [SolverState.prover] constraints. - */ -private fun SolverState.checkNameExpression( - associatedVarName: ObjectFormula, - referencedName: String, - data: CheckData -): ContSeq = - data.noReturn { - // use the SMT name recorded in the variable info - data.varInfo.get(referencedName)?.let { - val constraint = - solver.objects { equal(associatedVarName, solver.makeObjectVariable(it.smtName)) } - addConstraint( - NamedConstraint("$associatedVarName = ${it.smtName} (name)", constraint), - data.context - ) - } - } - -private fun Expression.computeConditions(): List = - when (this) { - is IfExpression -> - thenExpression?.let { thenExpr -> - val elseExpr = elseExpression ?: MissingElseBlockExpression(this, thenExpr) - listOf( - SimpleCondition(condition!!, false, thenExpr, thenExpr), - SimpleCondition(null, true, elseExpr, elseExpr) - ) - } - ?: emptyList() - is WhenExpression -> { - val subject = subjectExpression - entries.flatMap { entry -> - if (entry.conditions.isEmpty()) { - listOf(SimpleCondition(null, entry.isElse, entry.expression!!, entry)) - } else { - entry.conditions.toList().mapNotNull { cond -> - when { - subject != null -> SubjectCondition(cond, entry.isElse, entry.expression!!, entry) - cond is WhenConditionWithExpression -> - SimpleCondition(cond.expression!!, entry.isElse, entry.expression!!, entry) - else -> null - } - } - } - } - } - else -> emptyList() - } - -/** Check `if` and `when` expressions. */ -private fun SolverState.checkConditional( - associatedVarName: ObjectFormula, - subject: Expression?, - branches: List, - data: CheckData -): ContSeq { - val newSubjectVar = solver.makeObjectVariable(newName(data.context, "subject", subject)) - // this handles the cases of when with a subject, and with 'val x = subject' - return when (subject) { - is Declaration -> - checkNonFunctionDeclarationExpression(subject, data).map { (actualSubjectVar, stateAfter) -> - Pair( - actualSubjectVar?.let { solver.makeObjectVariable(it) } ?: newSubjectVar, - stateAfter.data - ) - } - else -> - checkExpressionConstraints(newSubjectVar, subject, data).map { stateAfter -> - Pair(newSubjectVar, stateAfter.data) - } - } - .flatMap { (subjectVar, newData) -> - branches - .map { cond -> - val conditionVar = newName(data.context, "cond", cond.condition) - // introduce the condition - (cond.condition?.let { - introduceCondition(solver.makeObjectVariable(conditionVar), subjectVar, cond, newData) - } - ?: newData.noReturn { - // if we have no condition, it's equivalent to true - addConstraint( - NamedConstraint( - "check condition branch $conditionVar", - solver.makeBooleanObjectVariable(conditionVar) - ), - newData.context - ) - }) - .map { returnInfo -> Pair(Pair(returnInfo, cond), conditionVar) } - } - .nested() - } - .flatMap { conditionInformation -> - yesNo(conditionInformation).asContSeq().flatMap { (returnAndCond, correspondingVars) -> - val (stateAfter, cond) = returnAndCond - when (stateAfter.returnInfo) { - is ExplicitReturn -> // weird case: a return in a condition - cont { stateAfter } - else -> - continuationBracket - .map { - // assert the variables and check that we are consistent - val inconsistentEnvironment = - checkConditionsInconsistencies( - correspondingVars, - data.context, - cond.whole, - data.branch.get(), - reportIfInconsistent = true - ) - // it only makes sense to continue if we are not consistent - ensure(!inconsistentEnvironment) - } - .flatMap { - val newData = stateAfter.data.addBranch(correspondingVars.map { it.formula }) - // check the body - checkExpressionConstraints(associatedVarName, cond.body, newData) - } - } - } - } -} - -private fun SolverState.introduceCondition( - conditionVar: ObjectFormula, - subjectVar: ObjectFormula, - cond: Condition, - data: CheckData -): ContSeq = - when (cond) { - is SimpleCondition -> checkExpressionConstraints(conditionVar, cond.predicate, data) - is SubjectCondition -> - when (val check = cond.check) { - is WhenConditionWithExpression -> - if (check.expression is NullExpression) { - data.noReturn { - val complete = - solver.booleans { - equivalence(solver.boolValue(conditionVar), solver.isNull(subjectVar)) - } - addConstraint( - NamedConstraint("$subjectVar is null (condition)", complete), - data.context - ) - } - } else { - val patternName = newName(data.context, "pattern", check.expression) - checkExpressionConstraints(patternName, check.expression, data).map { - when (check.expression?.type(data.context)?.primitiveType()) { - PrimitiveType.BOOLEAN -> - solver.booleans { - equivalence( - solver.boolValue(subjectVar), - solver.makeBooleanObjectVariable(patternName) - ) - } - PrimitiveType.INTEGRAL -> - solver.ints { - equal( - solver.intValue(subjectVar), - solver.makeIntegerObjectVariable(patternName) - ) - } - PrimitiveType.RATIONAL -> - solver.rationals { - equal( - solver.decimalValue(subjectVar), - solver.makeDecimalObjectVariable(patternName) - ) - } - else -> null - }?.let { - val complete = solver.booleans { equivalence(solver.boolValue(conditionVar), it) } - addConstraint( - NamedConstraint("$subjectVar equals $patternName (condition)", complete), - data.context - ) - } - data.noReturn() - } - } - is WhenConditionIsPattern -> - data.noReturn { - checkIsExpression(conditionVar, check.isNegated, check.typeReference, subjectVar, data) - } - else -> data.noReturn {} - } - } - -/** - * Given a list of names for condition variables, create the boolean conditions for each branch. - * - * For example, given [a, b, c], it generates: - * - a - * - not a, b - * - not a, not b, c - */ -private fun SolverState.yesNo( - conditionVars: List> -): List>> { - fun go( - currents: List>, - acc: List - ): List>> = - if (currents.isEmpty()) { - emptyList() - } else { - solver.booleans { - val varName = solver.makeBooleanObjectVariable(currents[0].second) - val nextValue = acc + listOf(NamedConstraint("$varName", varName)) - val nextAcc = acc + listOf(NamedConstraint("!($varName)", not(varName))) - listOf(Pair(currents[0].first, nextValue)) + go(currents.drop(1), nextAcc) - } - } - return go(conditionVars, emptyList()) -} - -private fun SolverState.checkLoopExpression( - expression: LoopExpression, - data: CheckData -): ContSeq = - when (expression) { - is ForExpression -> checkForExpression(expression.loopParameter, expression.body, data) - is ThreePieceForExpression -> - inScope(data) { - val initVar = solver.makeObjectVariable(newName(data.context, "initializer", expression)) - checkBlockExpression(initVar, expression.initializer, false, data).flatMap { after -> - doOnlyWhenNotNull(expression.condition, data.noReturn()) { - checkWhileExpression(it, expression.body, emptyList(), after.data) - } - } - } - is WhileExpression -> - doOnlyWhenNotNull(expression.condition, data.noReturn()) { - checkWhileExpression(it, expression.body, emptyList(), data) - } - is DoWhileExpression -> { - // remember that do { t } while (condition) - // is equivalent to { t }; while (condition) { t } - checkExpressionConstraintsWithNewName("firstIter", expression.body, data).flatMap { - doOnlyWhenNotNull(expression.condition, data.noReturn()) { - // do not change the data, since the block goes out of scope - checkWhileExpression(it, expression.body, emptyList(), data) - } - } - } - else -> data.noReturn {} // this should not happen - } - -private fun SolverState.checkForExpression( - loopParameter: Parameter?, - body: Expression?, - data: CheckData -): ContSeq = - ContSeq { - yield(LoopPlace.INSIDE_LOOP) - yield(LoopPlace.AFTER_LOOP) - } - .flatMap { - when (it) { - LoopPlace.INSIDE_LOOP -> - inScope(data) { - continuationBracket.flatMap { - val paramName = loopParameter?.nameAsName?.value - val newData = - if (loopParameter != null && paramName != null) { - val smtName = newName(data.context, paramName, loopParameter) - data.addVarInfo(solver, paramName, smtName, loopParameter, null) - } else data - checkLoopBody(body, emptyList(), newData) - } - } - // in this case we know nothing - // after the loop finishes - LoopPlace.AFTER_LOOP -> data.noReturn {} - } - } - -private fun SolverState.checkWhileExpression( - condition: Expression, - body: Expression?, - afterBody: List, - data: CheckData -): ContSeq { - val condName = newName(data.context, "cond", condition) - return checkExpressionConstraints(condName, body, data) - .flatMap { - ContSeq { - yield(LoopPlace.INSIDE_LOOP) - yield(LoopPlace.AFTER_LOOP) - } - } - .flatMap { - val objVar = solver.makeBooleanObjectVariable(condName) - when (it) { - LoopPlace.INSIDE_LOOP -> - inScope(data) { - continuationBracket.flatMap { - // inside the loop the condition is true - checkConditionsInconsistencies( - listOf(NamedConstraint("inside the loop, condition is true", objVar)), - data.context, - condition, - data.branch.get(), - reportIfInconsistent = true - ) - checkLoopBody(body, afterBody, data.addBranch(objVar)) - } - } - // after the loop the condition is false - LoopPlace.AFTER_LOOP -> - cont { - val notVar = solver.booleanFormulaManager.not(objVar) - checkConditionsInconsistencies( - listOf(NamedConstraint("loop is finished, condition is false", notVar)), - data.context, - condition, - data.branch.get(), - reportIfInconsistent = true - ) - // add (not condition) to the data - data.addBranch(notVar).noReturn() - } - } - } -} - -private fun SolverState.checkLoopBody( - body: Expression?, - afterBody: List, - data: CheckData -): ContSeq { - return checkExpressionConstraintsWithNewName("loop", body, data).flatMap { stateAfter -> - // check the additional updates (used when describing "three-piece" for loops) - val afterBodyVar = solver.makeObjectVariable(newName(data.context, "afterBody", body)) - checkBlockExpression(afterBodyVar, afterBody, false, stateAfter.data).map { - // only keep working on this branch - // if we had a 'return' inside - // otherwise the other branch is enough - // if we decide to abort we need to 'pop', - // because the one from 'bracket' won't run - when (stateAfter.returnInfo) { - is ExplicitBlockReturn -> stateAfter - is ExplicitReturn -> abort() - is NoReturn -> abort() - } - } - } -} - -/** - * Check try/catch/finally blocks This is a very rough check, in which we assume the worst-case - * scenario: - * - when you get to a 'catch' you have *no* information about the 'try' at all - * - all the 'catch' blocks may potentially execute - */ -private fun SolverState.checkTryExpression( - associatedVarName: ObjectFormula, - expression: TryExpression, - data: CheckData -): ContSeq = - inScope(data) { - ContSeq { - yield(expression.tryBlock) - yieldAll(expression.catchClauses) - } - .flatMap { r -> continuationBracket.map { r } } - .flatMap { - when (it) { - is BlockExpression -> // the try - checkExpressionConstraints(associatedVarName, it, data).flatMap { stateAfter -> - when (stateAfter.returnInfo) { - // if we had a throw, this will eventually end in a catch - is ExplicitThrowReturn -> - // is the thrown exception something in our own catch? - if ( - doesAnyCatchMatch( - stateAfter.returnInfo.exceptionType, - expression.catchClauses, - data - ) - ) - ContSeq { abort() } // then there's no point in keep looking here - else cont { stateAfter } // otherwise, bubble up the exception - else -> cont { stateAfter } - } - } - is CatchClause -> { // the catch - doOnlyWhenNotNull(it.catchParameter, data.noReturn()) { param -> - doOnlyWhenNotNull(param.nameAsName?.value, data.noReturn()) { paramName -> - // introduce the name of the parameter - val smtName = newName(data.context, paramName, param) - // and then go on and check the body - checkExpressionConstraints( - associatedVarName, - it.catchBody, - data.addVarInfo(solver, paramName, smtName, param) - ) - } - } - } - else -> ContSeq { abort() } - } - } - .onEach { stateAfterTryOrCatch -> - // override the return of the finally with the return of the try or catch - doOnlyWhenNotNull(expression.finallyBlock, data) { finally -> - checkExpressionConstraintsWithNewName("finally", finally.finalExpression, data).map { - stateAfterTryOrCatch - } - } - } - } - -/** - * Checks whether the type obtain from an explicit 'throw' matches any of the types in the 'catch' - * clauses - */ -internal fun doesAnyCatchMatch( - throwType: Type?, - clauses: List, - data: CheckData -): Boolean = - clauses.any { clause -> - val catchType = clause.catchParameter?.type(data.context) - if (throwType != null && catchType != null) { - throwType.isSubtypeOf(catchType) - } else { - false - } - } - -/** Find the corresponding "body" of a declaration */ -internal fun Declaration.stableBody(): Expression? = - when (this) { - is VariableDeclaration -> initializer - is DeclarationWithBody -> bodyExpression ?: bodyBlockExpression - is DeclarationWithInitializer -> initializer - else -> null - } - -private fun ContSeq.checkReturnInfo( - r: (r: ExplicitReturn, s: StateAfter) -> A, - f: (StateAfter) -> ContSeq -): ContSeq = - this.flatMap { stateAfter -> - when (stateAfter.returnInfo) { - is ExplicitReturn -> cont { r(stateAfter.returnInfo, stateAfter) } - else -> f(stateAfter) - } - } - -private fun ContSeq.checkReturnInfo( - f: (StateAfter) -> ContSeq -): ContSeq = this.checkReturnInfo({ _, stateAfter -> stateAfter }, f) - -private fun inScope(data: CheckData, f: () -> ContSeq): ContSeq = - f().map { it.withData(data) } - -private fun whenNotTrusted(expression: Expression?, data: CheckData, toDo: () -> Unit) { - if (expression == null || !expression.inTrustedEnvironment(data.context)) { - toDo() - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Parameters.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Parameters.kt deleted file mode 100644 index e8e696347..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/Parameters.kt +++ /dev/null @@ -1,48 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.VarInfo -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.search.fieldEqualitiesInvariants -import arrow.meta.plugins.analysis.phases.analysis.solver.search.typeInvariants -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import arrow.meta.plugins.analysis.smt.Solver - -data class ParamInfo( - val name: String, - val smtName: String, - val type: Type?, - val element: Element?, - val thisFromConstructor: Boolean = false -) { - companion object { - public operator fun invoke( - solver: Solver, - name: String, - smtName: String, - type: Type?, - element: Element?, - thisFromConstructor: Boolean = false - ): ParamInfo = ParamInfo(name, solver.escape(smtName), type, element, thisFromConstructor) - } -} - -/** Record the information about parameters and introduce the corresponding invariants */ -internal fun SolverState.initialParameters( - thisParam: ParamInfo?, - valueParams: List, - result: ParamInfo?, - context: ResolutionContext -): List { - val things = listOfNotNull(thisParam) + valueParams + listOfNotNull(result) - return things.mapNotNull { param -> - param.type?.let { ty -> - val invariants: (Type, String, ResolutionContext) -> List = - if (param.thisFromConstructor) this::fieldEqualitiesInvariants else this::typeInvariants - invariants(ty, param.smtName, context).forEach { addConstraint(it, context) } - } - param.element?.let { element -> VarInfo.unsafeCreate(param.name, param.smtName, element) } - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData.kt deleted file mode 100644 index 12237e9f2..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CheckData.kt +++ /dev/null @@ -1,35 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.smt.ObjectFormula -import arrow.meta.plugins.analysis.smt.Solver -import org.sosy_lab.java_smt.api.BooleanFormula - -data class CheckData( - val context: ResolutionContext, - val returnPoints: ReturnPoints, - val varInfo: CurrentVarInfo, - val branch: CurrentBranch -) { - fun addReturnPoint(scope: String, variableName: ObjectFormula) = - this.copy(returnPoints = returnPoints.addAndReplaceTopMost(scope, variableName)) - - fun replaceTopMostReturnPoint(scope: String?, variableName: ObjectFormula) = - this.copy(returnPoints = returnPoints.replaceTopMost(scope, variableName)) - - fun addVarInfo( - solver: Solver, - name: String, - smtName: String, - origin: Element, - invariant: BooleanFormula? = null - ): CheckData = this.copy(varInfo = varInfo.add(solver, name, smtName, origin, invariant)) - - fun addVarInfos(vars: List): CheckData = this.copy(varInfo = varInfo.add(vars)) - - fun addBranch(constraint: BooleanFormula): CheckData = this.copy(branch = branch.add(constraint)) - - fun addBranch(constraint: List): CheckData = - this.copy(branch = branch.add(constraint)) -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition.kt deleted file mode 100644 index c03f843f3..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Condition.kt +++ /dev/null @@ -1,56 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenCondition -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -/** Data type used to handle `if` and `when` without subject uniformly. */ -sealed class Condition( - val condition: Element?, - val isElse: Boolean, - val body: Expression, - val whole: Element -) - -class SimpleCondition( - val predicate: Expression?, - isElse: Boolean, - body: Expression, - whole: Element -) : Condition(predicate, isElse, body, whole) - -class SubjectCondition( - val check: WhenCondition?, - isElse: Boolean, - body: Expression, - whole: Element -) : Condition(check, isElse, body, whole) - -// wrapping for missing else -class MissingElseBlockExpression(val whole: Expression, val thenExpression: Expression) : - BlockExpression { - override val firstStatement: Expression? - get() = null - override val statements: List - get() = emptyList() - override val implicitReturnFromLast: Boolean - get() = false - override val text: String - get() = "" - - override fun impl(): Any = whole.impl() - override val psiOrParent: Element = this - override fun parents(): List = thenExpression.parents() - - override fun getResolvedCall(context: ResolutionContext): ResolvedCall? = null - override fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? = null - override fun location(): CompilerMessageSourceLocation? = whole.location() - override fun type(context: ResolutionContext): Type? = thenExpression.type(context) - override fun lastBlockStatementOrThis(): Expression = this -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn.kt deleted file mode 100644 index b5ba47375..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ControlFlowFn.kt +++ /dev/null @@ -1,23 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression - -/** - * Describes the characteristics of a call to special control flow functions namely [also], [apply], - * [let], [run], [with] https://kotlinlang.org/docs/scope-functions.html#function-selection - */ -data class ControlFlowFn( - val target: Expression?, - val body: Expression, - val argumentName: String, - val returnBehavior: ReturnBehavior -) { - /** Describes whether functions return their argument or whatever is done in a block */ - enum class ReturnBehavior { - /** Return what was given as argument, usually after applying a function T -> Unit */ - RETURNS_ARGUMENT, - - /** Return whatever the enclosing block returns */ - RETURNS_BLOCK_RESULT - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch.kt deleted file mode 100644 index e09663e6a..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentBranch.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -import org.sosy_lab.java_smt.api.BooleanFormula - -typealias Branch = List - -class CurrentBranch(private val branches: List) { - - fun get(): Branch = branches - - fun add(constraint: BooleanFormula) = CurrentBranch(branches + constraint) - - fun add(constraints: List) = CurrentBranch(branches + constraints) - - companion object { - fun new(): CurrentBranch = CurrentBranch(emptyList()) - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo.kt deleted file mode 100644 index 6704c077d..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/CurrentVarInfo.kt +++ /dev/null @@ -1,24 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.smt.Solver -import org.sosy_lab.java_smt.api.BooleanFormula - -data class CurrentVarInfo(private val varInfo: List) { - - fun get(name: String): VarInfo? = varInfo.firstOrNull { it.name == name } - - fun add( - solver: Solver, - name: String, - smtName: String, - origin: Element, - invariant: BooleanFormula? = null - ): CurrentVarInfo = this.add(listOf(VarInfo(solver, name, smtName, origin, invariant))) - - fun add(vars: List): CurrentVarInfo = CurrentVarInfo(vars + varInfo) - - companion object { - fun new(): CurrentVarInfo = CurrentVarInfo(emptyList()) - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace.kt deleted file mode 100644 index 21fe71366..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/LoopPlace.kt +++ /dev/null @@ -1,6 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -enum class LoopPlace { - INSIDE_LOOP, - AFTER_LOOP -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return.kt deleted file mode 100644 index 818abf828..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/Return.kt +++ /dev/null @@ -1,24 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -/** Ways to return from a block */ -sealed interface Return - -/** This encompasses all possible was to exit a block: 'return', 'break', 'continue' */ -sealed interface ExplicitReturn : Return - -/** The block exited via its last statement, or has not exited yet */ -object NoReturn : Return - -// 2.0: data for the checks -// ------------------------ - -/** Explicit 'return', maybe with a name */ -data class ExplicitBlockReturn(val returnPoint: String?) : ExplicitReturn - -/** 'break' or 'continue' inside a loop */ -data class ExplicitLoopReturn(val returnPoint: String?) : ExplicitReturn - -/** 'throw' */ -data class ExplicitThrowReturn(val exceptionType: Type?) : ExplicitReturn diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints.kt deleted file mode 100644 index aba73be0c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/ReturnPoints.kt +++ /dev/null @@ -1,38 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Named -import arrow.meta.plugins.analysis.smt.ObjectFormula - -/** Maps return points to the SMT variables representing that place. */ -data class ReturnPoints( - val topMostReturnPointVariableName: Pair, - val namedReturnPointVariableNames: Map -) { - - fun addAndReplaceTopMost(newScopeName: String, newVariableName: ObjectFormula) = - this.replaceTopMost(newScopeName, newVariableName).add(newScopeName, newVariableName) - - fun replaceTopMost(newScopeName: String?, newVariableName: ObjectFormula) = - ReturnPoints(Pair(newScopeName, newVariableName), namedReturnPointVariableNames) - - private fun add(returnPoint: String, variableName: ObjectFormula) = - ReturnPoints( - topMostReturnPointVariableName, - namedReturnPointVariableNames + (returnPoint to variableName) - ) - - companion object { - private fun new(scope: String?, variableName: ObjectFormula): ReturnPoints = - when (scope) { - null -> ReturnPoints(Pair(scope, variableName), emptyMap()) - else -> ReturnPoints(Pair(scope, variableName), mapOf(scope to variableName)) - } - - fun new(scope: Element, variableName: ObjectFormula): ReturnPoints = - when (scope) { - is Named -> new(scope.nameAsName?.value, variableName) - else -> new(null, variableName) - } - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter.kt deleted file mode 100644 index 25a1dc3e4..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/StateAfter.kt +++ /dev/null @@ -1,23 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -import arrow.meta.continuations.ContSeq -import arrow.meta.continuations.cont - -/** - * Describes the state of the analysis after a check: - * - whether the computation should end and how - * - the new information about variables and branches - */ -data class StateAfter(val returnInfo: Return, val data: CheckData) { - fun withReturn(newReturnInfo: Return): StateAfter = this.copy(returnInfo = newReturnInfo) - - fun withData(oldData: CheckData): StateAfter = this.copy(data = oldData) -} - -fun CheckData.noReturn() = StateAfter(NoReturn, this) - -/** Execute some operation but keep the overall state the same */ -fun CheckData.noReturn(f: () -> Unit): ContSeq = cont { - f() - noReturn() -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo.kt deleted file mode 100644 index 2a3296c6e..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/check/model/VarInfo.kt +++ /dev/null @@ -1,36 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.check.model - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.smt.Solver -import org.sosy_lab.java_smt.api.BooleanFormula - -/** - * For each variable, we keep two pieces of data: - * - the name it was declared with - * - the element it came from - * - invariants which may have been declared - */ -data class VarInfo -private constructor( - val name: String, - val smtName: String, - val origin: Element, - val invariant: BooleanFormula? = null -) { - companion object { - public operator fun invoke( - solver: Solver, - name: String, - smtName: String, - origin: Element, - invariant: BooleanFormula? = null - ): VarInfo = VarInfo(name, solver.escape(smtName), origin, invariant) - - public fun unsafeCreate( - name: String, - smtName: String, - origin: Element, - invariant: BooleanFormula? = null - ): VarInfo = VarInfo(name, smtName, origin, invariant) - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt deleted file mode 100644 index 8a54665b8..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/ExpressionToFormula.kt +++ /dev/null @@ -1,238 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.collect - -import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.SpecialKind -import arrow.meta.plugins.analysis.phases.analysis.solver.allArgumentExpressions -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ExpressionValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.LocalVariableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotatedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionLambdaArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IfExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NameReferenceExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NullExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParenthesizedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionWithExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages -import arrow.meta.plugins.analysis.phases.analysis.solver.isField -import arrow.meta.plugins.analysis.phases.analysis.solver.primitiveFormula -import arrow.meta.plugins.analysis.phases.analysis.solver.resolvedArg -import arrow.meta.plugins.analysis.phases.analysis.solver.specialKind -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import arrow.meta.plugins.analysis.smt.ObjectFormula -import arrow.meta.plugins.analysis.smt.Solver -import arrow.meta.plugins.analysis.smt.boolAnd -import arrow.meta.plugins.analysis.smt.boolAndList -import arrow.meta.plugins.analysis.smt.boolOr -import arrow.meta.plugins.analysis.smt.boolOrList -import arrow.meta.plugins.analysis.smt.isFieldCall -import arrow.meta.plugins.analysis.smt.isSingleVariable -import arrow.meta.plugins.analysis.types.PrimitiveType -import arrow.meta.plugins.analysis.types.asFloatingLiteral -import arrow.meta.plugins.analysis.types.asIntegerLiteral -import arrow.meta.plugins.analysis.types.primitiveType -import arrow.meta.plugins.analysis.types.unwrapIfNullable -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.Formula -import org.sosy_lab.java_smt.api.FormulaType - -/** - * Transform a [Expression] into a [Formula], wrapping with additional 'bool' fields when required - * - * This is the function to be used when turning an expression in a formula anywhere in the analysis - */ -internal fun SolverState.topLevelExpressionToFormula( - ex: Expression?, - context: ResolutionContext, - parameters: List, - allowAnyReference: Boolean -): BooleanFormula? = - expressionToFormula(ex, context, parameters, allowAnyReference)?.let { - when (it) { - is BooleanFormula -> it - is ObjectFormula -> solver.boolValue(it) - else -> null - } - } - -/** Transform a [Expression] into a [Formula] */ -private fun SolverState.expressionToFormula( - ex: Expression?, - context: ResolutionContext, - parameters: List, - allowAnyReference: Boolean -): Formula? { - val argCall = ex?.getResolvedCall(context) - val recur = { v: Expression? -> expressionToFormula(v, context, parameters, allowAnyReference) } - return when { - // just recur - ex is ParenthesizedExpression -> recur(ex.expression) - ex is AnnotatedExpression -> recur(ex.baseExpression) - ex is LambdaExpression -> recur(ex.bodyExpression) - // basic blocks - ex is BlockExpression -> - ex.statements - .mapNotNull { recur(it) as? BooleanFormula } - .let { conditions -> solver.boolAndList(conditions) } - ex is ConstantExpression -> ex.type(context)?.let { ty -> solver.makeConstant(ty, ex) } - ex is ThisExpression -> // reference to this - solver.makeObjectVariable("this") - ex is NameReferenceExpression && ex.isResultReference(context) -> - solver.makeObjectVariable(RESULT_VAR_NAME) - ex is NameReferenceExpression && argCall?.resultingDescriptor is ParameterDescriptor -> - if (allowAnyReference || parameters.any { it.nameAsName == ex.getReferencedNameAsName() }) { - solver.makeObjectVariable(ex.getReferencedName()) - } else { - val msg = ErrorMessages.Parsing.unexpectedReference(ex.getReferencedName()) - context.handleError(ErrorIds.Parsing.UnexpectedReference, ex, msg) - null - } - ex is NameReferenceExpression && argCall?.resultingDescriptor is LocalVariableDescriptor -> - if (allowAnyReference) { - solver.makeObjectVariable(ex.getReferencedName()) - } else { - val msg = ErrorMessages.Parsing.unexpectedReference(ex.getReferencedName()) - context.handleError(ErrorIds.Parsing.UnexpectedReference, ex, msg) - null - } - ex is IfExpression -> { - val cond = recur(ex.condition) as? BooleanFormula - val thenBranch = recur(ex.thenExpression) - val elseBranch = recur(ex.elseExpression) - if (cond != null && thenBranch != null && elseBranch != null) { - solver.ifThenElse(cond, thenBranch, elseBranch) - } else { - null - } - } - ex is WhenExpression && ex.subjectExpression == null -> - ex.entries.foldRight(null) { entry, acc -> - val conditions: List = - when { - entry.isElse -> listOf(solver.booleanFormulaManager.makeTrue()) - else -> - entry.conditions.map { cond -> - when (cond) { - is WhenConditionWithExpression -> recur(cond.expression) as? BooleanFormula - else -> null - } - } - } - val body = recur(entry.expression) - when { - body == null || conditions.any { it == null } -> return@foldRight null // error case - acc != null -> solver.ifThenElse(solver.boolOrList(conditions.filterNotNull()), body, acc) - entry.isElse -> body - else -> null - } - } - // special cases which do not always resolve well - ex is BinaryExpression && ex.operationTokenRpr == "EQEQ" && ex.right is NullExpression -> - ex.left?.let { recur(it) as? ObjectFormula }?.let { solver.isNull(it) } - ex is BinaryExpression && ex.operationTokenRpr == "EXCLEQ" && ex.right is NullExpression -> - ex.left?.let { recur(it) as? ObjectFormula }?.let { solver.isNotNull(it) } - ex is BinaryExpression && ex.operationTokenRpr == "ANDAND" -> - recur(ex.left)?.let { leftFormula -> - recur(ex.right)?.let { rightFormula -> solver.boolAnd(listOf(leftFormula, rightFormula)) } - } - ex is BinaryExpression && ex.operationTokenRpr == "OROR" -> - recur(ex.left)?.let { leftFormula -> - recur(ex.right)?.let { rightFormula -> solver.boolOr(listOf(leftFormula, rightFormula)) } - } - // fall-through case - argCall != null -> { - val args = - argCall.allArgumentExpressions(context).flatMap { (_, ty, _, _, e) -> - e.map { Pair(ty, recur(it)) } - } - val wrappedArgs = - args.takeIf { args.all { it.second != null } }?.map { (ty, e) -> solver.wrap(e!!, ty) } - wrappedArgs?.let { solver.primitiveFormula(context, argCall, it) } - ?: fieldFormula(argCall.resultingDescriptor, args) - } - else -> null - } -} - -private fun Solver.wrap(formula: Formula, type: Type): Formula = - when { - // only wrap variables and 'field(name, thing)' - !formulaManager.isSingleVariable(formula) && !isFieldCall(formula) -> formula - formula is ObjectFormula -> { - val unwrapped = if (type.isMarkedNullable) type.unwrappedNotNullableType else type - when (unwrapped.primitiveType()) { - PrimitiveType.INTEGRAL -> intValue(formula) - PrimitiveType.RATIONAL -> decimalValue(formula) - PrimitiveType.BOOLEAN -> boolValue(formula) - else -> formula - } - } - else -> formula - } - -private fun SolverState.fieldFormula( - descriptor: CallableDescriptor, - args: List> -): ObjectFormula? = - descriptor - .takeIf { it.isField() } - ?.let { - // create a field, the 'this' may be missing - val thisExpression = - (args.getOrNull(0)?.second as? ObjectFormula) ?: solver.makeObjectVariable("this") - field(descriptor, thisExpression) - } - -/** - * Turns a named constant expression into a smt [Formula] represented as a constant declared in the - * correct theory given this [type]. - * - * For example if [type] refers to [Int] the constant smt value will have as formula type - * [FormulaType.IntegerType] - */ -private fun Solver.makeConstant(type: Type, ex: ConstantExpression): Formula? = - when (type.unwrapIfNullable().primitiveType()) { - PrimitiveType.INTEGRAL -> - ex.text.asIntegerLiteral()?.let { integerFormulaManager.makeNumber(it) } - PrimitiveType.RATIONAL -> - ex.text.asFloatingLiteral()?.let { rationalFormulaManager.makeNumber(it) } - PrimitiveType.BOOLEAN -> booleanFormulaManager.makeBoolean(ex.text.toBooleanStrict()) - else -> null - } - -internal fun Element.isResultReference(bindingContext: ResolutionContext): Boolean = - getPostOrInvariantParent(bindingContext)?.let { parent -> - val expArg = parent.resolvedArg("predicate") as? ExpressionValueArgument - val lambdaArg = - (expArg?.valueArgument as? ExpressionLambdaArgument)?.getLambdaExpression() - ?: (expArg?.valueArgument as? ExpressionResolvedValueArgument)?.argumentExpression - as? LambdaExpression - val params = - lambdaArg?.functionLiteral?.valueParameters?.map { it.text }.orEmpty() + listOf("it") - this.text in params.distinct() - } - ?: false - -internal fun Element.getPostOrInvariantParent(bindingContext: ResolutionContext): ResolvedCall? = - this.parents() - .mapNotNull { it.getResolvedCall(bindingContext) } - .firstOrNull { call -> - val kind = call.specialKind - kind == SpecialKind.Post || kind == SpecialKind.Invariant - } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt deleted file mode 100644 index 5bed9412a..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FindDescriptor.kt +++ /dev/null @@ -1,204 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.collect - -import arrow.meta.plugins.analysis.phases.analysis.solver.allArgumentExpressions -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.withAliasUnwrapped -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DotQualifiedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Function -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NameReferenceExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages -import arrow.meta.plugins.analysis.phases.analysis.solver.isALaw -import arrow.meta.plugins.analysis.phases.analysis.solver.isCompatibleWith -import arrow.meta.plugins.analysis.phases.analysis.solver.isLawsType -import arrow.meta.plugins.analysis.phases.analysis.solver.isLooselyCompatibleWith -import arrow.meta.plugins.analysis.phases.analysis.solver.renameConditions -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState - -/** - * Depending on the source of the [descriptor] we might need to attach the information to different - * places. The main case is when you declare a @Law, in which case you have to look for the proper - * place. - */ -internal fun SolverState.addConstraints( - descriptor: DeclarationDescriptor, - preConstraints: ArrayList, - postConstraints: ArrayList, - notLookConstraints: ArrayList, - bindingContext: ResolutionContext -) { - val lawSubject = - findDescriptorFromRemoteLaw(descriptor, bindingContext) - ?: findDescriptorFromLocalLaw(descriptor, bindingContext) - if (lawSubject is CallableDescriptor && lawSubject.fqNameSafe == FqName("arrow.analysis.post")) - throw Exception("trying to attach to post, this is wrong!") - if (lawSubject != null) { - val renamed = - solver.renameConditions( - DeclarationConstraints(descriptor, preConstraints, postConstraints, notLookConstraints), - lawSubject.withAliasUnwrapped - ) - callableConstraints.add( - renamed.descriptor, - ArrayList(renamed.pre), - ArrayList(renamed.post), - ArrayList(renamed.doNotLookAtArgumentsWhen) - ) - } - callableConstraints.add(descriptor, preConstraints, postConstraints, notLookConstraints) -} - -/** Finds the target of a particular law by looking up its [arrow.analysis.Subject] annotation */ -private fun findDescriptorFromRemoteLaw( - descriptor: DeclarationDescriptor, - context: ResolutionContext -): DeclarationDescriptor? = - descriptor.annotations().findAnnotation(FqName("arrow.analysis.Subject"))?.let { lawSubject -> - val name = lawSubject.argumentValueAsString("fqName") - val result = name?.let { context.obtainDeclaration(FqName(it), descriptor) } - result.also { - if (it == null) { - if (name == null) - throw Exception(ErrorMessages.Parsing.subjectWithoutName(descriptor.fqNameSafe.name)) - else - throw Exception( - ErrorMessages.Parsing.couldNotResolveSubject(name, descriptor.fqNameSafe.name) - ) - } - } - } - -private fun ResolutionContext.obtainDeclaration( - fqName: FqName, - compatibleWith: DeclarationDescriptor -): DeclarationDescriptor? { - val current = descriptorFor(fqName) - // the type either strictly checks - // or we need to look for the best match - return current.firstOrNull { it.isCompatibleWith(compatibleWith) } - ?: current - .filter { it.isLooselyCompatibleWith(compatibleWith) } - .minWithOrNull { o1, o2 -> - when { - o1.isLooselyCompatibleWith(o2) -> -1 - o2.isLooselyCompatibleWith(o1) -> 1 - else -> 0 - } - } -} - -/** - * Finds the target of a particular law by looking at its last return, if marked with a - * [arrow.analysis.Law] annotation. - */ -public fun SolverState.findDescriptorFromLocalLaw( - descriptor: DeclarationDescriptor, - bindingContext: ResolutionContext -): DeclarationDescriptor? { - if (!descriptor.isALaw()) return null - - if (descriptor !is CallableDescriptor) return null - - val lawCall = - (descriptor.element() as? Function)?.let { - getReturnedExpressionWithoutPostcondition(it, bindingContext) - } - if (lawCall == null) { - descriptor.element()?.let { elt -> - val msg = ErrorMessages.Parsing.lawMustCallFunction() - bindingContext.handleError(ErrorIds.Laws.LawMustCallFunction, elt, msg) - signalParseErrors() - } - return null - } - - val parameters = descriptor.allParameters.filter { !it.type.descriptor.isLawsType() } - val arguments = lawCall.allArgumentExpressions(bindingContext).map { it.expression } - val check = - parameters.zip(arguments).all { (param, arg) -> - (param is ReceiverParameterDescriptor && - (arg.isEmpty() || arg.singleOrNull() is ThisExpression)) || - (param is ValueParameterDescriptor && - arg.singleOrNull() is NameReferenceExpression && - (arg.single() as NameReferenceExpression).getReferencedNameAsName() == param.name) - } - if (!check) { - descriptor.element()?.let { elt -> - val msg = ErrorMessages.Parsing.lawMustHaveParametersInOrder() - bindingContext.handleError(ErrorIds.Laws.LawMustHaveParametersInOrder, elt, msg) - signalParseErrors() - } - return null - } - - return lawCall.resultingDescriptor -} - -private fun getReturnedExpressionWithoutPostcondition( - function: Function, - bindingContext: ResolutionContext -): ResolvedCall? { - val lastElementWithoutReturn = - when (val lastElement = function.body()?.lastBlockStatementOrThis()) { - is ReturnExpression -> lastElement.returnedExpression - else -> lastElement - } - // remove outer layer of postcondition - val veryLast = - when (lastElementWithoutReturn) { - is DotQualifiedExpression -> { - val selector = lastElementWithoutReturn.selectorExpression - val callee = (selector as? CallExpression)?.calleeExpression - if (callee != null && callee.text == "post") { - lastElementWithoutReturn.receiverExpression - } else { - null - } - } - else -> null - } - ?: lastElementWithoutReturn - - return veryLast?.getResolvedCall(bindingContext) -} - -/** - * This function is the one really adding the constraints to the list, keeping into consideration - * possible duplicate [FqName]s. - */ -private fun MutableMap>.add( - descriptor: DeclarationDescriptor, - pre: ArrayList, - post: ArrayList, - doNotLookAtArgumentsWhen: ArrayList -) { - val fqName = descriptor.fqNameSafe - // create a new one if not existent - if (!containsKey(fqName)) this[fqName] = mutableListOf() - val list = this[fqName]!! - // see if there's any compatible - when (val ix = list.indexOfFirst { it.descriptor.isCompatibleWith(descriptor) }) { - -1 -> list.add(DeclarationConstraints(descriptor, pre, post, doNotLookAtArgumentsWhen)) - else -> { - val previous = list[ix] - list[ix] = - DeclarationConstraints( - descriptor, - previous.pre + pre, - previous.post + post, - previous.doNotLookAtArgumentsWhen + doNotLookAtArgumentsWhen - ) - } - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt deleted file mode 100644 index 3015220e7..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromAnnotations.kt +++ /dev/null @@ -1,150 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.collect - -import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnalysisResult -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.hasInterestingAnnotation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.gather -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import org.sosy_lab.java_smt.api.BooleanFormula - -/** - * Collects constraints by harvesting annotations. There are two sources: local declarations, and - * the entire CLASSPATH. - */ -public fun SolverState.collectConstraintsFromAnnotations( - localDeclarations: List, - module: ModuleDescriptor, - bindingTrace: ResolutionContext -): Pair> { - // check local declarations for @Laws - collectFromLocalDeclarations(localDeclarations, bindingTrace) - // check rest of the CLASSPATH for @Laws - collectFromClasspath(module, bindingTrace) - - return if (hadParseErrors()) { - Pair(AnalysisResult.ParsingError, emptySet()) - } else { - // figure out which is the set of local elements - // whose packages should be added in the hints - val interesting = - localDeclarations - .flatMap { it.gather { callableConstraints.containsKey(it.fqNameSafe) } } - .mapNotNull { it.containingPackage } - .toSet() - Pair(AnalysisResult.Retry, interesting) - } -} - -private fun SolverState.collectFromLocalDeclarations( - localDeclarations: List, - bindingTrace: ResolutionContext -) { - localDeclarations - .flatMap { it.gather { it.hasInterestingAnnotation } } - .forEach { addConstraintsFromAnnotations(it, bindingTrace) } -} - -private fun SolverState.collectFromClasspath( - module: ModuleDescriptor, - bindingTrace: ResolutionContext -) { - val collectEntireClasspath = - System.getProperty("ARROW_ANALYSIS_COLLECT_ENTIRE_CLASSPATH", "false").toBooleanStrictOrNull() - ?: false - if (collectEntireClasspath) { - module.gather(addSubPackages = true) { it.hasInterestingAnnotation } - } else { - // usual case: figure out the right packages from the hints - val packagesWithLaws = - module - .gather( - initialPackages = listOf(FqName("arrow.analysis.hints")), - addSubPackages = false - ) { - it.hasPackageWithLawsAnnotation - } - .flatMap { - it.packageWithLawsAnnotation?.argumentValueAsArrayOfString("packages").orEmpty() - } - .map { FqName(it) } - module.gather(packagesWithLaws, addSubPackages = false) { it.hasInterestingAnnotation } - } - .forEach { addConstraintsFromAnnotations(it, bindingTrace) } -} - -internal fun SolverState.addConstraintsFromAnnotations( - descriptor: DeclarationDescriptor, - bindingContext: ResolutionContext -) { - val constraints = - descriptor.annotations().iterable().mapNotNull { ann -> - when (ann.fqName) { - FqName("arrow.analysis.Pre") -> "pre" - FqName("arrow.analysis.Post") -> "post" - FqName("arrow.analysis.DoNotLookAtArguments") -> "doNotLookAtArgumentsWhen" - else -> null - }?.let { element -> parseFormula(element, ann, descriptor) } - } - if (constraints.isNotEmpty()) { - val preConstraints = arrayListOf() - val postConstraints = arrayListOf() - val notLookConstraints = arrayListOf() - constraints.forEach { (call, formula) -> - if (call == "pre") preConstraints.addAll(formula) - if (call == "post") postConstraints.addAll(formula) - if (call == "doNotLookAtArgumentsWhen") notLookConstraints.addAll(formula) - } - addConstraints(descriptor, preConstraints, postConstraints, notLookConstraints, bindingContext) - } -} - -/** Parse constraints from annotations. */ -private fun SolverState.parseFormula( - element: String, - annotation: AnnotationDescriptor, - descriptor: DeclarationDescriptor -): Pair> { - val dependencies = annotation.argumentValueAsArrayOfString("dependencies") - val formulae = annotation.argumentValueAsArrayOfString("formulae") - val messages = annotation.argumentValueAsArrayOfString("messages") - return element to - messages.zip(formulae).map { (msg, formula) -> - NamedConstraint(msg, parseFormula(descriptor, formula, dependencies.toList())) - } -} - -/** Parse constraints from annotations. */ -internal fun SolverState.parseFormula( - descriptor: DeclarationDescriptor, - formula: String, - dependencies: List -): BooleanFormula { - val VALUE_TYPE = "Int" - val FIELD_TYPE = "Int" - // build the parameters environment - val params = - (descriptor as? CallableDescriptor)?.let { function -> - function.valueParameters.joinToString(separator = "\n") { param -> - "(declare-fun ${param.name} () $VALUE_TYPE)" - } - } - ?: "" - // build the dependencies - val deps = dependencies.joinToString(separator = "\n") { "(declare-fun $it () $FIELD_TYPE)" } - // build the rest of the environment - val rest = - """ - (declare-fun this () $VALUE_TYPE) - (declare-fun $RESULT_VAR_NAME () $VALUE_TYPE) - """ - .trimIndent() - val fullString = "$params\n$deps\n$rest\n(assert $formula)" - return solver.parse(fullString) -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt deleted file mode 100644 index de1459da5..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/FromDSL.kt +++ /dev/null @@ -1,290 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.collect - -import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.SpecialKind -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Constructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithInitializer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages -import arrow.meta.plugins.analysis.phases.analysis.solver.hasImplicitPrimaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.isAssertCall -import arrow.meta.plugins.analysis.phases.analysis.solver.isRequireCall -import arrow.meta.plugins.analysis.phases.analysis.solver.singleArg -import arrow.meta.plugins.analysis.phases.analysis.solver.specialKind -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import arrow.meta.plugins.analysis.smt.Solver -import arrow.meta.plugins.analysis.smt.extractSingleVariable -import kotlin.collections.ArrayList -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.Formula -import org.sosy_lab.java_smt.api.FunctionDeclaration -import org.sosy_lab.java_smt.api.visitors.FormulaTransformationVisitor - -/** - * Gather constraints from the local module by inspecting - * - Custom DSL elements (pre and post) - * - Ad-hoc constraints over third party types TODO - */ -public fun Declaration.collectConstraintsFromDSL( - solverState: SolverState, - context: ResolutionContext, - descriptor: DeclarationDescriptor -) { - if ( - this is ClassOrObject && - hasImplicitPrimaryConstructor() && - getAnonymousInitializers().isNotEmpty() && - !descriptor.hasPackageWithLawsAnnotation - ) { - descriptor as ClassDescriptor - val (preConstraints, postConstraints) = - null.constraintsFromConstructor( - solverState, - context, - getPrimaryConstructorParameterList()?.parameters.orEmpty(), - this - ) - if (preConstraints.isNotEmpty() || postConstraints.isNotEmpty()) { - solverState.addConstraints( - descriptor.constructors.single(), - preConstraints, - postConstraints, - arrayListOf(), - context - ) - } - } else { - when (this) { - is Constructor<*> -> - constraintsFromConstructor( - solverState, - context, - valueParameters, - getContainingClassOrObject() - ) - is DeclarationWithBody -> - constraintsFromFunctionLike(solverState, context, valueParameters.filterNotNull()) - is DeclarationWithInitializer -> - constraintsFromFunctionLike(solverState, context, emptyList()) - else -> Triple(arrayListOf(), arrayListOf(), arrayListOf()) - }.let { (preConstraints, postConstraints, notLookConstraints) -> - if ( - preConstraints.isNotEmpty() || - postConstraints.isNotEmpty() || - notLookConstraints.isNotEmpty() - ) { - solverState.addConstraints( - descriptor, - preConstraints, - postConstraints, - notLookConstraints, - context - ) - } - } - } -} - -/** - * Obtain all the function calls and corresponding formulae to 'pre', 'post', and 'require' This - * function is used by more specific instances like [constraintsFromConstructor] and - * [constraintsFromFunctionLike] - */ -private fun Declaration.constraintsFromGenericDeclaration( - solverState: SolverState, - context: ResolutionContext, - parameters: List -): List> = - context.run { - constraintsDSLElements().mapNotNull { it.elementToConstraint(solverState, context, parameters) } - } - -/** Gather constraints for anything which is not a constructor */ -private fun Declaration.constraintsFromFunctionLike( - solverState: SolverState, - context: ResolutionContext, - parameters: List -): Triple, ArrayList, ArrayList> { - val preConstraints = arrayListOf() - val postConstraints = arrayListOf() - val notLookConstraints = arrayListOf() - constraintsFromGenericDeclaration(solverState, context, parameters).forEach { (call, formula) -> - when (call.specialKind) { - SpecialKind.Pre -> preConstraints.add(formula) - SpecialKind.Post -> postConstraints.add(formula) - SpecialKind.NotLookArgs -> notLookConstraints.add(formula) - else -> {} // do nothing - } - } - return Triple(preConstraints, postConstraints, notLookConstraints) -} - -/** - * Constructors have some additional requirements, namely the pre- and post-conditions of init - * blocks should be added to their own list - */ -private fun > Constructor?.constraintsFromConstructor( - solverState: SolverState, - context: ResolutionContext, - parameters: List, - containingClassOrObject: ClassOrObject -): Triple, ArrayList, ArrayList> { - val preConstraints = arrayListOf() - val postConstraints = arrayListOf() - (containingClassOrObject.getAnonymousInitializers() + listOfNotNull(this)) - .flatMap { it.constraintsFromGenericDeclaration(solverState, context, parameters) } - .forEach { (call, formula) -> - val isRequireOrAssert = call.isRequireCall() || call.isAssertCall() - if (call.specialKind == SpecialKind.Pre) { - rewritePrecondition( - solverState, - context, - parameters, - !isRequireOrAssert, - call, - formula.formula - ) - ?.let { preConstraints.add(NamedConstraint(formula.msg, it)) } - } - // in constructors 'require' and 'assert' have a double duty - if (call.specialKind == SpecialKind.Post || isRequireOrAssert) { - rewritePostcondition(solverState, formula.formula).let { - postConstraints.add(NamedConstraint(formula.msg, it)) - } - } - } - return Triple(preConstraints, postConstraints, arrayListOf()) -} - -/** Turn references to 'field(x, this)' into references to parameter 'x' */ -private fun rewritePrecondition( - solverState: SolverState, - context: ResolutionContext, - parameters: List, - raiseErrorWhenUnexpected: Boolean, - call: ResolvedCall, - formula: BooleanFormula -): BooleanFormula? { - val mgr = solverState.solver.formulaManager - var errorSignaled = false - val result = - mgr.transformRecursively( - formula, - object : FormulaTransformationVisitor(mgr) { - override fun visitFunction( - f: Formula?, - args: MutableList?, - fn: FunctionDeclaration<*>? - ): Formula = - if (fn?.name == Solver.FIELD_FUNCTION_NAME) { - val fieldName = args?.getOrNull(0)?.let { mgr.extractSingleVariable(it) } - val thisName = args?.getOrNull(1)?.let { mgr.extractSingleVariable(it) } - val paramName = - parameters - .firstOrNull { param -> - fieldName?.endsWith(".${param.nameAsName?.value}") - ?: (param.nameAsName?.value == fieldName) - } - ?.nameAsName - ?.value - if (fieldName != null && thisName == "this") { - if (paramName != null) { - solverState.solver.makeObjectVariable(paramName) - } else { - // error case, we have a reference to a field - // which is not coming from an argument - errorSignaled = true - if (raiseErrorWhenUnexpected) { - val msg = ErrorMessages.Parsing.unexpectedFieldInitBlock(fieldName) - context.handleError( - ErrorIds.Parsing.UnexpectedFieldInitBlock, - call.callElement, - msg - ) - } - super.visitFunction(f, args, fn) - } - } else { - super.visitFunction(f, args, fn) - } - } else { - super.visitFunction(f, args, fn) - } - } - ) - return result.takeIf { !errorSignaled } -} - -/** Turn references to 'this' into references to '$result' */ -private fun rewritePostcondition( - solverState: SolverState, - formula: BooleanFormula -): BooleanFormula { - val mgr = solverState.solver.formulaManager - return mgr.transformRecursively( - formula, - object : FormulaTransformationVisitor(mgr) { - override fun visitFreeVariable(f: Formula?, name: String?): Formula = - if (name == "this") { - solverState.solver.makeObjectVariable(RESULT_VAR_NAME) - } else { - super.visitFreeVariable(f, name) - } - } - ) -} - -/** Turns an [Element] into a formula */ -private fun Element.elementToConstraint( - solverState: SolverState, - context: ResolutionContext, - parameters: List -): Pair? { - val call = getResolvedCall(context) - val kind = call?.specialKind - return if ( - kind == SpecialKind.Pre || kind == SpecialKind.Post || kind == SpecialKind.NotLookArgs - ) { - val predicateArg = call.singleArg("predicate", context) ?: call.singleArg("value", context) - val result = solverState.topLevelExpressionToFormula(predicateArg, context, parameters, false) - if (result == null) { - val msg = ErrorMessages.Parsing.errorParsingPredicate(predicateArg) - if (call.isRequireCall() || call.isAssertCall()) { - // for built-ins only issue a warning - context.handleError(ErrorIds.Parsing.WarningParsingPredicate, this, msg) - } else { - context.handleError(ErrorIds.Parsing.ErrorParsingPredicate, this, msg) - solverState.signalParseErrors() - } - null - } else { - val msgBody = call.singleArg("msg", context) ?: call.singleArg("lazyMessage", context) - when (msgBody) { - is LambdaExpression -> - when (val body = msgBody.bodyExpression) { - is BlockExpression -> body.firstStatement?.text?.trim('"') - is Element -> body.text.trim('"') - else -> msgBody.text - } - is ConstantExpression -> msgBody.text.trim('"') - is Element -> msgBody.text - else -> predicateArg?.text - }?.let { call to NamedConstraint(it, result) } - } - } else { - null - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints.kt deleted file mode 100644 index b0aad35b9..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/DeclarationConstraints.kt +++ /dev/null @@ -1,10 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.collect.model - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor - -data class DeclarationConstraints( - val descriptor: DeclarationDescriptor, - val pre: List, - val post: List, - val doNotLookAtArgumentsWhen: List -) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint.kt deleted file mode 100644 index e38a174bc..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/collect/model/NamedConstraint.kt +++ /dev/null @@ -1,5 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.collect.model - -import org.sosy_lab.java_smt.api.BooleanFormula - -data class NamedConstraint(val msg: String, val formula: BooleanFormula) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt deleted file mode 100644 index f9501eeaa..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds.kt +++ /dev/null @@ -1,274 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.errors - -enum class SeverityLevel { - Error, - Warning, - Info, - Unsupported -} - -sealed interface ErrorIds { - - val name: String - val id: String - get() = name - val shortDescription: String - val fullDescription: String? - get() = null - val level: SeverityLevel - get() = SeverityLevel.Error - - enum class Parsing : ErrorIds { - ErrorParsingPredicate, - WarningParsingPredicate, - UnexpectedReference, - UnexpectedFieldInitBlock; - - override val shortDescription: String - get() = "The predicate could not be translated into a SMT formula" - - override val fullDescription: String - get() = - """ - The corresponding predicate -- in `pre`, `post`, or `invariant` blocks -- could not be - translated to a SMT formula, that is, it is not supported by the solver used - internally by the analysis. For example, we cannot translate method calls to SMT: - - ```kotlin - fun f(xs: List[String]): String { - pre({ !xs.get(0).isEmpty() }) { ... } - ... - } - ``` - - The compiler won't catch these errors in its own analysis phase (like it would do with a - type error), since this is perfectly good code. However, it seems desirable for the - programmer to know that a particular language feature cannot be used in these blocks. - """ - .trimIndent() - } - - enum class Laws : ErrorIds { - LawMustCallFunction, - LawMustHaveParametersInOrder, - SubjectWithoutName, - CouldNotResolveSubject; - - override val shortDescription: String - get() = "Incorrect definition of a law" - - override val fullDescription: String - get() = - """ - The definition of a law by means of a `@Law` annotation does not satisfy the requirements: - - - It must call **exactly one** function at the end, - - The call must use the parameters **in order**. - """ - .trimIndent() - } - - enum class Unsupported : ErrorIds { - UnsupportedExpression; - - override val shortDescription: String - get() = "This element is not (yet) supported" - - override val level: SeverityLevel - get() = SeverityLevel.Unsupported - } - - enum class Unsatisfiability : ErrorIds { - UnsatCallPre { - override val shortDescription: String - get() = "A pre-condition for a (method, property, function) is are not satisfied" - - override val fullDescription: String - get() = - """ - The required pre-conditions for a (method, property, function) call are not satisfied. - For example: - - ```kotlin - val wrong = 1 / 0 // does not satisfy '0 != 0' in Int.div law - ``` - """ - .trimIndent() - }, - UnsatBodyPost { - override val shortDescription: String - get() = "A post-condition declared in the function body does not hold" - - override val fullDescription: String - get() = - """ - The post-condition declared in a function body cannot be proven true. - For example: - - ```kotlin - fun f(x: Int): Int { - pre(x >= 0) { "non-negative" } - val r = x + x - return r.post({ it > 1 }) { "greater than 1" } - // does not satisfy 'x + x > 1' - } - ``` - """ - .trimIndent() - }, - UnsatInvariants { - override val shortDescription: String - get() = "The invariant declared for a mutable variable is not satisfied by a value" - - override val fullDescription: String - get() = - """ - The invariant declared for a mutable variable is not satisfied a value, - either the first one or in a new assignment. For example: - - ```kotlin - fun g(): Int { - var r = 1.invariant({ it > 0 }) { "it > 0" } - r = 0 // does not satisfy '0 > 0' - ... - } - ``` - """ - .trimIndent() - } - } - - enum class Inconsistency : ErrorIds { - InconsistentBodyPre { - override val fullDescription: String - get() = - """ - The set of pre-conditions given to the function leaves no possible way to call the function. - For example: - - ```kotlin - fun h(x: Int): Int { - pre({ x > 0 }) { "greater than 0" } - pre({ x < 0 }) { "smaller than 0" } - // no value can be both < 0 and > 0 - ... - } - ``` - """ - .trimIndent() - }, - InconsistentDefaultValues { - override val fullDescription: String - get() = - """ - The default values do not satisfy the pre-conditions. - For example: - - ```kotlin - fun h(x: Int = 0): Int { - pre({ x > 0 }) { "greater than 0" } - ... - } - ``` - """ - .trimIndent() - }, - InconsistentConditions { - override val fullDescription: String - get() = - """ - The body of a branch is never executed, because the condition it hangs upon conflicts - with the rest of the information about the function. - This may arise, for example, if a condition goes against a pre-condition: - - ```kotlin - fun i(x: Int): Int { - pre({ x > 0 }) { "greater than 0" } - if (x == 0) { - // 'x > 0' and 'x == 0' are incompatible - // so this branch is unreachable - } else { - ... - } - } - ``` - """ - .trimIndent() - - override val level: SeverityLevel - get() = SeverityLevel.Warning - }, - InconsistentCallPost { - override val fullDescription: String - get() = - """ - The post-conditions gathered after calling a function imply - that this function could not be called at all. - _This is really uncommon in practice_. - """ - .trimIndent() - - override val level: SeverityLevel - get() = SeverityLevel.Warning - }, - InconsistentInvariants { - override val fullDescription: String - get() = - """ - There is no way in which the invariant attached to a declaration may be satisfied. - For example: - - ```kotlin - fun j(x: Int): Int { - pre({ x > 0 }) { "greater than 0" } - var v = 3.invariant ({ v > x && v < 0 }) { "v > x && v < 0" } - } - - ``` - """ - .trimIndent() - }; - - override val shortDescription: String - get() = "Inconsistent set of conditions (usually means unreachable code)" - } - - enum class Liskov : ErrorIds { - NotWeakerPrecondition { - override val shortDescription: String - get() = "The pre-condition is not weaker than its parent's" - - override val fullDescription: String - get() = - """ - The pre-condition of an overriden method must be **weaker** than - the one declared in its parent. This guarantees that we can - always replace a call to the parent with a call to the child - (Liskov Substitution Principle). - """ - .trimIndent() - }, - NotStrongerPostcondition { - override val shortDescription: String - get() = "The post-condition is not stronger than its parent's" - - override val fullDescription: String - get() = - """ - The post-condition of an overriden method must be **stronger** than - the one declared in its parent. This guarantees that we can - always replace a call to the parent with a call to the child - (Liskov Substitution Principle). - """ - .trimIndent() - } - } - - enum class Exception : ErrorIds { - IllegalState, - OtherException; - - override val shortDescription: String - get() = "Internal error during analysis" - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt deleted file mode 100644 index 7ee25be09..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorMessages.kt +++ /dev/null @@ -1,347 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.errors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.Branch -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.smt.Solver -import arrow.meta.plugins.analysis.smt.utils.KotlinPrinter -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.Model - -/** - * # Errors in Arrow Analysis - * - * There are broadly three kinds of errors that may arise from Arrow Analysis. This files gives an - * overview of the information tracked in each case, which shall form the basis for top-quality - * error messages. - * - * Additional information - * - * During the analysis, a different SMT variable name is assigned to each subexpression. - * - * For example, we may have: - * ```kotlin - * f(g(2), h()) - * // a -> 2 - * // b -> g(2) - * // c -> h() - * // d -> f(g(2), h()) - * ``` - * - * We can leverage this information to write better error messages. If we have a constraint which - * states b > 0, we can replace it with g(2) > 0. - */ -object ErrorMessages { - - /** - * These errors arise from `pre`, `post`, or `invariant` blocks which cannot be translated into - * SMT formulae. - * - * For example, we cannot translate method calls to SMT: - * ```kotlin - * fun f(xs: List[String]): String { - * pre({ !xs.get(0).isEmpty() }) { ... } - * ... - * } - * ``` - * - * The Kotlin compiler won't catch these errors in its own analysis phase (like it would do with a - * type error), since this is perfectly good Kotlin code. However, it seems desirable for the - * programmer to know that a particular language feature cannot be used in these blocks. - */ - object Parsing { - internal fun errorParsingPredicate(predicateArg: Expression?): String = - "could not parse predicate: ${predicateArg?.text}" - - internal fun unexpectedReference(reference: String?): String = - "unexpected reference: $reference" - - internal fun unexpectedFieldInitBlock(fieldName: String?): String = - if (fieldName == null) { - "unexpected field name in init block" - } else { - "unexpected field name in init block: $fieldName" - } - - internal fun lawMustCallFunction(): String = "a @Law must include a call to another function" - - internal fun lawMustHaveParametersInOrder(): String = - "the call in a @Law must use the arguments in order" - - internal fun subjectWithoutName(fqName: String) = "the subject from law `$fqName` is missing" - - internal fun couldNotResolveSubject(fqName: String, lawName: String) = - "could not resolve subject `$fqName` from law `$lawName`" - } - - /** - * These are warning which are attached to those elements which are not supported by the analysis - * (yet). - */ - object Unsupported { - internal fun unsupportedExpression(element: Element): String = - "unsupported expression (${element::class.simpleName})" - } - - /** - * These errors embody the idea that "something should have been true, but it is not." There are - * three cases in which this may arise. - * - * ### Information available - * - * See [arrow.meta.plugins.analysis.phases.analysis.solver.checkImplicationOf] for the code which - * produces the errors. - * - The _one_ constraint name and Boolean formula which could not be satisfied. - * - A _counter-example_ (also called a _model_), which is an assignment of values to - * variableswhich show a specific instance in which the constraint is false. - * - In the `f` function above in the `UnsatBodyPost` epigraph, one such counter-example is `x == - * 0`, since in that case `0 + 0 > 1` is false. - * - By looking at the values of the model for the arguments, we can derive one specific trace for - * which the function fails. - */ - object Unsatisfiability { - - /** - * `UnsatCallPre` (attached to the argument): The required pre-conditions for a (method, - * property, function) call are not satisfied. - * - * For example: - * ```kotlin - * val wrong = 1 / 0 // does not satisfy '0 != 0' in Int.div law - * ``` - */ - internal fun Solver.unsatCallPre( - callPreCondition: NamedConstraint, - resolvedCall: ResolvedCall, - branch: Branch, - model: Model - ): String = - """|pre-condition `${callPreCondition.msg}` is not satisfied in `${resolvedCall.callElement.text}` - | -> unsatisfiable constraint: `${callPreCondition.formula.dumpKotlinLike()}` - | -> ${template(callPreCondition, this)} - | -> ${branch(branch)} - """ - .trimMargin() - - /** - * (attached to the return value) - * - * the post-condition declared in a function body is not true. - * - * For example: - * ```kotlin - * fun f(x: Int): Int { - * pre(x >= 0) { "non-negative" } - * val r = x + x - * return r.post({ it > 1 }) { "greater than 1" } - * // does not satisfy 'x + x > 1' - * } - * ``` - */ - internal fun KotlinPrinter.unsatBodyPost( - declaration: Declaration, - postCondition: NamedConstraint, - branch: Branch - ): String = - """|declaration `${declaration.name}` fails to satisfy the post-condition: ${postCondition.formula.dumpKotlinLike()} - | -> ${branch(branch)} - """ - .trimMargin() - - /** - * (attached to the new value): the invariant declared for a mutable variable is not satisfied - * by the new value. - * - * For example: - * ```kotlin - * fun g(): Int { - * var r = 1.invariant({ it > 0 }) { "it > 0" } - * r = 0 // does not satisfy '0 > 0' - * ... - * } - * - * ``` - */ - internal fun Solver.unsatInvariants( - expression: Element, - constraint: NamedConstraint, - branch: Branch, - model: Model - ): String = - """|invariants are not satisfied in `${expression.text}` - | -> unsatisfiable constraint: `${constraint.formula.dumpKotlinLike()}` - | -> ${branch(branch)} - """ - .trimMargin() - } - - /** - * These errors embody the idea that "there's no possible way in which we may end up in this - * situation." Usually this means that the code is somehow unreachable. There are four cases in - * which this may arise. - * - * ## Information available - * - * See [arrow.meta.plugins.analysis.phases.analysis.solver.addAndCheckConsistency] for the code - * which produces the errors. - * - * The last set of constraints which was added to the SMT solver. This is not very useful when - * considering the next item. An unsatisfiable core, which is a subset of the formulas added to - * the solver since the beginning of the process, and which summarize the incompatibility. During - * the whole analysis of i lots of constraints are added, but the real problem is between x > 0 - * and x == 0. - */ - object Inconsistency { - - /** - * The set of pre-conditions given to the function leaves no possible way to call the function. - * - * For example: - * ```kotlin - * fun h(x: Int): Int { - * pre({ x > 0 }) { "greater than 0" } - * pre({ x < 0 }) { "smaller than 0" } - * // no value can be both < 0 and > 0 - * ... - * } - * - * ``` - */ - internal fun KotlinPrinter.inconsistentBodyPre( - declaration: Declaration, - unsatCore: List - ): String = - "${declaration.name} has inconsistent pre-conditions: ${unsatCore.joinToString { it.dumpKotlinLike() }}" - - /** - * The default values do not satisfy the pre-conditions. - * - * For example: - * ```kotlin - * fun h(x: Int = 0): Int { - * pre({ x > 0 }) { "greater than 0" } - * ... - * } - * - * ``` - */ - internal fun KotlinPrinter.inconsistentDefaultValues( - declaration: Declaration, - unsatCore: List - ): String = "${declaration.name} has inconsistent default values: ${unsatCore.dumpKotlinLike()}" - - /** - * (attached to a particular condition): the body of a branch is never executed, because the - * condition it hangs upon conflicts with the rest of the information about the function. - * - * For example, if a condition goes against a pre-condition: - * ```kotlin - * fun i(x: Int): Int { - * pre({ x > 0 }) { "greater than 0" } - * if (x == 0) { - * // 'x > 0' and 'x == 0' are incompatible - * // so this branch is unreachable - * } else { - * ... - * } - * } - * - * ``` - */ - internal fun KotlinPrinter.inconsistentConditions( - unsatCore: List, - branch: Branch - ): String = - """|unreachable code due to conflicting conditions: ${unsatCore.dumpKotlinLike()} - | -> ${branch(branch)} - """ - .trimMargin() - - /** - * (attached to the function call): the post-conditions gathered after calling a function imply - * that this function could not be called at all. _This is really uncommon in practice_. - */ - internal fun KotlinPrinter.inconsistentCallPost( - unsatCore: List, - branch: Branch - ): String = - """|unreachable code due to post-conditions: ${unsatCore.dumpKotlinLike()} - | -> ${branch(branch)} - """ - .trimMargin() - - /** - * (attached to a local declaration): there is no way in which the invariant attached to a - * declaration may be satisfied. - * - * For example: - * ```kotlin - * fun j(x: Int): Int { - * pre({ x > 0 }) { "greater than 0" } - * var v = 3.invariant ({ v > x && v < 0 }) { "v > x && v < 0" } - * } - * - * ``` - */ - internal fun KotlinPrinter.inconsistentInvariants( - it: List, - branch: Branch - ): String = - """|invariants are inconsistent: ${it.dumpKotlinLike()} - | -> ${branch(branch)} - """ - .trimMargin() - } - - object Liskov { - internal fun KotlinPrinter.notWeakerPrecondition(constraint: NamedConstraint): String = - """|pre-condition `${constraint.msg}` is not weaker than those from overridden members - | -> problematic constraint: `${constraint.formula.dumpKotlinLike()}` - """ - .trimMargin() - - internal fun KotlinPrinter.notStrongerPostcondition(constraint: NamedConstraint): String = - """|post-condition `${constraint.msg}` from overridden member is not satisfied - | -> problematic constraint: `${constraint.formula.dumpKotlinLike()}` - """ - .trimMargin() - } - - object Exception { - internal fun illegalState(trace: List): String = - "illegal state during analysis:\n" + - trace.joinToString(separator = System.lineSeparator()) { " -> $it" } - - internal fun otherException(e: kotlin.Exception): String = - "exception during analysis: ${e.javaClass.name}\n${e.message}\n${e.stackTraceToString()}" - } - - internal fun template(constraint: NamedConstraint, solver: Solver): String = - solver.run { - val showVariables = extractVariables(constraint.formula) - showVariables - .mapNotNull { mirroredElement(it.key) } - .takeIf { it.isNotEmpty() } - ?.joinToString(separator = System.lineSeparator()) { referencedElement -> - val el = referencedElement.element - val argsMapping = referencedElement.reference - argsMapping?.let { (param, _) -> - val paramPsi = param.element() - val location = paramPsi?.let { paramPsi.location() } - "`${el.text}` bound to param `${param.name}` in `${param.containingDeclaration?.fqNameSafe}` ${location?.link() ?: ""}" - } - ?: "" - } - ?.takeIf { it.isNotEmpty() } - ?: "" - } - - internal fun KotlinPrinter.branch(conditions: Branch): String = - if (conditions.isEmpty()) "main function body" else "in branch: ${conditions.dumpKotlinLike()}" - - private fun CompilerMessageSourceLocation.link(): String = "at $path: ($line, $column):" -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt deleted file mode 100644 index f2c01ec97..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/search/ConstraintSearch.kt +++ /dev/null @@ -1,259 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.search - -import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.THIS_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.withAliasUnwrapped -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationContainer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.isComparison -import arrow.meta.plugins.analysis.phases.analysis.solver.isCompatibleWith -import arrow.meta.plugins.analysis.phases.analysis.solver.overriddenDescriptors -import arrow.meta.plugins.analysis.phases.analysis.solver.primitiveFormula -import arrow.meta.plugins.analysis.phases.analysis.solver.renameConditions -import arrow.meta.plugins.analysis.phases.analysis.solver.singleFieldGroups -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import arrow.meta.plugins.analysis.phases.analysis.solver.state.asField -import arrow.meta.plugins.analysis.smt.ObjectFormula -import arrow.meta.plugins.analysis.smt.substituteObjectVariables -import arrow.meta.plugins.analysis.types.PrimitiveType -import arrow.meta.plugins.analysis.types.primitiveType -import arrow.meta.plugins.analysis.types.unwrapIfNullable -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.NumeralFormula - -/** - * Looks up in the solver state previously collected constraints and returns the constraints - * associated to this [resolvedCall] resulting descriptor if any - */ -public fun SolverState.getConstraintsFor(resolvedCall: ResolvedCall): DeclarationConstraints? = - getConstraintsFor(resolvedCall.resultingDescriptor) - -/** - * Looks up in the solver state previously collected constraints and returns the constraints - * associated to this [descriptor], or any of the declaration it has overridden, if any - */ -public fun SolverState.getConstraintsFor( - descriptor: DeclarationDescriptor -): DeclarationConstraints? = - getImmediateConstraintsFor(descriptor) ?: getOverriddenConstraintsFor(descriptor) - -/** - * Looks up in the solver state previously collected constraints for the given [descriptor], but not - * for their possible parents - */ -internal fun SolverState.getImmediateConstraintsFor( - descriptor: DeclarationDescriptor -): DeclarationConstraints? = - callableConstraints[descriptor.withAliasUnwrapped.fqNameSafe] - ?.firstOrNull { d -> d.descriptor.isCompatibleWith(descriptor) } - ?.takeIf { d -> - d.pre.isNotEmpty() || d.post.isNotEmpty() || d.doNotLookAtArgumentsWhen.isNotEmpty() - } - -/** - * The invariants are found in either: - * - the primary constructor (for Kotlin) - * - the intersection of all constructors (for Java) - */ -internal fun SolverState.getPostInvariantsForType(type: ClassDescriptor): List? = - when (val primary = type.unsubstitutedPrimaryConstructor) { - is ConstructorDescriptor -> getConstraintsFor(primary)?.post - else -> - type.constructors - .map { secondary -> getConstraintsFor(secondary)?.post } - .takeIf { list -> list.isNotEmpty() && list.all { it != null } } - ?.filterNotNull() // this is a bit redundant, but won't compile otherwise - ?.reduce(::intersectNameds) - ?.toList() - } - -internal fun intersectNameds(one: List, other: List) = - one.filter { oneElement -> - other.any { otherElement -> - oneElement.msg == otherElement.msg && - oneElement.formula.toString() == otherElement.formula.toString() - } - } - -/** Obtain the invariants associated with a certain type */ -internal fun SolverState.typeInvariants( - type: Type, - resultName: String, - context: ResolutionContext -): List = typeInvariants(type, solver.makeObjectVariable(resultName), context) - -internal fun SolverState.typeInvariants( - type: Type, - result: ObjectFormula, - context: ResolutionContext -): List { - // invariants from the type - val invariants = - type.descriptor - ?.let { getPostInvariantsForType(it) } - ?.let { constraints -> - // replace $result by new name - constraints.map { - NamedConstraint( - "${it.msg} (invariant from $type)", - solver.substituteObjectVariables(it.formula, mapOf(RESULT_VAR_NAME to result)) - ) - } - } - ?: emptyList() - // invariants from property code - val fieldEqs = fieldEqualitiesInvariants(type, result, context) - // invariants about nullability - val isNotNull = - if (!type.isNullable()) { - listOf(NamedConstraint("$result is not null", solver.isNotNull(result))) - } else { - emptyList() - } - return invariants + fieldEqs + isNotNull -} - -internal fun SolverState.fieldEqualitiesInvariants( - type: Type, - resultName: String, - context: ResolutionContext -): List = - fieldEqualitiesInvariants(type, solver.makeObjectVariable(resultName), context) - -/** - * Obtains the invariants related to inter-definition of fields and properties See - * [singleFieldGroups] - */ -internal fun SolverState.fieldEqualitiesInvariants( - type: Type, - result: ObjectFormula, - context: ResolutionContext -): List = - (type.descriptor?.element() as? DeclarationContainer).singleFieldGroups(context).flatMap { set -> - when (set.size) { - 0 -> throw IllegalStateException("empty field group") - else -> { - val lst = set.toList() - val first = lst[0] - val rest = lst.drop(1) - rest.map { - NamedConstraint( - "${it.fqNameSafe.asField} is ${first.fqNameSafe.asField}", - solver.objects { equal(field(it, result), field(first, result)) } - ) - } - } - } - } - -/** - * Looks up in the solver state previously collected constraints for every declaration the - * [descriptor] may have overridden - */ -internal fun SolverState.getOverriddenConstraintsFor( - descriptor: DeclarationDescriptor -): DeclarationConstraints? = - descriptor.withAliasUnwrapped - .overriddenDescriptors() - ?.mapNotNull { overriddenDescriptor -> getConstraintsFor(overriddenDescriptor) } - ?.takeIf { it.isNotEmpty() } - ?.map { - // rename the argument names and similar things - solver.renameConditions(it, descriptor) - } - ?.let { overriddenConstraints -> - // and finally put all the pre- and post-conditions together - DeclarationConstraints( - descriptor, - overriddenConstraints.flatMap { it.pre }, - overriddenConstraints.flatMap { it.post }, - overriddenConstraints.flatMap { it.doNotLookAtArgumentsWhen } - ) - } - -/** Special primitive constraints */ -internal fun SolverState.primitiveConstraints( - context: ResolutionContext, - call: ResolvedCall, -): DeclarationConstraints? { - val descriptor = call.resultingDescriptor - val returnTy = - if (descriptor.isComparison()) PrimitiveType.BOOLEAN - else descriptor.returnType?.unwrapIfNullable()?.primitiveType() - // inference doesn't give us the correct type from call sometimes, - // so look also at the given expression and intersect the types - val dispatch = - listOfNotNull(descriptor.extensionReceiverParameter, descriptor.dispatchReceiverParameter) - .map { param -> - val tyFromArg = call.getReceiverExpression()?.type(context) - val tyFromParam = param.type.unwrapIfNullable() - val chosenTy = tyFromArg?.intersectIfPossible(tyFromParam) ?: tyFromParam - chosenTy.primitiveType()?.let { ty -> Pair(THIS_VAR_NAME, ty) } - } - val argTys = - dispatch + - descriptor.valueParameters.map { param -> - val tyFromArg = - call.valueArguments - .filterKeys { it.name == param.name } - .values - .singleOrNull() - ?.arguments - ?.singleOrNull() - ?.argumentExpression - ?.type(context) - val tyFromParam = param.type.unwrapIfNullable() - val chosenTy = tyFromArg?.intersectIfPossible(tyFromParam) ?: tyFromParam - chosenTy.primitiveType()?.let { ty -> Pair(param.name.value, ty) } - } - return if (returnTy == null || argTys.any { it == null }) { - null - } else { - val innerArgs = - argTys.map { - val name = it!!.first - when (it.second) { - PrimitiveType.BOOLEAN -> solver.makeBooleanObjectVariable(name) - PrimitiveType.INTEGRAL -> solver.makeIntegerObjectVariable(name) - PrimitiveType.RATIONAL -> solver.makeDecimalObjectVariable(name) - else -> solver.makeObjectVariable(name) - } - } - solver.primitiveFormula(context, call, innerArgs)?.let { formula -> - when (returnTy) { - PrimitiveType.BOOLEAN -> - solver.booleans { - equivalence( - solver.makeBooleanObjectVariable(RESULT_VAR_NAME), - formula as BooleanFormula - ) - } - PrimitiveType.INTEGRAL -> - solver.ints { - equal( - solver.makeIntegerObjectVariable(RESULT_VAR_NAME), - formula as NumeralFormula.IntegerFormula - ) - } - PrimitiveType.RATIONAL -> - solver.rationals { - equal( - solver.makeIntegerObjectVariable(RESULT_VAR_NAME), - formula as NumeralFormula.RationalFormula - ) - } - else -> solver.objects { equal(solver.resultVariable, formula as ObjectFormula) } - }?.let { - val named = NamedConstraint("checkCallArguments(${descriptor.fqNameSafe})", it) - DeclarationConstraints(descriptor, emptyList(), listOf(named), emptyList()) - } - } - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt deleted file mode 100644 index c954a9fa1..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverInteraction.kt +++ /dev/null @@ -1,272 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.state - -import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.check.model.Branch -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentBodyPre -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentCallPost -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentConditions -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentDefaultValues -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Inconsistency.inconsistentInvariants -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Liskov.notStrongerPostcondition -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Liskov.notWeakerPrecondition -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Unsatisfiability.unsatBodyPost -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Unsatisfiability.unsatCallPre -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorMessages.Unsatisfiability.unsatInvariants -import arrow.meta.plugins.analysis.smt.fieldNames -import arrow.meta.plugins.analysis.smt.substituteVariable -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.Model - -// SMT SOLVER INTERACTION -// ====================== -// these two functions ultimately call the SMT solver, -// and report errors as desired - -internal fun SolverState.checkInconsistency( - message: (unsatCore: List) -> Unit -): Boolean { - val unsat = prover.isUnsat - if (unsat) { - message(prover.unsatCore) - solverTrace.add("UNSAT! (inconsistent)") - } - return unsat -} - -internal fun SolverState.addAndCheckConsistency( - constraints: Iterable, - context: ResolutionContext, - message: (unsatCore: List) -> Unit -): Boolean { - constraints.forEach { addConstraint(it, context) } - additionalFieldConstraints(constraints, context).forEach { addConstraint(it, context) } - return checkInconsistency(message) -} - -internal fun SolverState.checkImplicationOf( - constraint: NamedConstraint, - context: ResolutionContext, - message: (model: Model) -> Unit -): Boolean = checkImplicationOf(constraint, true, context, message) - -internal fun SolverState.checkImplicationOf( - constraint: NamedConstraint, - addFieldConstraints: Boolean, - context: ResolutionContext, - message: (model: Model) -> Unit -): Boolean = bracket { - solver.booleans { - addConstraint(NamedConstraint("!(${constraint.msg})", not(constraint.formula)), context) - } - if (addFieldConstraints) - additionalFieldConstraints(listOf(constraint), context).forEach { addConstraint(it, context) } - val unsat = prover.isUnsat - if (!unsat) { - message(prover.model) - solverTrace.add("SAT! (not implied)") - } - !unsat -} - -internal fun SolverState.additionalFieldConstraints( - formulae: Iterable, - context: ResolutionContext -): Set = - solver.formulaManager - .fieldNames(formulae.map { it.formula }) - .flatMap { (fieldName, appliedTo) -> - val fqName = FqName(fieldName) - val descriptor = context.descriptorFor(fqName).getOrNull(0) - val constraints = singleConstraintsFromFqName(fqName) - if ( - descriptor != null && - constraints != null && - constraints.pre.isEmpty() && - constraints.post.size == 1 - ) { - setOf( - NamedConstraint( - constraints.post[0].msg, - solver.substituteVariable( - constraints.post[0].formula, - mapOf(RESULT_VAR_NAME to field(descriptor, appliedTo), "this" to appliedTo) - ) - ) - ) - } else { - emptySet() - } - } - .toSet() - -/** This obtains the *single* constraint related to a particular FqName */ -internal fun SolverState.singleConstraintsFromFqName(name: FqName): DeclarationConstraints? = - callableConstraints[name]?.takeIf { it.size == 1 }?.first() - -// PRODUCE ERRORS FROM INTERACTION -// =============================== - -internal fun SolverState.checkDefaultValueInconsistency( - context: ResolutionContext, - declaration: Declaration -): Boolean = - solver.run { - checkInconsistency { unsatCore -> - val msg = inconsistentDefaultValues(declaration, unsatCore) - context.handleError(ErrorIds.Inconsistency.InconsistentDefaultValues, declaration, msg) - } - } - -/** - * Checks that this [declaration] does not contain logical inconsistencies in its preconditions. For - * example: - * - `(x > 0)` - * - `(x < 0)` - * - * If any inconsistencies are found report them through the [context] trace diagnostics - */ -internal fun SolverState.checkPreconditionsInconsistencies( - constraints: DeclarationConstraints?, - context: ResolutionContext, - declaration: Declaration -): Boolean = - solver.run { - constraints?.pre?.let { - addAndCheckConsistency(it, context) { unsatCore -> - val msg = inconsistentBodyPre(declaration, unsatCore) - context.handleError(ErrorIds.Inconsistency.InconsistentBodyPre, declaration, msg) - } - } - ?: false // if there are no preconditions, they are consistent - } - -/** - * Checks that this [declaration] constraints post conditions hold according to the declaration body - * in the current solver state - */ -internal fun SolverState.checkPostConditionsImplication( - constraints: DeclarationConstraints?, - isConstructor: Boolean, - context: ResolutionContext, - declaration: Declaration, - branch: Branch -) { - solver.run { - constraints?.post?.forEach { postCondition -> - checkImplicationOf(postCondition, !isConstructor, context) { - val msg = unsatBodyPost(declaration, postCondition, branch) - context.handleError(ErrorIds.Unsatisfiability.UnsatBodyPost, declaration, msg) - } - } - } -} - -/** Checks the pre-conditions in [callConstraints] hold for [resolvedCall] */ -internal fun SolverState.checkCallPreConditionsImplication( - callConstraints: DeclarationConstraints?, - context: ResolutionContext, - expression: Expression, - resolvedCall: ResolvedCall, - branch: Branch -) = - solver.run { - callConstraints?.pre?.forEach { callPreCondition -> - checkImplicationOf(callPreCondition, context) { model -> - val msg = unsatCallPre(callPreCondition, resolvedCall, branch, model) - context.handleError(ErrorIds.Unsatisfiability.UnsatCallPre, expression, msg) - } - } - } - -/** Checks the post-conditions in [callConstraints] hold for [resolvedCall] */ -internal fun SolverState.checkCallPostConditionsInconsistencies( - callConstraints: DeclarationConstraints?, - context: ResolutionContext, - expression: Expression, - branch: Branch -): Boolean = - solver.run { - callConstraints?.post?.let { - addAndCheckConsistency(it, context) { unsatCore -> - val msg = inconsistentCallPost(unsatCore, branch) - context.handleError(ErrorIds.Inconsistency.InconsistentCallPost, expression, msg) - } - } - ?: false - } - -/** Add the [formulae] to the set and checks that it remains consistent */ -internal fun SolverState.checkConditionsInconsistencies( - formulae: List, - context: ResolutionContext, - expression: Element, - branch: Branch, - reportIfInconsistent: Boolean -): Boolean = - solver.run { - addAndCheckConsistency(formulae, context) { unsatCore -> - if (reportIfInconsistent) { - val msg = inconsistentConditions(unsatCore, branch) - context.handleError(ErrorIds.Inconsistency.InconsistentConditions, expression, msg) - } - } - } - -internal fun SolverState.checkInvariantConsistency( - constraint: NamedConstraint, - context: ResolutionContext, - expression: Element, - branch: Branch -): Boolean = - solver.run { - addAndCheckConsistency(listOf(constraint), context) { - val msg = inconsistentInvariants(it, branch) - context.handleError(ErrorIds.Inconsistency.InconsistentInvariants, expression, msg) - } - } - -internal fun SolverState.checkInvariant( - constraint: NamedConstraint, - context: ResolutionContext, - expression: Element, - branch: Branch -): Boolean = - solver.run { - checkImplicationOf(constraint, context) { model -> - val msg = unsatInvariants(expression, constraint, branch, model) - context.handleError(ErrorIds.Unsatisfiability.UnsatInvariants, expression, msg) - } - } - -internal fun SolverState.checkLiskovWeakerPrecondition( - constraint: NamedConstraint, - context: ResolutionContext, - expression: Element -): Boolean = - solver.run { - checkImplicationOf(constraint, context) { - val msg = notWeakerPrecondition(constraint) - context.handleError(ErrorIds.Liskov.NotWeakerPrecondition, expression, msg) - } - } - -internal fun SolverState.checkLiskovStrongerPostcondition( - constraint: NamedConstraint, - context: ResolutionContext, - expression: Element -): Boolean = - solver.run { - checkImplicationOf(constraint, context) { - val msg = notStrongerPostcondition(constraint) - context.handleError(ErrorIds.Liskov.NotStrongerPostcondition, expression, msg) - } - } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState.kt deleted file mode 100644 index e6c3dc477..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState.kt +++ /dev/null @@ -1,143 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.state - -import arrow.meta.continuations.ContSeq -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.search.typeInvariants -import arrow.meta.plugins.analysis.sarif.ReportedError -import arrow.meta.plugins.analysis.sarif.sarifFileContent -import arrow.meta.plugins.analysis.smt.ObjectFormula -import arrow.meta.plugins.analysis.smt.Solver -import arrow.meta.plugins.analysis.smt.fieldNames -import arrow.meta.plugins.analysis.smt.utils.FieldProvider -import arrow.meta.plugins.analysis.smt.utils.NameProvider -import arrow.meta.plugins.analysis.smt.utils.ReferencedElement -import java.io.Writer -import java.util.Locale -import org.sosy_lab.java_smt.api.ProverEnvironment -import org.sosy_lab.java_smt.api.SolverContext - -data class SolverState( - private val baseDirectory: String, - private val outputFileCreator: (String) -> Writer, - val names: NameProvider = NameProvider(), - val solver: Solver = Solver(names), - val prover: ProverEnvironment = - solver.newProverEnvironment( - SolverContext.ProverOptions.GENERATE_MODELS, - SolverContext.ProverOptions.GENERATE_UNSAT_CORE - ), - val callableConstraints: MutableMap> = mutableMapOf(), - val solverTrace: MutableList = mutableListOf(), - val fieldProvider: FieldProvider = FieldProvider(solver, prover), - private val reportedErrors: MutableSet = mutableSetOf(), -) { - - fun notifySarifReport(id: ErrorIds, element: Element, msg: String) { - reportedErrors.add(ReportedError(id.id, id, element, msg, emptyList())) - } - - private var parseErrors = false - - fun signalParseErrors() { - parseErrors = true - } - - fun hadParseErrors(): Boolean = parseErrors - - inline fun bracket(f: () -> A): A { - solverTrace.add("PUSH") - prover.push() - val result = f() - prover.pop() - solverTrace.add("POP") - return result - } - - /** This signals that the rest of the computation happens inside a push/pop bracket */ - val continuationBracket: ContSeq = ContSeq { bracket { yield(Unit) } } - - /** This signals that part of the computation happens inside a push/pop bracket */ - fun scopedBracket(cont: () -> ContSeq) = - ContSeq.unit - .map { - solverTrace.add("PUSH (scoped)") - prover.push() - } - .flatMap { cont() } - .onEach { - prover.pop() - solverTrace.add("POP (scoped)") - } - - fun addConstraint(constraint: NamedConstraint, context: ResolutionContext) { - prover.addConstraint(constraint.formula) - // introduce the field names - solver.formulaManager.fieldNames(constraint.formula).map { (fieldName, _) -> - context.descriptorFor(FqName(fieldName)).getOrNull(0)?.let { descriptor -> - fieldProvider.introduce(descriptor) - } - } - solverTrace.add("${constraint.msg} : ${constraint.formula}") - } - - fun newName(context: ResolutionContext, prefix: String, element: Element?): String = - newName(context, prefix, element, null) - - fun newName( - context: ResolutionContext, - prefix: String, - element: Element?, - reference: Pair? - ): String { - val type = (element as? Expression)?.type(context) - val info = element?.let { ReferencedElement(it, reference, type) } - val newName = names.recordNewName(prefix, info) - if (type != null && !type.isNullable()) { - typeInvariants(type, newName, context).forEach { addConstraint(it, context) } - } - return newName - } - - fun field(field: DeclarationDescriptor, formula: ObjectFormula): ObjectFormula { - fieldProvider.introduce(field) - return solver.field(field.fqNameSafe.asField, formula) - } - - fun notifyModuleProcessed(moduleDescriptor: ModuleDescriptor) { - updateSarifFile(moduleDescriptor) - } - - private fun updateSarifFile(moduleDescriptor: ModuleDescriptor) { - if (reportedErrors.isNotEmpty()) { - val content = sarifFileContent(baseDirectory, "1.0.0", reportedErrors.toList()) - val moduleName = moduleDescriptor.name.toString().trim('<', '>').ifBlank { "default" } - val sarifFile = outputFileCreator("reports/sarif/arrow.analysis.${moduleName}.sarif") - sarifFile.write(content) - sarifFile.flush() - } - } -} - -val FqName.asField: String - get() { - val parts = this.name.split('.') - return if (parts.isEmpty()) { - this.name - } else { - var lastPart = parts.last() - if (lastPart.startsWith("get")) { - lastPart = lastPart.drop(3).replaceFirstChar { it.lowercase(Locale.getDefault()) } - } - return (parts.dropLast(1) + listOf(lastPart)).joinToString(separator = ".") - } - } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/ReportedError.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/ReportedError.kt deleted file mode 100644 index fab90dcfc..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/ReportedError.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.sarif - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds - -data class ReportedError( - val id: String, - val errorsId: ErrorIds, - val element: Element, - val msg: String, - val references: List -) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/SarifReporter.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/SarifReporter.kt deleted file mode 100644 index 685b3b23f..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/sarif/SarifReporter.kt +++ /dev/null @@ -1,121 +0,0 @@ -package arrow.meta.plugins.analysis.sarif - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.SeverityLevel -import io.github.detekt.sarif4k.ArtifactLocation -import io.github.detekt.sarif4k.Level -import io.github.detekt.sarif4k.Location -import io.github.detekt.sarif4k.Message -import io.github.detekt.sarif4k.MultiformatMessageString -import io.github.detekt.sarif4k.PhysicalLocation -import io.github.detekt.sarif4k.Region -import io.github.detekt.sarif4k.ReportingDescriptor -import io.github.detekt.sarif4k.ResultKind -import io.github.detekt.sarif4k.Run -import io.github.detekt.sarif4k.SarifSchema210 -import io.github.detekt.sarif4k.SarifSerializer -import io.github.detekt.sarif4k.Tool -import io.github.detekt.sarif4k.ToolComponent -import io.github.detekt.sarif4k.Version -import kotlin.io.path.Path - -fun sarifFileContent( - baseDir: String, - analysisVersion: String, - errors: List -): String { - val sarifSchema210 = - SarifSchema210( - schema = - "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", - version = Version.The210, - runs = - listOf( - Run( - tool = - Tool( - driver = - ToolComponent( - downloadURI = "https://arrow-kt.io/docs/meta/analysis/", - fullName = "Arrow Analysis", - informationURI = "https://arrow-kt.io/docs/meta/analysis/", - language = "en", - name = "Arrow Analysis", - rules = - errors - .map(ReportedError::errorsId) - .distinctBy(ErrorIds::id) - .map(ErrorIds::toDescriptor), - organization = "arrow-kt", - semanticVersion = analysisVersion, - version = analysisVersion - ) - ), - results = toResults(baseDir, errors) - ) - ) - ) - return SarifSerializer.toJson(sarifSchema210) -} - -private fun ErrorIds.toDescriptor(): ReportingDescriptor = - ReportingDescriptor( - id = "arrow.analysis.$id", - name = name, - shortDescription = MultiformatMessageString(text = shortDescription), - fullDescription = - when (val d = fullDescription) { - null -> MultiformatMessageString(text = shortDescription) - else -> MultiformatMessageString(markdown = d, text = d) - }, - helpURI = "https://arrow-kt.io/docs/meta/analysis/${id}.html" - ) - -fun toResults(baseDir: String, errors: List): List = - errors.map { it.toResult(baseDir) } - -private fun SeverityLevel.toResultLevel(): Level = - when (this) { - SeverityLevel.Error -> Level.Error - SeverityLevel.Warning -> Level.Warning - SeverityLevel.Info -> Level.Note - SeverityLevel.Unsupported -> Level.None - } - -private fun SeverityLevel.toResultKind(): ResultKind = - when (this) { - SeverityLevel.Unsupported -> ResultKind.NotApplicable - else -> ResultKind.Fail - } - -private fun ReportedError.toResult(baseDir: String) = - io.github.detekt.sarif4k.Result( - ruleID = "arrow.analysis.$id", - kind = errorsId.level.toResultKind(), - level = errorsId.level.toResultLevel(), - locations = - (listOf(element.location()) + references.map { it.location() }) - .mapNotNull { it?.toLocation(baseDir) } - .toSet() - .toList(), - message = Message(text = msg) - ) - -private fun rel(baseDir: String, path: String): String { - val p = Path(path) - return if (p.isAbsolute) Path(baseDir).relativize(p).toString() else path -} - -private fun CompilerMessageSourceLocation.toLocation(baseDir: String): Location = - Location( - physicalLocation = - PhysicalLocation( - region = - Region( - startLine = line.toLong(), - startColumn = column.toLong(), - ), - artifactLocation = ArtifactLocation(uri = rel(baseDir, path)) - ) - ) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Booleans.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Booleans.kt deleted file mode 100644 index 29a9f95bf..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Booleans.kt +++ /dev/null @@ -1,106 +0,0 @@ -package arrow.meta.plugins.analysis.smt - -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.Formula - -internal fun Solver.boolNot(args: List): BooleanFormula? = booleans { - if (args.size == 1 && args[0] is BooleanFormula) { - val theOne = args[0] as BooleanFormula - not(theOne) - } else null -} - -internal fun Solver.boolEquivalence(args: List): BooleanFormula? = booleans { - if (args.size == 2) { - val (left, right) = args - if (left is BooleanFormula && right is BooleanFormula) { - equivalence(left, right) - } else null - } else null -} - -internal fun Solver.boolImplication(args: List): BooleanFormula? = booleans { - if (args.size == 2) { - val (left, right) = args - if (left is BooleanFormula && right is BooleanFormula) { - implication(left, right) - } else null - } else null -} - -internal fun Solver.boolAnd(args: List): BooleanFormula? = booleans { - if (args.size == 2) { - val (left, right) = args - if (left is BooleanFormula && right is BooleanFormula) { - and(left, right) - } else null - } else null -} - -internal fun Solver.boolAndList(args: List): BooleanFormula? = - when (args.size) { - 0 -> null - 1 -> args[0] - else -> booleans { and(args) } - } - -internal fun Solver.implication(args: List): BooleanFormula? = booleans { - if (args.size == 2) { - val (left, right) = args - if (left is BooleanFormula && right is BooleanFormula) { - implication(left, right) - } else null - } else null -} - -internal fun Solver.boolOr(args: List): BooleanFormula? = booleans { - if (args.size == 2) { - val (left, right) = args - if (left is BooleanFormula && right is BooleanFormula) { - or(left, right) - } else null - } else null -} - -internal fun Solver.boolOrList(args: List): BooleanFormula = - when (args.size) { - 0 -> booleanFormulaManager.makeFalse() - 1 -> args[0] - else -> booleans { or(args) } - } - -internal fun Solver.boolXor(args: List): BooleanFormula? = booleans { - if (args.size == 2) { - val (left, right) = args - if (left is BooleanFormula && right is BooleanFormula) { - xor(left, right) - } else null - } else null -} - -internal fun Solver.ifThenElse(args: List): Formula? = booleans { - if (args.size == 3) { - val (cond, f1, f2) = args - if (cond is BooleanFormula && f1 is BooleanFormula && f2 is BooleanFormula) { - ifThenElse(cond, f1, f2) - } else null - } else null -} - -internal fun Solver.isTrue(args: List): Boolean? = booleans { - if (args.size == 1) { - val cond = args.first() - if (cond is BooleanFormula) { - isTrue(cond) - } else null - } else null -} - -internal fun Solver.isFalse(args: List): Boolean? = booleans { - if (args.size == 1) { - val cond = args.first() - if (cond is BooleanFormula) { - isFalse(cond) - } else null - } else null -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/FormulaExtensions.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/FormulaExtensions.kt deleted file mode 100644 index d583f4677..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/FormulaExtensions.kt +++ /dev/null @@ -1,161 +0,0 @@ -package arrow.meta.plugins.analysis.smt - -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import org.sosy_lab.java_smt.api.Formula -import org.sosy_lab.java_smt.api.FormulaManager -import org.sosy_lab.java_smt.api.FunctionDeclaration -import org.sosy_lab.java_smt.api.visitors.DefaultFormulaVisitor -import org.sosy_lab.java_smt.api.visitors.FormulaTransformationVisitor -import org.sosy_lab.java_smt.api.visitors.TraversalProcess -import org.sosy_lab.java_smt.basicimpl.FunctionDeclarationImpl - -fun Solver.substituteVariable(formula: T, mapping: Map): T = - try { - formulae { - val subst = mapping.mapKeys { entry -> makeVariable(getFormulaType(entry.value), entry.key) } - substituteWithFix(formula, subst) - } - } catch (e: Exception) { - throw java.lang.IllegalArgumentException("substituting $formula with $mapping", e) - } - -internal fun Solver.renameObjectVariables( - formula: T, - mapping: Map -): T = - try { - formulae { - val subst = - mapping.map { (k, v) -> Pair(makeObjectVariable(k), makeObjectVariable(v)) }.toMap() - substituteWithFix(formula, subst) - } - } catch (e: Exception) { - throw java.lang.IllegalArgumentException("renaming $formula with $mapping", e) - } - -internal fun Solver.substituteObjectVariables( - formula: T, - mapping: Map -): T = - try { - formulae { - val subst = mapping.map { (k, v) -> Pair(makeObjectVariable(k), v) }.toMap() - substituteWithFix(formula, subst) - } - } catch (e: Exception) { - throw java.lang.IllegalArgumentException("substituting $formula with $mapping", e) - } - -fun Solver.renameDeclarationConstraints( - decl: DeclarationConstraints, - mapping: Map -): DeclarationConstraints { - fun go(c: NamedConstraint) = NamedConstraint(c.msg, renameObjectVariables(c.formula, mapping)) - return DeclarationConstraints( - decl.descriptor, - decl.pre.map(::go), - decl.post.map(::go), - decl.doNotLookAtArgumentsWhen.map(::go) - ) -} - -fun Solver.substituteDeclarationConstraints( - decl: DeclarationConstraints, - mapping: Map -): DeclarationConstraints { - fun go(c: NamedConstraint) = NamedConstraint(c.msg, substituteObjectVariables(c.formula, mapping)) - return DeclarationConstraints( - decl.descriptor, - decl.pre.map(::go), - decl.post.map(::go), - decl.doNotLookAtArgumentsWhen.map(::go) - ) -} - -fun FormulaManager.fieldNames(f: Formula): Set> { - val names = mutableSetOf>() - val visitor = - object : DefaultFormulaVisitor() { - override fun visitDefault(f: Formula?): TraversalProcess = TraversalProcess.CONTINUE - override fun visitFunction( - f: Formula?, - args: MutableList?, - fn: FunctionDeclaration<*>? - ): TraversalProcess { - val secondArg = args?.getOrNull(1) as? ObjectFormula - if (fn?.name == Solver.FIELD_FUNCTION_NAME && secondArg != null) { - args.getOrNull(0)?.let { fieldNames -> - names.addAll(extractVariables(fieldNames).keys.map { Pair(it, secondArg) }) - } - } - return TraversalProcess.CONTINUE - } - } - visitRecursively(f, visitor) - return names -} - -fun FormulaManager.fieldNames(f: Iterable): Set> = - f.flatMap { fieldNames(it) }.toSet() - -fun FormulaManager.isSingleVariable(f: Formula): Boolean { - val visitor = - object : DefaultFormulaVisitor() { - override fun visitDefault(f: Formula?): Boolean = false - override fun visitFreeVariable(f: Formula?, name: String?): Boolean = true - } - return visit(f, visitor) -} - -fun Solver.isFieldCall(f: Formula): Boolean { - val visitor = - object : DefaultFormulaVisitor() { - override fun visitDefault(f: Formula?): Boolean = false - override fun visitFunction( - f: Formula?, - args: MutableList?, - functionDeclaration: FunctionDeclaration<*>? - ): Boolean = functionDeclaration?.name == Solver.FIELD_FUNCTION_NAME - } - return visit(f, visitor) -} - -fun FormulaManager.extractSingleVariable(formula: Formula): String? = - extractVariables(formula).takeIf { it.size == 1 }?.toList()?.getOrNull(0)?.first - -// our version of substitute, needed to work around -// a bug with SMTInterpol -fun Solver.substituteWithFix(pF: T, pFromToMapping: Map): T = - transformRecursively( - pF, - object : FormulaTransformationVisitor(this) { - override fun visitFreeVariable(f: Formula, name: String): Formula = replace(f) - - override fun visitFunction( - f: Formula, - newArgs: List, - functionDeclaration: FunctionDeclaration<*> - ): Formula = pFromToMapping[f] ?: makeApplicationSafe(functionDeclaration, newArgs) - - private fun replace(f: Formula): Formula = pFromToMapping[f] ?: f - - private fun makeApplicationSafe(fn: FunctionDeclaration<*>, args: List) = - try { - makeApplication(fn, args) - } catch (e: IndexOutOfBoundsException) { - fn as FunctionDeclarationImpl<*, *> - val newFn = - FunctionDeclarationImpl.of( - fn.name, - fn.kind, - fn.argumentTypes.take(2), - fn.type, - fn.solverDeclaration - ) - // this happens sometimes in SMTInterpol, - // so we try to fix it by using the function with each 2 arguments - args.reduce { acc, f -> makeApplication(newFn, listOf(acc, f)) } - } - } - ) diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Ints.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Ints.kt deleted file mode 100644 index 62dd89aa9..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Ints.kt +++ /dev/null @@ -1,77 +0,0 @@ -package arrow.meta.plugins.analysis.smt - -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.Formula -import org.sosy_lab.java_smt.api.NumeralFormula - -private fun List.numeric(): List = - filterIsInstance() - -internal fun Solver.intEquals(args: List): BooleanFormula? = ints { - if (args.size == 2) { - val (left, right) = args.numeric() - equal(left, right) - } else null -} - -internal fun Solver.intPlus(args: List): NumeralFormula.IntegerFormula? = ints { - if (args.size == 2) { - val (left, right) = args.numeric() - add(left, right) - } else null -} - -internal fun Solver.intNegate(args: List): NumeralFormula.IntegerFormula? = ints { - if (args.size == 1) { - negate(args.numeric().first()) - } else null -} - -internal fun Solver.intMinus(args: List): NumeralFormula.IntegerFormula? = ints { - if (args.size == 2) { - val (left, right) = args.numeric() - subtract(left, right) - } else null -} - -internal fun Solver.intDivide(args: List): NumeralFormula.IntegerFormula? = ints { - if (args.size == 2) { - val (left, right) = args.numeric() - divide(left, right) - } else null -} - -internal fun Solver.intMultiply(args: List): NumeralFormula.IntegerFormula? = ints { - if (args.size == 2) { - val (left, right) = args.numeric() - multiply(left, right) - } else null -} - -internal fun Solver.intGreaterThan(args: List): BooleanFormula? = ints { - if (args.size == 2) { - val (left, right) = args.numeric() - greaterThan(left, right) - } else null -} - -internal fun Solver.intGreaterThanOrEquals(args: List): BooleanFormula? = ints { - if (args.size == 2) { - val (left, right) = args.numeric() - greaterOrEquals(left, right) - } else null -} - -internal fun Solver.intLessThan(args: List): BooleanFormula? = ints { - if (args.size == 2) { - val (left, right) = args.numeric() - lessThan(left, right) - } else null -} - -internal fun Solver.intLessThanOrEquals(args: List): BooleanFormula? = ints { - if (args.size == 2) { - val (left, right) = args.numeric() - lessOrEquals(left, right) - } else null -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt deleted file mode 100644 index 8092d0c6c..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Rationals.kt +++ /dev/null @@ -1,81 +0,0 @@ -package arrow.meta.plugins.analysis.smt - -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.Formula -import org.sosy_lab.java_smt.api.NumeralFormula - -private fun List.rational(): List = - filterIsInstance() - -internal fun Solver.rationalEquals(args: List): BooleanFormula? = rationals { - if (args.size == 2) { - val (left, right) = args.rational() - equal(left, right) - } else null -} - -internal fun Solver.rationalPlus(args: List): NumeralFormula.RationalFormula? = rationals { - if (args.size == 2) { - val (left, right) = args.rational() - add(left, right) - } else null -} - -internal fun Solver.rationalNegate(args: List): NumeralFormula.RationalFormula? = - rationals { - if (args.size == 1) { - negate(args.rational().first()) - } else null - } - -internal fun Solver.rationalMinus(args: List): NumeralFormula.RationalFormula? = - rationals { - if (args.size == 2) { - val (left, right) = args.rational() - subtract(left, right) - } else null - } - -internal fun Solver.rationalDivide(args: List): NumeralFormula.RationalFormula? = - rationals { - if (args.size == 2) { - val (left, right) = args.rational() - divide(left, right) - } else null - } - -internal fun Solver.rationalMultiply(args: List): NumeralFormula.RationalFormula? = - rationals { - if (args.size == 2) { - val (left, right) = args.rational() - multiply(left, right) - } else null - } - -internal fun Solver.rationalGreaterThan(args: List): BooleanFormula? = rationals { - if (args.size == 2) { - val (left, right) = args.rational() - greaterThan(left, right) - } else null -} - -internal fun Solver.rationalGreaterThanOrEquals(args: List): BooleanFormula? = rationals { - if (args.size == 2) { - val (left, right) = args.rational() - greaterOrEquals(left, right) - } else null -} - -internal fun Solver.rationalLessThan(args: List): BooleanFormula? = rationals { - if (args.size == 2) { - val (left, right) = args.rational() - lessThan(left, right) - } else null -} - -internal fun Solver.rationalLessThanOrEquals(args: List): BooleanFormula? = rationals { - if (args.size == 2) { - val (left, right) = args.rational() - lessOrEquals(left, right) - } else null -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt deleted file mode 100644 index 2c4fae68b..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/Solver.kt +++ /dev/null @@ -1,186 +0,0 @@ -package arrow.meta.plugins.analysis.smt - -import arrow.meta.plugins.analysis.phases.analysis.solver.RESULT_VAR_NAME -import arrow.meta.plugins.analysis.phases.analysis.solver.THIS_VAR_NAME -import arrow.meta.plugins.analysis.smt.utils.DefaultKotlinPrinter -import arrow.meta.plugins.analysis.smt.utils.KotlinPrinter -import arrow.meta.plugins.analysis.smt.utils.NameProvider -import org.sosy_lab.java_smt.SolverContextFactory -import org.sosy_lab.java_smt.api.ArrayFormulaManager -import org.sosy_lab.java_smt.api.BitvectorFormulaManager -import org.sosy_lab.java_smt.api.BooleanFormula -import org.sosy_lab.java_smt.api.BooleanFormulaManager -import org.sosy_lab.java_smt.api.FloatingPointFormulaManager -import org.sosy_lab.java_smt.api.FormulaManager -import org.sosy_lab.java_smt.api.FormulaType -import org.sosy_lab.java_smt.api.FunctionDeclaration -import org.sosy_lab.java_smt.api.IntegerFormulaManager -import org.sosy_lab.java_smt.api.NumeralFormula -import org.sosy_lab.java_smt.api.QuantifiedFormulaManager -import org.sosy_lab.java_smt.api.RationalFormulaManager -import org.sosy_lab.java_smt.api.SLFormulaManager -import org.sosy_lab.java_smt.api.SolverContext -import org.sosy_lab.java_smt.api.UFManager - -typealias ObjectFormula = NumeralFormula.IntegerFormula - -typealias FieldFormula = NumeralFormula.IntegerFormula - -val ObjectFormulaType = FormulaType.IntegerType -val FieldFormulaType = FormulaType.IntegerType - -class Solver(context: SolverContext, nameProvider: NameProvider) : - SolverContext by context, - FormulaManager by context.formulaManager, - BooleanFormulaManager by context.formulaManager.booleanFormulaManager, - KotlinPrinter by DefaultKotlinPrinter(context.formulaManager, nameProvider) { - - fun ints(f: IntegerFormulaManager.() -> A): A = f(integerFormulaManager) - - fun objects(f: IntegerFormulaManager.() -> A): A = f(integerFormulaManager) - - fun booleans(f: BooleanFormulaManager.() -> A): A = f(booleanFormulaManager) - - fun rationals(f: RationalFormulaManager.() -> A): A = f(rationalFormulaManager) - - fun floatingPoint(f: FloatingPointFormulaManager.() -> A): A = f(floatingPointFormulaManager) - - fun bitvectors(f: BitvectorFormulaManager.() -> A): A = f(bitvectorFormulaManager) - - fun arrays(f: ArrayFormulaManager.() -> A): A = f(arrayFormulaManager) - - fun quantified(f: QuantifiedFormulaManager.() -> A): A = f(quantifiedFormulaManager) - - fun separationLogic(f: SLFormulaManager.() -> A): A = f(slFormulaManager) - - fun uninterpretedFunctions(f: UFManager.() -> A): A = f(ufManager) - - fun formulae(f: FormulaManager.() -> A): A = f(formulaManager) - - val intValueFun: FunctionDeclaration = - ufManager.declareUF(INT_VALUE_NAME, FormulaType.IntegerType, ObjectFormulaType) - - val boolValueFun: FunctionDeclaration = - ufManager.declareUF(BOOL_VALUE_NAME, FormulaType.BooleanType, ObjectFormulaType) - - val decimalValueFun: FunctionDeclaration = - ufManager.declareUF(DECIMAL_VALUE_NAME, FormulaType.RationalType, ObjectFormulaType) - - val fieldFun: FunctionDeclaration = - ufManager.declareUF(FIELD_FUNCTION_NAME, ObjectFormulaType, FieldFormulaType, ObjectFormulaType) - - val isNullFn: FunctionDeclaration = - ufManager.declareUF(IS_NULL_FUNCTION_NAME, FormulaType.BooleanType, ObjectFormulaType) - - fun intValue(formula: ObjectFormula): NumeralFormula.IntegerFormula = uninterpretedFunctions { - callUF(intValueFun, formula) - } - - fun boolValue(formula: ObjectFormula): BooleanFormula = uninterpretedFunctions { - callUF(boolValueFun, formula) - } - - fun decimalValue(formula: ObjectFormula): NumeralFormula.RationalFormula = - uninterpretedFunctions { - callUF(decimalValueFun, formula) - } - - fun field(fieldName: String, formula: ObjectFormula): ObjectFormula = uninterpretedFunctions { - callUF(fieldFun, integerFormulaManager.makeVariable(fieldName), formula) - } - - fun isNull(formula: ObjectFormula): BooleanFormula = uninterpretedFunctions { - callUF(isNullFn, formula) - } - - fun isNotNull(formula: ObjectFormula): BooleanFormula = booleans { not(isNull(formula)) } - - fun makeObjectVariable(varName: String): ObjectFormula = objects { this.makeVariable(varName) } - - fun makeBooleanObjectVariable(varName: String): BooleanFormula = - boolValue(makeObjectVariable(varName)) - - fun makeIntegerObjectVariable(varName: String): NumeralFormula.IntegerFormula = - intValue(makeObjectVariable(varName)) - - fun makeDecimalObjectVariable(varName: String): NumeralFormula.RationalFormula = - decimalValue(makeObjectVariable(varName)) - - val resultVariable = makeObjectVariable(RESULT_VAR_NAME) - val thisVariable = makeObjectVariable(THIS_VAR_NAME) - - private val forbiddenNames: List = - listOf( - // From SMTLIB docs - "div", - "mod", - "abs", - "select", - "store", - "true", - "false", - "not", - "and", - "or", - "xor", - "distinct", - "ite", - // from our own internal names - INT_VALUE_NAME, - BOOL_VALUE_NAME, - DECIMAL_VALUE_NAME, - FIELD_FUNCTION_NAME, - IS_NULL_FUNCTION_NAME - ) - - override fun escape(name: String): String = - when { - name in forbiddenNames -> "$name##" - else -> name - }.let { formulaManager.escape(it) } - - companion object { - - operator fun invoke(nameProvider: NameProvider): Solver = - Solver( - SolverContextFactory.createSolverContext(SolverContextFactory.Solvers.SMTINTERPOL), - nameProvider - ) - - val INT_VALUE_NAME = "int" - val BOOL_VALUE_NAME = "bool" - val DECIMAL_VALUE_NAME = "dec" - val FIELD_FUNCTION_NAME = "field" - val IS_NULL_FUNCTION_NAME = "null" - } -} - -// val initZ3: Unit = //initializes first the turnkey distribution to enable z3 dynamic loading -// -// //tricks java smt lib by injecting the turnkey z3 unpackaded location as part of the java libs -// //before java smt loads it -// run { -// //initializes first the turnkey distribution to enable z3 dynamic loading -// val z3 = Native.getFullVersion() -// println(z3) -// //tricks java smt lib by injecting the turnkey z3 unpackaded location as part of the java libs -// //before java smt loads it -// val z3TurnKeyDistribution: File? = System.getProperty("java.io.tmpdir")?.let { -// File(it).listFiles().orEmpty().filter { -// it.name.contains("z3-turnkey") -// }.firstOrNull() -// } -// val nativePath = NativeLibraries.getNativeLibraryPath().toFile() -// if (nativePath.exists()) { -// nativePath.mkdirs() -// } -// z3TurnKeyDistribution?.listFiles()?.orEmpty()?.forEach { -// try { -// if (it.exists()) { -// // it.copyTo(File(nativePath, it.name), true) -// } -// } catch (ex: IOException) { -// println(ex.message) -// } -// } -// } diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FieldProvider.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FieldProvider.kt deleted file mode 100644 index a12c780fa..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FieldProvider.kt +++ /dev/null @@ -1,74 +0,0 @@ -package arrow.meta.plugins.analysis.smt.utils - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.overriddenDescriptors -import arrow.meta.plugins.analysis.phases.analysis.solver.state.asField -import arrow.meta.plugins.analysis.smt.Solver -import org.sosy_lab.java_smt.api.ProverEnvironment - -class FieldProvider( - private val solver: Solver, - private val prover: ProverEnvironment, - internal val basicFields: MutableMap, - private var current: Long -) { - - fun introduce(descriptor: DeclarationDescriptor): Long { - val name = descriptor.fqNameSafe.asField - - // shortcut, if it's there, just return it - if (basicFields.containsKey(name)) return basicName(name) - - val overridden = descriptor.overriddenDescriptors().orEmpty() - val topOverriden = overridden.filter { it.overriddenDescriptors().isNullOrEmpty() } - return when (topOverriden.size) { - 0 -> { - // it's basic! - // it's OK to save since otherwise it would have - // been found in the initial check - save(name) - basicName(name) - } - 1 -> { - // first introduce all of the upper descriptors - overridden.reversed().forEach { introduce(it) } - // now the map contains the basic one - // assert that they are equal - derivedName(name, topOverriden[0].fqNameSafe.asField) - } - else -> { - // weird case: - // we have more than one "top most" elements - // in this case, we just override *none* - // and take it as basic - save(name) - basicName(name) - } - } - } - - private fun basicName(name: String): Long { - val index = basicFields.getValue(name) - val constraint = solver.ints { equal(makeVariable(name), makeNumber(index)) } - prover.addConstraint(constraint) - return index - } - - private fun derivedName(name: String, topName: String): Long { - val index = basicFields.getValue(topName) - val constraint = solver.ints { equal(makeVariable(name), makeVariable(topName)) } - prover.addConstraint(constraint) - return index - } - - private fun save(name: String): Long { - current += 1 - basicFields[name] = current - return current - } - - companion object { - operator fun invoke(solver: Solver, prover: ProverEnvironment): FieldProvider = - FieldProvider(solver, prover, mutableMapOf(), 0) - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt deleted file mode 100644 index 65fa49079..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/FormulaToKotlin.kt +++ /dev/null @@ -1,164 +0,0 @@ -package arrow.meta.plugins.analysis.smt.utils - -import arrow.meta.plugins.analysis.smt.Solver -import org.sosy_lab.java_smt.api.Formula -import org.sosy_lab.java_smt.api.FormulaManager -import org.sosy_lab.java_smt.api.FunctionDeclaration -import org.sosy_lab.java_smt.api.FunctionDeclarationKind -import org.sosy_lab.java_smt.api.visitors.DefaultFormulaVisitor - -interface KotlinPrinter { - fun Formula.dumpKotlinLike(): String - fun Formula.dumpKotlinLikeOrRemove(): String? - fun mirroredElement(name: String): ReferencedElement? - - fun List.dumpKotlinLike(): String = - mapNotNull { it.dumpKotlinLikeOrRemove() }.joinToString() -} - -internal class DefaultKotlinPrinter( - private val fmgr: FormulaManager, - private val nameProvider: NameProvider -) : KotlinPrinter { - - override fun mirroredElement(name: String): ReferencedElement? = - nameProvider.mirroredElement(name) - - override fun Formula.dumpKotlinLike(): String { - val str = StringBuilder() - fmgr.visit( - this, - KotlinPrintVisitor(fmgr, str, nameProvider, parensContext = false, negatedContext = false) - ) - return str.toString() - } - - override fun Formula.dumpKotlinLikeOrRemove(): String? = dumpKotlinLike().takeIf { it != "true" } - - private data class KotlinPrintVisitor( - private val fmgr: FormulaManager, - private val out: StringBuilder, - private val nameProvider: NameProvider, - private val parensContext: Boolean, - private val negatedContext: Boolean - ) : DefaultFormulaVisitor() { - - override fun visitDefault(pF: Formula): Void? { - if (negatedContext) out.append('!') - - val text = nameProvider.mirroredElement(pF.toString())?.element?.text ?: pF.toString() - val needsParens = (parensContext || negatedContext) && text.contains(' ') - if (needsParens) out.append('(') - out.append(text) - if (needsParens) out.append(')') - - return null - } - - private enum class Render { - Negation, - Postfix, - Equality, - Binary, - Hidden, - Field, - Unsupported - } - - private fun FunctionDeclaration<*>.toKotlin(): Triple = - when (kind) { - FunctionDeclarationKind.NOT -> Triple(Render.Negation, "!", null) - FunctionDeclarationKind.AND -> Triple(Render.Binary, "&&", null) - FunctionDeclarationKind.OR -> Triple(Render.Binary, "||", null) - FunctionDeclarationKind.SUB -> Triple(Render.Binary, "-", null) - FunctionDeclarationKind.ADD -> Triple(Render.Binary, "+", null) - FunctionDeclarationKind.DIV -> Triple(Render.Binary, "/", null) - FunctionDeclarationKind.MUL -> Triple(Render.Binary, "*", null) - FunctionDeclarationKind.LT -> Triple(Render.Binary, "<", ">=") - FunctionDeclarationKind.LTE -> Triple(Render.Equality, "<=", ">") - FunctionDeclarationKind.GT -> Triple(Render.Binary, ">", "<=") - FunctionDeclarationKind.GTE -> Triple(Render.Equality, ">=", "<") - FunctionDeclarationKind.EQ -> Triple(Render.Equality, "==", "!=") - FunctionDeclarationKind.UF -> - when (name) { - Solver.INT_VALUE_NAME -> Triple(Render.Hidden, "", null) - Solver.BOOL_VALUE_NAME -> Triple(Render.Hidden, "", null) - Solver.DECIMAL_VALUE_NAME -> Triple(Render.Hidden, "", null) - Solver.FIELD_FUNCTION_NAME -> Triple(Render.Field, name, null) - Solver.IS_NULL_FUNCTION_NAME -> Triple(Render.Postfix, " == null", " != null") - else -> Triple(Render.Unsupported, "[unsupported UF: $name]", null) - } - else -> Triple(Render.Unsupported, "[unsupported: $this]", null) - } - - override fun visitFunction( - pF: Formula, - pArgs: List, - pFunctionDeclaration: FunctionDeclaration<*> - ): Void? { - val (render, name, negatedName) = pFunctionDeclaration.toKotlin() - when (render) { - Render.Hidden, - Render.Unsupported -> { - pArgs.forEach { arg -> fmgr.visit(arg, this) } - } - Render.Negation -> { - fmgr.visit(pArgs[0], this.copy(negatedContext = !negatedContext)) - } - Render.Equality -> { - val leftStringBuilder = StringBuilder() - fmgr.visit( - pArgs[0], - this.copy(out = leftStringBuilder, parensContext = true, negatedContext = false) - ) - val rightStringBuilder = StringBuilder() - fmgr.visit( - pArgs[1], - this.copy(out = rightStringBuilder, parensContext = true, negatedContext = false) - ) - - if (leftStringBuilder.toString() == rightStringBuilder.toString()) { - out.append(if (negatedContext) "false" else "true") - } else { - if (parensContext) out.append('(') - out.append(leftStringBuilder) - out.append(' ') - out.append(if (negatedContext) negatedName else name) - out.append(' ') - out.append(rightStringBuilder) - if (parensContext) out.append(')') - } - } - else -> { - val mustBeNegated = negatedContext && negatedName == null - val needsParens = parensContext || mustBeNegated - val nameToShow = if (negatedContext && negatedName != null) negatedName else name - - if (mustBeNegated) out.append('!') - if (needsParens) out.append('(') - when (render) { - Render.Postfix -> { - fmgr.visit(pArgs[0], this.copy(parensContext = false, negatedContext = false)) - out.append(nameToShow) - } - Render.Binary -> { - fmgr.visit(pArgs[0], this.copy(parensContext = true, negatedContext = false)) - out.append(' ') - out.append(nameToShow) - out.append(' ') - fmgr.visit(pArgs[1], this.copy(parensContext = true, negatedContext = false)) - } - Render.Field -> { - fmgr.visit(pArgs[1], this.copy(parensContext = false, negatedContext = false)) - out.append(".") - out.append(pArgs[0].toString().substringAfterLast(".")) - } - else -> {} // taken care of above - } - if (needsParens) out.append(')') - } - } - return null - } - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/NameProvider.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/NameProvider.kt deleted file mode 100644 index 3bf556207..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/smt/utils/NameProvider.kt +++ /dev/null @@ -1,29 +0,0 @@ -package arrow.meta.plugins.analysis.smt.utils - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import java.util.concurrent.ConcurrentHashMap -import java.util.concurrent.atomic.AtomicReference - -data class ReferencedElement( - val element: Element, - val reference: Pair?, - val type: Type? -) - -class NameProvider { - private val counter = AtomicReference(0) - - private val assignedNames: ConcurrentHashMap = ConcurrentHashMap() - - fun mirroredElement(assignedName: String): ReferencedElement? = assignedNames[assignedName] - - fun recordNewName(prefix: String, mirroredElement: ReferencedElement?): String { - val n = counter.getAndUpdate { it + 1 } - val newName = "${prefix}$n" - if (mirroredElement != null) assignedNames[newName] = mirroredElement - return newName - } -} diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/Literals.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/Literals.kt deleted file mode 100644 index 33f1e3186..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/Literals.kt +++ /dev/null @@ -1,24 +0,0 @@ -package arrow.meta.plugins.analysis.types - -import java.math.BigDecimal -import java.math.BigInteger - -/** - * Parse integer literal according to Kotlin's grammar - * https://kotlinlang.org/docs/reference/grammar.html#literalConstant - */ -fun String.asIntegerLiteral(): BigInteger? = - replace("_", "").trimEnd('u', 'U', 'l', 'L').run { - when { - startsWith("0x", ignoreCase = true) -> drop(2).toBigIntegerOrNull(16) - startsWith("0b", ignoreCase = true) -> drop(2).toBigIntegerOrNull(2) - else -> toBigIntegerOrNull() - } - } - -/** - * Parse floating literal according to Kotlin's grammar - * https://kotlinlang.org/docs/reference/grammar.html#RealLiteral - */ -fun String.asFloatingLiteral(): BigDecimal? = - replace("_", "").trimEnd('f', 'F').toBigDecimalOrNull() diff --git a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/PrimitiveType.kt b/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/PrimitiveType.kt deleted file mode 100644 index 3881f2d3b..000000000 --- a/arrow-libs/analysis/analysis/common/src/main/kotlin/arrow/meta/plugins/analysis/types/PrimitiveType.kt +++ /dev/null @@ -1,35 +0,0 @@ -package arrow.meta.plugins.analysis.types - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -enum class PrimitiveType { - BOOLEAN, - INTEGRAL, - RATIONAL, - CHAR, - STRING -} - -fun Type.unwrapIfNullable(): Type = - if (isMarkedNullable || isNullable()) unwrappedNotNullableType else this - -fun Type.primitiveType(): PrimitiveType? = - when { - isBoolean() -> PrimitiveType.BOOLEAN - isByte() -> PrimitiveType.INTEGRAL - isShort() -> PrimitiveType.INTEGRAL - isInt() -> PrimitiveType.INTEGRAL - isLong() -> PrimitiveType.INTEGRAL - isUnsignedNumberType() -> PrimitiveType.INTEGRAL - isDouble() -> PrimitiveType.RATIONAL - isFloat() -> PrimitiveType.RATIONAL - isChar() -> PrimitiveType.CHAR - isString() -> PrimitiveType.STRING - else -> - when (this.descriptor?.fqNameSafe) { - FqName("java.math.BigInteger") -> PrimitiveType.INTEGRAL - FqName("java.math.BigDecimal") -> PrimitiveType.RATIONAL - else -> null - } - } diff --git a/arrow-libs/analysis/analysis/example/build.gradle.kts b/arrow-libs/analysis/analysis/example/build.gradle.kts deleted file mode 100644 index 4d9b402e1..000000000 --- a/arrow-libs/analysis/analysis/example/build.gradle.kts +++ /dev/null @@ -1,58 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - id(libs.plugins.kotlin.multiplatform.get().pluginId) - alias(libs.plugins.arrowGradleConfig.kotlin) - alias(libs.plugins.arrowGradleConfig.formatter) - alias(libs.plugins.arrowGradleConfig.versioning) -} - - -kotlin { - explicitApi = null - - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) - } - - sourceSets { - commonMain { - dependencies { - implementation(libs.kotlin.stdlibCommon) - api(projects.arrowAnalysisLaws) - api(projects.arrowAnalysisTypes) - } - } - - named("jvmMain") { - dependencies { - implementation(libs.kotlin.stdlibJDK8) - } - } - - named("jsMain") { - dependencies { - implementation(libs.kotlin.stdlibJS) - } - } - } -} - -dependencies { - kotlinCompilerClasspath(projects.arrowAnalysisKotlinPlugin) -} - -tasks.compileKotlinJvm { - kotlinOptions { - dependsOn(":arrow-analysis-laws:jar") - freeCompilerArgs = listOf( - "-Xplugin=$rootDir/analysis/kotlin-plugin/build/libs/arrow-analysis-kotlin-plugin-$version.jar", - "-P", "plugin:arrow.meta.plugin.compiler.analysis:generatedSrcOutputDir=$buildDir/generated/meta", - "-P", "plugin:arrow.meta.plugin.compiler.analysis:baseDir=${project.rootProject.rootDir.path}" - ) - } -} - -// disable publication -tasks.withType().configureEach { enabled = false } -tasks.withType().configureEach { enabled = false } diff --git a/arrow-libs/analysis/analysis/example/gradle.properties b/arrow-libs/analysis/analysis/example/gradle.properties deleted file mode 100644 index 176e0301f..000000000 --- a/arrow-libs/analysis/analysis/example/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Maven publishing configuration -POM_NAME=Arrow Analysis Kotlin Example -POM_ARTIFACT_ID=arrow-analysis-kotlin-example -POM_PACKAGING=jar - -pom.name=Arrow Analysis Kotlin Example diff --git a/arrow-libs/analysis/analysis/example/src/commonMain/kotlin/arrow/analysis/BadExample.kt b/arrow-libs/analysis/analysis/example/src/commonMain/kotlin/arrow/analysis/BadExample.kt deleted file mode 100644 index c575c0e61..000000000 --- a/arrow-libs/analysis/analysis/example/src/commonMain/kotlin/arrow/analysis/BadExample.kt +++ /dev/null @@ -1,89 +0,0 @@ -package arrow.analysis - -import kotlin.jvm.JvmInline - -// uncomment code to fail gradle build -// fun bar(x: Int): Int = 1 / x -fun bar(x: Int): Int { - pre(x > 0) { "x positive" } - return 1 / x -} -// val other: Int = emptyList().get(1) - -fun increment(x: Int): Int { - pre(x > 0) { "value must be positive" } - return (x + 1).post({ it > 0 }) { "result is positive" } -} - -val example = increment(increment(1)) - -@JvmInline -value class Positive(val value: Int) { - init { - require(value > 0) - } -} - -val positiveExample = Positive(1) - -fun Positive.add(other: Positive) = Positive(this.value + other.value) - -/* -fun nope(x: Int): Int { - pre(x >= 0) { "value >= 0" } - return (x + 1).post({ it > 1 }) { "result > 1" } -} - -fun nope2(x: Int): Int { - pre(x > 0) { "x must be positive" } - return if (x < 0) 1 else 2 -} -*/ - -// fun List.mappyWrong() = map { increment(it) } -fun List.mappyOk() = map { increment(it.value) } - -fun mappy(xs: List) = xs.mapNotNull { if (it > 0) Positive(it) else null }.mappyOk() - -@JvmInline -value class NonEmptyList(val value: List) { - init { - require(value.isNotEmpty()) { "not empty" } - } -} - -fun List.myGet(index: Int): A { - pre(index >= 0 && index < this.size) { "index within bounds" } - return this.get(index) -} - -fun List.firstOr(default: A): A = if (this.size > 0) this.myGet(0) else default - -fun absoluteValue(n: Int): Int = - when { - n < 0 -> -n - n == 0 -> 0 - else -> n - }.post({ it >= 0 }) { "result >= 0" } - -fun double(n: Int): Int { - pre(n > 0) { "n positive" } - val z = n + n - val r = z + 1 - return r.post({ it > 0 }) { "result positive" } -} - -fun double2(n: Int): Int { - pre(n > 0) { "n positive" } - return (n + n).let { it + 1 }.post({ it > 0 }) { "result positive" } -} - -fun List.count(): Int { - var count = 0.invariant({ it >= 0 }) { "z >= 0" } - for (elt in this) { - count = count + 1 - } - return count.post({ it >= 0 }) { "result >= 0" } -} - -fun List.isSingle() = all { it == first() } diff --git a/arrow-libs/analysis/analysis/java-example/build.gradle.kts b/arrow-libs/analysis/analysis/java-example/build.gradle.kts deleted file mode 100644 index aad71a000..000000000 --- a/arrow-libs/analysis/analysis/java-example/build.gradle.kts +++ /dev/null @@ -1,36 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - `java-library` - alias(libs.plugins.arrowGradleConfig.versioning) -} - -java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(11)) - } -} - -dependencies { - implementation(libs.kotlin.stdlibCommon) - implementation(libs.kotlin.stdlibJDK8) - implementation(projects.arrowAnalysisTypes) - // compileOnly(projects.arrowAnalysisLaws) - compileOnly(projects.arrowAnalysisJavaPlugin) - compileOnly(projects.arrowAnalysisCommon) - annotationProcessor(projects.arrowAnalysisJavaPlugin) -} - -tasks.withType { - javaCompiler.set(javaToolchains.compilerFor { - languageVersion.set(JavaLanguageVersion.of(11)) - }) - options.compilerArgs.addAll(listOf( - "-parameters", - "-Xplugin:ArrowAnalysisJavaPlugin baseDir=${project.rootProject.rootDir.path}" - )) -} - -// disable publication -tasks.withType().configureEach { enabled = false } -tasks.withType().configureEach { enabled = false } diff --git a/arrow-libs/analysis/analysis/java-example/gradle.properties b/arrow-libs/analysis/analysis/java-example/gradle.properties deleted file mode 100644 index 93dcd591a..000000000 --- a/arrow-libs/analysis/analysis/java-example/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Maven publishing configuration -POM_NAME=Arrow Analysis Java Example -POM_ARTIFACT_ID=arrow-analysis-java-example -POM_PACKAGING=jar - -pom.name=Arrow Analysis Java Example diff --git a/arrow-libs/analysis/analysis/java-example/src/main/java/Example.java b/arrow-libs/analysis/analysis/java-example/src/main/java/Example.java deleted file mode 100644 index 2296a6eca..000000000 --- a/arrow-libs/analysis/analysis/java-example/src/main/java/Example.java +++ /dev/null @@ -1,9 +0,0 @@ -import static arrow.analysis.RefinementDSLKt.post; -import static arrow.analysis.RefinementDSLKt.pre; - -public class Example { - public int f(int x) { - pre(x > 0, () -> "x must be positive"); - return post(x + 1, r -> r > 0, () -> "result is positive"); - } -} diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/api/arrow-analysis-java-gradle-plugin.api b/arrow-libs/analysis/analysis/java-gradle-plugin/api/arrow-analysis-java-gradle-plugin.api deleted file mode 100644 index cf33b594c..000000000 --- a/arrow-libs/analysis/analysis/java-gradle-plugin/api/arrow-analysis-java-gradle-plugin.api +++ /dev/null @@ -1,6 +0,0 @@ -public final class arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin : org/gradle/api/Plugin { - public fun ()V - public synthetic fun apply (Ljava/lang/Object;)V - public fun apply (Lorg/gradle/api/Project;)V -} - diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts deleted file mode 100644 index b6726ad7e..000000000 --- a/arrow-libs/analysis/analysis/java-gradle-plugin/build.gradle.kts +++ /dev/null @@ -1,54 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - id(libs.plugins.kotlin.jvm.get().pluginId) - `java-gradle-plugin` - alias(libs.plugins.arrowGradleConfig.kotlin) - alias(libs.plugins.arrowGradleConfig.publish) - alias(libs.plugins.arrowGradleConfig.versioning) - alias(libs.plugins.kotlin.binaryCompatibilityValidator) -} - -tasks.processResources { - duplicatesStrategy = DuplicatesStrategy.WARN - filesMatching("**/analysis.plugin.properties") { - filter { it.replace("%analysisPluginVersion%", "$version") } - } -} - -kotlin { - explicitApi = null - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) - } -} - -dependencies { - api(libs.arrowGradlePluginCommons) - runtimeOnly(libs.classgraph) - - // Necessary during plugin execution to be found and added for compilation - api(libs.arrowMeta) - api(projects.arrowAnalysisJavaPlugin) -} - -gradlePlugin { - plugins { - create("arrow") { - id = "io.arrow-kt.analysis.java" - displayName = "Arrow Analysis Java Gradle Plugin" - implementationClass = "arrow.meta.plugin.gradle.AnalysisJavaGradlePlugin" - } - } -} - -pluginBundle { - website = "https://arrow-kt.io/docs/meta" - vcsUrl = "https://github.com/arrow-kt/arrow-meta" - description = "Functional companion to Kotlin's Compiler" - tags = listOf("kotlin", "compiler", "arrow", "plugin", "meta") -} - -tasks.test { - systemProperty("arrow.meta.generate.source.dir", project.buildDir.absolutePath) -} diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/gradle.properties b/arrow-libs/analysis/analysis/java-gradle-plugin/gradle.properties deleted file mode 100644 index 8ad839a96..000000000 --- a/arrow-libs/analysis/analysis/java-gradle-plugin/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Maven publishing configuration -POM_NAME=Arrow Analysis Java Gradle Plugin -POM_ARTIFACT_ID=arrow-analysis-java-gradle-plugin -POM_PACKAGING=jar - -pom.name=Arrow Analysis Java Gradle Plugin diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin.kt b/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin.kt deleted file mode 100644 index a4d157ca0..000000000 --- a/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisJavaGradlePlugin.kt +++ /dev/null @@ -1,34 +0,0 @@ -package arrow.meta.plugin.gradle - -import java.util.* -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.tasks.compile.JavaCompile - -public class AnalysisJavaGradlePlugin : Plugin { - private val groupId: String = "io.arrow-kt" - - override fun apply(project: Project) { - // get the version from the analysis.plugin.properties file - val properties = Properties() - properties.load(this.javaClass.getResourceAsStream("analysis.plugin.properties")) - val version = properties.getProperty("analysisPluginVersion") - - project.afterEvaluate { p -> - // add libraries - p.dependencies.add("compileOnly", "$groupId:arrow-analysis-types:$version") - p.dependencies.add("compileOnly", "$groupId:arrow-analysis-laws:$version") - // the annotation processor must be present - p.dependencies.add("annotationProcessor", "$groupId:arrow-analysis-java-plugin:$version") - // add the plug-in which uses the result of the processor - p.tasks.withType(JavaCompile::class.java) { task -> - task.options.compilerArgs.addAll( - listOf( - "-parameters", // IMPORTANT! otherwise we have no parameter names - "-Xplugin:ArrowAnalysisJavaPlugin generatedSrcOutputDir=${p.buildDir} baseDir=${p.rootProject.rootDir.path}" - ) - ) - } - } - } -} diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.java.properties b/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.java.properties deleted file mode 100644 index 5e74d3d1a..000000000 --- a/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.java.properties +++ /dev/null @@ -1 +0,0 @@ -implementation-class=arrow.meta.plugin.gradle.AnalysisJavaGradlePlugin \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties b/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties deleted file mode 100644 index 31f336e35..000000000 --- a/arrow-libs/analysis/analysis/java-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties +++ /dev/null @@ -1 +0,0 @@ -analysisPluginVersion=%analysisPluginVersion% diff --git a/arrow-libs/analysis/analysis/java-plugin/api/arrow-analysis-java-plugin.api b/arrow-libs/analysis/analysis/java-plugin/api/arrow-analysis-java-plugin.api deleted file mode 100644 index 669ca5a4e..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/api/arrow-analysis-java-plugin.api +++ /dev/null @@ -1,1177 +0,0 @@ -public final class arrow/meta/plugins/analysis/java/AnalysisContext : arrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver { - public static final field Companion Larrow/meta/plugins/analysis/java/AnalysisContext$Companion; - public fun (Lcom/sun/tools/javac/util/Context;Ljavax/lang/model/util/Types;Ljavax/lang/model/util/Elements;Lcom/sun/source/tree/CompilationUnitTree;Larrow/meta/plugins/analysis/java/Resolver;)V - public final fun getResolver ()Larrow/meta/plugins/analysis/java/Resolver; - public final fun getUnit ()Lcom/sun/source/tree/CompilationUnitTree; -} - -public final class arrow/meta/plugins/analysis/java/AnalysisContext$Companion { - public final fun invoke (Lcom/sun/tools/javac/api/BasicJavacTask;Lcom/sun/source/tree/CompilationUnitTree;)Larrow/meta/plugins/analysis/java/AnalysisContext; -} - -public class arrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver { - public static final field Companion Larrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver$Companion; - public fun (Lcom/sun/tools/javac/util/Context;Ljavax/lang/model/util/Types;Ljavax/lang/model/util/Elements;)V - public final fun copy (Lcom/sun/tools/javac/tree/JCTree;)Lcom/sun/tools/javac/tree/JCTree; - public final fun getContext ()Lcom/sun/tools/javac/util/Context; - public final fun getDiagnostics ()Lcom/sun/tools/javac/util/JCDiagnostic$Factory; - public final fun getElements ()Ljavax/lang/model/util/Elements; - public final fun getLogger ()Lcom/sun/tools/javac/util/Log; - public final fun getMessages ()Lcom/sun/tools/javac/util/JavacMessages; - public final fun getModules ()Lcom/sun/tools/javac/comp/Modules; - public final fun getNames ()Lcom/sun/tools/javac/util/Names; - public final fun getSymbolTable ()Lcom/sun/tools/javac/code/Symtab; - public final fun getTypes ()Ljavax/lang/model/util/Types; -} - -public final class arrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver$Companion { - public final fun invoke (Lcom/sun/tools/javac/api/BasicJavacTask;)Larrow/meta/plugins/analysis/java/AnalysisContextWithoutResolver; -} - -public final class arrow/meta/plugins/analysis/java/AnalysisJavaPlugin : com/sun/source/util/Plugin { - public static final field Companion Larrow/meta/plugins/analysis/java/AnalysisJavaPlugin$Companion; - public static final field NAME Ljava/lang/String; - public fun ()V - public fun getName ()Ljava/lang/String; - public fun init (Lcom/sun/source/util/JavacTask;[Ljava/lang/String;)V -} - -public final class arrow/meta/plugins/analysis/java/AnalysisJavaPlugin$Companion { -} - -public final class arrow/meta/plugins/analysis/java/AnalysisJavaProcessor : javax/annotation/processing/Processor { - public fun ()V - public fun getCompletions (Ljavax/lang/model/element/Element;Ljavax/lang/model/element/AnnotationMirror;Ljavax/lang/model/element/ExecutableElement;Ljava/lang/String;)Ljava/lang/Iterable; - public fun getSupportedAnnotationTypes ()Ljava/util/Set; - public fun getSupportedOptions ()Ljava/util/Set; - public fun getSupportedSourceVersion ()Ljavax/lang/model/SourceVersion; - public final fun getTodo ()Ljava/util/List; - public fun init (Ljavax/annotation/processing/ProcessingEnvironment;)V - public fun process (Ljava/util/Set;Ljavax/annotation/processing/RoundEnvironment;)Z -} - -public final class arrow/meta/plugins/analysis/java/AnalysisJavaProcessorKey : com/sun/tools/javac/util/Context$Key { - public static final field INSTANCE Larrow/meta/plugins/analysis/java/AnalysisJavaProcessorKey; - public fun equals (Ljava/lang/Object;)Z - public fun hashCode ()I -} - -public final class arrow/meta/plugins/analysis/java/AnalysisMessages : java/util/ListResourceBundle { - public static final field AnalysisException Ljava/lang/String; - public static final field Companion Larrow/meta/plugins/analysis/java/AnalysisMessages$Companion; - public static final field ErrorParsingPredicate Ljava/lang/String; - public static final field InconsistentBodyPre Ljava/lang/String; - public static final field InconsistentCallPost Ljava/lang/String; - public static final field InconsistentConditions Ljava/lang/String; - public static final field InconsistentInvariants Ljava/lang/String; - public static final field LiskovProblem Ljava/lang/String; - public static final field UnsatBodyPost Ljava/lang/String; - public static final field UnsatCallPre Ljava/lang/String; - public static final field UnsatInvariants Ljava/lang/String; - public static final field UnsupportedElement Ljava/lang/String; - public static final field WarningParsingPredicate Ljava/lang/String; - public fun ()V -} - -public final class arrow/meta/plugins/analysis/java/AnalysisMessages$Companion { - public final fun getErrors ()Ljava/util/List; - public final fun getWarnings ()Ljava/util/List; -} - -public abstract class arrow/meta/plugins/analysis/java/PerKindTaskListener : com/sun/source/util/TaskListener { - public fun ()V - public final fun afterAnalyze (Lcom/sun/source/util/TaskEvent;)V - public final fun afterEnter (Lcom/sun/source/util/TaskEvent;)V - public final fun afterGenerate (Lcom/sun/source/util/TaskEvent;)V - public final fun afterParse (Lcom/sun/source/util/TaskEvent;)V - public fun finished (Lcom/sun/source/util/TaskEvent;)V -} - -public final class arrow/meta/plugins/analysis/java/Resolver { - public fun (Ljavax/tools/JavaCompiler$CompilationTask;Lcom/sun/source/tree/CompilationUnitTree;)V - public final fun getTopElement ()Ljavax/lang/model/element/Element; - public final fun parent (Lcom/sun/source/tree/Tree;)Lcom/sun/source/tree/Tree; - public final fun parentElements (Lcom/sun/source/tree/Tree;)Ljava/lang/Iterable; - public final fun parentTrees (Lcom/sun/source/tree/Tree;)Ljava/lang/Iterable; - public final fun path (Lcom/sun/source/tree/Tree;)Lcom/sun/source/util/TreePath; - public final fun positionOf (Lcom/sun/source/tree/Tree;)Lkotlin/Pair; - public final fun resolve (Lcom/sun/source/tree/Tree;)Ljavax/lang/model/element/Element; - public final fun resolveType (Lcom/sun/source/tree/Tree;)Ljavax/lang/model/type/TypeMirror; - public final fun tree (Ljavax/lang/model/element/Element;)Lcom/sun/source/tree/Tree; -} - -public final class arrow/meta/plugins/analysis/java/TaskListenerKt { - public static final fun after (Lcom/sun/source/util/JavacTask;Lcom/sun/source/util/TaskEvent$Kind;Lkotlin/jvm/functions/Function2;)V - public static final fun before (Lcom/sun/source/util/JavacTask;Lcom/sun/source/util/TaskEvent$Kind;Lkotlin/jvm/functions/Function2;)V -} - -public final class arrow/meta/plugins/analysis/java/ast/AnnotationUtilsKt { - public static final fun addAnn (Lcom/sun/tools/javac/tree/JCTree$JCModifiers;Lcom/sun/tools/javac/tree/JCTree$JCAnnotation;)V - public static final fun addAnn (Lcom/sun/tools/javac/tree/JCTree$JCModifiers;Lkotlin/jvm/functions/Function0;)V - public static final fun annArrays (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/lang/String;[Ljava/util/List;)Lcom/sun/tools/javac/tree/JCTree$JCAnnotation; - public static final fun annStrings (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/lang/String;[Ljava/lang/String;)Lcom/sun/tools/javac/tree/JCTree$JCAnnotation; - public static final fun hintsClass (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;)Lcom/sun/tools/javac/tree/JCTree$JCClassDecl; - public static final fun hintsPackage (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;)Lkotlin/Pair; -} - -public final class arrow/meta/plugins/analysis/java/ast/JavaInterpreterKt { - public static final fun fqName (Ljavax/lang/model/element/Name;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static final fun model (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static final fun model (Ljavax/lang/model/element/Element;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor; - public static final fun model (Ljavax/lang/model/type/TypeMirror;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/java/ast/types/JavaType; - public static final fun modelCautious (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static final fun modelCautious (Ljavax/lang/model/type/TypeMirror;Larrow/meta/plugins/analysis/java/AnalysisContext;)Larrow/meta/plugins/analysis/java/ast/types/JavaType; - public static final fun name (Ljavax/lang/model/element/Name;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; -} - -public final class arrow/meta/plugins/analysis/java/ast/JavaResolutionContext : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Larrow/meta/plugins/analysis/java/AnalysisContext;)V - public fun backingPropertyForConstructorParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; - public fun constraintsDSLElements (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Ljava/util/List; - public fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; - public fun getModule ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor; - public fun getTypes ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types; - public fun handleError (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportAnalysisException (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportInconsistentCallPost (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportInconsistentConditions (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportInconsistentInvariants (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportLiskovProblem (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportUnsatInvariants (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportUnsupported (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/AnnotationMirror;)V - public fun argumentValueAsArrayOfString (Ljava/lang/String;)Ljava/util/List; - public fun argumentValueAsString (Ljava/lang/String;)Ljava/lang/String; - public fun getAllValueArguments ()Ljava/util/Map; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;)V - public fun findAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public synthetic fun getImpl ()Ljava/lang/Object; - public fun getImpl ()Ljava/util/List; - public fun hasAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Z - public fun isEmpty ()Z - public fun iterable ()Ljava/lang/Iterable; -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/TypeElement;)V - public fun getCompanionObjectDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public fun getCompleteUnsubstitutedScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getConstructors ()Ljava/util/Collection; - public fun getDeclaredTypeParameters ()Ljava/util/List; - public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public fun getSealedSubclasses ()Ljava/util/Collection; - public fun getStaticScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getSuperTypes ()Ljava/util/Collection; - public fun getThisAsReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; - public fun getUnsubstitutedInnerClassesScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getUnsubstitutedMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getUnsubstitutedPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; - public fun isCompanionObject ()Z - public fun isData ()Z - public fun isEnumEntry ()Z - public fun isFun ()Z - public fun isInline ()Z - public fun isInner ()Z - public fun isValue ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/ExecutableElement;)V - public fun getConstructedClass ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public fun isPrimary ()Z -} - -public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/Element;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Ljavax/lang/model/element/Element; -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtilsKt { - public static final fun getEnclosingClass (Ljavax/lang/model/element/Element;)Ljavax/lang/model/element/TypeElement; - public static final fun getFqName (Ljavax/lang/model/element/Element;)Ljava/lang/String; - public static final fun getParametersFromEverywhere (Ljavax/lang/model/element/Element;)Ljava/util/List; - public static final fun getTypeParametersFromEverywhere (Ljavax/lang/model/element/Element;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V - public fun getCompanionObjectDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public fun getCompleteUnsubstitutedScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getConstructors ()Ljava/util/Collection; - public fun getDeclaredTypeParameters ()Ljava/util/List; - public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public fun getSealedSubclasses ()Ljava/util/Collection; - public fun getStaticScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getSuperTypes ()Ljava/util/Collection; - public fun getThisAsReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; - public fun getUnsubstitutedInnerClassesScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getUnsubstitutedMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getUnsubstitutedPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; - public fun isCompanionObject ()Z - public fun isData ()Z - public fun isEnumEntry ()Z - public fun isFun ()Z - public fun isInline ()Z - public fun isInner ()Z - public fun isValue ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V - public fun getAccessors ()Ljava/util/List; - public fun getAllParameters ()Ljava/util/List; - public fun getBackingField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; - public fun getDelegateField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; - public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; - public fun getType ()Larrow/meta/plugins/analysis/java/ast/types/JavaType; - public synthetic fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeParameters ()Ljava/util/List; - public fun getValueParameters ()Ljava/util/List; - public fun isConst ()Z - public fun isDelegated ()Z - public fun isLateInit ()Z - public fun isSetterProjectedOut ()Z - public fun isVar ()Z -} - -public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/ExecutableElement;)V - public fun getAllParameters ()Ljava/util/List; - public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeParameters ()Ljava/util/List; - public fun getValueParameters ()Ljava/util/List; - public fun isInfix ()Z - public fun isInline ()Z - public fun isOperator ()Z - public fun isSuspend ()Z - public fun isTailrec ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V -} - -public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/Element;)V - public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public fun isActual ()Z - public fun isExpect ()Z - public fun isExternal ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/Collection;)V - public fun getClassifierNames ()Ljava/util/Set; - public fun getContributedDescriptors (Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public fun getFunctionNames ()Ljava/util/Set; - public fun getVariableNames ()Ljava/util/Set; -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/ModuleElement;)V - public fun getPackage (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor; - public fun getStableName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getSubPackagesOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/PackageElement;)V - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V - public fun declaresDefaultValue ()Z - public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getIndex ()I - public fun getVarargElementType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun isCrossinline ()Z - public fun isNoinline ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/element/Element;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getAllParameters ()Ljava/util/List; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeParameters ()Ljava/util/List; - public fun getValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public fun getValueParameters ()Ljava/util/List; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Ljavax/lang/model/type/TypeMirror; -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/ExecutableElement;)V -} - -public final class arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/TypeParameterElement;)V - public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getIndex ()I - public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; - public fun getUpperBounds ()Ljava/util/List; - public fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public fun isCapturedFromOuterDeclaration ()Z - public fun isReified ()Z -} - -public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V - public fun getAllParameters ()Ljava/util/List; - public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeParameters ()Ljava/util/List; - public fun getValueParameters ()Ljava/util/List; -} - -public class arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor : arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/VariableElement;)V - public fun isConst ()Z - public fun isLateInit ()Z - public fun isVar ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssert : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssertExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/AssertTree;)V - public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getDetail ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssertFakeCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/AssertTree;)V - public fun getCallElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getDispatchReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public fun getExtensionReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getResultingDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeArguments ()Ljava/util/Map; - public fun getValueArguments ()Ljava/util/Map; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssertFakeDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Z)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getAllParameters ()Ljava/util/List; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public final fun getMessageParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public final fun getPredicateParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeParameters ()Ljava/util/List; - public fun getValueParameters ()Ljava/util/List; - public fun impl ()Ljava/lang/Object; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssertFakeParameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;ILjava/lang/String;Ljavax/lang/model/type/TypeMirror;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun declaresDefaultValue ()Z - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getAllParameters ()Ljava/util/List; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public fun getIndex ()I - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeParameters ()Ljava/util/List; - public fun getValueParameters ()Ljava/util/List; - public fun getVarargElementType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun impl ()Ljava/lang/Object; - public fun isConst ()Z - public fun isCrossinline ()Z - public fun isLateInit ()Z - public fun isNoinline ()Z - public fun isVar ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/AssignmentTree;)V - public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getOperationToken ()Ljava/lang/String; - public fun getOperationTokenRpr ()Ljava/lang/String; - public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaBinary : arrow/meta/plugins/analysis/java/ast/elements/JavaOperation, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/BinaryTree;)V - public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationToken ()Ljava/lang/String; - public fun getOperationTokenRpr ()Ljava/lang/String; - public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaBlock : arrow/meta/plugins/analysis/java/ast/elements/JavaBlockParent, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/BlockTree;)V -} - -public class arrow/meta/plugins/analysis/java/ast/elements/JavaBlockParent : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;Lcom/sun/source/tree/Tree;)V - public fun getFirstStatement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getImplicitReturnFromLast ()Z - public fun getStatements ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaBreak : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/BreakTree;)V - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaCall : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MethodInvocationTree;)V - public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getLambdaArguments ()Ljava/util/List; - public fun getTypeArguments ()Ljava/util/List; - public fun getValueArguments ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaCase : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/CaseTree;)V - public fun getConditions ()Ljava/util/List; - public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun isElse ()Z -} - -public class arrow/meta/plugins/analysis/java/ast/elements/JavaCatch : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/CatchTree;)V - public fun getCatchBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getCatchParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; - public fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaClass : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ClassTree;)V - public fun getAnonymousInitializers ()Ljava/util/List; - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; - public fun getCompanionObjects ()Ljava/util/List; - public fun getDeclarations ()Ljava/util/List; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; - public fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getPrimaryConstructorParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getPrimaryConstructorParameters ()Ljava/util/List; - public fun getProperties ()Ljava/util/List; - public fun getSecondaryConstructors ()Ljava/util/List; - public fun getSuperTypeListEntries ()Ljava/util/List; - public fun hasExplicitPrimaryConstructor ()Z - public fun hasPrimaryConstructor ()Z - public fun isAnnotation ()Z - public fun isData ()Z - public fun isEnum ()Z - public fun isInline ()Z - public fun isInner ()Z - public fun isInterface ()Z - public fun isLocal ()Z - public fun isSealed ()Z - public fun isTopLevel ()Z - public fun isValue ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaCompoundAssignment : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/CompoundAssignmentTree;)V - public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getOperationToken ()Ljava/lang/String; - public fun getOperationTokenRpr ()Ljava/lang/String; - public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaCompoundAssignmentRHS : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/CompoundAssignmentTree;)V - public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getOperationToken ()Ljava/lang/String; - public fun getOperationTokenRpr ()Ljava/lang/String; - public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public abstract class arrow/meta/plugins/analysis/java/ast/elements/JavaConditional : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/ExpressionTree;Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/Tree;)V - public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getThenExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaConstructor : arrow/meta/plugins/analysis/java/ast/elements/JavaMethod, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MethodTree;)V - public fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; - public fun getDelegationCall ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaConstructorCall : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/NewClassTree;)V - public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getLambdaArguments ()Ljava/util/List; - public fun getTypeArguments ()Ljava/util/List; - public fun getValueArguments ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaContinue : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ContinueTree;)V - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaDefaultValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)V - public fun getArguments ()Ljava/util/List; - public fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaDoWhile : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/DoWhileLoopTree;)V - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public class arrow/meta/plugins/analysis/java/ast/elements/JavaElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public final fun getResolvedCall ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun impl ()Lcom/sun/source/tree/Tree; - public synthetic fun impl ()Ljava/lang/Object; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public final fun type ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtilsKt { - public static final fun fqName (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;)Ljava/lang/String; - public static final fun getArgumentsFromEverywhere (Lcom/sun/source/tree/ExpressionTree;)Ljava/util/List; - public static final fun getName (Lcom/sun/source/tree/Tree;)Ljava/lang/String; - public static final fun getTypeArgumentsFromEverywhere (Lcom/sun/source/tree/ExpressionTree;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaEmptyBlock : arrow/meta/plugins/analysis/java/ast/elements/JavaBlockParent, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/EmptyStatementTree;)V -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaEnhancedFor : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/EnhancedForLoopTree;)V - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; - public fun getLoopParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; - public fun getLoopRange ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaExpressionValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)V - public fun getArguments ()Ljava/util/List; - public fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression { - public fun (Ljava/lang/String;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)V - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReferencedName ()Ljava/lang/String; - public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun impl ()Ljava/lang/Object; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public class arrow/meta/plugins/analysis/java/ast/elements/JavaFinally : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/TryTree;)V - public fun getFinalExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaFor : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThreePieceForExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ForLoopTree;)V - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getInitializer ()Ljava/util/List; - public fun getUpdate ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/IdentifierTree;)V - public fun getReferencedName ()Ljava/lang/String; - public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaIf : arrow/meta/plugins/analysis/java/ast/elements/JavaConditional { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/IfTree;)V -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaInstanceInitializer : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/BlockTree;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;)V - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; - public fun getName ()Ljava/lang/String; - public fun getParents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaInstanceOf : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/InstanceOfTree;)V - public fun getLeftHandSide ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun isNegated ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/LabeledStatementTree;)V - public fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaLambda : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/LambdaExpressionTree;)V - public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getFunctionLiteral ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun hasBlockBody ()Z - public fun hasBody ()Z - public fun hasDeclaredReturnType ()Z - public fun hasParameterSpecification ()Z - public fun isLocal ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/LiteralTree;)V -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MemberReferenceTree;)V - public fun getCallableReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getHasQuestionMarks ()Z - public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun isEmptyLHS ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaMemberSelect : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MemberSelectTree;)V - public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getLambdaArguments ()Ljava/util/List; - public fun getTypeArguments ()Ljava/util/List; - public fun getValueArguments ()Ljava/util/List; -} - -public class arrow/meta/plugins/analysis/java/ast/elements/JavaMethod : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/MethodTree;)V - public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun hasBlockBody ()Z - public fun hasBody ()Z - public fun hasDeclaredReturnType ()Z - public fun hasInitializer ()Z - public fun isLocal ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaNull : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/LiteralTree;)V -} - -public class arrow/meta/plugins/analysis/java/ast/elements/JavaOperation : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)V - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - protected final fun getOperatorName ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaParameter : arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/VariableTree;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody;)V - public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; - public fun getOwnerFunction ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody; - public fun hasDefaultValue ()Z - public fun hasValOrVar ()Z - public fun isCatchParameter ()Z - public fun isLoopParameter ()Z - public fun isMutable ()Z - public fun isVarArg ()Z -} - -public class arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/VariableTree;)V - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getText ()Ljava/lang/String; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ParenthesizedTree;)V - public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Lcom/sun/tools/javac/code/Symbol;Lcom/sun/source/tree/Tree;Ljava/util/List;Ljava/util/List;)V - public fun getCallElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getDispatchReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public fun getExtensionReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public fun getReceiverExpression ()Larrow/meta/plugins/analysis/java/ast/elements/JavaElement; - public synthetic fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getResultingDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeArguments ()Ljava/util/Map; - public fun getValueArguments ()Ljava/util/Map; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCallKt { - public static final fun resolvedCall (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;Ljava/util/List;)Larrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall; - public static synthetic fun resolvedCall$default (Lcom/sun/source/tree/Tree;Larrow/meta/plugins/analysis/java/AnalysisContext;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Larrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaReturn : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ReturnTree;)V - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getLabeledExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getReturnedExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSingleBlock : arrow/meta/plugins/analysis/java/ast/elements/JavaBlockParent, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ExpressionStatementTree;)V -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation { - public static final field Companion Larrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation$Companion; - public fun (Lcom/sun/source/tree/CompilationUnitTree;JJ)V - public fun getColumn ()I - public fun getColumnEnd ()I - public fun getLine ()I - public fun getLineContent ()Ljava/lang/String; - public fun getLineEnd ()I - public fun getPath ()Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation$Companion { - public final fun invoke (Lcom/sun/source/tree/CompilationUnitTree;JJ)Larrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSuper : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/IdentifierTree;)V - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getSuperTypeQualifier ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSwitch : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/SwitchTree;)V - public fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getEntries ()Ljava/util/List; - public fun getSubjectExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getSubjectVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SynchronizedExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/SynchronizedTree;)V - public fun getBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getSubject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTernaryConditional : arrow/meta/plugins/analysis/java/ast/elements/JavaConditional { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/ConditionalExpressionTree;)V -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaThis : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/IdentifierTree;)V - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtilsKt { - public static final fun accept (Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/TreeVisitor;Ljava/lang/Object;)Ljava/lang/Object; - public static final fun accept (Ljava/lang/Iterable;Lcom/sun/source/tree/TreeVisitor;Ljava/lang/Object;)Ljava/util/List; - public static final fun visit (Lcom/sun/source/tree/Tree;Lcom/sun/source/util/SimpleTreeVisitor;)Ljava/lang/Object; - public static final fun visitRecursively (Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/TreeVisitor;)V - public static final fun visitRecursively (Lcom/sun/source/tree/Tree;Lcom/sun/source/tree/TreeVisitor;Ljava/lang/Object;)V -} - -public class arrow/meta/plugins/analysis/java/ast/elements/JavaTry : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/TryTree;)V - public fun getCatchClauses ()Ljava/util/List; - public fun getFinallyBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection; - public fun getTryBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeCast : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/TypeCastTree;)V - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; - public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getOperationToken ()Ljava/lang/String; - public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElement : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)V - public fun getTypeArgumentsAsTypes ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/TypeParameterTree;)V - public fun getExtendsBounds ()Ljava/util/List; - public fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)V - public fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeReference : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference { - public static final field Companion Larrow/meta/plugins/analysis/java/ast/elements/JavaTypeReference$Companion; - public synthetic fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;Lkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun getTypeElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement; - public final fun getUnderlyingTree ()Lcom/sun/source/tree/Tree; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaTypeReference$Companion { - public final fun invoke (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/Tree;)Larrow/meta/plugins/analysis/java/ast/elements/JavaTypeReference; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaUnary : arrow/meta/plugins/analysis/java/ast/elements/JavaOperation, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/UnaryTree;)V - public fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public class arrow/meta/plugins/analysis/java/ast/elements/JavaValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)V - public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; - public fun isExternal ()Z - public fun isNamed ()Z - public fun isSpread ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaValueArgumentName : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)V - public fun getAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaVariable : arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/VariableDeclaration { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/VariableTree;)V - public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun hasInitializer ()Z - public fun isVar ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/JavaWhile : arrow/meta/plugins/analysis/java/ast/elements/JavaElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Lcom/sun/source/tree/WhileLoopTree;)V - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; -} - -public final class arrow/meta/plugins/analysis/java/ast/elements/RecursiveTreeVisitor : com/sun/source/util/SimpleTreeVisitor { - public fun (Lcom/sun/source/tree/TreeVisitor;)V - public synthetic fun visitAnnotatedType (Lcom/sun/source/tree/AnnotatedTypeTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitAnnotatedType (Lcom/sun/source/tree/AnnotatedTypeTree;Ljava/lang/Object;)V - public synthetic fun visitAnnotation (Lcom/sun/source/tree/AnnotationTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitAnnotation (Lcom/sun/source/tree/AnnotationTree;Ljava/lang/Object;)V - public synthetic fun visitArrayAccess (Lcom/sun/source/tree/ArrayAccessTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitArrayAccess (Lcom/sun/source/tree/ArrayAccessTree;Ljava/lang/Object;)V - public synthetic fun visitArrayType (Lcom/sun/source/tree/ArrayTypeTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitArrayType (Lcom/sun/source/tree/ArrayTypeTree;Ljava/lang/Object;)V - public synthetic fun visitAssert (Lcom/sun/source/tree/AssertTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitAssert (Lcom/sun/source/tree/AssertTree;Ljava/lang/Object;)V - public synthetic fun visitAssignment (Lcom/sun/source/tree/AssignmentTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitAssignment (Lcom/sun/source/tree/AssignmentTree;Ljava/lang/Object;)V - public synthetic fun visitBinary (Lcom/sun/source/tree/BinaryTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitBinary (Lcom/sun/source/tree/BinaryTree;Ljava/lang/Object;)V - public synthetic fun visitBlock (Lcom/sun/source/tree/BlockTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitBlock (Lcom/sun/source/tree/BlockTree;Ljava/lang/Object;)V - public synthetic fun visitBreak (Lcom/sun/source/tree/BreakTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitBreak (Lcom/sun/source/tree/BreakTree;Ljava/lang/Object;)V - public synthetic fun visitCase (Lcom/sun/source/tree/CaseTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitCase (Lcom/sun/source/tree/CaseTree;Ljava/lang/Object;)V - public synthetic fun visitCatch (Lcom/sun/source/tree/CatchTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitCatch (Lcom/sun/source/tree/CatchTree;Ljava/lang/Object;)V - public synthetic fun visitClass (Lcom/sun/source/tree/ClassTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitClass (Lcom/sun/source/tree/ClassTree;Ljava/lang/Object;)V - public synthetic fun visitCompilationUnit (Lcom/sun/source/tree/CompilationUnitTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitCompilationUnit (Lcom/sun/source/tree/CompilationUnitTree;Ljava/lang/Object;)V - public synthetic fun visitCompoundAssignment (Lcom/sun/source/tree/CompoundAssignmentTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitCompoundAssignment (Lcom/sun/source/tree/CompoundAssignmentTree;Ljava/lang/Object;)V - public synthetic fun visitConditionalExpression (Lcom/sun/source/tree/ConditionalExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitConditionalExpression (Lcom/sun/source/tree/ConditionalExpressionTree;Ljava/lang/Object;)V - public synthetic fun visitContinue (Lcom/sun/source/tree/ContinueTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitContinue (Lcom/sun/source/tree/ContinueTree;Ljava/lang/Object;)V - public synthetic fun visitDoWhileLoop (Lcom/sun/source/tree/DoWhileLoopTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitDoWhileLoop (Lcom/sun/source/tree/DoWhileLoopTree;Ljava/lang/Object;)V - public synthetic fun visitEmptyStatement (Lcom/sun/source/tree/EmptyStatementTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitEmptyStatement (Lcom/sun/source/tree/EmptyStatementTree;Ljava/lang/Object;)V - public synthetic fun visitEnhancedForLoop (Lcom/sun/source/tree/EnhancedForLoopTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitEnhancedForLoop (Lcom/sun/source/tree/EnhancedForLoopTree;Ljava/lang/Object;)V - public synthetic fun visitErroneous (Lcom/sun/source/tree/ErroneousTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitErroneous (Lcom/sun/source/tree/ErroneousTree;Ljava/lang/Object;)V - public synthetic fun visitExports (Lcom/sun/source/tree/ExportsTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitExports (Lcom/sun/source/tree/ExportsTree;Ljava/lang/Object;)V - public synthetic fun visitExpressionStatement (Lcom/sun/source/tree/ExpressionStatementTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitExpressionStatement (Lcom/sun/source/tree/ExpressionStatementTree;Ljava/lang/Object;)V - public synthetic fun visitForLoop (Lcom/sun/source/tree/ForLoopTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitForLoop (Lcom/sun/source/tree/ForLoopTree;Ljava/lang/Object;)V - public synthetic fun visitIdentifier (Lcom/sun/source/tree/IdentifierTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitIdentifier (Lcom/sun/source/tree/IdentifierTree;Ljava/lang/Object;)V - public synthetic fun visitIf (Lcom/sun/source/tree/IfTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitIf (Lcom/sun/source/tree/IfTree;Ljava/lang/Object;)V - public synthetic fun visitImport (Lcom/sun/source/tree/ImportTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitImport (Lcom/sun/source/tree/ImportTree;Ljava/lang/Object;)V - public synthetic fun visitInstanceOf (Lcom/sun/source/tree/InstanceOfTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitInstanceOf (Lcom/sun/source/tree/InstanceOfTree;Ljava/lang/Object;)V - public synthetic fun visitIntersectionType (Lcom/sun/source/tree/IntersectionTypeTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitIntersectionType (Lcom/sun/source/tree/IntersectionTypeTree;Ljava/lang/Object;)V - public synthetic fun visitLabeledStatement (Lcom/sun/source/tree/LabeledStatementTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitLabeledStatement (Lcom/sun/source/tree/LabeledStatementTree;Ljava/lang/Object;)V - public synthetic fun visitLambdaExpression (Lcom/sun/source/tree/LambdaExpressionTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitLambdaExpression (Lcom/sun/source/tree/LambdaExpressionTree;Ljava/lang/Object;)V - public synthetic fun visitLiteral (Lcom/sun/source/tree/LiteralTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitLiteral (Lcom/sun/source/tree/LiteralTree;Ljava/lang/Object;)V - public synthetic fun visitMemberReference (Lcom/sun/source/tree/MemberReferenceTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitMemberReference (Lcom/sun/source/tree/MemberReferenceTree;Ljava/lang/Object;)V - public synthetic fun visitMemberSelect (Lcom/sun/source/tree/MemberSelectTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitMemberSelect (Lcom/sun/source/tree/MemberSelectTree;Ljava/lang/Object;)V - public synthetic fun visitMethod (Lcom/sun/source/tree/MethodTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitMethod (Lcom/sun/source/tree/MethodTree;Ljava/lang/Object;)V - public synthetic fun visitMethodInvocation (Lcom/sun/source/tree/MethodInvocationTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitMethodInvocation (Lcom/sun/source/tree/MethodInvocationTree;Ljava/lang/Object;)V - public synthetic fun visitModifiers (Lcom/sun/source/tree/ModifiersTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitModifiers (Lcom/sun/source/tree/ModifiersTree;Ljava/lang/Object;)V - public synthetic fun visitModule (Lcom/sun/source/tree/ModuleTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitModule (Lcom/sun/source/tree/ModuleTree;Ljava/lang/Object;)V - public synthetic fun visitNewArray (Lcom/sun/source/tree/NewArrayTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitNewArray (Lcom/sun/source/tree/NewArrayTree;Ljava/lang/Object;)V - public synthetic fun visitNewClass (Lcom/sun/source/tree/NewClassTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitNewClass (Lcom/sun/source/tree/NewClassTree;Ljava/lang/Object;)V - public synthetic fun visitOpens (Lcom/sun/source/tree/OpensTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitOpens (Lcom/sun/source/tree/OpensTree;Ljava/lang/Object;)V - public synthetic fun visitOther (Lcom/sun/source/tree/Tree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitOther (Lcom/sun/source/tree/Tree;Ljava/lang/Object;)V - public synthetic fun visitPackage (Lcom/sun/source/tree/PackageTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitPackage (Lcom/sun/source/tree/PackageTree;Ljava/lang/Object;)V - public synthetic fun visitParameterizedType (Lcom/sun/source/tree/ParameterizedTypeTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitParameterizedType (Lcom/sun/source/tree/ParameterizedTypeTree;Ljava/lang/Object;)V - public synthetic fun visitParenthesized (Lcom/sun/source/tree/ParenthesizedTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitParenthesized (Lcom/sun/source/tree/ParenthesizedTree;Ljava/lang/Object;)V - public synthetic fun visitPrimitiveType (Lcom/sun/source/tree/PrimitiveTypeTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitPrimitiveType (Lcom/sun/source/tree/PrimitiveTypeTree;Ljava/lang/Object;)V - public synthetic fun visitProvides (Lcom/sun/source/tree/ProvidesTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitProvides (Lcom/sun/source/tree/ProvidesTree;Ljava/lang/Object;)V - public synthetic fun visitRequires (Lcom/sun/source/tree/RequiresTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitRequires (Lcom/sun/source/tree/RequiresTree;Ljava/lang/Object;)V - public synthetic fun visitReturn (Lcom/sun/source/tree/ReturnTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitReturn (Lcom/sun/source/tree/ReturnTree;Ljava/lang/Object;)V - public synthetic fun visitSwitch (Lcom/sun/source/tree/SwitchTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitSwitch (Lcom/sun/source/tree/SwitchTree;Ljava/lang/Object;)V - public synthetic fun visitSynchronized (Lcom/sun/source/tree/SynchronizedTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitSynchronized (Lcom/sun/source/tree/SynchronizedTree;Ljava/lang/Object;)V - public synthetic fun visitThrow (Lcom/sun/source/tree/ThrowTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitThrow (Lcom/sun/source/tree/ThrowTree;Ljava/lang/Object;)V - public synthetic fun visitTry (Lcom/sun/source/tree/TryTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitTry (Lcom/sun/source/tree/TryTree;Ljava/lang/Object;)V - public synthetic fun visitTypeCast (Lcom/sun/source/tree/TypeCastTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitTypeCast (Lcom/sun/source/tree/TypeCastTree;Ljava/lang/Object;)V - public synthetic fun visitTypeParameter (Lcom/sun/source/tree/TypeParameterTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitTypeParameter (Lcom/sun/source/tree/TypeParameterTree;Ljava/lang/Object;)V - public synthetic fun visitUnary (Lcom/sun/source/tree/UnaryTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitUnary (Lcom/sun/source/tree/UnaryTree;Ljava/lang/Object;)V - public synthetic fun visitUnionType (Lcom/sun/source/tree/UnionTypeTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitUnionType (Lcom/sun/source/tree/UnionTypeTree;Ljava/lang/Object;)V - public synthetic fun visitUses (Lcom/sun/source/tree/UsesTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitUses (Lcom/sun/source/tree/UsesTree;Ljava/lang/Object;)V - public synthetic fun visitVariable (Lcom/sun/source/tree/VariableTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitVariable (Lcom/sun/source/tree/VariableTree;Ljava/lang/Object;)V - public synthetic fun visitWhileLoop (Lcom/sun/source/tree/WhileLoopTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitWhileLoop (Lcom/sun/source/tree/WhileLoopTree;Ljava/lang/Object;)V - public synthetic fun visitWildcard (Lcom/sun/source/tree/WildcardTree;Ljava/lang/Object;)Ljava/lang/Object; - public fun visitWildcard (Lcom/sun/source/tree/WildcardTree;Ljava/lang/Object;)V -} - -public final class arrow/meta/plugins/analysis/java/ast/types/JavaType : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/type/TypeMirror;)V - public fun compareTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)I - public synthetic fun compareTo (Ljava/lang/Object;)I - public fun getArguments ()Ljava/util/List; - public fun getDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public fun getUnwrappedNotNullableType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun intersectIfPossible (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun isAnyOrNullableAny ()Z - public fun isBoolean ()Z - public fun isByte ()Z - public fun isChar ()Z - public fun isDouble ()Z - public fun isEqualTo (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Z - public fun isFloat ()Z - public fun isInt ()Z - public fun isLong ()Z - public fun isMarkedNullable ()Z - public fun isNullable ()Z - public fun isShort ()Z - public fun isString ()Z - public fun isSubtypeOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type;)Z - public fun isTypeParameter ()Z - public fun isUnsignedNumberType ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/TypeElement;)V - public fun getDeclarationDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; - public fun getParameters ()Ljava/util/List; - public fun getSupertypes ()Ljava/util/Collection; - public fun isDenotable ()Z - public fun isFinal ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/element/TypeParameterElement;)V - public fun getDeclarationDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; - public fun getParameters ()Ljava/util/List; - public fun getSupertypes ()Ljava/util/Collection; - public fun isDenotable ()Z - public fun isFinal ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection { - public fun (Larrow/meta/plugins/analysis/java/AnalysisContext;Ljavax/lang/model/type/TypeMirror;)V - public fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun isStarProjection ()Z -} - -public final class arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtilsKt { - public static final fun allSupertypes (Ljavax/lang/model/type/TypeMirror;Larrow/meta/plugins/analysis/java/AnalysisContext;)Ljava/util/Set; - public static final fun visit (Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/util/SimpleTypeVisitor9;)Ljava/lang/Object; -} - diff --git a/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts deleted file mode 100644 index 41e8bcfa1..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/build.gradle.kts +++ /dev/null @@ -1,33 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - id(libs.plugins.kotlin.jvm.get().pluginId) - alias(libs.plugins.arrowGradleConfig.publish) - alias(libs.plugins.arrowGradleConfig.versioning) - alias(libs.plugins.kotlin.binaryCompatibilityValidator) -} - -kotlin { - explicitApi = null - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) - } -} - -dependencies { - compileOnly(libs.kotlin.stdlibJDK8) - implementation(libs.arrowMeta) - implementation(projects.arrowAnalysisTypes) - implementation(projects.arrowAnalysisCommon) - api(files(org.gradle.internal.jvm.Jvm.current().toolsJar)) - - testImplementation(libs.kotlin.stdlibJDK8) - testImplementation(libs.junit) - testImplementation(libs.javaCompileTesting) - testImplementation(libs.arrowMetaTest) - testRuntimeOnly(libs.arrowMeta) - testRuntimeOnly(projects.arrowAnalysisTypes) - testRuntimeOnly(projects.arrowAnalysisJavaPlugin) - testRuntimeOnly(projects.arrowAnalysisTypes) - testRuntimeOnly(libs.arrowCore) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/gradle.properties b/arrow-libs/analysis/analysis/java-plugin/gradle.properties deleted file mode 100644 index e6cdaf6bb..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Maven publishing configuration -POM_NAME=Arrow Analysis Java Compiler Plugin -POM_ARTIFACT_ID=arrow-analysis-java-plugin -POM_PACKAGING=jar - -pom.name=Arrow Analysis Java Compiler Plugin diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisContext.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisContext.kt deleted file mode 100644 index 5570d229d..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisContext.kt +++ /dev/null @@ -1,56 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java - -import com.sun.source.tree.CompilationUnitTree -import com.sun.tools.javac.api.BasicJavacTask -import com.sun.tools.javac.code.Symtab -import com.sun.tools.javac.comp.Modules -import com.sun.tools.javac.tree.JCTree -import com.sun.tools.javac.tree.TreeCopier -import com.sun.tools.javac.tree.TreeMaker -import com.sun.tools.javac.util.Context -import com.sun.tools.javac.util.JCDiagnostic -import com.sun.tools.javac.util.JavacMessages -import com.sun.tools.javac.util.Log -import com.sun.tools.javac.util.Names -import javax.lang.model.util.Elements -import javax.lang.model.util.Types - -public open class AnalysisContextWithoutResolver( - public val context: Context, - public val types: Types, - public val elements: Elements -) { - public val logger: Log = Log.instance(context) - public val messages: JavacMessages = - JavacMessages.instance(context).apply { add { AnalysisMessages() } } - public val diagnostics: JCDiagnostic.Factory = JCDiagnostic.Factory(messages, "arrow-analysis") - public val symbolTable: Symtab = Symtab.instance(context) - public val modules: Modules = Modules.instance(context) - public val names: Names = Names.instance(context) - - public fun copy(t: JCTree): JCTree { - val maker = TreeMaker.instance(context) - val copier = TreeCopier(maker) - return copier.copy(t) - } - - public companion object { - public operator fun invoke(task: BasicJavacTask): AnalysisContextWithoutResolver = - AnalysisContextWithoutResolver(task.context, task.types, task.elements) - } -} - -public class AnalysisContext( - context: Context, - types: Types, - elements: Elements, - public val unit: CompilationUnitTree, - public val resolver: Resolver -) : AnalysisContextWithoutResolver(context, types, elements) { - public companion object { - public operator fun invoke(task: BasicJavacTask, unit: CompilationUnitTree): AnalysisContext = - AnalysisContext(task.context, task.types, task.elements, unit, Resolver(task, unit)) - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt deleted file mode 100644 index 8c51478cc..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaPlugin.kt +++ /dev/null @@ -1,234 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java - -import arrow.meta.plugins.analysis.java.ast.JavaResolutionContext -import arrow.meta.plugins.analysis.java.ast.addAnn -import arrow.meta.plugins.analysis.java.ast.annArrays -import arrow.meta.plugins.analysis.java.ast.annStrings -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaFunctionDescriptor -import arrow.meta.plugins.analysis.java.ast.elements.JavaElement -import arrow.meta.plugins.analysis.java.ast.elements.JavaMethod -import arrow.meta.plugins.analysis.java.ast.elements.OurTreeVisitor -import arrow.meta.plugins.analysis.java.ast.elements.visitRecursively -import arrow.meta.plugins.analysis.java.ast.hintsPackage -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.modelCautious -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.check.checkDeclarationConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.collectConstraintsFromAnnotations -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.collectConstraintsFromDSL -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.findDescriptorFromLocalLaw -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.DeclarationConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.isALaw -import arrow.meta.plugins.analysis.phases.analysis.solver.search.getConstraintsFor -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import arrow.meta.plugins.analysis.smt.fieldNames -import com.sun.source.tree.CompilationUnitTree -import com.sun.source.tree.MethodTree -import com.sun.source.tree.Tree -import com.sun.source.util.JavacTask -import com.sun.source.util.Plugin -import com.sun.source.util.TaskEvent -import com.sun.tools.javac.api.BasicJavacTask -import com.sun.tools.javac.main.JavaCompiler -import com.sun.tools.javac.tree.JCTree -import com.sun.tools.javac.util.Pair -import java.util.LinkedList -import javax.lang.model.element.Element -import javax.tools.JavaFileManager -import javax.tools.StandardLocation - -/* -javac does not guarantee any order between the different files in a project, -only that for each file you'll get a set of events PARSE, ENTER, ANALYZE, GENERATE. -This is not great, because we need to process the methods in the ANALYZE stage, -or otherwise the function calls cannot be resolved to their origins -(so we don't know whether a certain call is indeed to our `pre` function or to any -other function with the same name). Furthermore, we need to make the (SMT) checks -in the ANALYZE stage too, because in the GENERATE phase most of the nice structure -in the code has already been lowered (for example, lambdas have already been -turned into classes). - -javac does guarantee, though, that annotation processors will be run before any -other PARSE events, so this seems a way out this mess. Alas, at that point the -function calls cannot be resolved yet (people often say that annotation processors -don't have access to the function body, which is not entirely correct, but in any -case the information we need is not there.) - -Our solution is really dirty, but it works. We introduce an annotation processor -[AnalysisJavaProcessor] whose only task is to gather the elements that are read by -the compiler, but does nothing at that point. Then, once we are past the ANALYZE -stage (but before GENERATE), we process that list. javac uses a lot of mutability, -and in particular the bodies of the functions we gathered will now contain all the -information we need! Our final hack is to introduce an [executeOnce] function to -ensure that the processing only happens once in the entire run of the analyzer. -*/ - -public class AnalysisJavaPlugin : Plugin { - override fun getName(): String = NAME - - private var stage1And2Done = false - - override fun init(mtask: JavacTask?, vararg argsAsString: String?) { - (mtask as? BasicJavacTask)?.let { task -> - val baseDir = parseArgs(argsAsString).getOrDefault("baseDir", System.getProperty("user.dir")) - val createOutputFile = { s: String -> - val manager = task.context.get(JavaFileManager::class.java) - manager.getFileForOutput(StandardLocation.SOURCE_OUTPUT, "", s, null).openWriter() - } - val solverState = SolverState(baseDir, createOutputFile) - - task.after(TaskEvent.Kind.ANALYZE) { _, unit: CompilationUnitTree -> - task.context.get(AnalysisJavaProcessorKey)?.let { todo -> - val ctx = AnalysisContext(task, unit) - val resolutionContext = JavaResolutionContext(solverState, ctx) - - if (!stage1And2Done) { - stage1And2Done = true - // stage 1: collect constraints from DSL - solverState.collectFromDsl(todo, ctx, resolutionContext) - // stage 2: collect constraints from annotations - solverState.collectFromAnnotations(todo, ctx, resolutionContext) - } - // stage 3: check the constraints - solverState.checkConstraints(unit, ctx, resolutionContext) - solverState.notifyModuleProcessed(ctx.modules.defaultModule.model(ctx)) - } - } - } - } - - private fun parseArgs(args: Array): Map = - args - .filterNotNull() - .mapNotNull { - if (it.contains('=')) { - val r = it.split('=') - kotlin.Pair(r[0], r[1]) - } else { - null - } - } - .toMap() - - private fun SolverState.collectFromDsl( - todo: List, - ctx: AnalysisContext, - resolutionContext: JavaResolutionContext - ) { - val obtainedPackages = mutableListOf() - todo.forEach { descriptor -> - ctx.resolver - .tree(descriptor) - ?.visitRecursively( - object : OurTreeVisitor(Unit) { - override fun visitMethod(node: MethodTree, p: Unit?) { - val decl: JavaMethod = node.model(ctx) - ctx.resolver.resolve(node)?.let { elt -> - val descr: JavaFunctionDescriptor = elt.model(ctx) - // stage 1a: collect the constraints - decl.collectConstraintsFromDSL(this@collectFromDsl, resolutionContext, descr) - // stage 1b: add the corresponding annotations - getConstraintsFor(descr)?.let { constraints -> - addConstraintsToDescriptor(node, descr, constraints, ctx, resolutionContext) - obtainedPackages.add(descr.containingPackage) - } - } - } - } - ) - } - // stage 1c: write the final annotation - if (obtainedPackages.isNotEmpty()) { - val compiler = JavaCompiler.instance(ctx.context) - val (klassEnv, klass) = ctx.hintsPackage(obtainedPackages) - compiler.generate(LinkedList(listOf(Pair(klassEnv, klass)))) - } - } - - private fun SolverState.addConstraintsToDescriptor( - node: MethodTree, - descr: JavaFunctionDescriptor, - constraints: DeclarationConstraints, - ctx: AnalysisContext, - resolutionContext: JavaResolutionContext - ) = - (node.modifiers as? JCTree.JCModifiers)?.let { modifiers -> - addConstraints(modifiers, "arrow.analysis.Pre", constraints.pre, ctx) - addConstraints(modifiers, "arrow.analysis.Post", constraints.post, ctx) - if (descr.isALaw()) { - findDescriptorFromLocalLaw(descr, resolutionContext)?.let { subject -> - addSubjectConstraint(modifiers, subject.fqNameSafe.name, ctx) - } - } - } - - private fun SolverState.addConstraints( - modifiers: JCTree.JCModifiers, - type: String, - constraints: List, - ctx: AnalysisContext - ) { - if (constraints.isNotEmpty()) { - modifiers.addAnn { - ctx.annArrays( - type, - constraints.map { it.msg }, - constraints.map { it.formula.toString() }, - constraints.flatMap { - solver.formulaManager.fieldNames(it.formula).map { fld -> fld.first }.toSet() - } - ) - } - } - } - - private fun addSubjectConstraint( - modifiers: JCTree.JCModifiers, - subject: String, - ctx: AnalysisContext - ): Unit = modifiers.addAnn { ctx.annStrings("arrow.analysis.Subject", subject) } - - private fun SolverState.collectFromAnnotations( - todo: List, - ctx: AnalysisContext, - resolutionContext: JavaResolutionContext - ): Unit = - ctx.elements.allModuleElements.forEach { module -> - collectConstraintsFromAnnotations( - todo.map { it.model(ctx) }, - module.model(ctx), - resolutionContext - ) - } - - private fun SolverState.checkConstraints( - unit: CompilationUnitTree, - ctx: AnalysisContext, - resolutionContext: JavaResolutionContext - ) { - if (!hadParseErrors()) { - unit.visitRecursively( - object : OurTreeVisitor(Unit) { - override fun defaultAction(node: Tree, p: Unit?) { - val decl: JavaElement? = node.modelCautious(ctx) - if (decl is Declaration) { - ctx.resolver.resolve(node)?.let { elt -> - val descr: JavaDescriptor = elt.model(ctx) - checkDeclarationConstraints(resolutionContext, decl, descr) - } - } - } - } - ) - } - } - - public companion object { - public const val NAME: String = "ArrowAnalysisJavaPlugin" - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaProcessor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaProcessor.kt deleted file mode 100644 index 23796bbc5..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisJavaProcessor.kt +++ /dev/null @@ -1,52 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java - -import com.sun.tools.javac.processing.JavacProcessingEnvironment -import com.sun.tools.javac.util.Context -import javax.annotation.processing.Completion -import javax.annotation.processing.ProcessingEnvironment -import javax.annotation.processing.Processor -import javax.annotation.processing.RoundEnvironment -import javax.lang.model.SourceVersion -import javax.lang.model.element.AnnotationMirror -import javax.lang.model.element.Element -import javax.lang.model.element.ExecutableElement -import javax.lang.model.element.TypeElement - -// The ultimate HACK: all elements of this class are equal across ClassLoaders!! -// This is needed for the next step to actually find the list of elements -public object AnalysisJavaProcessorKey : Context.Key>() { - override fun equals(other: Any?): Boolean { - return other?.javaClass?.name == "arrow.meta.plugins.analysis.java.AnalysisJavaProcessorKey" - } - override fun hashCode(): Int = 12345 -} - -public class AnalysisJavaProcessor : Processor { - - public val todo: MutableList = mutableListOf() - - override fun getSupportedOptions(): MutableSet = mutableSetOf() - override fun getSupportedAnnotationTypes(): MutableSet = mutableSetOf("*") - override fun getSupportedSourceVersion(): SourceVersion = SourceVersion.latestSupported() - - override fun init(processingEnv: ProcessingEnvironment) { - (processingEnv as? JavacProcessingEnvironment)?.context?.put(AnalysisJavaProcessorKey, todo) - } - - override fun process( - annotations: MutableSet, - roundEnv: RoundEnvironment - ): Boolean { - todo.addAll(roundEnv.rootElements) - return false - } - - override fun getCompletions( - element: Element?, - annotation: AnnotationMirror?, - member: ExecutableElement?, - userText: String? - ): MutableIterable = mutableListOf() -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisMessages.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisMessages.kt deleted file mode 100644 index 1aef00109..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/AnalysisMessages.kt +++ /dev/null @@ -1,50 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java - -import java.util.ListResourceBundle - -@Suppress("unused") -public class AnalysisMessages : ListResourceBundle() { - - public companion object { - public const val InconsistentBodyPre: String = "inconsistent_body_pre" - public const val UnsatBodyPost: String = "unsat_body_post" - public const val UnsatCallPre: String = "unsat_call_pre" - public const val InconsistentCallPost: String = "inconsistent_call_post" - public const val InconsistentConditions: String = "inconsistent_conditions" - public const val InconsistentInvariants: String = "inconsistent_invariants" - public const val UnsatInvariants: String = "unsat_invariants" - public const val LiskovProblem: String = "liskov_problem" - public const val ErrorParsingPredicate: String = "error_parsing_predicate" - public const val WarningParsingPredicate: String = "warning_parsing_predicate" - public const val UnsupportedElement: String = "unsupported_element" - public const val AnalysisException: String = "analysis_exception" - - public val Errors: List = - listOf( - InconsistentBodyPre, - UnsatBodyPost, - UnsatCallPre, - InconsistentInvariants, - UnsatInvariants, - LiskovProblem, - ErrorParsingPredicate, - AnalysisException - ) - - public val Warnings: List = - listOf( - InconsistentCallPost, - InconsistentConditions, - UnsupportedElement, - WarningParsingPredicate - ) - } - - // "err" and "warn" come from [DiagnosticType.key] - override fun getContents(): Array> = - (Errors.map> { arrayOf("arrow-analysis.err.$it", "{0}") } + - Warnings.map> { arrayOf("arrow-analysis.warn.$it", "{0}") }) - .toTypedArray() -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/Resolver.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/Resolver.kt deleted file mode 100644 index 880dd6a09..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/Resolver.kt +++ /dev/null @@ -1,50 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java - -import com.sun.source.tree.CompilationUnitTree -import com.sun.source.tree.Tree -import com.sun.source.util.TreePath -import com.sun.source.util.Trees -import javax.lang.model.element.Element -import javax.lang.model.type.TypeMirror -import javax.tools.JavaCompiler - -public class Resolver(task: JavaCompiler.CompilationTask, private val unit: CompilationUnitTree) { - private val trees: Trees = Trees.instance(task) - - public val topElement: Element - get() = trees.getElement(TreePath(unit)) - - public fun path(tree: Tree): TreePath = TreePath.getPath(unit, tree) - public fun resolve(tree: Tree): Element? = trees.getElement(path(tree)) - public fun resolveType(tree: Tree): TypeMirror? = trees.getTypeMirror(path(tree)) - public fun tree(element: Element): Tree? = trees.getTree(element) - public fun parent(tree: Tree): Tree? = path(tree).parentPath.leaf - - public fun positionOf(tree: Tree): Pair = - trees.sourcePositions.getStartPosition(unit, tree) to - trees.sourcePositions.getEndPosition(unit, tree) - - public fun parentTrees(tree: Tree): Iterable { - val result = mutableListOf() - var current = path(tree).parentPath - while (current != null) { - result.add(current.leaf) - current = current.parentPath - } - return result.toList() - } - - // this is faster than calling map over parentTrees, - // because then we need to reconstruct each TreePath - public fun parentElements(tree: Tree): Iterable { - val result = mutableListOf() - var current = path(tree).parentPath - while (current != null) { - result.add(trees.getElement(current)) - current = current.parentPath - } - return result.toList() - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/TaskListener.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/TaskListener.kt deleted file mode 100644 index 991a902b7..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/TaskListener.kt +++ /dev/null @@ -1,45 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java - -import com.sun.source.tree.CompilationUnitTree -import com.sun.source.util.JavacTask -import com.sun.source.util.TaskEvent -import com.sun.source.util.TaskListener - -public abstract class PerKindTaskListener : TaskListener { - override fun finished(e: TaskEvent?): Unit { - when (e?.kind) { - TaskEvent.Kind.PARSE -> afterParse(e) - TaskEvent.Kind.ENTER -> afterEnter(e) - TaskEvent.Kind.ANALYZE -> afterAnalyze(e) - TaskEvent.Kind.GENERATE -> afterGenerate(e) - else -> {} - } - } - - public fun afterParse(e: TaskEvent): Unit {} - public fun afterEnter(e: TaskEvent): Unit {} - public fun afterAnalyze(e: TaskEvent): Unit {} - public fun afterGenerate(e: TaskEvent): Unit {} -} - -public fun JavacTask.before(kind: TaskEvent.Kind, run: (TaskEvent, CompilationUnitTree) -> Unit) { - addTaskListener( - object : TaskListener { - override fun started(e: TaskEvent?) { - if (e?.kind == kind) run(e, e.compilationUnit) - } - } - ) -} - -public fun JavacTask.after(kind: TaskEvent.Kind, run: (TaskEvent, CompilationUnitTree) -> Unit) { - addTaskListener( - object : TaskListener { - override fun finished(e: TaskEvent?): Unit { - if (e?.kind == kind) run(e, e.compilationUnit) - } - } - ) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/AnnotationUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/AnnotationUtils.kt deleted file mode 100644 index d9e370e01..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/AnnotationUtils.kt +++ /dev/null @@ -1,113 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import com.sun.tools.javac.code.Flags -import com.sun.tools.javac.code.Scope -import com.sun.tools.javac.code.Symbol -import com.sun.tools.javac.comp.AttrContext -import com.sun.tools.javac.comp.Env -import com.sun.tools.javac.tree.JCTree -import com.sun.tools.javac.tree.TreeMaker -import java.util.UUID - -public fun JCTree.JCModifiers.addAnn(ann: JCTree.JCAnnotation) { - this.annotations = this.annotations.prepend(ann) -} - -public fun JCTree.JCModifiers.addAnn(ann: () -> JCTree.JCAnnotation) { - addAnn(ann()) -} - -public fun AnalysisContext.annStrings(type: String, vararg args: String): JCTree.JCAnnotation { - val factory = TreeMaker.instance(context) - return factory.Annotation(ty(type), args.map { factory.Literal(it) }.javac()) -} - -public fun AnalysisContext.annArrays(type: String, vararg args: List): JCTree.JCAnnotation { - val factory = TreeMaker.instance(context) - return factory.Annotation( - ty(type), - args - .map { strings -> factory.NewArray(null, null, strings.map { factory.Literal(it) }.javac()) } - .javac() - ) -} - -private fun AnalysisContext.ty(type: String): JCTree.JCExpression { - val factory = TreeMaker.instance(context) - return factory.Type(symbolTable.getClass(modules.defaultModule, names.fromString(type)).type) -} - -public fun AnalysisContext.hintsPackage( - hints: List -): Pair, JCTree.JCClassDecl> { - val factory = TreeMaker.instance(context) - - // we need to set up the symbols correctly - // this has been hacked by inspecting the debug trace - symbolTable.unnamedModule.opens = emptyJavacList() - val pkgName = - Symbol.PackageSymbol(names.fromString("arrow.analysis.hints"), symbolTable.unnamedModule) - val pkg = factory.PackageDecl(emptyJavacList(), factory.Ident(pkgName)) - val klass = hintsClass(hints) - val klassName = Symbol.ClassSymbol(Flags.PUBLIC.toLong(), klass.simpleName, pkgName) - klassName.members_field = Scope.WriteableScope.create(klassName) - klass.sym = klassName - val unit = factory.TopLevel(javacList(pkg, klass)) - - // hack taken from [com.sun.tools.javac.comp.Enter] - val predefClassDef = - factory.ClassDef( - factory.Modifiers(Flags.PUBLIC.toLong()), - symbolTable.predefClass.name, - emptyJavacList(), - null, - emptyJavacList(), - emptyJavacList() - ) - predefClassDef.sym = symbolTable.predefClass - - val unitEnv = Env(unit, AttrContext()) - val pkgEnv = Env(pkg, AttrContext()) - pkgEnv.toplevel = unit - pkgEnv.outer = unitEnv - pkgEnv.enclClass = predefClassDef - val klassEnv = Env(klass, AttrContext()) - klassEnv.toplevel = unit - klassEnv.outer = unitEnv - klassEnv.enclClass = predefClassDef - - return Pair(klassEnv, klass) -} - -public fun AnalysisContext.hintsClass(hints: List): JCTree.JCClassDecl { - val factory = TreeMaker.instance(context) - val annotations = - annStrings("arrow.analysis.PackagesWithLaws", *hints.map { it.name }.toTypedArray()) - val modifiers = factory.Modifiers(Flags.PUBLIC.toLong(), javacList(annotations)) - val uuid = UUID.randomUUID().toString().replace('-', '_') - val className = "hints_$uuid" - return factory.ClassDef( - modifiers, - names.fromString(className), - emptyJavacList(), - null, - emptyJavacList(), - emptyJavacList() - ) -} - -private fun emptyJavacList(): com.sun.tools.javac.util.List = javacList() - -private inline fun Collection.javac(): com.sun.tools.javac.util.List = - javacList(this) - -private inline fun javacList( - elements: Collection -): com.sun.tools.javac.util.List = javacList(*elements.toTypedArray()) - -private fun javacList(vararg elements: A): com.sun.tools.javac.util.List = - com.sun.tools.javac.util.List.from(elements) diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt deleted file mode 100644 index c9911aff1..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaInterpreter.kt +++ /dev/null @@ -1,245 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE", "UNCHECKED_CAST") - -package arrow.meta.plugins.analysis.java.ast - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaClassDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaConstructorDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaEnumConstantDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaFieldDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaLocalVariableDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaModuleDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaPackageDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaParameterDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaSimpleFunctionDescriptor -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaTypeParameterDescriptor -import arrow.meta.plugins.analysis.java.ast.elements.JavaAssert -import arrow.meta.plugins.analysis.java.ast.elements.JavaAssignment -import arrow.meta.plugins.analysis.java.ast.elements.JavaBinary -import arrow.meta.plugins.analysis.java.ast.elements.JavaBlock -import arrow.meta.plugins.analysis.java.ast.elements.JavaBreak -import arrow.meta.plugins.analysis.java.ast.elements.JavaCall -import arrow.meta.plugins.analysis.java.ast.elements.JavaCase -import arrow.meta.plugins.analysis.java.ast.elements.JavaCatch -import arrow.meta.plugins.analysis.java.ast.elements.JavaClass -import arrow.meta.plugins.analysis.java.ast.elements.JavaConstructor -import arrow.meta.plugins.analysis.java.ast.elements.JavaConstructorCall -import arrow.meta.plugins.analysis.java.ast.elements.JavaContinue -import arrow.meta.plugins.analysis.java.ast.elements.JavaDoWhile -import arrow.meta.plugins.analysis.java.ast.elements.JavaElement -import arrow.meta.plugins.analysis.java.ast.elements.JavaEmptyBlock -import arrow.meta.plugins.analysis.java.ast.elements.JavaEnhancedFor -import arrow.meta.plugins.analysis.java.ast.elements.JavaFor -import arrow.meta.plugins.analysis.java.ast.elements.JavaIdentifier -import arrow.meta.plugins.analysis.java.ast.elements.JavaIf -import arrow.meta.plugins.analysis.java.ast.elements.JavaInstanceOf -import arrow.meta.plugins.analysis.java.ast.elements.JavaLabeled -import arrow.meta.plugins.analysis.java.ast.elements.JavaLambda -import arrow.meta.plugins.analysis.java.ast.elements.JavaLiteral -import arrow.meta.plugins.analysis.java.ast.elements.JavaMemberReference -import arrow.meta.plugins.analysis.java.ast.elements.JavaMemberSelect -import arrow.meta.plugins.analysis.java.ast.elements.JavaMethod -import arrow.meta.plugins.analysis.java.ast.elements.JavaNull -import arrow.meta.plugins.analysis.java.ast.elements.JavaParenthesized -import arrow.meta.plugins.analysis.java.ast.elements.JavaReturn -import arrow.meta.plugins.analysis.java.ast.elements.JavaSingleBlock -import arrow.meta.plugins.analysis.java.ast.elements.JavaSuper -import arrow.meta.plugins.analysis.java.ast.elements.JavaSwitch -import arrow.meta.plugins.analysis.java.ast.elements.JavaSynchronized -import arrow.meta.plugins.analysis.java.ast.elements.JavaTernaryConditional -import arrow.meta.plugins.analysis.java.ast.elements.JavaThis -import arrow.meta.plugins.analysis.java.ast.elements.JavaTry -import arrow.meta.plugins.analysis.java.ast.elements.JavaTypeCast -import arrow.meta.plugins.analysis.java.ast.elements.JavaTypeReference -import arrow.meta.plugins.analysis.java.ast.elements.JavaUnary -import arrow.meta.plugins.analysis.java.ast.elements.JavaVariable -import arrow.meta.plugins.analysis.java.ast.elements.JavaWhile -import arrow.meta.plugins.analysis.java.ast.types.JavaType -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import com.sun.source.tree.AnnotatedTypeTree -import com.sun.source.tree.ArrayTypeTree -import com.sun.source.tree.AssertTree -import com.sun.source.tree.AssignmentTree -import com.sun.source.tree.BinaryTree -import com.sun.source.tree.BlockTree -import com.sun.source.tree.BreakTree -import com.sun.source.tree.CaseTree -import com.sun.source.tree.CatchTree -import com.sun.source.tree.ClassTree -import com.sun.source.tree.CompilationUnitTree -import com.sun.source.tree.ConditionalExpressionTree -import com.sun.source.tree.ContinueTree -import com.sun.source.tree.DirectiveTree -import com.sun.source.tree.DoWhileLoopTree -import com.sun.source.tree.EmptyStatementTree -import com.sun.source.tree.EnhancedForLoopTree -import com.sun.source.tree.ErroneousTree -import com.sun.source.tree.ExpressionStatementTree -import com.sun.source.tree.ForLoopTree -import com.sun.source.tree.IdentifierTree -import com.sun.source.tree.IfTree -import com.sun.source.tree.ImportTree -import com.sun.source.tree.InstanceOfTree -import com.sun.source.tree.IntersectionTypeTree -import com.sun.source.tree.LabeledStatementTree -import com.sun.source.tree.LambdaExpressionTree -import com.sun.source.tree.LiteralTree -import com.sun.source.tree.MemberReferenceTree -import com.sun.source.tree.MemberSelectTree -import com.sun.source.tree.MethodInvocationTree -import com.sun.source.tree.MethodTree -import com.sun.source.tree.ModifiersTree -import com.sun.source.tree.ModuleTree -import com.sun.source.tree.NewClassTree -import com.sun.source.tree.PackageTree -import com.sun.source.tree.ParameterizedTypeTree -import com.sun.source.tree.ParenthesizedTree -import com.sun.source.tree.PrimitiveTypeTree -import com.sun.source.tree.ReturnTree -import com.sun.source.tree.SwitchTree -import com.sun.source.tree.SynchronizedTree -import com.sun.source.tree.Tree -import com.sun.source.tree.TryTree -import com.sun.source.tree.TypeCastTree -import com.sun.source.tree.TypeParameterTree -import com.sun.source.tree.UnaryTree -import com.sun.source.tree.UnionTypeTree -import com.sun.source.tree.VariableTree -import com.sun.source.tree.WhileLoopTree -import com.sun.source.tree.WildcardTree -import javax.lang.model.element.Element -import javax.lang.model.element.ElementKind -import javax.lang.model.element.ExecutableElement -import javax.lang.model.element.ModuleElement -import javax.lang.model.element.PackageElement -import javax.lang.model.element.TypeElement -import javax.lang.model.element.TypeParameterElement -import javax.lang.model.element.VariableElement -import javax.lang.model.type.TypeKind -import javax.lang.model.type.TypeMirror - -public fun A.model(ctx: AnalysisContext): B = - when (this) { - is ModuleElement -> JavaModuleDescriptor(ctx, this) as B - is PackageElement -> JavaPackageDescriptor(ctx, this) as B - is VariableElement -> - when (this.kind) { - ElementKind.PARAMETER, - ElementKind.EXCEPTION_PARAMETER -> JavaParameterDescriptor(ctx, this) as B - ElementKind.LOCAL_VARIABLE -> JavaLocalVariableDescriptor(ctx, this) as B - ElementKind.FIELD -> JavaFieldDescriptor(ctx, this) as B - ElementKind.ENUM_CONSTANT -> JavaEnumConstantDescriptor(ctx, this) as B - else -> throw IllegalArgumentException("incorrect VariableElement case") - } - is ExecutableElement -> - when (this.kind) { - ElementKind.METHOD -> JavaSimpleFunctionDescriptor(ctx, this) as B - ElementKind.CONSTRUCTOR -> JavaConstructorDescriptor(ctx, this) as B - ElementKind.STATIC_INIT, - ElementKind.INSTANCE_INIT -> TODO("not yet supported") - else -> throw IllegalArgumentException("incorrect ExecutableElement case") - } - is TypeElement -> JavaClassDescriptor(ctx, this) as B - is TypeParameterElement -> JavaTypeParameterDescriptor(ctx, this) as B - else -> JavaDescriptor(ctx, this) as B - } - -public fun < - A : Tree, B : arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element> A - .modelCautious(ctx: AnalysisContext): B? = - when (this) { - is CompilationUnitTree, - is PackageTree, - is ModuleTree, - is DirectiveTree, - is ImportTree -> null - is ModifiersTree -> null - else -> this.model(ctx) - } - -public fun < - A : Tree, B : arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element> A - .model(ctx: AnalysisContext): B = - when (this) { - is ArrayTypeTree, - is ParameterizedTypeTree, - is TypeParameterTree, - is PrimitiveTypeTree, - is IntersectionTypeTree, - is UnionTypeTree, - is AnnotatedTypeTree, - is WildcardTree -> JavaTypeReference(ctx, this) as B - is MethodTree -> - if (ctx.resolver.resolve(this)?.kind == ElementKind.CONSTRUCTOR) - JavaConstructor(ctx, this) as B - else JavaMethod(ctx, this) as B - is VariableTree -> JavaVariable(ctx, this) as B - // expressions - is ParenthesizedTree -> JavaParenthesized(ctx, this) as B - is ConditionalExpressionTree -> JavaTernaryConditional(ctx, this) as B - is ErroneousTree -> JavaElement(ctx, this) as B // nothing special - is LiteralTree -> - when (this.value) { - null -> JavaNull(ctx, this) as B - else -> JavaLiteral(ctx, this) as B - } - is UnaryTree -> JavaUnary(ctx, this) as B - is BinaryTree -> JavaBinary(ctx, this) as B - is IdentifierTree -> - when (this.name) { - ctx.names._this -> JavaThis(ctx, this) as B - ctx.names._super -> JavaSuper(ctx, this) as B - else -> JavaIdentifier(ctx, this) as B - } - is LambdaExpressionTree -> JavaLambda(ctx, this) as B - is NewClassTree -> JavaConstructorCall(ctx, this) as B - is MethodInvocationTree -> JavaCall(ctx, this) as B - is TypeCastTree -> JavaTypeCast(ctx, this) as B - is InstanceOfTree -> JavaInstanceOf(ctx, this) as B - is TryTree -> JavaTry(ctx, this) as B - is CatchTree -> JavaCatch(ctx, this) as B - is MemberReferenceTree -> JavaMemberReference(ctx, this) as B - is MemberSelectTree -> JavaMemberSelect(ctx, this) as B - // statements - is ReturnTree -> JavaReturn(ctx, this) as B - is ContinueTree -> JavaContinue(ctx, this) as B - is BreakTree -> JavaBreak(ctx, this) as B - is DoWhileLoopTree -> JavaDoWhile(ctx, this) as B - is WhileLoopTree -> JavaWhile(ctx, this) as B - is ForLoopTree -> JavaFor(ctx, this) as B - is EnhancedForLoopTree -> JavaEnhancedFor(ctx, this) as B - is IfTree -> JavaIf(ctx, this) as B - is SwitchTree -> JavaSwitch(ctx, this) as B - is CaseTree -> JavaCase(ctx, this) as B - is LabeledStatementTree -> JavaLabeled(ctx, this) as B - is AssignmentTree -> JavaAssignment(ctx, this) as B - is AssertTree -> JavaAssert(ctx, this) as B - is ClassTree -> JavaClass(ctx, this) as B - is SynchronizedTree -> JavaSynchronized(ctx, this) as B - is EmptyStatementTree -> JavaEmptyBlock(ctx, this) as B - is ExpressionStatementTree -> JavaSingleBlock(ctx, this) as B - is BlockTree -> JavaBlock(ctx, this) as B - // compilation elements - is CompilationUnitTree -> - throw IllegalArgumentException("compilation unit trees cannot be converted") - is PackageTree -> throw IllegalArgumentException("package trees cannot be converted") - is ModuleTree -> throw IllegalArgumentException("module trees cannot be converted") - is DirectiveTree -> throw IllegalArgumentException("module directive trees cannot be converted") - is ImportTree -> throw IllegalArgumentException("import trees cannot be converted") - is ModifiersTree -> - throw IllegalArgumentException( - "modifiers trees cannot be converted, annotations should be handled in elements" - ) - else -> JavaElement(ctx, this) as B - } - -public fun A.model(ctx: AnalysisContext): JavaType = JavaType(ctx, this) - -public fun A.modelCautious(ctx: AnalysisContext): JavaType? = - if (this.kind == TypeKind.NONE) null else this.model(ctx) - -public fun javax.lang.model.element.Name.name(): Name = Name(this.toString()) - -public fun javax.lang.model.element.Name.fqName(): FqName = FqName(this.toString()) diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt deleted file mode 100644 index 4cf023cf7..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/JavaResolutionContext.kt +++ /dev/null @@ -1,177 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.AnalysisMessages -import arrow.meta.plugins.analysis.java.ast.elements.JavaElement -import arrow.meta.plugins.analysis.java.ast.elements.JavaTypeReference -import arrow.meta.plugins.analysis.java.ast.elements.OurTreeVisitor -import arrow.meta.plugins.analysis.java.ast.elements.visitRecursively -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Types -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import com.sun.source.tree.AssertTree -import com.sun.source.tree.MethodInvocationTree -import com.sun.tools.javac.code.Lint -import com.sun.tools.javac.code.Symbol -import com.sun.tools.javac.main.JavaCompiler -import com.sun.tools.javac.tree.JCTree -import com.sun.tools.javac.util.DiagnosticSource -import com.sun.tools.javac.util.JCDiagnostic - -public class JavaResolutionContext( - private val state: SolverState?, - private val ctx: AnalysisContext -) : ResolutionContext { - override val types: Types = - object : Types { - override val nothingType: Type = ctx.symbolTable.botType.model(ctx) - } - - override val module: ModuleDescriptor - get() = ctx.elements.getModuleOf(ctx.resolver.topElement).model(ctx) - - override fun type(typeReference: TypeReference?): Type? = - when (typeReference) { - is JavaTypeReference -> ctx.resolver.resolveType(typeReference.underlyingTree)?.model(ctx) - else -> null - } - - override fun Element.constraintsDSLElements(): List { - if (this !is JavaElement) return emptyList() - - val elements = mutableListOf() - this.impl() - .visitRecursively( - object : OurTreeVisitor(Unit) { - override fun visitMethodInvocation(node: MethodInvocationTree, p: Unit?) { - node.methodSelect?.toString()?.let { calleeText -> - if ( - calleeText == "pre" || - calleeText.endsWith(".pre") || - calleeText == "post" || - calleeText.endsWith(".post") || - calleeText == "doNotLookAtArgumentsWhen" || - calleeText.endsWith(".doNotLookAtArgumentsWhen") - ) - elements.add(node.model(ctx)) - } - } - - override fun visitAssert(node: AssertTree, p: Unit?) { - elements.add(node.model(ctx)) - } - } - ) - - return elements.toList() - } - - override fun handleError(error: ErrorIds, element: Element, msg: String): Unit { - when (error) { - ErrorIds.Exception.IllegalState -> reportAnalysisException(element, msg) - ErrorIds.Exception.OtherException -> reportAnalysisException(element, msg) - ErrorIds.Inconsistency.InconsistentBodyPre -> reportInconsistentBodyPre(element, msg) - ErrorIds.Inconsistency.InconsistentDefaultValues -> reportInconsistentBodyPre(element, msg) - ErrorIds.Inconsistency.InconsistentConditions -> reportInconsistentConditions(element, msg) - ErrorIds.Inconsistency.InconsistentCallPost -> reportInconsistentCallPost(element, msg) - ErrorIds.Inconsistency.InconsistentInvariants -> reportInconsistentInvariants(element, msg) - ErrorIds.Liskov.NotWeakerPrecondition -> reportLiskovProblem(element, msg) - ErrorIds.Liskov.NotStrongerPostcondition -> reportLiskovProblem(element, msg) - ErrorIds.Parsing.ErrorParsingPredicate -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Parsing.WarningParsingPredicate -> reportWarningsParsingPredicate(element, msg) - ErrorIds.Parsing.UnexpectedReference -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Parsing.UnexpectedFieldInitBlock -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Laws.LawMustCallFunction -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Laws.LawMustHaveParametersInOrder -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Laws.SubjectWithoutName -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Laws.CouldNotResolveSubject -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Unsatisfiability.UnsatCallPre -> reportUnsatCallPre(element, msg) - ErrorIds.Unsatisfiability.UnsatBodyPost -> reportUnsatBodyPost(element, msg) - ErrorIds.Unsatisfiability.UnsatInvariants -> reportUnsatInvariants(element, msg) - ErrorIds.Unsupported.UnsupportedExpression -> reportUnsupported(element, msg) - } - state?.notifySarifReport(error, element, msg) - } - - // not available in Java until we have records - override fun backingPropertyForConstructorParameter( - parameter: ValueParameterDescriptor - ): PropertyDescriptor? = null - - override fun descriptorFor(fqName: FqName): List = - JavaCompiler.instance(ctx.context) - .resolveBinaryNameOrIdent(fqName.name) - .takeIf { it.exists() } - ?.let> { listOf(it.model(ctx)) } - .orEmpty() - - override fun descriptorFor(declaration: Declaration): DeclarationDescriptor? = - (declaration as? JavaElement)?.let { ctx.resolver.resolve(it.impl())?.model(ctx) } - - private val diagnosticSource: DiagnosticSource - get() = DiagnosticSource(ctx.unit.sourceFile, ctx.logger) - - private fun report(element: Element, builder: (JCTree) -> JCDiagnostic) { - (element as? JavaElement)?.let { elt -> - (elt.impl() as? JCTree)?.let { ctx.logger.report(builder(it)) } - } - } - - private fun reportError(element: Element, key: String, msg: String): Unit = - report(element) { - ctx.diagnostics.error(JCDiagnostic.DiagnosticFlag.MANDATORY, diagnosticSource, it, key, msg) - } - - private fun reportWarning(element: Element, key: String, msg: String): Unit = - report(element) { - ctx.diagnostics.warning(Lint.LintCategory.PROCESSING, diagnosticSource, it, key, msg) - } - - private fun reportErrorsParsingPredicate(element: Element, msg: String): Unit = - reportError(element, AnalysisMessages.ErrorParsingPredicate, msg) - - private fun reportWarningsParsingPredicate(element: Element, msg: String): Unit = - reportWarning(element, AnalysisMessages.WarningParsingPredicate, msg) - - private fun reportUnsatCallPre(element: Element, msg: String): Unit = - reportError(element, AnalysisMessages.UnsatCallPre, msg) - - private fun reportInconsistentBodyPre(declaration: Element, msg: String): Unit = - reportError(declaration, AnalysisMessages.InconsistentBodyPre, msg) - - private fun reportUnsatBodyPost(declaration: Element, msg: String): Unit = - reportError(declaration, AnalysisMessages.UnsatBodyPost, msg) - - fun reportInconsistentCallPost(expression: Element, msg: String): Unit = - reportWarning(expression, AnalysisMessages.InconsistentCallPost, msg) - - fun reportInconsistentConditions(expression: Element, msg: String): Unit = - reportWarning(expression, AnalysisMessages.InconsistentConditions, msg) - - fun reportInconsistentInvariants(expression: Element, msg: String): Unit = - reportError(expression, AnalysisMessages.InconsistentInvariants, msg) - - fun reportUnsatInvariants(expression: Element, msg: String): Unit = - reportError(expression, AnalysisMessages.UnsatInvariants, msg) - - fun reportLiskovProblem(expression: Element, msg: String): Unit = - reportError(expression, AnalysisMessages.LiskovProblem, msg) - - fun reportUnsupported(expression: Element, msg: String): Unit = - reportWarning(expression, AnalysisMessages.UnsupportedElement, msg) - - fun reportAnalysisException(element: Element, msg: String): Unit = - reportError(element, AnalysisMessages.AnalysisException, msg) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt deleted file mode 100644 index a82699cd3..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotationDescriptor.kt +++ /dev/null @@ -1,41 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import javax.lang.model.element.AnnotationMirror -import javax.lang.model.element.AnnotationValue - -public class JavaAnnotationDescriptor( - private val ctx: AnalysisContext, - private val impl: AnnotationMirror -) : AnnotationDescriptor { - private val inside: Map - get() = - ctx.elements - .getElementValuesWithDefaults(impl) - .map { (k, v) -> k.simpleName.toString() to v } - .toMap() - - override val allValueArguments: Map - get() = inside.mapKeys { (k, _) -> Name(k) }.mapValues { (_, v) -> v.value } - - override fun argumentValueAsString(argName: String): String? = - inside.get(argName)?.value as? String - - override fun argumentValueAsArrayOfString(argName: String): List = - (inside.get(argName)?.value as? List<*>) - ?.filterIsInstance() - ?.mapNotNull { it.value as? String } - .orEmpty() - - override val fqName: FqName - get() = FqName(impl.annotationType.asElement().fqName) - override val type: Type - get() = impl.annotationType.model(ctx) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations.kt deleted file mode 100644 index 46729cdfb..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaAnnotations.kt +++ /dev/null @@ -1,22 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import javax.lang.model.element.AnnotationMirror - -public class JavaAnnotations( - private val ctx: AnalysisContext, - override val impl: List -) : Annotations { - override fun isEmpty(): Boolean = impl.isEmpty() - override fun iterable(): Iterable = - impl.map { JavaAnnotationDescriptor(ctx, it) } - - override fun findAnnotation(fqName: FqName): AnnotationDescriptor? = - iterable().firstOrNull { it.fqName == fqName } - override fun hasAnnotation(fqName: FqName): Boolean = findAnnotation(fqName) != null -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor.kt deleted file mode 100644 index b939e3145..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaClassDescriptor.kt +++ /dev/null @@ -1,76 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.types.JavaTypeConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import javax.lang.model.element.Element -import javax.lang.model.element.ElementKind -import javax.lang.model.element.Modifier -import javax.lang.model.element.NestingKind -import javax.lang.model.element.TypeElement -import javax.lang.model.type.TypeKind - -public class JavaClassDescriptor(private val ctx: AnalysisContext, private val impl: TypeElement) : - ClassDescriptor, JavaMemberDescriptor(ctx, impl) { - - private fun memberScope(predicate: (Element) -> Boolean): JavaMemberScope = - JavaMemberScope(ctx, impl.enclosedElements.filter(predicate)) - - override val unsubstitutedMemberScope: MemberScope - get() = memberScope { it !is TypeElement && !it.modifiers.contains(Modifier.STATIC) } - override val staticScope: MemberScope - get() = memberScope { it !is TypeElement && it.modifiers.contains(Modifier.STATIC) } - override val unsubstitutedInnerClassesScope: MemberScope - get() = memberScope { it is TypeElement } - - override val constructors: Collection - get() = - impl.enclosedElements.filter { it.kind == ElementKind.CONSTRUCTOR }.map { it.model(ctx) } - - override val kind: ClassDescriptor.ClassKind = - when { - impl.nestingKind == NestingKind.ANONYMOUS -> ClassDescriptor.ClassKind.OBJECT - impl.kind == ElementKind.ENUM -> ClassDescriptor.ClassKind.ENUM_CLASS - impl.kind == ElementKind.INTERFACE -> ClassDescriptor.ClassKind.INTERFACE - ctx.types.isSubtype(impl.asType(), ctx.symbolTable.annotationType) -> - ClassDescriptor.ClassKind.ANNOTATION_CLASS - else -> ClassDescriptor.ClassKind.CLASS - } - - override val superTypes: Collection - get() = - (listOfNotNull(impl.superclass.takeIf { it.kind != TypeKind.NONE }) + impl.interfaces).map { - it.model(ctx) - } - override val declaredTypeParameters: List - get() = impl.typeParameters.map { it.model(ctx) } - - override val typeConstructor: TypeConstructor - get() = JavaTypeConstructor(ctx, impl) - override val defaultType: Type - get() = ctx.types.getDeclaredType(impl).model(ctx) - override val thisAsReceiverParameter: ReceiverParameterDescriptor - get() = JavaReceiverParameterDescriptor(ctx, impl.asType(), impl.enclosingElement) - - override val isCompanionObject: Boolean = false - override val isData: Boolean = false - override val isInline: Boolean = false - override val isFun: Boolean - get() = ctx.types.isSubtype(impl.asType(), ctx.symbolTable.functionalInterfaceType) - override val isValue: Boolean = false - override val isEnumEntry: Boolean = false - override val isInner: Boolean = impl.nestingKind == NestingKind.MEMBER - - override val companionObjectDescriptor: ClassDescriptor? = null - override val sealedSubclasses: Collection = emptyList() - override val unsubstitutedPrimaryConstructor: ConstructorDescriptor? = null -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor.kt deleted file mode 100644 index 82f4d4bd9..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaConstructorDescriptor.kt +++ /dev/null @@ -1,24 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor -import com.sun.tools.javac.code.Symbol -import javax.lang.model.element.ElementKind -import javax.lang.model.element.ExecutableElement - -public class JavaConstructorDescriptor( - private val ctx: AnalysisContext, - private val impl: ExecutableElement -) : ConstructorDescriptor, JavaFunctionDescriptor(ctx, impl) { - init { - require(impl.kind == ElementKind.CONSTRUCTOR) - } - - override val constructedClass: ClassDescriptor - get() = (impl as? Symbol.MethodSymbol)?.owner?.model(ctx)!! - override val isPrimary: Boolean = false -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor.kt deleted file mode 100644 index bb86a7d11..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptor.kt +++ /dev/null @@ -1,31 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import javax.lang.model.element.Element - -public open class JavaDescriptor(private val ctx: AnalysisContext, private val impl: Element) : - DeclarationDescriptor { - override fun impl(): Element = impl - - override val containingDeclaration: DeclarationDescriptor - get() = impl.enclosingElement.model(ctx) - override val containingPackage: FqName - get() = FqName(impl.enclosingElement.fqName) - - override val fqNameSafe: FqName = FqName(impl.fqName) - override val name: Name = impl.simpleName.name() - - override fun element(): - arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element? = - ctx.resolver.tree(impl)?.model(ctx) - - override fun annotations(): Annotations = JavaAnnotations(ctx, impl.annotationMirrors) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtils.kt deleted file mode 100644 index bbb3806d6..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaDescriptorUtils.kt +++ /dev/null @@ -1,54 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import javax.lang.model.element.Element -import javax.lang.model.element.ExecutableElement -import javax.lang.model.element.QualifiedNameable -import javax.lang.model.element.TypeElement -import javax.lang.model.element.TypeParameterElement -import javax.lang.model.element.VariableElement - -public val Element.fqName: String - get() { - val elts = mutableListOf() - var current: Element? = this - while (current != null) { - if (current is QualifiedNameable) { - elts.add(0, current.qualifiedName.toString()) - current = null - } else { - val simple = current.simpleName - if (simple != null) { - elts.add(0, simple.toString()) - } else { - elts.add(0, "") - } - current = current.enclosingElement - } - } - return elts.filter { it.isNotEmpty() }.joinToString(separator = ".") - } - -public val Element.enclosingClass: TypeElement? - get() = - when (val encl = this.enclosingElement) { - null -> null - is TypeElement -> encl - else -> encl.enclosingClass - } - -public val Element.typeParametersFromEverywhere: List - get() = - when (this) { - is ExecutableElement -> typeParameters - is TypeElement -> typeParameters - else -> emptyList() - } - -public val Element.parametersFromEverywhere: List - get() = - when (this) { - is ExecutableElement -> parameters - else -> emptyList() - } diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor.kt deleted file mode 100644 index 2f278fceb..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaEnumConstantDescriptor.kt +++ /dev/null @@ -1,70 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.types.JavaTypeConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import javax.lang.model.element.Element -import javax.lang.model.element.ElementKind -import javax.lang.model.element.Modifier -import javax.lang.model.element.TypeElement -import javax.lang.model.element.VariableElement - -public class JavaEnumConstantDescriptor( - private val ctx: AnalysisContext, - private val impl: VariableElement -) : ClassDescriptor, JavaMemberDescriptor(ctx, impl) { - - private val enclosingType = impl.enclosingElement.asType() - - private fun memberScope(predicate: (Element) -> Boolean): JavaMemberScope = - JavaMemberScope( - ctx, - impl.enclosingElement.enclosedElements.filter { - it.kind != ElementKind.ENUM_CONSTANT && predicate(it) - } - ) - - override val unsubstitutedMemberScope: MemberScope - get() = memberScope { it !is TypeElement && !it.modifiers.contains(Modifier.STATIC) } - override val staticScope: MemberScope - get() = memberScope { it !is TypeElement && it.modifiers.contains(Modifier.STATIC) } - override val unsubstitutedInnerClassesScope: MemberScope - get() = memberScope { it is TypeElement } - - override val constructors: Collection = emptyList() - - override val kind: ClassDescriptor.ClassKind = ClassDescriptor.ClassKind.ENUM_ENTRY - - override val superTypes: Collection - get() = listOf(enclosingType.model(ctx)) - override val declaredTypeParameters: List = emptyList() - - override val typeConstructor: TypeConstructor - get() = JavaTypeConstructor(ctx, impl.enclosingElement as TypeElement) - override val defaultType: Type - get() = enclosingType.model(ctx) - override val thisAsReceiverParameter: ReceiverParameterDescriptor - get() = JavaReceiverParameterDescriptor(ctx, enclosingType, impl.enclosingElement) - - override val isCompanionObject: Boolean = false - override val isData: Boolean = false - override val isInline: Boolean = false - override val isFun: Boolean - get() = ctx.types.isSubtype(impl.asType(), ctx.symbolTable.functionalInterfaceType) - override val isValue: Boolean = false - override val isEnumEntry: Boolean = false - override val isInner: Boolean = true - - override val companionObjectDescriptor: ClassDescriptor? = null - override val sealedSubclasses: Collection = emptyList() - override val unsubstitutedPrimaryConstructor: ConstructorDescriptor? = null -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor.kt deleted file mode 100644 index a4acd7d47..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFieldDescriptor.kt +++ /dev/null @@ -1,64 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.types.JavaType -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FieldDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyAccessorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableAccessorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import com.sun.tools.javac.code.Symbol -import javax.lang.model.element.ElementKind -import javax.lang.model.element.Modifier -import javax.lang.model.element.VariableElement - -public class JavaFieldDescriptor( - private val ctx: AnalysisContext, - private val impl: VariableElement -) : PropertyDescriptor, JavaMemberDescriptor(ctx, impl) { - init { - require(impl.kind == ElementKind.FIELD) - } - - override val isVar: Boolean = !impl.modifiers.contains(Modifier.FINAL) - override val isConst: Boolean = impl.constantValue != null - - override val type: JavaType - get() = - when (impl) { - is Symbol -> impl.type.model(ctx) - else -> throw IllegalStateException("this element should be a symbol") - } - - // fields in Java never override those in parent classes - override val overriddenDescriptors: Collection = emptyList() - - override val isSetterProjectedOut: Boolean = false - override val accessors: List = emptyList() - override val backingField: FieldDescriptor? = null - override val delegateField: FieldDescriptor? = null - override val getter: VariableAccessorDescriptor? = null - override val isDelegated: Boolean = false - override val setter: VariableAccessorDescriptor? = null - override val isLateInit: Boolean = false - override val kind: CallableMemberDescriptor.Kind = CallableMemberDescriptor.Kind.DECLARATION - - override val allParameters: List = emptyList() - override val extensionReceiverParameter: ReceiverParameterDescriptor? = null - override val dispatchReceiverParameter: ReceiverParameterDescriptor? - get() = - if (impl.modifiers.contains(Modifier.STATIC)) null - else JavaReceiverParameterDescriptor(ctx, impl.enclosingClass!!.asType(), impl) - override val typeParameters: List = emptyList() - override val returnType: Type = type - override val valueParameters: List = emptyList() -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt deleted file mode 100644 index cedc5a58e..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaFunctionDescriptor.kt +++ /dev/null @@ -1,70 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.modelCautious -import arrow.meta.plugins.analysis.java.ast.types.allSupertypes -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FunctionDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import com.sun.tools.javac.code.Symbol -import javax.lang.model.element.ElementKind -import javax.lang.model.element.ExecutableElement -import javax.lang.model.type.TypeKind - -public open class JavaFunctionDescriptor( - private val ctx: AnalysisContext, - private val impl: ExecutableElement -) : FunctionDescriptor, JavaMemberDescriptor(ctx, impl) { - - override val isOperator: Boolean = false - override val isInfix: Boolean = false - override val isInline: Boolean = false - override val isTailrec: Boolean = false - override val isSuspend: Boolean = false - override val kind: CallableMemberDescriptor.Kind = CallableMemberDescriptor.Kind.DECLARATION - - override val extensionReceiverParameter: ReceiverParameterDescriptor? = null - override val dispatchReceiverParameter: ReceiverParameterDescriptor? - get() = - when (impl.kind) { - ElementKind.METHOD -> { - (impl as Symbol.MethodSymbol).owner.asType()?.let { - if (it.kind == null || it.kind == TypeKind.NONE) null - else JavaReceiverParameterDescriptor(ctx, it, impl) - } - } - else -> null - } - override val typeParameters: List - get() = impl.typeParameters.map { it.model(ctx) } - override val returnType: Type? - get() = impl.returnType?.modelCautious(ctx) - override val valueParameters: List - get() = impl.parameters.map { it.model(ctx) } - override val allParameters: List - get() = listOfNotNull(dispatchReceiverParameter) + valueParameters - - override val overriddenDescriptors: Collection - get() = - when (val klass = impl.enclosingClass) { - null -> emptyList() - else -> - klass.asType().allSupertypes(ctx).flatMap { parent -> - ctx.types - .asElement(parent) - ?.enclosedElements - .orEmpty() - .filterIsInstance() - .filter { methodInParent -> ctx.elements.overrides(impl, methodInParent, klass) } - .map { it.model(ctx) } - } - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor.kt deleted file mode 100644 index 60acd51f3..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaLocalVariableDescriptor.kt +++ /dev/null @@ -1,15 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.LocalVariableDescriptor -import javax.lang.model.element.ElementKind -import javax.lang.model.element.VariableElement - -public class JavaLocalVariableDescriptor(ctx: AnalysisContext, impl: VariableElement) : - LocalVariableDescriptor, JavaVariableDescriptor(ctx, impl) { - init { - require(impl.kind == ElementKind.LOCAL_VARIABLE) - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor.kt deleted file mode 100644 index 80e67708f..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberDescriptor.kt +++ /dev/null @@ -1,36 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Modality -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility -import javax.lang.model.element.Element -import javax.lang.model.element.ElementKind -import javax.lang.model.element.Modifier - -public open class JavaMemberDescriptor(ctx: AnalysisContext, private val impl: Element) : - MemberDescriptor, JavaDescriptor(ctx, impl) { - - override val modality: Modality - get() = - when { - impl.modifiers.contains(Modifier.FINAL) -> Modality.FINAL - impl.modifiers.contains(Modifier.ABSTRACT) || impl.kind == ElementKind.INTERFACE -> - Modality.ABSTRACT - else -> Modality.OPEN - } - - override val visibility: Visibility - get() = - object : Visibility { - override val isPublicAPI: Boolean = impl.modifiers.contains(Modifier.PUBLIC) - // this is the same as the simple name - override val name: String = impl.simpleName.toString() - } - - override val isExpect: Boolean = false - override val isActual: Boolean = false - override val isExternal: Boolean = false -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope.kt deleted file mode 100644 index e11a044d1..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaMemberScope.kt +++ /dev/null @@ -1,31 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import javax.lang.model.element.Element -import javax.lang.model.element.ExecutableElement -import javax.lang.model.element.TypeElement -import javax.lang.model.element.VariableElement - -public class JavaMemberScope( - private val ctx: AnalysisContext, - private val enclosedElements: Collection -) : MemberScope { - override fun getClassifierNames(): Set = getNames() - override fun getFunctionNames(): Set = getNames() - override fun getVariableNames(): Set = getNames() - - private inline fun getNames(): Set = - enclosedElements.filterIsInstance().map { it.simpleName.name() }.toSet() - - override fun getContributedDescriptors( - filter: (name: String) -> Boolean - ): List = - enclosedElements.filter { filter(it.simpleName.toString()) }.map { it.model(ctx) } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt deleted file mode 100644 index 811dbb559..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaModuleDescriptor.kt +++ /dev/null @@ -1,29 +0,0 @@ -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageViewDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import javax.lang.model.element.ModuleElement -import javax.lang.model.element.PackageElement - -public class JavaModuleDescriptor( - private val ctx: AnalysisContext, - private val impl: ModuleElement -) : JavaDescriptor(ctx, impl), ModuleDescriptor { - override fun getPackage(pck: String): PackageViewDescriptor? = - impl.enclosedElements - .filterIsInstance() - .firstOrNull { it.fqName == pck } - ?.model(ctx) - - override fun getSubPackagesOf(fqName: FqName): List = - impl.enclosedElements - .filterIsInstance() - .filter { it.fqName.startsWith(fqName.name + ".") } - .map { it.model(ctx) } - - override val stableName: Name = Name(impl.simpleName.toString()) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor.kt deleted file mode 100644 index fdfa50149..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaPackageDescriptor.kt +++ /dev/null @@ -1,20 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageFragmentDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageViewDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import javax.lang.model.element.PackageElement - -public class JavaPackageDescriptor( - private val ctx: AnalysisContext, - private val impl: PackageElement -) : PackageViewDescriptor, PackageFragmentDescriptor, JavaDescriptor(ctx, impl) { - override val fqName: FqName - get() = FqName(impl.fqName) - override val memberScope: MemberScope - get() = JavaMemberScope(ctx, impl.enclosedElements) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor.kt deleted file mode 100644 index 40f07147f..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaParameterDescriptor.kt +++ /dev/null @@ -1,27 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import javax.lang.model.element.ElementKind -import javax.lang.model.element.VariableElement - -public class JavaParameterDescriptor(ctx: AnalysisContext, private val impl: VariableElement) : - ValueParameterDescriptor, JavaVariableDescriptor(ctx, impl) { - init { - require(impl.kind == ElementKind.PARAMETER || impl.kind == ElementKind.EXCEPTION_PARAMETER) - } - - override val index: Int - get() = impl.enclosingElement.parametersFromEverywhere.indexOf(impl) - - override val isCrossinline: Boolean = false - override val isNoinline: Boolean = false - override val varargElementType: Type? = null - - override fun declaresDefaultValue(): Boolean = impl.constantValue != null - override val defaultValue: Expression? = null // TODO: implement this!! -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor.kt deleted file mode 100644 index de39c541c..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaReceiverParameterDescriptor.kt +++ /dev/null @@ -1,57 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import javax.lang.model.type.TypeMirror - -public class JavaReceiverParameterDescriptor( - private val ctx: AnalysisContext, - private val ty: TypeMirror, - private val enclosing: javax.lang.model.element.Element -) : ReceiverParameterDescriptor { - override fun impl(): TypeMirror = ty - - override val name: Name = Name("this") - override val fqNameSafe: FqName = FqName("this") - - override val type: Type - get() = ty.model(ctx) - override val value: ReceiverValue - get() = - object : ReceiverValue { - override val type: Type = this@JavaReceiverParameterDescriptor.type - override val isClassReceiver: Boolean - get() = false // TODO check this later - } - override val allParameters: List = emptyList() - override val extensionReceiverParameter: ReceiverParameterDescriptor? = null - override val dispatchReceiverParameter: ReceiverParameterDescriptor? = null - override val typeParameters: List = emptyList() - override val returnType: Type - get() = type - override val valueParameters: List = emptyList() - override val overriddenDescriptors: Collection = emptyList() - - override val containingDeclaration: DeclarationDescriptor - get() = enclosing.model(ctx) - - override val containingPackage: FqName? - get() = containingDeclaration.containingPackage - - override fun element(): Element? = null - override fun annotations(): Annotations = JavaAnnotations(ctx, emptyList()) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor.kt deleted file mode 100644 index 30af9b329..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaSimpleFunctionDescriptor.kt +++ /dev/null @@ -1,15 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.SimpleFunctionDescriptor -import javax.lang.model.element.ElementKind -import javax.lang.model.element.ExecutableElement - -public class JavaSimpleFunctionDescriptor(ctx: AnalysisContext, impl: ExecutableElement) : - SimpleFunctionDescriptor, JavaFunctionDescriptor(ctx, impl) { - init { - require(impl.kind == ElementKind.METHOD) - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor.kt deleted file mode 100644 index 8ee098dc8..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaTypeParameterDescriptor.kt +++ /dev/null @@ -1,32 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.types.JavaTypeParameterConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance -import javax.lang.model.element.TypeParameterElement - -public class JavaTypeParameterDescriptor( - private val ctx: AnalysisContext, - private val impl: TypeParameterElement -) : TypeParameterDescriptor, JavaMemberDescriptor(ctx, impl) { - - override val upperBounds: List - get() = impl.bounds.map { it.model(ctx) } - override val index: Int - get() = impl.enclosingElement.typeParametersFromEverywhere.indexOf(impl) - - override val isReified: Boolean = false - override val variance: Variance = Variance.Invariant - override val isCapturedFromOuterDeclaration: Boolean = false - - override val typeConstructor: TypeConstructor - get() = JavaTypeParameterConstructor(ctx, impl) - override val defaultType: Type - get() = impl.asType().model(ctx) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor.kt deleted file mode 100644 index fb72fb8b3..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaValueDescriptor.kt +++ /dev/null @@ -1,35 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import com.sun.tools.javac.code.Symbol -import javax.lang.model.element.VariableElement - -public open class JavaValueDescriptor( - private val ctx: AnalysisContext, - private val impl: VariableElement -) : ValueDescriptor, JavaMemberDescriptor(ctx, impl) { - - override val type: Type - get() = - when (impl) { - is Symbol -> impl.type.model(ctx) - else -> throw IllegalStateException("this element should be a symbol") - } - override val allParameters: List = emptyList() - override val extensionReceiverParameter: ReceiverParameterDescriptor? = null - override val dispatchReceiverParameter: ReceiverParameterDescriptor? = null - override val typeParameters: List = emptyList() - override val returnType: Type? = null - override val valueParameters: List = emptyList() - override val overriddenDescriptors: Collection = emptyList() -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt deleted file mode 100644 index ffb77104d..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/descriptors/JavaVariableDescriptor.kt +++ /dev/null @@ -1,22 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.descriptors - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor -import javax.lang.model.element.ElementKind -import javax.lang.model.element.VariableElement - -public open class JavaVariableDescriptor(ctx: AnalysisContext, private val impl: VariableElement) : - VariableDescriptor, JavaValueDescriptor(ctx, impl) { - - override val isVar: Boolean - get() = - when (impl.kind) { - ElementKind.LOCAL_VARIABLE, - ElementKind.FIELD -> true - else -> false - } - override val isConst: Boolean = impl.constantValue != null - override val isLateInit: Boolean = false -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAsIs.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAsIs.kt deleted file mode 100644 index f25e03f3e..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAsIs.kt +++ /dev/null @@ -1,43 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IsExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpresionKind -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import com.sun.source.tree.InstanceOfTree -import com.sun.source.tree.TypeCastTree - -public class JavaTypeCast(private val ctx: AnalysisContext, private val impl: TypeCastTree) : - TypeCastExpression, JavaElement(ctx, impl) { - override val left: Expression - get() = impl.expression.model(ctx) - override val right: TypeReference - get() = impl.type.model(ctx) - override val operationToken: String - get() = "as" - override val operationReference: SimpleNameExpression - get() = JavaFakeReference("as", this) - - // Java does not have nullable as - override val kind: TypeCastExpresionKind - get() = TypeCastExpresionKind.POSITIVE_TYPE_CAST -} - -public class JavaInstanceOf(private val ctx: AnalysisContext, private val impl: InstanceOfTree) : - IsExpression, JavaElement(ctx, impl) { - override val leftHandSide: Expression - get() = impl.expression.model(ctx) - override val typeReference: TypeReference? - get() = JavaTypeReference(ctx, impl.type) - override val operationReference: SimpleNameExpression - get() = JavaFakeReference("instanceof", this) - - // Java does not have negated instanceof - override val isNegated: Boolean = false -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssert.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssert.kt deleted file mode 100644 index 4301763d5..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssert.kt +++ /dev/null @@ -1,138 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.descriptors.JavaAnnotations -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssertExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import com.sun.source.tree.AssertTree -import javax.lang.model.type.TypeMirror - -public class JavaAssert(private val ctx: AnalysisContext, private val impl: AssertTree) : - AssertExpression, JavaElement(ctx, impl) { - override fun getResolvedCall(context: ResolutionContext): ResolvedCall = - JavaAssertFakeCall(ctx, impl) - override val condition: Expression - get() = impl.condition.model(ctx) - override val detail: Expression? - get() = impl.detail?.model(ctx) -} - -public class JavaAssertFakeCall(private val ctx: AnalysisContext, private val impl: AssertTree) : - ResolvedCall { - override val callElement: Element - get() = impl.model(ctx) - override val typeArguments: Map - get() = emptyMap() - - private val fakeDescriptor: JavaAssertFakeDescriptor = - JavaAssertFakeDescriptor(ctx, impl.detail != null) - override val resultingDescriptor: CallableDescriptor - get() = fakeDescriptor - - override val valueArguments: Map - get() = - if (impl.detail != null) { - mapOf( - fakeDescriptor.predicateParameter to - JavaExpressionValueArgument(ctx, impl.condition, fakeDescriptor.predicateParameter), - fakeDescriptor.messageParameter to - JavaExpressionValueArgument(ctx, impl.detail, fakeDescriptor.messageParameter) - ) - } else { - mapOf( - fakeDescriptor.predicateParameter to - JavaExpressionValueArgument(ctx, impl.condition, fakeDescriptor.predicateParameter) - ) - } - - override fun getReturnType(): Type = ctx.symbolTable.voidType.model(ctx) - - override fun getReceiverExpression(): Expression? = null - override val dispatchReceiver: ReceiverValue? = null - override val extensionReceiver: ReceiverValue? = null -} - -public class JavaAssertFakeDescriptor( - private val ctx: AnalysisContext, - private val withDetail: Boolean -) : CallableDescriptor { - override fun impl(): Any = this - - override val fqNameSafe: FqName = FqName(AssertExpression.FAKE_ASSERT_NAME) - override val name: Name = Name(AssertExpression.FAKE_ASSERT_NAME) - - override val extensionReceiverParameter: ReceiverParameterDescriptor? = null - override val dispatchReceiverParameter: ReceiverParameterDescriptor? = null - override val typeParameters: List = emptyList() - override val returnType: Type = ctx.symbolTable.voidType.model(ctx) - - public val predicateParameter: ValueParameterDescriptor = - JavaAssertFakeParameter(ctx, 0, "predicate", ctx.symbolTable.booleanType, this) - public val messageParameter: ValueParameterDescriptor = - JavaAssertFakeParameter(ctx, 1, "msg", ctx.symbolTable.stringType, this) - - override val valueParameters: List = - if (withDetail) listOf(predicateParameter, messageParameter) else listOf(predicateParameter) - override val allParameters: List = valueParameters - - override fun annotations(): Annotations = JavaAnnotations(ctx, emptyList()) - override val overriddenDescriptors: Collection = emptyList() - override val containingDeclaration: DeclarationDescriptor? = null - override val containingPackage: FqName? = null - override fun element(): Element? = null -} - -public class JavaAssertFakeParameter( - private val ctx: AnalysisContext, - public override val index: Int, - name: String, - private val typeMirror: TypeMirror, - override val containingDeclaration: DeclarationDescriptor -) : ValueParameterDescriptor { - override fun impl(): Any = this - - override val type: Type - get() = typeMirror.model(ctx) - override val returnType: Type - get() = type - override val fqNameSafe: FqName = FqName(name) - override val name: Name = Name(name) - - override val isCrossinline: Boolean = false - override val isNoinline: Boolean = false - override val varargElementType: Type? = null - override fun declaresDefaultValue(): Boolean = false - override val defaultValue: Expression? = null - override val isVar: Boolean = false - override val isConst: Boolean = false - override val isLateInit: Boolean = false - - override val allParameters: List = emptyList() - override val extensionReceiverParameter: ReceiverParameterDescriptor? = null - override val dispatchReceiverParameter: ReceiverParameterDescriptor? = null - override val typeParameters: List = emptyList() - override val valueParameters: List = emptyList() - override val overriddenDescriptors: Collection = emptyList() - - override val containingPackage: FqName? = null - override fun element(): Element? = null - override fun annotations(): Annotations = JavaAnnotations(ctx, emptyList()) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment.kt deleted file mode 100644 index 40c059438..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaAssignment.kt +++ /dev/null @@ -1,84 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssignmentExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import com.sun.source.tree.AssignmentTree -import com.sun.source.tree.CompoundAssignmentTree -import com.sun.source.tree.Tree -import com.sun.tools.javac.tree.JCTree - -public class JavaAssignment(private val ctx: AnalysisContext, private val impl: AssignmentTree) : - AssignmentExpression, JavaElement(ctx, impl) { - override val left: Expression - get() = impl.variable.model(ctx) - override val right: Expression - get() = impl.expression.model(ctx) - - // these three come from the Kotlin representation - override val operationToken: String = "=" - override val operationTokenRpr: String = "EQ" - override val operationReference: SimpleNameExpression - get() = JavaFakeReference("=", this) -} - -// the compound assignments "var op= exp" -// are translated as "var = var op exp" -public class JavaCompoundAssignment( - private val ctx: AnalysisContext, - private val impl: CompoundAssignmentTree -) : AssignmentExpression, JavaElement(ctx, impl) { - override val left: Expression - get() = impl.variable.model(ctx) - override val right: Expression - get() = JavaCompoundAssignmentRHS(ctx, impl) - - // these three come from the Kotlin representation - override val operationToken: String = "=" - override val operationTokenRpr: String = "EQ" - override val operationReference: SimpleNameExpression - get() = JavaFakeReference("=", this) -} - -public class JavaCompoundAssignmentRHS( - private val ctx: AnalysisContext, - private val impl: CompoundAssignmentTree -) : BinaryExpression, JavaElement(ctx, impl) { - - private val operatorName: String = compoundkindNames[impl.kind] ?: "UNKNOWN" - override val operationReference: SimpleNameExpression - get() = JavaFakeReference(ctx.elements.getName(operatorName).toString(), this) - - override val operationToken: String - get() = - when (impl) { - is JCTree.JCAssignOp -> impl.operator.name.toString() - else -> operatorName - } - override val operationTokenRpr: String - get() = operatorName - override val left: Expression - get() = impl.variable.model(ctx) - override val right: Expression - get() = impl.expression.model(ctx) -} - -internal val compoundkindNames: Map = - mapOf( - Tree.Kind.MULTIPLY_ASSIGNMENT to "MUL", - Tree.Kind.DIVIDE_ASSIGNMENT to "DIV", - Tree.Kind.REMAINDER_ASSIGNMENT to "REM", - Tree.Kind.PLUS_ASSIGNMENT to "PLUS", - Tree.Kind.MINUS_ASSIGNMENT to "MINUS", - Tree.Kind.LEFT_SHIFT_ASSIGNMENT to "SHIFTL", // invented - Tree.Kind.RIGHT_SHIFT_ASSIGNMENT to "SHIFTR", // invented - Tree.Kind.UNSIGNED_RIGHT_SHIFT_ASSIGNMENT to "USHIFTR", // invented - Tree.Kind.AND_ASSIGNMENT to "BITAND", - Tree.Kind.OR_ASSIGNMENT to "BITOR", - Tree.Kind.XOR_ASSIGNMENT to "BITXOR", - ) diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaBlock.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaBlock.kt deleted file mode 100644 index 4bf186b74..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaBlock.kt +++ /dev/null @@ -1,33 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import com.sun.source.tree.BlockTree -import com.sun.source.tree.EmptyStatementTree -import com.sun.source.tree.ExpressionStatementTree -import com.sun.source.tree.Tree - -public open class JavaBlockParent( - private val ctx: AnalysisContext, - private val elements: List, - owner: Tree -) : BlockExpression, JavaElement(ctx, owner) { - override val statements: List - get() = elements.map { it.model(ctx) } - override val firstStatement: Expression? - get() = statements.firstOrNull() - override val implicitReturnFromLast: Boolean = false -} - -public class JavaBlock(ctx: AnalysisContext, impl: BlockTree) : - BlockExpression, JavaBlockParent(ctx, impl.statements, impl) {} - -public class JavaSingleBlock(ctx: AnalysisContext, impl: ExpressionStatementTree) : - BlockExpression, JavaBlockParent(ctx, listOf(impl.expression), impl) {} - -public class JavaEmptyBlock(ctx: AnalysisContext, impl: EmptyStatementTree) : - BlockExpression, JavaBlockParent(ctx, emptyList(), impl) {} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaCall.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaCall.kt deleted file mode 100644 index 57103978e..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaCall.kt +++ /dev/null @@ -1,123 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionLambdaArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.OperationExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.UnaryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument -import com.sun.source.tree.BinaryTree -import com.sun.source.tree.MemberSelectTree -import com.sun.source.tree.MethodInvocationTree -import com.sun.source.tree.NewClassTree -import com.sun.source.tree.Tree -import com.sun.source.tree.UnaryTree -import com.sun.tools.javac.tree.JCTree - -public class JavaCall(private val ctx: AnalysisContext, private val impl: MethodInvocationTree) : - CallExpression, JavaElement(ctx, impl) { - override val calleeExpression: Expression? - get() = this.getResolvedCall()?.getReceiverExpression() - override val typeArguments: List - get() = impl.typeArguments.mapNotNull { JavaTypeProjection(ctx, it) } - override val valueArguments: List - get() = this.getResolvedCall()?.valueArguments?.flatMap { it.value.arguments }.orEmpty() - // Java does not have final block arguments - override val lambdaArguments: List - get() = emptyList() -} - -public class JavaConstructorCall(private val ctx: AnalysisContext, private val impl: NewClassTree) : - CallExpression, JavaElement(ctx, impl) { - override val calleeExpression: Expression? = null - override val typeArguments: List - get() = impl.typeArguments.mapNotNull { JavaTypeProjection(ctx, it) } - override val valueArguments: List - get() = this.getResolvedCall()?.valueArguments?.flatMap { it.value.arguments }.orEmpty() - // Java does not have final block arguments - override val lambdaArguments: List - get() = emptyList() -} - -public class JavaMemberSelect( - private val ctx: AnalysisContext, - private val impl: MemberSelectTree -) : CallExpression, JavaElement(ctx, impl) { - override val calleeExpression: Expression? - get() = impl.expression?.model(ctx) - override val typeArguments: List - get() = emptyList() - override val valueArguments: List - get() = emptyList() - // Java does not have final block arguments - override val lambdaArguments: List - get() = emptyList() -} - -public open class JavaOperation(private val ctx: AnalysisContext, impl: Tree) : - OperationExpression, JavaElement(ctx, impl) { - protected val operatorName: String = kindNames[impl.kind] ?: "UNKNOWN" - override val operationReference: SimpleNameExpression - get() = JavaFakeReference(ctx.elements.getName(operatorName).toString(), this) -} - -public class JavaUnary(private val ctx: AnalysisContext, private val impl: UnaryTree) : - UnaryExpression, JavaOperation(ctx, impl) { - override val baseExpression: Expression - get() = impl.expression.model(ctx) -} - -public class JavaBinary(private val ctx: AnalysisContext, private val impl: BinaryTree) : - BinaryExpression, JavaOperation(ctx, impl) { - override val operationToken: String - get() = - when (impl) { - is JCTree.JCOperatorExpression -> impl.operator.name.toString() - else -> operatorName - } - override val operationTokenRpr: String - get() = operatorName - override val left: Expression - get() = impl.leftOperand.model(ctx) - override val right: Expression - get() = impl.rightOperand.model(ctx) -} - -// for the names look at [org.jetbrains.kotlin.lexer.KtTokens] -internal val kindNames: Map = - mapOf( - Tree.Kind.POSTFIX_INCREMENT to "PLUSPLUS", - Tree.Kind.POSTFIX_DECREMENT to "MINUSMINUS", - Tree.Kind.PREFIX_INCREMENT to "PLUSPLUS", - Tree.Kind.PREFIX_DECREMENT to "MINUSMINUS", - Tree.Kind.UNARY_PLUS to "PLUS", - Tree.Kind.UNARY_MINUS to "MINUS", - Tree.Kind.BITWISE_COMPLEMENT to "BITEXCL", // invented - Tree.Kind.LOGICAL_COMPLEMENT to "EXCL", - Tree.Kind.MULTIPLY to "MUL", - Tree.Kind.DIVIDE to "DIV", - Tree.Kind.REMAINDER to "REM", - Tree.Kind.PLUS to "PLUS", - Tree.Kind.MINUS to "MINUS", - Tree.Kind.LEFT_SHIFT to "SHIFTL", // invented - Tree.Kind.RIGHT_SHIFT to "SHIFTR", // invented - Tree.Kind.UNSIGNED_RIGHT_SHIFT to "USHIFTR", // invented - Tree.Kind.LESS_THAN to "LT", - Tree.Kind.LESS_THAN_EQUAL to "LTEQ", - Tree.Kind.GREATER_THAN to "GT", - Tree.Kind.GREATER_THAN_EQUAL to "GTEQ", - Tree.Kind.EQUAL_TO to "EQEQ", - Tree.Kind.NOT_EQUAL_TO to "EXCLEQ", - Tree.Kind.AND to "BITAND", - Tree.Kind.OR to "BITOR", - Tree.Kind.XOR to "BITXOR", - Tree.Kind.CONDITIONAL_AND to "ANDAND", - Tree.Kind.CONDITIONAL_OR to "OROR" - ) diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt deleted file mode 100644 index e6ba6c44e..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaClass.kt +++ /dev/null @@ -1,111 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.modelCautious -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Class -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedFunction -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry -import com.sun.source.tree.BlockTree -import com.sun.source.tree.ClassTree -import com.sun.source.tree.MethodTree -import com.sun.source.tree.Tree - -public class JavaInstanceInitializer( - private val ctx: AnalysisContext, - private val impl: BlockTree, - override val containingDeclaration: Declaration -) : AnonymousInitializer, JavaElement(ctx, impl) { - override val body: Expression - get() = impl.model(ctx) - override val name: String? - get() = null - override val parents: List - get() = listOf(containingDeclaration) + containingDeclaration.parents -} - -public class JavaClass(private val ctx: AnalysisContext, private val impl: ClassTree) : - Class, JavaElement(ctx, impl) { - - override val parents: List - get() = ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } - override val name: String - get() = impl.name.toString() - override val nameAsSafeName: Name - get() = Name(name) - override val fqName: FqName - get() = FqName(impl.fqName(ctx)) - override val nameAsName: Name - get() = nameAsSafeName - - override val superTypeListEntries: List - get() = (listOfNotNull(impl.extendsClause) + impl.implementsClause).map { it.model(ctx) } - - // instance initializers are blocks which appear at random - override val declarations: List - get() = - impl.members.map { - when (it) { - is BlockTree -> JavaInstanceInitializer(ctx, it, this) - else -> it.model(ctx) - } - } - override fun getAnonymousInitializers(): List = - declarations.filterIsInstance() - - override val body: ClassBody - get() = - object : ClassBody, JavaElement(ctx, impl) { - override val anonymousInitializers: List = emptyList() - override val properties: List = emptyList() - override val functions: List = - this@JavaClass.declarations - .mapNotNull { it as? JavaMethod } - .filter { it !is JavaConstructor } - override val enumEntries: List = emptyList() // TODO - override val allCompanionObjects: List = emptyList() - override val declarations: List = this@JavaClass.declarations - } - - // Java does not have many Kotlin niceties - override fun getProperties(): List = emptyList() - override val companionObjects: List = emptyList() - - // we map all Java constructors as "secondary" - override fun hasExplicitPrimaryConstructor(): Boolean = false - override fun hasPrimaryConstructor(): Boolean = false - override val primaryConstructor: PrimaryConstructor? = null - override val primaryConstructorModifierList: ModifierList? = null - override val primaryConstructorParameters: List = emptyList() - - override val secondaryConstructors: List - get() = declarations.filterIsInstance() - - override fun isAnnotation(): Boolean = impl.kind == Tree.Kind.ANNOTATION_TYPE - override fun isInterface(): Boolean = impl.kind == Tree.Kind.INTERFACE - override fun isEnum(): Boolean = impl.kind == Tree.Kind.ENUM - override fun isData(): Boolean = false - override fun isSealed(): Boolean = false - override fun isInner(): Boolean = ctx.resolver.parentTrees(impl).any { it is ClassTree } - override fun isInline(): Boolean = false - override fun isValue(): Boolean = false - override fun isTopLevel(): Boolean = !isInner() - override val isLocal: Boolean - get() = ctx.resolver.parentTrees(impl).any { it is MethodTree } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaConditional.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaConditional.kt deleted file mode 100644 index b224b2da3..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaConditional.kt +++ /dev/null @@ -1,62 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IfExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenCondition -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenExpression -import com.sun.source.tree.CaseTree -import com.sun.source.tree.ConditionalExpressionTree -import com.sun.source.tree.ExpressionTree -import com.sun.source.tree.IfTree -import com.sun.source.tree.SwitchTree -import com.sun.source.tree.Tree - -public abstract class JavaConditional( - private val ctx: AnalysisContext, - impl: Tree, - private val conditionTree: ExpressionTree, - private val thenTree: Tree, - private val elseTree: Tree? -) : IfExpression, JavaElement(ctx, impl) { - override val condition: Expression? - get() = conditionTree.model(ctx) - override val thenExpression: Expression? - get() = thenTree.model(ctx) - override val elseExpression: Expression? - get() = elseTree?.model(ctx) -} - -public class JavaIf(ctx: AnalysisContext, impl: IfTree) : - JavaConditional(ctx, impl, impl.condition, impl.thenStatement, impl.elseStatement) {} - -public class JavaTernaryConditional(ctx: AnalysisContext, impl: ConditionalExpressionTree) : - JavaConditional(ctx, impl, impl.condition, impl.trueExpression, impl.falseExpression) {} - -public class JavaSwitch(private val ctx: AnalysisContext, private val impl: SwitchTree) : - WhenExpression, JavaElement(ctx, impl) { - // no subject variables in Java - override val subjectVariable: Property? = null - override val subjectExpression: Expression - get() = impl.expression.model(ctx) - override val entries: List - get() = impl.cases.map { it.model(ctx) } - override val elseExpression: Expression? - get() = - impl.cases.firstOrNull { it.expression == null }?.model(ctx)?.expression -} - -public class JavaCase(private val ctx: AnalysisContext, private val impl: CaseTree) : - WhenEntry, JavaElement(ctx, impl) { - override val isElse: Boolean - get() = impl.expression == null - override val conditions: List - get() = listOfNotNull(impl.expression?.model(ctx)) - override val expression: Expression - get() = JavaBlockParent(ctx, impl.statements, impl) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaControlStatement.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaControlStatement.kt deleted file mode 100644 index 1c5260051..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaControlStatement.kt +++ /dev/null @@ -1,44 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BreakExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ContinueExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import com.sun.source.tree.BreakTree -import com.sun.source.tree.ContinueTree -import com.sun.source.tree.ReturnTree - -public class JavaReturn(private val ctx: AnalysisContext, private val impl: ReturnTree) : - ReturnExpression, JavaElement(ctx, impl) { - override val returnedExpression: Expression? - get() = impl.expression.model(ctx) - - // no return labels in Java - override val labeledExpression: Expression? = null - override fun getTargetLabel(): SimpleNameExpression? = null - override fun getLabelName(): String? = null - override fun getLabelNameAsName(): Name? = null -} - -public class JavaContinue(ctx: AnalysisContext, private val impl: ContinueTree) : - ContinueExpression, JavaElement(ctx, impl) { - override fun getTargetLabel(): SimpleNameExpression = - JavaFakeReference(impl.label.toString(), this) - override fun getLabelName(): String = impl.label.toString() - override fun getLabelNameAsName(): Name = impl.label.name() -} - -public class JavaBreak(ctx: AnalysisContext, private val impl: BreakTree) : - BreakExpression, JavaElement(ctx, impl) { - override fun getTargetLabel(): SimpleNameExpression = - JavaFakeReference(impl.label.toString(), this) - override fun getLabelName(): String = impl.label.toString() - override fun getLabelNameAsName(): Name = impl.label.name() -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElement.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElement.kt deleted file mode 100644 index ef3cd9dcf..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElement.kt +++ /dev/null @@ -1,63 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.modelCautious -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierListOwner -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import com.sun.source.tree.BlockTree -import com.sun.source.tree.Tree -import com.sun.tools.javac.tree.JCTree - -public open class JavaElement(private val ctx: AnalysisContext, private val impl: Tree) : - Expression, ModifierListOwner { - override fun impl(): Tree = impl - - override val text: String - get() = impl.toString() - - public fun getResolvedCall(): ResolvedCall? = impl.resolvedCall(ctx) - override fun getResolvedCall(context: ResolutionContext): ResolvedCall? = getResolvedCall() - - override fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? = null - - override fun parents(): List = - ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } - - override fun location(): CompilerMessageSourceLocation? { - val (start, end) = ctx.resolver.positionOf(impl) - return JavaSourceLocation(ctx.unit, start, end) - } - - override val psiOrParent: Element = this - - public fun type(): Type? = - when (impl) { - is JCTree -> impl.type?.modelCautious(ctx) - else -> null - } - override fun type(context: ResolutionContext): Type? = type() - - override fun lastBlockStatementOrThis(): Expression = - when (impl) { - is BlockTree -> impl.statements.last().model(ctx) - else -> this - } - - override val modifierList: ModifierList? = null // TODO: fix later - - override fun getAnnotations(): List = modifierList?.annotations.orEmpty() - override val annotationEntries: List - get() = modifierList?.annotationEntries.orEmpty() -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtils.kt deleted file mode 100644 index 66f2be427..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaElementUtils.kt +++ /dev/null @@ -1,46 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import com.sun.source.tree.BinaryTree -import com.sun.source.tree.ClassTree -import com.sun.source.tree.ExpressionTree -import com.sun.source.tree.MethodInvocationTree -import com.sun.source.tree.MethodTree -import com.sun.source.tree.NewClassTree -import com.sun.source.tree.PackageTree -import com.sun.source.tree.Tree -import com.sun.source.tree.UnaryTree - -public val ExpressionTree.argumentsFromEverywhere: List - get() = - when (this) { - is UnaryTree -> listOf(this.expression) - is BinaryTree -> listOf(this.leftOperand, this.rightOperand) - is MethodInvocationTree -> this.arguments - is NewClassTree -> this.arguments - else -> emptyList() - } - -public val ExpressionTree.typeArgumentsFromEverywhere: List - get() = - when (this) { - is MethodInvocationTree -> this.typeArguments - is NewClassTree -> this.typeArguments - else -> emptyList() - } - -public val Tree.name: String? - get() = - when (this) { - is MethodTree -> this.name.toString() - is ClassTree -> this.simpleName.toString() - is PackageTree -> this.packageName.toString() - else -> null - } - -public fun Tree.fqName(ctx: AnalysisContext): String { - val elements = listOf(this) + ctx.resolver.parentTrees(this) - return elements.reversed().mapNotNull { it.name }.joinToString(separator = ".") -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaException.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaException.kt deleted file mode 100644 index 28e246368..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaException.kt +++ /dev/null @@ -1,54 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CatchClause -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FinallySection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TryExpression -import com.sun.source.tree.CatchTree -import com.sun.source.tree.Tree -import com.sun.source.tree.TryTree - -public open class JavaTry(private val ctx: AnalysisContext, private val impl: TryTree) : - TryExpression, JavaElement(ctx, impl) { - override val tryBlock: BlockExpression - get() = impl.block.model(ctx) - override val catchClauses: List - get() = TODO("Not yet implemented") - override val finallyBlock: FinallySection? - get() = impl.finallyBlock?.let { JavaFinally(ctx, it, impl) } -} - -public open class JavaFinally( - private val ctx: AnalysisContext, - private val impl: Tree, - private val owner: TryTree -) : FinallySection, JavaElement(ctx, impl) { - override val finalExpression: BlockExpression - get() = - when (val final = impl.model(ctx)) { - is BlockExpression -> final - else -> JavaBlockParent(ctx, listOf(impl), owner) - } -} - -public open class JavaCatch(private val ctx: AnalysisContext, private val impl: CatchTree) : - CatchClause, JavaElement(ctx, impl) { - override val catchParameter: Parameter - get() = JavaParameter(ctx, impl.parameter, null) - override val parameterList: ParameterList? - get() = - object : ParameterList { - override val parameters: List = listOf(catchParameter) - override val ownerFunction: DeclarationWithBody? = null - } - override val catchBody: Expression? - get() = impl.block.model(ctx) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference.kt deleted file mode 100644 index 31171f110..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaFakeReference.kt +++ /dev/null @@ -1,32 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type - -public class JavaFakeReference(private val impl: String, private val parent: Element) : - SimpleNameExpression { - override fun getReferencedName(): String = impl - override fun getReferencedNameAsName(): Name = Name(impl) - - override fun type(context: ResolutionContext): Type? = null - override fun lastBlockStatementOrThis(): Expression = this - - override val text: String = impl - override fun impl(): Any = impl - - override fun getResolvedCall(context: ResolutionContext): ResolvedCall? = null - override fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? = null - override fun parents(): List = listOf(parent) + parent.parents() - override fun location(): CompilerMessageSourceLocation? = null - override val psiOrParent: Element - get() = this -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier.kt deleted file mode 100644 index e3911715f..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaIdentifier.kt +++ /dev/null @@ -1,45 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NameReferenceExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import com.sun.source.tree.IdentifierTree - -public class JavaIdentifier(ctx: AnalysisContext, private val impl: IdentifierTree) : - NameReferenceExpression, JavaElement(ctx, impl) { - init { - require(impl.name != ctx.names._this) - } - override fun getReferencedName(): String = impl.name.toString() - override fun getReferencedNameAsName(): Name = impl.name.name() -} - -public class JavaThis(ctx: AnalysisContext, impl: IdentifierTree) : - ThisExpression, JavaElement(ctx, impl) { - init { - require(impl.name == ctx.names._this) - } - - override fun getTargetLabel(): SimpleNameExpression? = null - override fun getLabelName(): String? = null - override fun getLabelNameAsName(): Name? = null -} - -public class JavaSuper(ctx: AnalysisContext, impl: IdentifierTree) : - SuperExpression, JavaElement(ctx, impl) { - init { - require(impl.name == ctx.names._super) - } - - override val superTypeQualifier: TypeReference? = null - override fun getTargetLabel(): SimpleNameExpression? = null - override fun getLabelName(): String? = null - override fun getLabelNameAsName(): Name? = null -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled.kt deleted file mode 100644 index 0903cb7ae..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLabeled.kt +++ /dev/null @@ -1,23 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LabeledExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import com.sun.source.tree.LabeledStatementTree - -public class JavaLabeled(private val ctx: AnalysisContext, private val impl: LabeledStatementTree) : - LabeledExpression, JavaElement(ctx, impl) { - override val baseExpression: Expression - get() = impl.statement.model(ctx) - - override fun getTargetLabel(): SimpleNameExpression? = null - - override fun getLabelName(): String? = impl.label?.toString() - override fun getLabelNameAsName(): Name? = impl.label?.name() -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLambda.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLambda.kt deleted file mode 100644 index 2b5e733a2..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLambda.kt +++ /dev/null @@ -1,86 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.modelCautious -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FunctionLiteral -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import com.sun.source.tree.LambdaExpressionTree - -public class JavaLambda(private val ctx: AnalysisContext, private val impl: LambdaExpressionTree) : - LambdaExpression, FunctionLiteral, DeclarationWithBody, JavaElement(ctx, impl) { - override val functionLiteral: FunctionLiteral - get() = this - - override val name: String? = null - override val nameAsSafeName: Name = Name("") - override val fqName: FqName? = null - override val nameAsName: Name? = null - - override val parents: List - get() = ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } - - override val valueParameters: List - get() = impl.parameters.map { JavaParameter(ctx, it, this) } - override val valueParameterList: ParameterList - get() = - object : ParameterList { - override val parameters: List - get() = this@JavaLambda.valueParameters - override val ownerFunction: DeclarationWithBody - get() = this@JavaLambda - } - - override fun hasParameterSpecification(): Boolean = false - - override val receiverTypeReference: TypeReference? - get() = null - override val typeReference: TypeReference? - get() = null - - override val typeParameters: List - get() = emptyList() - override val typeParameterList: TypeParameterList - get() = - object : TypeParameterList { - override val parameters: List - get() = emptyList() - } - - override val typeConstraints: List - get() = emptyList() - override val typeConstraintList: TypeConstraintList - get() = - object : TypeConstraintList { - override val constraints: List - get() = emptyList() - } - - override fun hasBody(): Boolean = impl.body != null - override fun body(): Expression = impl.body.model(ctx) - override val bodyExpression: Expression - get() = body() - override val bodyBlockExpression: BlockExpression? - get() = body() as? BlockExpression - override fun hasBlockBody(): Boolean = bodyBlockExpression != null - - override val isLocal: Boolean = true - - // Java lambda's cannot do this - override fun hasDeclaredReturnType(): Boolean = false -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral.kt deleted file mode 100644 index ad427e236..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLiteral.kt +++ /dev/null @@ -1,22 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NullExpression -import com.sun.source.tree.LiteralTree - -public class JavaLiteral(ctx: AnalysisContext, impl: LiteralTree) : - ConstantExpression, JavaElement(ctx, impl) { - init { - require(impl.value != null) - } -} - -public class JavaNull(ctx: AnalysisContext, impl: LiteralTree) : - NullExpression, JavaElement(ctx, impl) { - init { - require(impl.value == null) - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLoop.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLoop.kt deleted file mode 100644 index 9340b22b1..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaLoop.kt +++ /dev/null @@ -1,59 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoWhileExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ForExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThreePieceForExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhileExpression -import com.sun.source.tree.DoWhileLoopTree -import com.sun.source.tree.EnhancedForLoopTree -import com.sun.source.tree.ForLoopTree -import com.sun.source.tree.WhileLoopTree - -public class JavaDoWhile(private val ctx: AnalysisContext, private val impl: DoWhileLoopTree) : - DoWhileExpression, JavaElement(ctx, impl) { - override val condition: Expression - get() = impl.condition.model(ctx) - override val body: Expression - get() = impl.statement.model(ctx) -} - -public class JavaWhile(private val ctx: AnalysisContext, private val impl: WhileLoopTree) : - WhileExpression, JavaElement(ctx, impl) { - override val condition: Expression - get() = impl.condition.model(ctx) - override val body: Expression - get() = impl.statement.model(ctx) -} - -public class JavaEnhancedFor( - private val ctx: AnalysisContext, - private val impl: EnhancedForLoopTree -) : ForExpression, JavaElement(ctx, impl) { - override val loopParameter: Parameter - get() = JavaParameter(ctx, impl.variable, null) - override val destructuringDeclaration: DestructuringDeclaration? - get() = null - override val loopRange: Expression - get() = impl.expression.model(ctx) - override val body: Expression - get() = impl.statement.model(ctx) -} - -public class JavaFor(private val ctx: AnalysisContext, private val impl: ForLoopTree) : - ThreePieceForExpression, JavaElement(ctx, impl) { - override val initializer: List - get() = impl.initializer.map { it.model(ctx) } - override val condition: Expression - get() = impl.condition.model(ctx) - override val update: List - get() = impl.update.map { it.model(ctx) } - override val body: Expression - get() = impl.statement.model(ctx) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference.kt deleted file mode 100644 index 202f29421..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMemberReference.kt +++ /dev/null @@ -1,23 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableReferenceExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import com.sun.source.tree.MemberReferenceTree - -public class JavaMemberReference( - private val ctx: AnalysisContext, - private val impl: MemberReferenceTree -) : CallableReferenceExpression, JavaElement(ctx, impl) { - override val callableReference: SimpleNameExpression - get() = JavaFakeReference(impl.name.toString(), this) - override val receiverExpression: Expression? - get() = impl.qualifierExpression?.model(ctx) - override val hasQuestionMarks: Boolean = false - override val isEmptyLHS: Boolean - get() = impl.qualifierExpression == null -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMethod.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMethod.kt deleted file mode 100644 index 46d02789a..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaMethod.kt +++ /dev/null @@ -1,102 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.descriptors.enclosingClass -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.modelCautious -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorDelegationCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedFunction -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import com.sun.source.tree.MethodTree -import javax.lang.model.element.ElementKind -import javax.lang.model.element.ExecutableElement - -public open class JavaMethod(private val ctx: AnalysisContext, private val impl: MethodTree) : - NamedFunction, JavaElement(ctx, impl) { - - override val parents: List - get() = ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } - override val name: String - get() = impl.name.toString() - override val nameAsSafeName: Name - get() = Name(name) - override val fqName: FqName - get() = FqName(impl.fqName(ctx)) - override val nameAsName: Name - get() = nameAsSafeName - - override val isLocal: Boolean - get() = ctx.resolver.parent(impl) is MethodTree - - override val bodyExpression: Expression? - get() = impl.body?.model(ctx) - override fun hasBody(): Boolean = bodyExpression != null - override fun body(): Expression? = bodyExpression - - override fun hasInitializer(): Boolean = bodyExpression != null - override val initializer: Expression? - get() = bodyExpression - - override val bodyBlockExpression: BlockExpression? - get() = bodyExpression as? JavaBlock - override fun hasBlockBody(): Boolean = bodyBlockExpression != null - - override fun hasDeclaredReturnType(): Boolean = impl.returnType != null - override val typeReference: TypeReference? - get() = impl.returnType?.let { JavaTypeReference(ctx, it) } - override val receiverTypeReference: TypeReference? - get() = impl.receiverParameter?.type?.let { JavaTypeReference(ctx, it) } - - override val typeParameters: List - get() = impl.typeParameters.map { JavaTypeParameter(ctx, it) } - override val typeParameterList: TypeParameterList - get() = - object : TypeParameterList { - override val parameters: List = this@JavaMethod.typeParameters - } - - override val valueParameters: List - get() = impl.parameters.map { JavaParameter(ctx, it, this) } - override val valueParameterList: ParameterList - get() = - object : ParameterList { - override val parameters: List = this@JavaMethod.valueParameters - override val ownerFunction: DeclarationWithBody = this@JavaMethod - } - - // not available in Java - override val typeConstraints: List = emptyList() - override val typeConstraintList: TypeConstraintList? = null -} - -public class JavaConstructor(private val ctx: AnalysisContext, impl: MethodTree) : - SecondaryConstructor, JavaMethod(ctx, impl) { - - private val element: ExecutableElement = ctx.resolver.resolve(impl) as ExecutableElement - - init { - require(element.kind == ElementKind.CONSTRUCTOR) - } - - // yep, very unsafe, but we assume everything works smoothly - override fun getContainingClassOrObject(): ClassOrObject = - ctx.resolver.tree(element.enclosingClass!!)!!.model(ctx) - - override fun getDelegationCall(): ConstructorDelegationCall? = null -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable.kt deleted file mode 100644 index 693f27f6c..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParameterOrVariable.kt +++ /dev/null @@ -1,80 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.java.ast.modelCautious -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.VariableDeclaration -import com.sun.source.tree.VariableTree -import javax.lang.model.element.Modifier - -public open class JavaParameterOrVariable( - private val ctx: AnalysisContext, - private val impl: VariableTree -) : CallableDeclaration, JavaElement(ctx, impl) { - override val text: String - get() = name - - override val parents: List - get() = ctx.resolver.parentTrees(impl).mapNotNull { it.modelCautious(ctx) } - override val name: String - get() = impl.name.toString() - override val nameAsSafeName: Name - get() = Name(name) - override val fqName: FqName - get() = FqName(impl.fqName(ctx)) - override val nameAsName: Name - get() = nameAsSafeName - - override val typeReference: TypeReference? - get() = impl.type.model(ctx) - override val receiverTypeReference: TypeReference? = null - override val valueParameters: List = emptyList() - override val valueParameterList: ParameterList? = null - override val typeParameters: List = emptyList() - override val typeParameterList: TypeParameterList? = null - override val typeConstraints: List = emptyList() - override val typeConstraintList: TypeConstraintList? = null -} - -public class JavaVariable(private val ctx: AnalysisContext, private val impl: VariableTree) : - VariableDeclaration, JavaParameterOrVariable(ctx, impl) { - override val isVar: Boolean - get() = !impl.modifiers.flags.contains(Modifier.FINAL) - override val initializer: Expression? - get() = impl.initializer?.model(ctx) - override fun hasInitializer(): Boolean = impl.initializer != null -} - -public class JavaParameter( - private val ctx: AnalysisContext, - private val impl: VariableTree, - public override val ownerFunction: DeclarationWithBody? -) : Parameter, JavaParameterOrVariable(ctx, impl) { - override fun hasDefaultValue(): Boolean = impl.initializer != null - override val defaultValue: Expression? - get() = impl.initializer?.model(ctx) - - override val isMutable: Boolean = false - override val isVarArg: Boolean = false - override fun hasValOrVar(): Boolean = false - override val isLoopParameter: Boolean = false - override val isCatchParameter: Boolean = false - - override val destructuringDeclaration: DestructuringDeclaration? = null -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized.kt deleted file mode 100644 index d2d12a38c..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaParenthesized.kt +++ /dev/null @@ -1,17 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParenthesizedExpression -import com.sun.source.tree.ParenthesizedTree - -public class JavaParenthesized( - private val ctx: AnalysisContext, - private val impl: ParenthesizedTree -) : ParenthesizedExpression, JavaElement(ctx, impl) { - override val expression: Expression - get() = impl.expression.model(ctx) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt deleted file mode 100644 index 86bcf1d0c..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedCall.kt +++ /dev/null @@ -1,117 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import com.sun.source.tree.Tree -import com.sun.tools.javac.code.Symbol -import com.sun.tools.javac.tree.JCTree - -public class JavaResolvedCall( - private val ctx: AnalysisContext, - private val whole: Tree, - private val method: Symbol, - private val receiver: Tree?, - private val typeArgs: List, - private val arguments: List -) : ResolvedCall { - - override val callElement: Element - get() = whole.model(ctx) - - override fun getReceiverExpression(): JavaElement? = receiver?.model(ctx) - override val dispatchReceiver: ReceiverValue? - get() = - getReceiverExpression()?.let { - object : ReceiverValue { - override val type: Type = it.type()!! - override val isClassReceiver: Boolean - get() = false // TODO check later - } - } - // there are no extension receivers in Java - override val extensionReceiver: ReceiverValue? = null - - override val resultingDescriptor: CallableDescriptor - get() = method.model(ctx) - override fun getReturnType(): Type = whole.model(ctx).type()!! - - override val typeArguments: Map - get() = - resultingDescriptor.typeParameters - .zip(typeArgs) - .map { (descr, tree) -> descr to ctx.resolver.resolveType(tree)!!.model(ctx) } - .toMap() - override val valueArguments: Map - get() = - resultingDescriptor.valueParameters - .zip(arguments) - .map { (descr, tree) -> - descr to - when (tree) { - null -> JavaDefaultValueArgument(descr) - else -> JavaExpressionValueArgument(ctx, tree, descr) - } - } - .toMap() -} - -public fun Tree.resolvedCall( - ctx: AnalysisContext, - additionalTypeArgs: List = emptyList(), - additionalArgs: List = emptyList() -): JavaResolvedCall? = - when (this) { - is JCTree.JCMethodInvocation -> // look inside - this.meth?.resolvedCall(ctx, additionalTypeArgs + typeArguments, additionalArgs + arguments) - is JCTree.JCOperatorExpression -> - operator.perform { - JavaResolvedCall( - ctx, - this, - it, - null, - additionalTypeArgs, - additionalArgs + argumentsFromEverywhere - ) - } - is JCTree.JCMemberReference -> - sym.perform { - JavaResolvedCall( - ctx, - this, - it, - qualifierExpression, - additionalTypeArgs + typeArguments, - additionalArgs - ) - } - is JCTree.JCNewClass -> - constructor.perform { - JavaResolvedCall( - ctx, - this, - it, - null, - additionalTypeArgs + typeArguments, - additionalArgs + arguments - ) - } - is JCTree.JCFieldAccess -> - sym.perform { JavaResolvedCall(ctx, this, it, selected, additionalTypeArgs, additionalArgs) } - is JCTree.JCIdent -> - sym.perform { JavaResolvedCall(ctx, this, it, null, additionalTypeArgs, additionalArgs) } - else -> null - } - -private fun Symbol?.perform(f: (Symbol) -> JavaResolvedCall) = - this?.takeIf { it !is Symbol.TypeSymbol }?.let { f(it) } diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedValueArgument.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedValueArgument.kt deleted file mode 100644 index 5964e3541..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaResolvedValueArgument.kt +++ /dev/null @@ -1,54 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DefaultValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ExpressionValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName -import com.sun.source.tree.Tree - -public class JavaExpressionValueArgument( - private val ctx: AnalysisContext, - private val impl: Tree, - private val descr: ValueParameterDescriptor -) : ExpressionValueArgument { - override val valueArgument: ValueArgument - get() = JavaValueArgument(impl.model(ctx), descr) - override val arguments: List - get() = listOf(valueArgument) -} - -public class JavaDefaultValueArgument(private val descr: ValueParameterDescriptor) : - DefaultValueArgument { - override val valueArgument: ValueArgument? - get() = descr.defaultValue?.let { JavaValueArgument(it, descr) } - override val arguments: List - get() = listOfNotNull(valueArgument) -} - -public open class JavaValueArgument( - private val impl: Expression, - private val descr: ValueParameterDescriptor -) : ValueArgument { - override val argumentExpression: Expression - get() = impl - override fun getArgumentName(): ValueArgumentName = JavaValueArgumentName(descr) - - override fun isNamed(): Boolean = false - override fun isExternal(): Boolean = false - override val isSpread: Boolean = false -} - -public class JavaValueArgumentName(private val descr: ValueParameterDescriptor) : - ValueArgumentName { - override val asName: Name - get() = descr.name - override val referenceExpression: SimpleNameExpression? = null -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation.kt deleted file mode 100644 index 144ef505a..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSourceLocation.kt +++ /dev/null @@ -1,33 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation -import com.sun.source.tree.CompilationUnitTree - -public class JavaSourceLocation( - private val unit: CompilationUnitTree, - private val startPos: Long, - private val endPos: Long -) : CompilerMessageSourceLocation { - override val column: Int - get() = unit.lineMap.getColumnNumber(startPos).toInt() - override val columnEnd: Int - get() = unit.lineMap.getColumnNumber(endPos).toInt() - override val line: Int - get() = unit.lineMap.getLineNumber(startPos).toInt() - override val lineEnd: Int - get() = unit.lineMap.getLineNumber(endPos).toInt() - override val lineContent: String? - get() = null - override val path: String - get() = unit.sourceFile.toUri().path - - public companion object { - public operator fun invoke( - unit: CompilationUnitTree?, - startPos: Long, - endPos: Long - ): JavaSourceLocation? = unit?.let { JavaSourceLocation(it, startPos, endPos) } - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized.kt deleted file mode 100644 index cac8ee9cb..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaSynchronized.kt +++ /dev/null @@ -1,20 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SynchronizedExpression -import com.sun.source.tree.SynchronizedTree - -public class JavaSynchronized( - private val ctx: AnalysisContext, - private val impl: SynchronizedTree -) : SynchronizedExpression, JavaElement(ctx, impl) { - override val subject: Expression - get() = impl.expression.model(ctx) - override val block: BlockExpression - get() = impl.block.model(ctx) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtils.kt deleted file mode 100644 index 000950974..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTreeUtils.kt +++ /dev/null @@ -1,436 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import com.sun.source.tree.AnnotatedTypeTree -import com.sun.source.tree.AnnotationTree -import com.sun.source.tree.ArrayAccessTree -import com.sun.source.tree.ArrayTypeTree -import com.sun.source.tree.AssertTree -import com.sun.source.tree.AssignmentTree -import com.sun.source.tree.BinaryTree -import com.sun.source.tree.BlockTree -import com.sun.source.tree.BreakTree -import com.sun.source.tree.CaseTree -import com.sun.source.tree.CatchTree -import com.sun.source.tree.ClassTree -import com.sun.source.tree.CompilationUnitTree -import com.sun.source.tree.CompoundAssignmentTree -import com.sun.source.tree.ConditionalExpressionTree -import com.sun.source.tree.ContinueTree -import com.sun.source.tree.DoWhileLoopTree -import com.sun.source.tree.EmptyStatementTree -import com.sun.source.tree.EnhancedForLoopTree -import com.sun.source.tree.ErroneousTree -import com.sun.source.tree.ExportsTree -import com.sun.source.tree.ExpressionStatementTree -import com.sun.source.tree.ForLoopTree -import com.sun.source.tree.IdentifierTree -import com.sun.source.tree.IfTree -import com.sun.source.tree.ImportTree -import com.sun.source.tree.InstanceOfTree -import com.sun.source.tree.IntersectionTypeTree -import com.sun.source.tree.LabeledStatementTree -import com.sun.source.tree.LambdaExpressionTree -import com.sun.source.tree.LiteralTree -import com.sun.source.tree.MemberReferenceTree -import com.sun.source.tree.MemberSelectTree -import com.sun.source.tree.MethodInvocationTree -import com.sun.source.tree.MethodTree -import com.sun.source.tree.ModifiersTree -import com.sun.source.tree.ModuleTree -import com.sun.source.tree.NewArrayTree -import com.sun.source.tree.NewClassTree -import com.sun.source.tree.OpensTree -import com.sun.source.tree.PackageTree -import com.sun.source.tree.ParameterizedTypeTree -import com.sun.source.tree.ParenthesizedTree -import com.sun.source.tree.PrimitiveTypeTree -import com.sun.source.tree.ProvidesTree -import com.sun.source.tree.RequiresTree -import com.sun.source.tree.ReturnTree -import com.sun.source.tree.SwitchTree -import com.sun.source.tree.SynchronizedTree -import com.sun.source.tree.ThrowTree -import com.sun.source.tree.Tree -import com.sun.source.tree.TreeVisitor -import com.sun.source.tree.TryTree -import com.sun.source.tree.TypeCastTree -import com.sun.source.tree.TypeParameterTree -import com.sun.source.tree.UnaryTree -import com.sun.source.tree.UnionTypeTree -import com.sun.source.tree.UsesTree -import com.sun.source.tree.VariableTree -import com.sun.source.tree.WhileLoopTree -import com.sun.source.tree.WildcardTree -import com.sun.source.util.SimpleTreeVisitor - -public typealias OurTreeVisitor = SimpleTreeVisitor - -public fun Tree.visit(visitor: OurTreeVisitor): R = this.accept(visitor, Unit) - -public fun

Tree.visitRecursively(visitor: TreeVisitor, value: P): Unit = - this.accept(RecursiveTreeVisitor(visitor), value) - -public fun Tree.visitRecursively(visitor: TreeVisitor): Unit = - this.accept(RecursiveTreeVisitor(visitor), Unit) - -public fun Tree?.accept(visitor: TreeVisitor, value: P): R? = - this?.accept(visitor, value) - -public fun Iterable.accept(visitor: TreeVisitor, value: P): List = - this.map { it.accept(visitor, value) } - -public class RecursiveTreeVisitor

(private val underlying: TreeVisitor) : - SimpleTreeVisitor(Unit) { - override fun visitAnnotatedType(node: AnnotatedTypeTree?, p: P) { - node?.annotations?.accept(this, p) - underlying.visitAnnotatedType(node, p) - } - - override fun visitAnnotation(node: AnnotationTree?, p: P) { - node?.annotationType?.accept(this, p) - node?.arguments?.accept(this, p) - underlying.visitAnnotation(node, p) - } - - override fun visitMethodInvocation(node: MethodInvocationTree?, p: P) { - node?.typeArguments?.accept(this, p) - node?.methodSelect?.accept(this, p) - node?.arguments?.accept(this, p) - underlying.visitMethodInvocation(node, p) - } - - override fun visitAssert(node: AssertTree?, p: P) { - node?.condition?.accept(this, p) - node?.detail?.accept(this, p) - underlying.visitAssert(node, p) - } - - override fun visitAssignment(node: AssignmentTree?, p: P) { - node?.variable?.accept(this, p) - node?.expression?.accept(this, p) - underlying.visitAssignment(node, p) - } - - override fun visitCompoundAssignment(node: CompoundAssignmentTree?, p: P) { - node?.variable?.accept(this, p) - node?.expression?.accept(this, p) - underlying.visitCompoundAssignment(node, p) - } - - override fun visitBinary(node: BinaryTree?, p: P) { - node?.leftOperand?.accept(this, p) - node?.rightOperand?.accept(this, p) - underlying.visitBinary(node, p) - } - - override fun visitBlock(node: BlockTree?, p: P) { - node?.statements?.accept(this, p) - underlying.visitBlock(node, p) - } - - override fun visitBreak(node: BreakTree?, p: P) { - underlying.visitBreak(node, p) - } - - override fun visitCase(node: CaseTree?, p: P) { - node?.expression?.accept(this, p) - node?.statements?.accept(this, p) - underlying.visitCase(node, p) - } - - override fun visitCatch(node: CatchTree?, p: P) { - node?.parameter?.accept(this, p) - node?.block?.accept(this, p) - underlying.visitCatch(node, p) - } - - override fun visitClass(node: ClassTree?, p: P) { - node?.modifiers?.accept(this, p) - node?.typeParameters?.accept(this, p) - node?.extendsClause?.accept(this, p) - node?.implementsClause?.accept(this, p) - node?.members?.accept(this, p) - underlying.visitClass(node, p) - } - - override fun visitConditionalExpression(node: ConditionalExpressionTree?, p: P) { - node?.condition?.accept(this, p) - node?.trueExpression?.accept(this, p) - node?.falseExpression?.accept(this, p) - underlying.visitConditionalExpression(node, p) - } - - override fun visitContinue(node: ContinueTree?, p: P) { - underlying.visitContinue(node, p) - } - - override fun visitDoWhileLoop(node: DoWhileLoopTree?, p: P) { - node?.condition?.accept(this, p) - node?.statement?.accept(this, p) - underlying.visitDoWhileLoop(node, p) - } - - override fun visitErroneous(node: ErroneousTree?, p: P) { - node?.errorTrees?.accept(this, p) - underlying.visitErroneous(node, p) - } - - override fun visitExpressionStatement(node: ExpressionStatementTree?, p: P) { - node?.expression?.accept(this, p) - underlying.visitExpressionStatement(node, p) - } - - override fun visitEnhancedForLoop(node: EnhancedForLoopTree?, p: P) { - node?.variable?.accept(this, p) - node?.expression?.accept(this, p) - node?.statement?.accept(this, p) - underlying.visitEnhancedForLoop(node, p) - } - - override fun visitForLoop(node: ForLoopTree?, p: P) { - node?.initializer?.accept(this, p) - node?.condition?.accept(this, p) - node?.update?.accept(this, p) - node?.statement?.accept(this, p) - underlying.visitForLoop(node, p) - } - - override fun visitIdentifier(node: IdentifierTree?, p: P) { - underlying.visitIdentifier(node, p) - } - - override fun visitIf(node: IfTree?, p: P) { - node?.condition?.accept(this, p) - node?.thenStatement?.accept(this, p) - node?.elseStatement?.accept(this, p) - underlying.visitIf(node, p) - } - - override fun visitImport(node: ImportTree?, p: P) { - node?.qualifiedIdentifier?.accept(this, p) - underlying.visitImport(node, p) - } - - override fun visitArrayAccess(node: ArrayAccessTree?, p: P) { - node?.expression?.accept(this, p) - node?.index?.accept(this, p) - underlying.visitArrayAccess(node, p) - } - - override fun visitLabeledStatement(node: LabeledStatementTree?, p: P) { - node?.statement?.accept(this, p) - underlying.visitLabeledStatement(node, p) - } - - override fun visitLiteral(node: LiteralTree?, p: P) { - underlying.visitLiteral(node, p) - } - - override fun visitMethod(node: MethodTree?, p: P) { - node?.modifiers?.accept(this, p) - node?.returnType?.accept(this, p) - node?.typeParameters?.accept(this, p) - node?.parameters?.accept(this, p) - node?.throws?.accept(this, p) - node?.body?.accept(this, p) - underlying.visitMethod(node, p) - } - - override fun visitModifiers(node: ModifiersTree?, p: P) { - node?.annotations?.accept(this, p) - underlying.visitModifiers(node, p) - } - - override fun visitNewArray(node: NewArrayTree?, p: P) { - node?.dimensions?.accept(this, p) - node?.initializers?.accept(this, p) - node?.annotations?.accept(this, p) - node?.dimAnnotations?.forEach { it.accept(this, p) } - underlying.visitNewArray(node, p) - } - - override fun visitNewClass(node: NewClassTree?, p: P) { - node?.typeArguments?.accept(this, p) - node?.identifier?.accept(this, p) - node?.arguments?.accept(this, p) - node?.classBody?.accept(this, p) - underlying.visitNewClass(node, p) - } - - override fun visitLambdaExpression(node: LambdaExpressionTree?, p: P) { - node?.parameters?.accept(this, p) - node?.body?.accept(this, p) - underlying.visitLambdaExpression(node, p) - } - - override fun visitPackage(node: PackageTree?, p: P) { - node?.annotations?.accept(this, p) - node?.packageName?.accept(this, p) - underlying.visitPackage(node, p) - } - - override fun visitParenthesized(node: ParenthesizedTree?, p: P) { - node?.expression?.accept(this, p) - underlying.visitParenthesized(node, p) - } - - override fun visitReturn(node: ReturnTree?, p: P) { - node?.expression?.accept(this, p) - underlying.visitReturn(node, p) - } - - override fun visitMemberSelect(node: MemberSelectTree?, p: P) { - node?.expression?.accept(this, p) - underlying.visitMemberSelect(node, p) - } - - override fun visitMemberReference(node: MemberReferenceTree?, p: P) { - node?.qualifierExpression?.accept(this, p) - node?.typeArguments?.accept(this, p) - underlying.visitMemberReference(node, p) - } - - override fun visitEmptyStatement(node: EmptyStatementTree?, p: P) { - underlying.visitEmptyStatement(node, p) - } - - override fun visitSwitch(node: SwitchTree?, p: P) { - node?.expression?.accept(this, p) - node?.cases?.accept(this, p) - underlying.visitSwitch(node, p) - } - - override fun visitSynchronized(node: SynchronizedTree?, p: P) { - node?.expression?.accept(this, p) - node?.block?.accept(this, p) - underlying.visitSynchronized(node, p) - } - - override fun visitThrow(node: ThrowTree?, p: P) { - node?.expression?.accept(this, p) - underlying.visitThrow(node, p) - } - - override fun visitCompilationUnit(node: CompilationUnitTree?, p: P) { - node?.packageAnnotations?.accept(this, p) - node?.`package`?.accept(this, p) - node?.imports?.accept(this, p) - node?.typeDecls?.accept(this, p) - underlying.visitCompilationUnit(node, p) - } - - override fun visitTry(node: TryTree?, p: P) { - node?.block?.accept(this, p) - node?.catches?.accept(this, p) - node?.finallyBlock?.accept(this, p) - node?.resources?.accept(this, p) - underlying.visitTry(node, p) - } - - override fun visitParameterizedType(node: ParameterizedTypeTree?, p: P) { - node?.type?.accept(this, p) - node?.typeArguments?.accept(this, p) - underlying.visitParameterizedType(node, p) - } - - override fun visitUnionType(node: UnionTypeTree?, p: P) { - node?.typeAlternatives?.accept(this, p) - underlying.visitUnionType(node, p) - } - - override fun visitIntersectionType(node: IntersectionTypeTree?, p: P) { - node?.bounds?.accept(this, p) - underlying.visitIntersectionType(node, p) - } - - override fun visitArrayType(node: ArrayTypeTree?, p: P) { - node?.type?.accept(this, p) - underlying.visitArrayType(node, p) - } - - override fun visitTypeCast(node: TypeCastTree?, p: P) { - node?.expression?.accept(this, p) - node?.type?.accept(this, p) - underlying.visitTypeCast(node, p) - } - - override fun visitPrimitiveType(node: PrimitiveTypeTree?, p: P) { - underlying.visitPrimitiveType(node, p) - } - - override fun visitTypeParameter(node: TypeParameterTree?, p: P) { - node?.bounds?.accept(this, p) - underlying.visitTypeParameter(node, p) - } - - override fun visitInstanceOf(node: InstanceOfTree?, p: P) { - node?.expression?.accept(this, p) - node?.type?.accept(this, p) - underlying.visitInstanceOf(node, p) - } - - override fun visitUnary(node: UnaryTree?, p: P) { - node?.expression?.accept(this, p) - underlying.visitUnary(node, p) - } - - override fun visitVariable(node: VariableTree?, p: P) { - node?.modifiers?.accept(this, p) - node?.nameExpression?.accept(this, p) - node?.type?.accept(this, p) - node?.initializer?.accept(this, p) - underlying.visitVariable(node, p) - } - - override fun visitWhileLoop(node: WhileLoopTree?, p: P) { - node?.condition?.accept(this, p) - node?.statement?.accept(this, p) - underlying.visitWhileLoop(node, p) - } - - override fun visitWildcard(node: WildcardTree?, p: P) { - node?.bound?.accept(this, p) - underlying.visitWildcard(node, p) - } - - override fun visitModule(node: ModuleTree?, p: P) { - node?.annotations?.accept(this, p) - node?.name?.accept(this, p) - node?.directives?.accept(this, p) - underlying.visitModule(node, p) - } - - override fun visitExports(node: ExportsTree?, p: P) { - node?.packageName?.accept(this, p) - node?.moduleNames?.accept(this, p) - underlying.visitExports(node, p) - } - - override fun visitOpens(node: OpensTree?, p: P) { - node?.packageName?.accept(this, p) - node?.moduleNames?.accept(this, p) - underlying.visitOpens(node, p) - } - - override fun visitProvides(node: ProvidesTree?, p: P) { - node?.serviceName?.accept(this, p) - node?.implementationNames?.accept(this, p) - underlying.visitProvides(node, p) - } - - override fun visitRequires(node: RequiresTree?, p: P) { - node?.moduleName?.accept(this, p) - underlying.visitRequires(node, p) - } - - override fun visitUses(node: UsesTree?, p: P) { - node?.serviceName?.accept(this, p) - underlying.visitUses(node, p) - } - - override fun visitOther(node: Tree?, p: P) { - underlying.visitOther(node, p) - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElements.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElements.kt deleted file mode 100644 index 43e8b2e52..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeElements.kt +++ /dev/null @@ -1,49 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeElement -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import com.sun.source.tree.ArrayTypeTree -import com.sun.source.tree.ParameterizedTypeTree -import com.sun.source.tree.Tree - -public class JavaTypeReference -private constructor(private val ctx: AnalysisContext, private val impl: Tree) : - TypeReference, JavaElement(ctx, impl) { - override val typeElement: TypeElement - get() = JavaTypeElement(ctx, impl) - - public val underlyingTree: Tree - get() = impl - - public companion object { - public operator fun invoke(ctx: AnalysisContext, impl: Tree): JavaTypeReference? = - when (impl.kind) { - Tree.Kind.ARRAY_TYPE, - Tree.Kind.PARAMETERIZED_TYPE, - Tree.Kind.TYPE_PARAMETER, - Tree.Kind.PRIMITIVE_TYPE, - Tree.Kind.ANNOTATED_TYPE, - Tree.Kind.ANNOTATION_TYPE, - Tree.Kind.UNION_TYPE, - Tree.Kind.INTERSECTION_TYPE, - Tree.Kind.EXTENDS_WILDCARD, - Tree.Kind.SUPER_WILDCARD, - Tree.Kind.UNBOUNDED_WILDCARD -> JavaTypeReference(ctx, impl) - else -> null - } - } -} - -public class JavaTypeElement(private val ctx: AnalysisContext, private val impl: Tree) : - TypeElement, JavaElement(ctx, impl) { - override val typeArgumentsAsTypes: List - get() = - when (impl) { - is ArrayTypeTree -> listOfNotNull(JavaTypeReference(ctx, impl.type)) - is ParameterizedTypeTree -> impl.typeArguments.mapNotNull { JavaTypeReference(ctx, it) } - else -> emptyList() - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter.kt deleted file mode 100644 index 88f02a1e3..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeParameter.kt +++ /dev/null @@ -1,19 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance -import com.sun.source.tree.TypeParameterTree - -public class JavaTypeParameter( - private val ctx: AnalysisContext, - private val impl: TypeParameterTree -) : TypeParameter { - override val variance: Variance = Variance.Invariant - override val extendsBounds: List - get() = impl.bounds.map { it.model(ctx) } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection.kt deleted file mode 100644 index 33a5bb940..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/elements/JavaTypeProjection.kt +++ /dev/null @@ -1,22 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.elements - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ProjectionKind -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import com.sun.source.tree.Tree - -public class JavaTypeProjection(private val ctx: AnalysisContext, private val impl: Tree) : - TypeProjection { - override val projectionKind: ProjectionKind = - when (impl.kind) { - Tree.Kind.EXTENDS_WILDCARD -> ProjectionKind.OUT - Tree.Kind.SUPER_WILDCARD -> ProjectionKind.IN - Tree.Kind.UNBOUNDED_WILDCARD -> ProjectionKind.STAR - else -> ProjectionKind.NONE - } - override val typeReference: TypeReference? - get() = JavaTypeReference(ctx, impl) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaType.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaType.kt deleted file mode 100644 index 478b51f31..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaType.kt +++ /dev/null @@ -1,69 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.types - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.TypeProjection -import javax.lang.model.type.ArrayType -import javax.lang.model.type.DeclaredType -import javax.lang.model.type.TypeMirror -import javax.lang.model.type.TypeVariable - -public class JavaType(private val ctx: AnalysisContext, internal val ty: TypeMirror) : Type { - override val descriptor: ClassDescriptor? - get() = - ty.visit( - object : OurTypeVisitor(null) { - override fun visitDeclared(t: DeclaredType?, p: Unit?): ClassDescriptor? = - t?.asElement()?.model(ctx) - } - ) - - override fun isNullable(): Boolean = false - override val unwrappedNotNullableType: Type = this - override val isMarkedNullable: Boolean = false - - override val arguments: List - get() = - ty.visit( - object : OurTypeVisitor>(emptyList()) { - override fun visitArray(t: ArrayType?, p: Unit?): List = - listOfNotNull(t?.componentType).map { JavaTypeProjection(ctx, it) } - override fun visitDeclared(t: DeclaredType?, p: Unit?): List = - t?.typeArguments?.map { JavaTypeProjection(ctx, it) }.orEmpty() - } - ) - - private fun isEqualTo(other: TypeMirror): Boolean = ctx.types.isSameType(ty, other) - - override fun isBoolean(): Boolean = isEqualTo(ctx.symbolTable.booleanType) - override fun isInt(): Boolean = isEqualTo(ctx.symbolTable.intType) - override fun isLong(): Boolean = isEqualTo(ctx.symbolTable.longType) - override fun isFloat(): Boolean = isEqualTo(ctx.symbolTable.floatType) - override fun isDouble(): Boolean = isEqualTo(ctx.symbolTable.doubleType) - override fun isByte(): Boolean = isEqualTo(ctx.symbolTable.byteType) - override fun isShort(): Boolean = isEqualTo(ctx.symbolTable.shortType) - override fun isUnsignedNumberType(): Boolean = false // TODO - override fun isChar(): Boolean = isEqualTo(ctx.symbolTable.charType) - override fun isString(): Boolean = isEqualTo(ctx.symbolTable.stringType) - override fun isAnyOrNullableAny(): Boolean = isEqualTo(ctx.symbolTable.objectType) - - override fun isSubtypeOf(other: Type): Boolean { - if (other !is JavaType) return false - return ctx.types.isSubtype(ty, other.ty) - } - override fun isEqualTo(other: Type): Boolean { - if (other !is JavaType) return false - return ctx.types.isSameType(ty, other.ty) - } - - override fun isTypeParameter(): Boolean = - ty.visit( - object : OurTypeVisitor(false) { - override fun visitTypeVariable(t: TypeVariable?, p: Unit?): Boolean = true - } - ) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor.kt deleted file mode 100644 index 9bb77272f..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeConstructor.kt +++ /dev/null @@ -1,29 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.types - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import javax.lang.model.element.Modifier -import javax.lang.model.element.TypeElement -import javax.lang.model.type.TypeKind - -public class JavaTypeConstructor(private val ctx: AnalysisContext, private val impl: TypeElement) : - TypeConstructor { - override val parameters: List - get() = impl.typeParameters.map { it.model(ctx) } - override val supertypes: Collection - get() = - (listOfNotNull(impl.superclass.takeIf { it.kind != TypeKind.NONE }) + impl.interfaces).map { - it.model(ctx) - } - override val isFinal: Boolean - get() = impl.modifiers.contains(Modifier.FINAL) - override val isDenotable: Boolean = true - override val declarationDescriptor: ClassifierDescriptor - get() = impl.model(ctx) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor.kt deleted file mode 100644 index 9a0d46b11..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeParameterConstructor.kt +++ /dev/null @@ -1,26 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.types - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.java.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import javax.lang.model.element.Modifier -import javax.lang.model.element.TypeParameterElement - -public class JavaTypeParameterConstructor( - private val ctx: AnalysisContext, - private val impl: TypeParameterElement -) : TypeConstructor { - override val parameters: List = emptyList() - override val supertypes: Collection - get() = impl.bounds.map { it.model(ctx) } - override val isFinal: Boolean - get() = impl.modifiers.contains(Modifier.FINAL) - override val isDenotable: Boolean = true - override val declarationDescriptor: ClassifierDescriptor - get() = impl.model(ctx) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection.kt deleted file mode 100644 index 2e7306efd..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeProjection.kt +++ /dev/null @@ -1,24 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.types - -import arrow.meta.plugins.analysis.java.AnalysisContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.TypeProjection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance -import javax.lang.model.type.TypeMirror -import javax.lang.model.type.WildcardType - -public class JavaTypeProjection(private val ctx: AnalysisContext, private val ty: TypeMirror) : - TypeProjection { - override val projectionKind: Variance = Variance.Invariant - override val type: Type - get() = JavaType(ctx, ty) - override val isStarProjection: Boolean - get() = - ty.visit( - object : OurTypeVisitor(false) { - override fun visitWildcard(t: WildcardType?, p: Unit?): Boolean = true - } - ) -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtils.kt b/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtils.kt deleted file mode 100644 index bb15ac345..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/kotlin/arrow/meta/plugins/analysis/java/ast/types/JavaTypeUtils.kt +++ /dev/null @@ -1,14 +0,0 @@ -@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE") - -package arrow.meta.plugins.analysis.java.ast.types - -import arrow.meta.plugins.analysis.java.AnalysisContext -import javax.lang.model.type.TypeMirror -import javax.lang.model.util.SimpleTypeVisitor9 - -public typealias OurTypeVisitor = SimpleTypeVisitor9 - -public fun TypeMirror.visit(visitor: OurTypeVisitor): R = this.accept(visitor, Unit) - -public fun TypeMirror.allSupertypes(ctx: AnalysisContext): Set = - ctx.types.directSupertypes(this).flatMap { setOf(it) + it.allSupertypes(ctx) }.toSet() diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/com.sun.source.util.Plugin b/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/com.sun.source.util.Plugin deleted file mode 100644 index 36566bf14..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/com.sun.source.util.Plugin +++ /dev/null @@ -1 +0,0 @@ -arrow.meta.plugins.analysis.java.AnalysisJavaPlugin \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/javax.annotation.processing.Processor deleted file mode 100644 index 5bd1670d0..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/main/resources/META-INF/services/javax.annotation.processing.Processor +++ /dev/null @@ -1 +0,0 @@ -arrow.meta.plugins.analysis.java.AnalysisJavaProcessor \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/AnalysisTests.kt b/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/AnalysisTests.kt deleted file mode 100644 index 50684e009..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/AnalysisTests.kt +++ /dev/null @@ -1,307 +0,0 @@ -package arrow.meta.plugins.analysis.java - -import org.junit.jupiter.api.Test - -class AnalysisTests { - - @Test - fun `first test, ok`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Example { - public int f(int x) { - pre(x > 0, () -> "x must be positive"); - return post(x + 1, (r) -> r > 0, () -> "result is positive"); - } - } - """( - withPlugin = { succeeded() }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `first test, ok, using assert`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Example { - public int f(int x) { - assert x > 0 : "x must be positive"; - return post(x + 1, (r) -> r > 0, () -> "result is positive"); - } - } - """( - withPlugin = { succeeded() }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `first test, fails`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Example { - public int f(int x) { - pre(x > 0, () -> "x must be positive"); - return post(x - 1, (r) -> r > 0, () -> "result is positive"); - } - } - """( - withPlugin = { - failed() - hadErrorContaining("fails to satisfy the post-condition") - }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `first test, post at beginning, fails`() { - """ - import arrow.analysis.RefinementDSLKt; - import static arrow.analysis.RefinementDSLKt.*; - - final class Example { - public int f(int x) { - pre(x > 0, () -> "x must be positive"); - post((Integer r) -> r > 0, () -> "result is positive"); - return x - 1; - } - } - """( - withPlugin = { - failed() - hadErrorContaining("fails to satisfy the post-condition") - }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `ternary conditional`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Example { - public int f(int x) { - pre(x > 0, () -> "x must be positive"); - final int y = (x > 2) ? x + 1 : x - 1; - return post(y, (r) -> r > 0, () -> "result is positive"); - } - } - """( - withPlugin = { - failed() - hadErrorContaining("fails to satisfy the post-condition") - }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `conditional, post at beginning, ok`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Example { - public int f(int x) { - pre(x > 0, () -> "x must be positive"); - post((Integer r) -> r > 0, () -> "result is positive"); - if (x > 2) { - return x + 1; - } else { - return x + 2; - } - } - } - """( - withPlugin = { succeeded() }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `conditional, post at beginning, fail`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Example { - public int f(int x) { - pre(x > 0, () -> "x must be positive"); - post((Integer r) -> r > 0, () -> "result is positive"); - if (x > 2) { - return x + 1; - } else { - return x - 1; - } - } - } - """( - withPlugin = { - failed() - hadErrorContaining("fails to satisfy the post-condition") - }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `class invariant`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Positive { - - private final int n; - public int getValue() { - return n; - } - - public Positive(int value) { - pre(value >= 0, () -> "value is positive"); - this.n = value; - } - - { - post((Positive r) -> r.getValue() >= 0, () -> "result is positive"); - } - } - """( - withPlugin = { succeeded() }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `class invariant, wrong`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Positive { - - private int n; - public int getValue() { - return n; - } - - public Positive(int value) { - pre(value >= 0, () -> "value is positive"); - this.n = value; - } - - static void main() { - Positive x = new Positive(-1); - } - } - """( - withPlugin = { - failed() - hadErrorContaining("pre-condition `value is positive` is not satisfied") - }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `class invariant, on methods, ok`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Positive { - - private final int n; - public int getValue() { - return n; - } - - public Positive(int value) { - pre(value >= 0, () -> "value is positive"); - this.n = value; - } - - { - post((Positive r) -> r.getValue() >= 0, () -> "result is positive"); - } - - public Positive add(Positive other) { - return new Positive(this.getValue() + other.getValue()); - } - } - """( - withPlugin = { succeeded() }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `class invariant, on methods, wrong`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Positive { - - private final int n; - public int getValue() { - return n; - } - - public Positive(int value) { - pre(value >= 0, () -> "value is positive"); - this.n = value; - } - - { - post((Positive r) -> r.getValue() >= 0, () -> "result is positive"); - } - - public Positive subtract(Positive other) { - return new Positive(this.getValue() - other.getValue()); - } - } - """( - withPlugin = { - failed() - hadErrorContaining("pre-condition `value is positive` is not satisfied") - }, - withoutPlugin = { succeeded() } - ) - } - - @Test - fun `class invariant with assert, on methods, wrong`() { - """ - import static arrow.analysis.RefinementDSLKt.*; - - final class Positive { - - private final int n; - - public Positive(int value) { - pre(value >= 0, () -> "value is positive"); - this.n = value; - } - - public int getValue() { - return n; - } - - { - assert this.getValue() >= 0 : "result is positive"; - } - - public Positive subtract(Positive other) { - return new Positive(this.getValue() - other.getValue()); - } - } - """( - withPlugin = { - failed() - hadErrorContaining("pre-condition `result is positive` is not satisfied") - }, - withoutPlugin = { succeeded() } - ) - } -} diff --git a/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/Utils.kt b/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/Utils.kt deleted file mode 100644 index a2075c34b..000000000 --- a/arrow-libs/analysis/analysis/java-plugin/src/test/kotlin/arrow/meta/plugins/analysis/java/Utils.kt +++ /dev/null @@ -1,46 +0,0 @@ -package arrow.meta.plugins.analysis.java - -import com.google.testing.compile.CompilationSubject -import com.google.testing.compile.CompilationSubject.assertThat -import com.google.testing.compile.Compiler -import com.google.testing.compile.JavaFileObjects - -public operator fun String.invoke( - withPlugin: CompilationSubject.() -> Unit, - withoutPlugin: CompilationSubject.() -> Unit -) = ("Example" to this)(withPlugin, withoutPlugin) - -public operator fun Pair.invoke( - withPlugin: CompilationSubject.() -> Unit, - withoutPlugin: CompilationSubject.() -> Unit -) = mapOf(this)(withPlugin, withoutPlugin) - -public operator fun Map.invoke( - withPlugin: CompilationSubject.() -> Unit, - withoutPlugin: CompilationSubject.() -> Unit -) { - worker(config = { withOptions("-parameters") }, files = this, check = withoutPlugin) - worker( - config = { - withOptions( - "-parameters", - "-Xplugin:" + - AnalysisJavaPlugin.NAME + - " generatedSrcOutputDir=${System.getProperty("arrow.meta.generate.source.dir")}" - ) - .withProcessors(AnalysisJavaProcessor()) - }, - files = this, - check = withPlugin - ) -} - -private fun worker( - config: Compiler.() -> Compiler = { this }, - files: Map, - check: CompilationSubject.() -> Unit -): Unit { - val compiler = Compiler.javac().config() - val compilation = compiler.compile(files.map { (k, v) -> JavaFileObjects.forSourceString(k, v) }) - assertThat(compilation).check() -} diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/api/arrow-analysis-kotlin-gradle-plugin.api b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/api/arrow-analysis-kotlin-gradle-plugin.api deleted file mode 100644 index 2f346941e..000000000 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/api/arrow-analysis-kotlin-gradle-plugin.api +++ /dev/null @@ -1,17 +0,0 @@ -public final class arrow/meta/plugin/gradle/AnalysisGradlePlugin : arrow/meta/plugin/gradle/ArrowMetaGradlePlugin { - public fun ()V - public fun addMetaDependency (Lorg/gradle/api/Project;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public synthetic fun apply (Ljava/lang/Object;)V - public fun apply (Lorg/gradle/api/Project;)V - public fun applyToCompilation (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Lorg/gradle/api/provider/Provider; - public fun getArtifactId ()Ljava/lang/String; - public fun getCompilerPluginId ()Ljava/lang/String; - public fun getDependencies ()Ljava/util/List; - public fun getGroupId ()Ljava/lang/String; - public fun getPluginArtifact ()Lorg/jetbrains/kotlin/gradle/plugin/SubpluginArtifact; - public fun getPluginArtifactForNative ()Lorg/jetbrains/kotlin/gradle/plugin/SubpluginArtifact; - public fun getPluginId ()Ljava/lang/String; - public fun getVersion ()Ljava/lang/String; - public fun isApplicable (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Z -} - diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts deleted file mode 100644 index c2151c827..000000000 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/build.gradle.kts +++ /dev/null @@ -1,50 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - id(libs.plugins.kotlin.jvm.get().pluginId) - `java-gradle-plugin` - alias(libs.plugins.arrowGradleConfig.kotlin) - alias(libs.plugins.arrowGradleConfig.formatter) - alias(libs.plugins.arrowGradleConfig.publish) - alias(libs.plugins.kotlin.binaryCompatibilityValidator) -} - -tasks.processResources { - duplicatesStrategy = DuplicatesStrategy.WARN - filesMatching("**/analysis.plugin.properties") { - filter { it.replace("%analysisPluginVersion%", "$version") } - } -} - -kotlin { - explicitApi = null - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) - } -} - -dependencies { - api(libs.arrowGradlePluginCommons) - runtimeOnly(libs.classgraph) - - // Necessary during plugin execution to be found and added for compilation - api(libs.arrowMeta) - api(projects.arrowAnalysisKotlinPlugin) -} - -gradlePlugin { - plugins { - create("arrow") { - id = "io.arrow-kt.analysis.kotlin" - displayName = "Arrow Analysis Kotlin Gradle Plugin" - implementationClass = "arrow.meta.plugin.gradle.AnalysisGradlePlugin" - } - } -} - -pluginBundle { - website = "https://arrow-kt.io/docs/meta" - vcsUrl = "https://github.com/arrow-kt/arrow-meta" - description = "Functional companion to Kotlin's Compiler" - tags = listOf("kotlin", "compiler", "arrow", "plugin", "meta") -} diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/gradle.properties b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/gradle.properties deleted file mode 100644 index 9a9b4e467..000000000 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Maven publishing configuration -POM_NAME=Arrow Analysis Kotlin Gradle Plugin -POM_ARTIFACT_ID=arrow-analysis-kotlin-gradle-plugin -POM_PACKAGING=jar - -pom.name=Arrow Analysis Kotlin Gradle Plugin diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt deleted file mode 100644 index f7868b2ad..000000000 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/kotlin/arrow/meta/plugin/gradle/AnalysisGradlePlugin.kt +++ /dev/null @@ -1,32 +0,0 @@ -package arrow.meta.plugin.gradle - -import java.util.* -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation - -public class AnalysisGradlePlugin : ArrowMetaGradlePlugin { - // get the version from the analysis.plugin.properties file - private val properties = - Properties().also { it.load(this.javaClass.getResourceAsStream("analysis.plugin.properties")) } - - override val groupId: String = "io.arrow-kt" - override val artifactId: String = "arrow-analysis-kotlin-plugin" - override val version: String = properties.getProperty("analysisPluginVersion") - override val pluginId: String = "analysis" - - override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = - // do not run on test targets - if ( - kotlinCompilation.compilationName.endsWith( - KotlinCompilation.TEST_COMPILATION_NAME, - ignoreCase = true - ) - ) - false - else super.isApplicable(kotlinCompilation) - - override val dependencies: List> = - listOf( - Triple(groupId, "arrow-analysis-laws", version), - Triple(groupId, "arrow-analysis-types", version), - ) -} diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.kotlin.properties b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.kotlin.properties deleted file mode 100644 index 59332487f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/io.arrow-kt.analysis.kotlin.properties +++ /dev/null @@ -1 +0,0 @@ -implementation-class=arrow.meta.plugin.gradle.AnalysisGradlePlugin \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties b/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties deleted file mode 100644 index 31f336e35..000000000 --- a/arrow-libs/analysis/analysis/kotlin-gradle-plugin/src/main/resources/arrow/meta/plugin/gradle/analysis.plugin.properties +++ /dev/null @@ -1 +0,0 @@ -analysisPluginVersion=%analysisPluginVersion% diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api b/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api deleted file mode 100644 index 90458e2f0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/api/arrow-analysis-kotlin-plugin.api +++ /dev/null @@ -1,3662 +0,0 @@ -public final class arrow/meta/AnalysisMetaCliProcessor : arrow/meta/MetaCliProcessor { - public fun ()V -} - -public final class arrow/meta/AnalysisPlugin : arrow/meta/Meta { - public fun ()V - public fun intercept (Larrow/meta/phases/CompilerContext;)Ljava/util/List; -} - -public class arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm : org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages$Extension { - public static final field INSTANCE Larrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm; - public fun ()V - public fun getMap ()Lorg/jetbrains/kotlin/diagnostics/rendering/DiagnosticFactoryToRendererMap; -} - -public abstract interface class arrow/meta/plugins/analysis/errors/MetaErrors { - public static final field AnalysisException Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field ErrorParsingPredicate Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field InconsistentBodyPre Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field InconsistentCallPost Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field InconsistentConditions Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field InconsistentInvariants Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field LiskovProblem Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field UnsatBodyPost Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field UnsatCallPre Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field UnsatInvariants Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field UnsupportedElement Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field WarningParsingPredicate Lorg/jetbrains/kotlin/diagnostics/DiagnosticFactory1; - public static final field _initializer Ljava/lang/Object; -} - -public class arrow/meta/plugins/analysis/errors/RenderString : org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer { - public fun ()V - public synthetic fun render (Ljava/lang/Object;Lorg/jetbrains/kotlin/diagnostics/rendering/RenderingContext;)Ljava/lang/String; - public fun render (Ljava/lang/String;Lorg/jetbrains/kotlin/diagnostics/rendering/RenderingContext;)Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/Keys { - public static final field INSTANCE Larrow/meta/plugins/analysis/phases/Keys; - public final fun hints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Ljava/lang/String; - public final fun parseWarnings (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Ljava/lang/String; - public final fun parseWarnings (Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;)Ljava/lang/String; - public final fun solverState (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Ljava/lang/String; - public final fun stage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor;)Ljava/lang/String; - public final fun stage (Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;)Ljava/lang/String; -} - -public final class arrow/meta/plugins/analysis/phases/PhasesKt { - public static final fun declarationDescriptors (Ljava/util/Collection;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/Stage : java/lang/Enum { - public static final field CollectConstraints Larrow/meta/plugins/analysis/phases/Stage; - public static final field Init Larrow/meta/plugins/analysis/phases/Stage; - public static final field Prove Larrow/meta/plugins/analysis/phases/Stage; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/Stage; - public static fun values ()[Larrow/meta/plugins/analysis/phases/Stage; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext, org/jetbrains/kotlin/resolve/BindingTrace { - public fun (Larrow/meta/plugins/analysis/phases/analysis/solver/state/SolverState;Lorg/jetbrains/kotlin/resolve/BindingTrace;Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;)V - public fun backingPropertyForConstructorParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; - public fun constraintsDSLElements (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Ljava/util/List; - public fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun descriptorFor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; - public fun get (Lorg/jetbrains/kotlin/util/slicedMap/ReadOnlySlice;Ljava/lang/Object;)Ljava/lang/Object; - public fun getBindingContext ()Lorg/jetbrains/kotlin/resolve/BindingContext; - public fun getKeys (Lorg/jetbrains/kotlin/util/slicedMap/WritableSlice;)Ljava/util/Collection; - public fun getModule ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor; - public fun getType (Lorg/jetbrains/kotlin/psi/KtExpression;)Lorg/jetbrains/kotlin/types/KotlinType; - public fun getTypes ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Types; - public fun handleError (Larrow/meta/plugins/analysis/phases/analysis/solver/errors/ErrorIds;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public fun record (Lorg/jetbrains/kotlin/util/slicedMap/WritableSlice;Ljava/lang/Object;)V - public fun record (Lorg/jetbrains/kotlin/util/slicedMap/WritableSlice;Ljava/lang/Object;Ljava/lang/Object;)V - public fun recordType (Lorg/jetbrains/kotlin/psi/KtExpression;Lorg/jetbrains/kotlin/types/KotlinType;)V - public fun report (Lorg/jetbrains/kotlin/diagnostics/Diagnostic;)V - public final fun reportAnalysisException (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportInconsistentCallPost (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportInconsistentConditions (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportInconsistentInvariants (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportLiskovProblem (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportUnsatInvariants (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public final fun reportUnsupported (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;Ljava/lang/String;)V - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun wantsDiagnostics ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall { - public fun (Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedCall;)V - public fun getCallElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getDispatchReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public fun getExtensionReceiver ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public final fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedCall; - public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getResultingDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeArguments ()Ljava/util/Map; - public fun getValueArguments ()Ljava/util/Map; - public final fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedCall; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreterKt { - public static final fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Lorg/jetbrains/kotlin/psi/KtElement; - public static final fun model (Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static final fun model (Lorg/jetbrains/kotlin/psi/KtElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static final fun repr (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotated { - public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/annotations/Annotated; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor;)V - public fun argumentValueAsArrayOfString (Ljava/lang/String;)Ljava/util/List; - public fun argumentValueAsString (Ljava/lang/String;)Ljava/lang/String; - public fun getAllValueArguments ()Ljava/util/Map; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public final fun impl ()Lorg/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations { - public fun (Lorg/jetbrains/kotlin/descriptors/annotations/Annotations;)V - public fun findAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public synthetic fun getImpl ()Ljava/lang/Object; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/annotations/Annotations; - public fun hasAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Z - public fun isEmpty ()Z - public fun iterable ()Ljava/lang/Iterable; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { - public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public abstract fun descriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; - public abstract fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public abstract fun getAllParameters ()Ljava/util/List; - public abstract fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public abstract fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public abstract fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun getOverriddenDescriptors ()Ljava/util/Collection; - public abstract fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun getTypeParameters ()Ljava/util/List; - public abstract fun getValueParameters ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun descriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; - public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getAllParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Ljava/util/List; - public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getDispatchReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public static fun getExtensionReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Z - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getOverriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Ljava/util/Collection; - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public static fun getReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Ljava/util/List; - public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor;)Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor { - public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public abstract fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public abstract fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun descriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; - public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getAllParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Ljava/util/List; - public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getDispatchReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public static fun getExtensionReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z - public static fun getKind (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public static fun getModality (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getOverriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Ljava/util/Collection; - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public static fun getReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Ljava/util/List; - public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Ljava/util/List; - public static fun getVisibility (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public static fun isActual (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z - public static fun isExpect (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z - public static fun isExternal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor;)Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/ClassDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getCompanionObjectDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public fun getCompleteUnsubstitutedScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getConstructors ()Ljava/util/Collection; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getDeclaredTypeParameters ()Ljava/util/List; - public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ClassDescriptor; - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor$ClassKind; - public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public fun getSealedSubclasses ()Ljava/util/Collection; - public fun getStaticScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getSuperTypes ()Ljava/util/Collection; - public fun getThisAsReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; - public fun getUnsubstitutedInnerClassesScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getUnsubstitutedMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getUnsubstitutedPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; - public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptorWithTypeParameters; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public fun isActual ()Z - public fun isCompanionObject ()Z - public fun isData ()Z - public fun isEnumEntry ()Z - public fun isExpect ()Z - public fun isExternal ()Z - public fun isFun ()Z - public fun isInline ()Z - public fun isInner ()Z - public fun isValue ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor { - public abstract fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor$DefaultImpls { - public static fun getDefaultType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public static fun getTypeConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptorWithTypeParameters, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor { - public abstract fun getDeclaredTypeParameters ()Ljava/util/List; - public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptorWithTypeParameters; - public abstract fun isInner ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getDeclaredTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Ljava/util/List; - public static fun getDefaultType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z - public static fun getModality (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public static fun getTypeConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; - public static fun getVisibility (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public static fun isActual (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z - public static fun isExpect (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z - public static fun isExternal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z - public static fun isInner (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters;)Z -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor;)V - public fun getConstructedClass ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public fun isPrimary ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor { - public abstract fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public abstract fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public abstract fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Z - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptorWithVisibility, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { - public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Z - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public static fun getVisibility (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultDeclarationDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultDeclarationDescriptorWithVisibility : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility { - public fun (Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultFunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor;)V -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DefaultValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument { - public fun (Lorg/jetbrains/kotlin/resolve/calls/model/DefaultValueArgument;)V - public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; - public fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/DefaultValueArgument; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; - public fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; - public fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/DefaultValueArgument; - public synthetic fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; - public fun isExternal ()Z - public fun isNamed ()Z - public fun isSpread ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultVariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/VariableDescriptor;)V -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ExpressionValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionResolvedValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument { - public fun (Lorg/jetbrains/kotlin/resolve/calls/model/ExpressionValueArgument;)V - public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; - public fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ExpressionValueArgument; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; - public fun getValueArgument ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument; - public fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ExpressionValueArgument; - public synthetic fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; - public fun isExternal ()Z - public fun isNamed ()Z - public fun isSpread ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated { - public abstract fun getCorrespondingProperty ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/FieldDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun getCorrespondingProperty (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Z - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; -} - -public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun descriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getAllParameters ()Ljava/util/List; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeParameters ()Ljava/util/List; - public fun getValueParameters ()Ljava/util/List; - public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public fun isActual ()Z - public fun isExpect ()Z - public fun isExternal ()Z - public fun isInfix ()Z - public fun isInline ()Z - public fun isOperator ()Z - public fun isSuspend ()Z - public fun isTailrec ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/LocalVariableDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor;)V - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { - public abstract fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public abstract fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public abstract fun isActual ()Z - public abstract fun isExpect ()Z - public abstract fun isExternal ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z - public static fun getModality (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public static fun getVisibility (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public static fun isActual (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z - public static fun isExpect (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z - public static fun isExternal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor;)Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope { - public abstract fun getClassifierNames ()Ljava/util/Set; - public abstract fun getContributedDescriptors (Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public abstract fun getFunctionNames ()Ljava/util/Set; - public abstract fun getVariableNames ()Ljava/util/Set; - public abstract fun impl ()Lorg/jetbrains/kotlin/resolve/scopes/MemberScope; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope$DefaultImpls { - public static fun getClassifierNames (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope;)Ljava/util/Set; - public static fun getContributedDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope;Lkotlin/jvm/functions/Function1;)Ljava/util/List; - public static fun getFunctionNames (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope;)Ljava/util/Set; - public static fun getVariableNames (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope;)Ljava/util/Set; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ModuleDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPackage (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public fun getStableName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getSubPackagesOf (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName;)Ljava/util/List; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Named { - public abstract fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/Named; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed$DefaultImpls { - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageFragmentDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/PackageFragmentDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/PackageFragmentDescriptor; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/PackageFragmentDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PackageViewDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/PackageViewDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/PackageViewDescriptor; - public fun getMemberScope ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/MemberScope; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/PackageViewDescriptor; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor { - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/ParameterDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun descriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; - public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getAllParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Ljava/util/List; - public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getDispatchReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public static fun getExtensionReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Z - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getOverriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Ljava/util/Collection; - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public static fun getReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public static fun getType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Ljava/util/List; - public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyAccessorDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor;)V - public fun getCorrespondingVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/PropertyDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/PropertyDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getAccessors ()Ljava/util/List; - public fun getBackingField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getDelegateField ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/FieldDescriptor; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/PropertyDescriptor; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors; - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/PropertyDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors; - public fun isActual ()Z - public fun isExpect ()Z - public fun isExternal ()Z - public fun isSetterProjectedOut ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/ReceiverParameterDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun descriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getAllParameters ()Ljava/util/List; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ReceiverParameterDescriptor; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeParameters ()Ljava/util/List; - public fun getValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue; - public fun getValueParameters ()Ljava/util/List; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ParameterDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/ReceiverParameterDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverValue { - public fun (Lorg/jetbrains/kotlin/resolve/scopes/receivers/ReceiverValue;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/resolve/scopes/receivers/ReceiverValue; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public final fun impl ()Lorg/jetbrains/kotlin/resolve/scopes/receivers/ReceiverValue; - public fun isClassReceiver ()Z -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ResolvedValueArgument { - public fun (Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument;)V - public fun getArguments ()Ljava/util/List; - public fun getImpl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; - public fun impl ()Lorg/jetbrains/kotlin/resolve/calls/model/ResolvedValueArgument; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/SimpleFunctionDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/SimpleFunctionDescriptor;)V - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/SimpleFunctionDescriptor; - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/CallableMemberDescriptor$Kind; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public fun isInfix ()Z - public fun isInline ()Z - public fun isOperator ()Z - public fun isSuspend ()Z - public fun isTailrec ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasConstructorDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor;)V - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor; - public fun getUnderlyingConstructorDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ConstructorDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ConstructorDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeAliasDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters { - public fun (Lorg/jetbrains/kotlin/descriptors/TypeAliasDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getClassDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassDescriptor; - public fun getConstructors ()Ljava/util/Collection; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getDeclaredTypeParameters ()Ljava/util/List; - public fun getDefaultType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getExpandedType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/descriptors/TypeAliasDescriptor; - public fun getModality ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Modality; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public fun getTypeConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; - public fun getUnderlyingType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getVisibility ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ClassifierDescriptorWithTypeParameters; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptorWithVisibility; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/TypeAliasDescriptor; - public fun isActual ()Z - public fun isExpect ()Z - public fun isExternal ()Z - public fun isInner ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor { - public abstract fun getDeclarationDescriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; - public abstract fun getParameters ()Ljava/util/List; - public abstract fun getSupertypes ()Ljava/util/Collection; - public abstract fun impl ()Lorg/jetbrains/kotlin/types/TypeConstructor; - public abstract fun isDenotable ()Z - public abstract fun isFinal ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor$DefaultImpls { - public static fun getDeclarationDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ClassifierDescriptor; - public static fun getParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Ljava/util/List; - public static fun getSupertypes (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Ljava/util/Collection; - public static fun isDenotable (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Z - public static fun isFinal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor;)Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor { - public abstract fun getIndex ()I - public abstract fun getUpperBounds ()Ljava/util/List; - public abstract fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/TypeParameterDescriptor; - public abstract fun isCapturedFromOuterDeclaration ()Z - public abstract fun isReified ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor$DefaultImpls { - public static fun getDefaultType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public static fun getIndex (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)I - public static fun getTypeConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/TypeConstructor; - public static fun getUpperBounds (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Ljava/util/List; - public static fun getVariance (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public static fun isCapturedFromOuterDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Z - public static fun isReified (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor;)Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/ValueArgument;)V - public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/ValueArgument; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun isExternal ()Z - public fun isNamed ()Z - public fun isSpread ()Z - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor { - public abstract fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor$DefaultImpls { - public static fun annotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public static fun descriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; - public static fun element (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getAllParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Ljava/util/List; - public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public static fun getContainingPackage (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getDispatchReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public static fun getExtensionReceiverParameter (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public static fun getFqNameSafe (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getHasDoNotLookAtArgumentsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Z - public static fun getHasPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Z - public static fun getHasPreOrPostAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Z - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getOverriddenDescriptors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Ljava/util/Collection; - public static fun getPackageWithLawsAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public static fun getReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public static fun getType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Ljava/util/List; - public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ValueParameterDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/ValueParameterDescriptor;)V - public fun declaresDefaultValue ()Z - public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/ValueParameterDescriptor; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public fun getIndex ()I - public fun getVarargElementType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ParameterDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueParameterDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public fun isCrossinline ()Z - public fun isNoinline ()Z -} - -public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor;)V - public fun getCorrespondingVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableMemberDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/FunctionDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/MemberDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableAccessorDescriptor; -} - -public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor { - public fun (Lorg/jetbrains/kotlin/descriptors/VariableDescriptor;)V - public fun annotations ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Annotations; - public fun descriptor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor; - public fun element ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getAllParameters ()Ljava/util/List; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/DeclarationDescriptor; - public fun getContainingPackage ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getDispatchReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getExtensionReceiverParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/ReceiverParameterDescriptor; - public fun getFqNameSafe ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getHasDoNotLookAtArgumentsAnnotation ()Z - public fun getHasPackageWithLawsAnnotation ()Z - public fun getHasPreOrPostAnnotation ()Z - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public fun getName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getOverriddenDescriptors ()Ljava/util/Collection; - public fun getPackageWithLawsAnnotation ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/AnnotationDescriptor; - public fun getReturnType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun getTypeParameters ()Ljava/util/List; - public fun getValueParameters ()Ljava/util/List; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public fun isConst ()Z - public fun isLateInit ()Z - public fun isVar ()Z -} - -public abstract class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptorWithAccessors { - public fun (Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors;)V - public fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public fun getImpl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors; - public fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableAccessorDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/CallableDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/DeclarationDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/ValueDescriptor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptor; - public fun impl ()Lorg/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors; - public fun isDelegated ()Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/Visibility { - public abstract fun getName ()Ljava/lang/String; - public abstract fun impl ()Lorg/jetbrains/kotlin/descriptors/Visibility; - public abstract fun isPublicAPI ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility$DefaultImpls { - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility;)Ljava/lang/String; - public static fun isPublicAPI (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility;)Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public abstract fun getAnnotationEntries ()Ljava/util/List; - public abstract fun getAnnotations ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotatedExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer { - public fun (Lorg/jetbrains/kotlin/psi/KtAnnotatedExpression;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtAnnotatedExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotatedExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationsContainer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Annotation, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtAnnotation;)V - public fun getEntries ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtAnnotation; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getUseSiteTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotation; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement { - public fun (Lorg/jetbrains/kotlin/psi/KtAnnotationEntry;)V - public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtAnnotationEntry; - public fun getLambdaArguments ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getShortName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getText ()Ljava/lang/String; - public fun getTypeArguments ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getUseSiteTarget ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationUseSiteTarget; - public fun getValueArguments ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationEntry; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnnotationsContainer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationsContainer; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer;)Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AnonymousInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration { - public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtAnonymousInitializer; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/util/List; - public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getContainingDeclaration (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/lang/String; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ArrayAccessExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtArrayAccessExpression;)V - public fun getArrayExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtArrayAccessExpression; - public fun getIndexExpressions ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtArrayAccessExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/AssignmentExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtBinaryExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpression; - public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getOperationToken ()Ljava/lang/String; - public fun getOperationTokenRpr ()Ljava/lang/String; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BinaryExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtBinaryExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpression; - public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getOperationToken ()Ljava/lang/String; - public fun getOperationTokenRpr ()Ljava/lang/String; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtBlockExpression;)V - public fun getFirstStatement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBlockExpression; - public fun getImplicitReturnFromLast ()Z - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getStatements ()Ljava/util/List; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtBlockExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BreakExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { - public fun (Lorg/jetbrains/kotlin/psi/KtBreakExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBreakExpression; - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtBreakExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public abstract fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getLambdaArguments ()Ljava/util/List; - public abstract fun getTypeArguments ()Ljava/util/List; - public abstract fun getValueArguments ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement$DefaultImpls { - public static fun getCalleeExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getLambdaArguments (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/lang/String; - public static fun getTypeArguments (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/util/List; - public static fun getValueArguments (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/util/List; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtCallExpression;)V - public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtCallExpression; - public fun getLambdaArguments ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeArguments ()Ljava/util/List; - public fun getValueArguments ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtCallExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner { - public abstract fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public abstract fun getValueParameters ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; - public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/lang/String; - public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getReceiverTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/lang/String; - public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; - public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; - public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public static fun getValueParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtCallableReferenceExpression;)V - public fun getCallableReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getHasQuestionMarks ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtCallableReferenceExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableReferenceExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDoubleColonExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun isEmptyLHS ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CatchClause, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtCatchClause;)V - public fun getCatchBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getCatchParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtCatchClause; - public fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtCatchClause; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Class, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject { - public fun (Lorg/jetbrains/kotlin/psi/KtClass;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getAnonymousInitializers ()Ljava/util/List; - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; - public fun getCompanionObjects ()Ljava/util/List; - public fun getDeclarations ()Ljava/util/List; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClass; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; - public fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getPrimaryConstructorParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getPrimaryConstructorParameters ()Ljava/util/List; - public fun getProperties ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getSecondaryConstructors ()Ljava/util/List; - public fun getSuperTypeListEntries ()Ljava/util/List; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasExplicitPrimaryConstructor ()Z - public fun hasPrimaryConstructor ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtClass; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtClassOrObject; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtPureClassOrObject; - public fun isAnnotation ()Z - public fun isData ()Z - public fun isEnum ()Z - public fun isInline ()Z - public fun isInner ()Z - public fun isInterface ()Z - public fun isLocal ()Z - public fun isSealed ()Z - public fun isTopLevel ()Z - public fun isValue ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtClassBody;)V - public fun getAllCompanionObjects ()Ljava/util/List; - public fun getAnonymousInitializers ()Ljava/util/List; - public fun getDeclarations ()Ljava/util/List; - public fun getEnumEntries ()Ljava/util/List; - public fun getFunctions ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClassBody; - public fun getProperties ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtClassBody; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer { - public fun (Lorg/jetbrains/kotlin/psi/KtClassInitializer;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getContainingDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClassInitializer; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnonymousInitializer; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtClassInitializer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassLiteralExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtClassLiteralExpression;)V - public fun getHasQuestionMarks ()Z - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClassLiteralExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtClassLiteralExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDoubleColonExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun isEmptyLHS ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject { - public abstract fun getAnonymousInitializers ()Ljava/util/List; - public abstract fun getName ()Ljava/lang/String; - public abstract fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtClassOrObject; - public abstract fun isAnnotation ()Z - public abstract fun isTopLevel ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun getAnonymousInitializers (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; - public static fun getCompanionObjects (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun getDeclarations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/lang/String; - public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun getPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; - public static fun getPrimaryConstructorModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getPrimaryConstructorParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public static fun getPrimaryConstructorParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getSecondaryConstructors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun getSuperTypeListEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun hasExplicitPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z - public static fun hasPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z - public static fun isAnnotation (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z - public static fun isLocal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z - public static fun isTopLevel (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Z - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation { - public fun (Lorg/jetbrains/kotlin/cli/common/messages/CompilerMessageSourceLocation;)V - public fun getColumn ()I - public fun getColumnEnd ()I - public final fun getImpl ()Lorg/jetbrains/kotlin/cli/common/messages/CompilerMessageSourceLocation; - public fun getLine ()I - public fun getLineContent ()Ljava/lang/String; - public fun getLineEnd ()I - public fun getPath ()Ljava/lang/String; -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtConstantExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtConstantExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstantExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstantExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Constructor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction { - public abstract fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructor; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor$DefaultImpls { - public static fun body (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; - public static fun getBodyBlockExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public static fun getBodyExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getContainingClassOrObject (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; - public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/lang/String; - public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getReceiverTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/lang/String; - public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; - public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; - public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public static fun getValueParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun hasBlockBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Z - public static fun hasBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Z - public static fun hasDeclaredReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Z - public static fun isLocal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Z - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorCalleeExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtConstructorCalleeExpression;)V - public fun getConstructorReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtConstructorCalleeExpression; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructorCalleeExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtConstructorDelegationCall;)V - public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtConstructorDelegationCall; - public fun getLambdaArguments ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeArguments ()Ljava/util/List; - public fun getValueArguments ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructorDelegationCall; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun isCallToThis ()Z - public fun isImplicit ()Z - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtConstructorDelegationReferenceExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtConstructorDelegationReferenceExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructorDelegationReferenceExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; - public fun isThis ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ContinueExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { - public fun (Lorg/jetbrains/kotlin/psi/KtContinueExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtContinueExpression; - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtContinueExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Declaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner { - public abstract fun getName ()Ljava/lang/String; - public abstract fun getParents ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/util/List; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/lang/String; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationContainer { - public abstract fun getDeclarations ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer$DefaultImpls { - public static fun getDeclarations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer;)Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration { - public abstract fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public abstract fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getValueParameters ()Ljava/util/List; - public abstract fun hasBlockBody ()Z - public abstract fun hasBody ()Z - public abstract fun hasDeclaredReturnType ()Z - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody$DefaultImpls { - public static fun body (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; - public static fun getBodyBlockExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public static fun getBodyExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/lang/String; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/lang/String; - public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun hasBlockBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Z - public static fun hasBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Z - public static fun hasDeclaredReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Z - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration { - public abstract fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun hasInitializer ()Z - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/util/List; - public static fun getInitializer (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/lang/String; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun hasInitializer (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Z - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtElement;)V - public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtExpression;)V - public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultFunction : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction { - public fun (Lorg/jetbrains/kotlin/psi/KtFunction;)V - public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtFunction; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasBlockBody ()Z - public fun hasBody ()Z - public fun hasDeclaredReturnType ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; - public fun isLocal ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DelegatedSuperTypeEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry { - public fun (Lorg/jetbrains/kotlin/psi/KtDelegatedSuperTypeEntry;)V - public fun getDelegateExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDelegatedSuperTypeEntry; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtDelegatedSuperTypeEntry; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeListEntry; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer { - public fun (Lorg/jetbrains/kotlin/psi/KtDestructuringDeclaration;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getEntries ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDestructuringDeclaration; - public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasInitializer ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtDestructuringDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public fun isVar ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclarationEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration { - public fun (Lorg/jetbrains/kotlin/psi/KtDestructuringDeclarationEntry;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDestructuringDeclarationEntry; - public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasInitializer ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtDestructuringDeclarationEntry; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtVariableDeclaration; - public fun isVar ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoWhileExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase { - public fun (Lorg/jetbrains/kotlin/psi/KtDoWhileExpression;)V - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDoWhileExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtDoWhileExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtLoopExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhileExpressionBase; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DotQualifiedExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtDotQualifiedExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtDotQualifiedExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getSelectorExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtDotQualifiedExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtQualifiedExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DoubleColonExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public abstract fun getHasQuestionMarks ()Z - public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtDoubleColonExpression; - public abstract fun isEmptyLHS ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression$DefaultImpls { - public static fun getHasQuestionMarks (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Z - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getReceiverExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun isEmptyLHS (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Z - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element { - public abstract fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public abstract fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public abstract fun getText ()Ljava/lang/String; - public abstract fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public abstract fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public abstract fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/EnumEntry { - public fun (Lorg/jetbrains/kotlin/psi/KtEnumEntry;)V - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtClass; - public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtEnumEntry; - public fun hasInitializer ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtClass; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtClassOrObject; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtEnumEntry; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtPureClassOrObject; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public abstract fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionLambdaArgument { - public fun (Lorg/jetbrains/kotlin/psi/KtLambdaArgument;)V - public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtLambdaArgument; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtLambdaArgument; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtValueArgument;)V - public fun getArgumentExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getArgumentName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName; - public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; - public fun isExternal ()Z - public fun isNamed ()Z - public fun isSpread ()Z - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { - public abstract fun getAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun getReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgumentName; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName$DefaultImpls { - public static fun getAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getReferenceExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ExpressionWithLabel, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public abstract fun getLabelName ()Ljava/lang/String; - public abstract fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel$DefaultImpls { - public static fun getLabelName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Ljava/lang/String; - public static fun getLabelNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getTargetLabel (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtFinallySection;)V - public fun getFinalExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtFinallySection; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtFinallySection; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ForExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtForExpression;)V - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtForExpression; - public fun getLoopParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; - public fun getLoopRange ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtForExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtLoopExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Function, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody { - public abstract fun getValueParameters ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; - public abstract fun isLocal ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction$DefaultImpls { - public static fun body (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; - public static fun getBodyBlockExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public static fun getBodyExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/lang/String; - public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getReceiverTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/lang/String; - public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; - public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; - public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public static fun getValueParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun hasBlockBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Z - public static fun hasBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Z - public static fun hasDeclaredReturnType (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Z - public static fun isLocal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Z - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction { - public fun (Lorg/jetbrains/kotlin/psi/KtFunctionLiteral;)V - public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtFunctionLiteral; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasBlockBody ()Z - public fun hasBody ()Z - public fun hasDeclaredReturnType ()Z - public fun hasParameterSpecification ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtFunctionLiteral; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; - public fun isLocal ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IfExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtIfExpression;)V - public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtIfExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getThenExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtIfExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InitializerList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtInitializerList;)V - public fun getEntries ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtInitializerList; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtInitializerList; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/InstanceExpressionWithLabel, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtInstanceExpressionWithLabel; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel$DefaultImpls { - public static fun getLabelName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Ljava/lang/String; - public static fun getLabelNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getTargetLabel (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/IsExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtIsExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtIsExpression; - public fun getLeftHandSide ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtIsExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; - public fun isNegated ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabelReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtLabelReferenceExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtLabelReferenceExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReferencedName ()Ljava/lang/String; - public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtLabelReferenceExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSimpleNameExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LabeledExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { - public abstract fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtLabeledExpression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression$DefaultImpls { - public static fun getBaseExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getLabelName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Ljava/lang/String; - public static fun getLabelNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getTargetLabel (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaArgument { - public fun (Lorg/jetbrains/kotlin/psi/KtLambdaArgument;)V - public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtLambdaArgument; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; - public fun getLambdaExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtLambdaArgument; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgument; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LambdaExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtLambdaExpression;)V - public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public synthetic fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getFunctionLiteral ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FunctionLiteral; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtLambdaExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasDeclaredReturnType ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtLambdaExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/LoopExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtLoopExpression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression$DefaultImpls { - public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer { - public fun (Lorg/jetbrains/kotlin/psi/KtModifierList;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtModifierList; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationsContainer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierList; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierListOwner, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated { - public abstract fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Ljava/util/List; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NameReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtNameReferenceExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtNameReferenceExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReferencedName ()Ljava/lang/String; - public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtNameReferenceExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSimpleNameExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration { - public abstract fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public abstract fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/util/List; - public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/lang/String; - public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NamedFunction, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction { - public fun (Lorg/jetbrains/kotlin/psi/KtNamedFunction;)V - public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtNamedFunction; - public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasBlockBody ()Z - public fun hasBody ()Z - public fun hasDeclaredReturnType ()Z - public fun hasInitializer ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedFunction; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; - public fun isLocal ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/NullExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtConstantExpression;)V -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject { - public fun (Lorg/jetbrains/kotlin/psi/KtObjectDeclaration;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getAnonymousInitializers ()Ljava/util/List; - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; - public fun getCompanionObjects ()Ljava/util/List; - public fun getDeclarations ()Ljava/util/List; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtObjectDeclaration; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; - public fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getPrimaryConstructorParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getPrimaryConstructorParameters ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getSecondaryConstructors ()Ljava/util/List; - public fun getSuperTypeListEntries ()Ljava/util/List; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasExplicitPrimaryConstructor ()Z - public fun hasPrimaryConstructor ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtClassOrObject; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationContainer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtObjectDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtPureClassOrObject; - public fun isAnnotation ()Z - public fun isCompanion ()Z - public fun isLocal ()Z - public fun isObjectLiteral ()Z - public fun isTopLevel ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectLiteralExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtObjectLiteralExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtObjectLiteralExpression; - public fun getObjectDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ObjectDeclaration; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtObjectLiteralExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public abstract fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression$DefaultImpls { - public static fun getOperationReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtOperationReferenceExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtOperationReferenceExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReferencedName ()Ljava/lang/String; - public fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationReferenceExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSimpleNameExpression; - public fun isConventionOperator ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration { - public fun (Lorg/jetbrains/kotlin/psi/KtParameter;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getDefaultValue ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getDestructuringDeclaration ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DestructuringDeclaration; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtParameter; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getOwnerFunction ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/DeclarationWithBody; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasDefaultValue ()Z - public fun hasValOrVar ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtParameter; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; - public fun isCatchParameter ()Z - public fun isLoopParameter ()Z - public fun isMutable ()Z - public fun isVarArg ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtParameterList;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtParameterList; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParenthesizedExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtParenthesizedExpression;)V - public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public synthetic fun getImpl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun getImpl ()Lorg/jetbrains/kotlin/psi/KtParenthesizedExpression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor { - public fun (Lorg/jetbrains/kotlin/psi/KtPrimaryConstructor;)V - public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtPrimaryConstructor; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasBlockBody ()Z - public fun hasBody ()Z - public fun hasDeclaredReturnType ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; - public fun isLocal ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind : java/lang/Enum { - public static final field IN Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; - public static final field NONE Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; - public static final field OUT Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; - public static final field STAR Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; - public static fun values ()[Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration { - public fun (Lorg/jetbrains/kotlin/psi/KtProperty;)V - public fun getAccessors ()Ljava/util/List; - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getDelegate ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate; - public fun getDelegateExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getDelegateExpressionOrInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public fun getGetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtProperty; - public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getSetter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor; - public fun getText ()Ljava/lang/String; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasBody ()Z - public fun hasDelegate ()Z - public fun hasDelegateExpression ()Z - public fun hasDelegateExpressionOrInitializer ()Z - public fun hasInitializer ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtProperty; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtVariableDeclaration; - public fun isLocal ()Z - public fun isMember ()Z - public fun isTopLevel ()Z - public fun isVar ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyAccessor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner { - public fun (Lorg/jetbrains/kotlin/psi/KtPropertyAccessor;)V - public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtPropertyAccessor; - public fun getInitializer ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getParameter ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Parameter; - public fun getParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getParents ()Ljava/util/List; - public fun getProperty ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getReturnTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getText ()Ljava/lang/String; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasBlockBody ()Z - public fun hasBody ()Z - public fun hasDeclaredReturnType ()Z - public fun hasInitializer ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithInitializer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtPropertyAccessor; - public fun isGetter ()Z - public fun isSetter ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PropertyDelegate, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtPropertyDelegate;)V - public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtPropertyDelegate; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtPropertyDelegate; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PureClassOrObject, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer { - public abstract fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; - public abstract fun getCompanionObjects ()Ljava/util/List; - public abstract fun getName ()Ljava/lang/String; - public abstract fun getPrimaryConstructor ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; - public abstract fun getPrimaryConstructorModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public abstract fun getPrimaryConstructorParameters ()Ljava/util/List; - public abstract fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public abstract fun getSecondaryConstructors ()Ljava/util/List; - public abstract fun getSuperTypeListEntries ()Ljava/util/List; - public abstract fun hasExplicitPrimaryConstructor ()Z - public abstract fun hasPrimaryConstructor ()Z - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtPureClassOrObject; - public abstract fun isLocal ()Z -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject$DefaultImpls { - public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassBody; - public static fun getCompanionObjects (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; - public static fun getDeclarations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/lang/String; - public static fun getPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/PrimaryConstructor; - public static fun getPrimaryConstructorModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getPrimaryConstructorParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getSecondaryConstructors (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; - public static fun getSuperTypeListEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Ljava/util/List; - public static fun hasExplicitPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Z - public static fun hasPrimaryConstructor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Z - public static fun isLocal (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject;)Z -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/QualifiedExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public abstract fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun getSelectorExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtQualifiedExpression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getReceiverExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getSelectorExpression (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReferenceExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtReferenceExpression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ReturnExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel { - public fun (Lorg/jetbrains/kotlin/psi/KtReturnExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtReturnExpression; - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getLabeledExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getReturnedExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtReturnExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SafeQualifiedExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtSafeQualifiedExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSafeQualifiedExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getSelectorExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtQualifiedExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtSafeQualifiedExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SecondaryConstructor, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor { - public fun (Lorg/jetbrains/kotlin/psi/KtSecondaryConstructor;)V - public fun body ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getBodyBlockExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getBodyExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getContainingClassOrObject ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ClassOrObject; - public fun getDelegationCall ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ConstructorDelegationCall; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSecondaryConstructor; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getReceiverTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public fun getTypeConstraints ()Ljava/util/List; - public fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public fun getTypeParameters ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public fun getValueParameters ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun hasBlockBody ()Z - public fun hasBody ()Z - public fun hasDeclaredReturnType ()Z - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallableDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtConstructor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclarationWithBody; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtFunction; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtSecondaryConstructor; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; - public fun isLocal ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SelfType, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement { - public abstract fun getTypeArgumentsAsTypes ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtSelfType; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Ljava/lang/String; - public static fun getTypeArgumentsAsTypes (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Ljava/util/List; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType;)Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression { - public abstract fun getReferencedName ()Ljava/lang/String; - public abstract fun getReferencedNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtSimpleNameExpression; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getReferencedName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Ljava/lang/String; - public static fun getReferencedNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/StringTemplateExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression;)V - public fun getEntries ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtStringTemplateExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel { - public fun (Lorg/jetbrains/kotlin/psi/KtSuperExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSuperExpression; - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getSuperTypeQualifier ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtInstanceExpressionWithLabel; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeCallEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry { - public fun (Lorg/jetbrains/kotlin/psi/KtSuperTypeCallEntry;)V - public fun getCalleeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeCallEntry; - public fun getLambdaArguments ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeArguments ()Ljava/util/List; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getValueArguments ()Ljava/util/List; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtCallElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeCallEntry; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeListEntry; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry { - public fun (Lorg/jetbrains/kotlin/psi/KtSuperTypeEntry;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeEntry; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeEntry; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeListEntry; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtSuperTypeList;)V - public fun getEntries ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeList; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeList; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SuperTypeListEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtSuperTypeListEntry; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Ljava/lang/String; - public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThisExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel { - public fun (Lorg/jetbrains/kotlin/psi/KtThisExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtThisExpression; - public fun getLabelName ()Ljava/lang/String; - public fun getLabelNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getTargetLabel ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpressionWithLabel; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtInstanceExpressionWithLabel; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtThisExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ThrowExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtThrowExpression;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtThrowExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getThrownExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtThrowExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TryExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtTryExpression;)V - public fun getCatchClauses ()Ljava/util/List; - public fun getFinallyBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FinallySection; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTryExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTryBlock ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/BlockExpression; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtTryExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeAlias, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration { - public fun (Lorg/jetbrains/kotlin/psi/KtTypeAlias;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeAlias; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeAlias; - public fun isTopLevel ()Z - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeArgumentList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtTypeArgumentList;)V - public fun getArguments ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeArgumentList; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeArgumentList; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtBinaryExpressionWithTypeRHS;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpressionWithTypeRHS; - public fun getKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeCastExpresionKind; - public fun getLeft ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getOperationToken ()Ljava/lang/String; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getRight ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtBinaryExpressionWithTypeRHS; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraint, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtTypeConstraint;)V - public fun getBoundTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeConstraint; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getSubjectTypeParameterName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeConstraint; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtTypeConstraintList;)V - public fun getConstraints ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeConstraintList; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeConstraintList; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public abstract fun getTypeArgumentsAsTypes ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeElement; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Ljava/lang/String; - public static fun getTypeArgumentsAsTypes (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Ljava/util/List; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameter, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration { - public fun (Lorg/jetbrains/kotlin/psi/KtTypeParameter;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public fun getExtendsBounds ()Ljava/util/List; - public fun getFqName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeParameter; - public fun getModifierList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public fun getName ()Ljava/lang/String; - public fun getNameAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getNameAsSafeName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public fun getParents ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public fun getVariance ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtDeclaration; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtModifierListOwner; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtNamedDeclaration; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameter; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtTypeParameterList;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterList; - public fun getParameters ()Ljava/util/List; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterList; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterListOwner, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration { - public abstract fun getTypeConstraintList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public abstract fun getTypeConstraints ()Ljava/util/List; - public abstract fun getTypeParameterList ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public abstract fun getTypeParameters ()Ljava/util/List; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeParameterListOwner; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; - public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/lang/String; - public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/lang/String; - public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; - public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeProjection { - public abstract fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; - public abstract fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeProjection; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection$DefaultImpls { - public static fun getProjectionKind (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ProjectionKind; - public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer { - public fun (Lorg/jetbrains/kotlin/psi/KtTypeReference;)V - public fun getAnnotationEntries ()Ljava/util/List; - public fun getAnnotations ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtTypeReference; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeElement ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeElement; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotated; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtAnnotationsContainer; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtTypeReference; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/UnaryExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtUnaryExpression;)V - public fun getBaseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtUnaryExpression; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtOperationExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtUnaryExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentList, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtValueArgumentList;)V - public fun getArguments ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtValueArgumentList; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtValueArgumentList; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ValueArgumentName { - public fun (Lorg/jetbrains/kotlin/psi/ValueArgumentName;)V - public fun getAsName ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/ValueArgumentName; - public fun getReferenceExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/SimpleNameExpression; - public final fun impl ()Lorg/jetbrains/kotlin/psi/ValueArgumentName; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer { - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtVariableDeclaration; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration$DefaultImpls { - public static fun getAnnotationEntries (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; - public static fun getAnnotations (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; - public static fun getFqName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/FqName; - public static fun getInitializer (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getModifierList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ModifierList; - public static fun getName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/lang/String; - public static fun getNameAsName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getNameAsSafeName (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Name; - public static fun getParents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getReceiverTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/lang/String; - public static fun getTypeConstraintList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeConstraintList; - public static fun getTypeConstraints (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; - public static fun getTypeParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeParameterList; - public static fun getTypeParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; - public static fun getTypeReference (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public static fun getValueParameterList (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/ParameterList; - public static fun getValueParameters (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun hasInitializer (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Z - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenCondition, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenCondition; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition$DefaultImpls { - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition;)Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionInRange, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition { - public fun (Lorg/jetbrains/kotlin/psi/KtWhenConditionInRange;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionInRange; - public fun getOperationReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/OperationReferenceExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getRangeExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenCondition; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionInRange; - public fun isNegated ()Z - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionIsPattern, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition { - public fun (Lorg/jetbrains/kotlin/psi/KtWhenConditionIsPattern;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionIsPattern; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getTypeReference ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/TypeReference; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenCondition; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionIsPattern; - public fun isNegated ()Z - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenConditionWithExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition { - public fun (Lorg/jetbrains/kotlin/psi/KtWhenConditionWithExpression;)V - public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionWithExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenCondition; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenConditionWithExpression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenEntry, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement { - public fun (Lorg/jetbrains/kotlin/psi/KtWhenEntry;)V - public fun getConditions ()Ljava/util/List; - public fun getExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenEntry; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenEntry; - public fun isElse ()Z - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhenExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression { - public fun (Lorg/jetbrains/kotlin/psi/KtWhenExpression;)V - public fun getElseExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getEntries ()Ljava/util/List; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhenExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getSubjectExpression ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getSubjectVariable ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Property; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhenExpression; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpression, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase { - public fun (Lorg/jetbrains/kotlin/psi/KtWhileExpression;)V - public fun getBody ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public final fun getImpl ()Lorg/jetbrains/kotlin/psi/KtWhileExpression; - public fun getPsiOrParent ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public fun getText ()Ljava/lang/String; - public fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public synthetic fun impl ()Ljava/lang/Object; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtElement; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtLoopExpression; - public fun impl ()Lorg/jetbrains/kotlin/psi/KtWhileExpression; - public synthetic fun impl ()Lorg/jetbrains/kotlin/psi/KtWhileExpressionBase; - public fun lastBlockStatementOrThis ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public fun location ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public fun parents ()Ljava/util/List; - public fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public abstract interface class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/WhileExpressionBase, arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression { - public abstract fun getCondition ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public abstract fun impl ()Lorg/jetbrains/kotlin/psi/KtWhileExpressionBase; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase$DefaultImpls { - public static fun getBody (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getCondition (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun getPsiOrParent (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Element; - public static fun getResolvedCall (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolvedCall; - public static fun getText (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Ljava/lang/String; - public static fun getVariableDescriptor (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/descriptors/VariableDescriptor; - public static fun lastBlockStatementOrThis (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/Expression; - public static fun location (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/elements/CompilerMessageSourceLocation; - public static fun parents (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;)Ljava/util/List; - public static fun type (Larrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase;Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/ResolutionContext;)Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; -} - -public final class arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection : arrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/TypeProjection { - public fun (Lorg/jetbrains/kotlin/types/TypeProjection;)V - public final fun getImpl ()Lorg/jetbrains/kotlin/types/TypeProjection; - public fun getProjectionKind ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Variance; - public fun getType ()Larrow/meta/plugins/analysis/phases/analysis/solver/ast/context/types/Type; - public fun isStarProjection ()Z -} - -public final class arrow/meta/plugins/analysis/phases/ir/HintState : java/lang/Enum { - public static final field NeedsProcessing Larrow/meta/plugins/analysis/phases/ir/HintState; - public static final field Processed Larrow/meta/plugins/analysis/phases/ir/HintState; - public static fun valueOf (Ljava/lang/String;)Larrow/meta/plugins/analysis/phases/ir/HintState; - public static fun values ()[Larrow/meta/plugins/analysis/phases/ir/HintState; -} - -public final class arrow/meta/plugins/analysis/phases/ir/HintsKt { - public static final fun hints (Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;Ljava/util/Set;)Ljava/lang/String; - public static final fun hintsFile (Larrow/meta/phases/CompilerContext;Ljava/lang/String;Lorg/jetbrains/kotlin/descriptors/ModuleDescriptor;Ljava/util/Set;)Ljava/io/File; -} - diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts b/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts deleted file mode 100644 index c99d8858d..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/build.gradle.kts +++ /dev/null @@ -1,36 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - id(libs.plugins.kotlin.jvm.get().pluginId) - alias(libs.plugins.arrowGradleConfig.kotlin) - alias(libs.plugins.arrowGradleConfig.publish) - alias(libs.plugins.arrowGradleConfig.versioning) - alias(libs.plugins.kotlin.binaryCompatibilityValidator) -} - -kotlin { - explicitApi = null - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) - } -} - -dependencies { - compileOnly(libs.kotlin.stdlibJDK8) - implementation(libs.arrowMeta) - implementation(projects.arrowAnalysisTypes) - implementation(projects.arrowAnalysisCommon) - - testImplementation(libs.kotlin.stdlibJDK8) - testImplementation(libs.junit) - testImplementation(libs.junitEngine) - testImplementation(libs.junitPlatformLauncher) - testImplementation(libs.arrowMetaTest) - testRuntimeOnly(libs.arrowMeta) - testRuntimeOnly(projects.arrowAnalysisTypes) - testRuntimeOnly(projects.arrowAnalysisKotlinPlugin) - testRuntimeOnly(libs.arrowCore) - - testImplementation(libs.ksp.api) - testImplementation(libs.ksp.lib) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/gradle.properties b/arrow-libs/analysis/analysis/kotlin-plugin/gradle.properties deleted file mode 100644 index b9d306502..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Maven publishing configuration -POM_NAME=Arrow Analysis Kotlin Compiler Plugin -POM_ARTIFACT_ID=arrow-analysis-kotlin-plugin -POM_PACKAGING=jar - -pom.name=Arrow Analysis Kotlin Compiler Plugin diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm.java b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm.java deleted file mode 100644 index c23775f34..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaDefaultErrorMessagesJvm.java +++ /dev/null @@ -1,35 +0,0 @@ -package arrow.meta.plugins.analysis.errors; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages; -import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticFactoryToRendererMap; - -import static arrow.meta.plugins.analysis.errors.MetaErrors.*; - -public class MetaDefaultErrorMessagesJvm implements DefaultErrorMessages.Extension { - - public static final MetaDefaultErrorMessagesJvm INSTANCE = new MetaDefaultErrorMessagesJvm(); - - private static final DiagnosticFactoryToRendererMap MAP = new DiagnosticFactoryToRendererMap("JVM"); - - @NotNull - @Override - public DiagnosticFactoryToRendererMap getMap() { - return MAP; - } - - static { - MAP.put(InconsistentBodyPre, "{0}", RenderString.instance); - MAP.put(UnsatBodyPost, "{0}", RenderString.instance); - MAP.put(UnsatCallPre, "{0}", RenderString.instance); - MAP.put(InconsistentCallPost, "{0}", RenderString.instance); - MAP.put(InconsistentConditions, "{0}", RenderString.instance); - MAP.put(InconsistentInvariants, "{0}", RenderString.instance); - MAP.put(UnsatInvariants, "{0}", RenderString.instance); - MAP.put(LiskovProblem, "{0}", RenderString.instance); - MAP.put(ErrorParsingPredicate, "{0}", RenderString.instance); - MAP.put(WarningParsingPredicate, "{0}", RenderString.instance); - MAP.put(UnsupportedElement, "{0}", RenderString.instance); - MAP.put(AnalysisException, "{0}", RenderString.instance); - } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaErrors.java b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaErrors.java deleted file mode 100644 index 4044768b6..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/MetaErrors.java +++ /dev/null @@ -1,35 +0,0 @@ -package arrow.meta.plugins.analysis.errors; - -import org.jetbrains.kotlin.com.intellij.psi.PsiElement; -import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1; -import org.jetbrains.kotlin.diagnostics.Errors; - -import static org.jetbrains.kotlin.diagnostics.Severity.ERROR; -import static org.jetbrains.kotlin.diagnostics.Severity.WARNING; - -public interface MetaErrors { - // type proofs - DiagnosticFactory1 InconsistentBodyPre = DiagnosticFactory1.create(ERROR); - DiagnosticFactory1 UnsatBodyPost = DiagnosticFactory1.create(ERROR); - DiagnosticFactory1 UnsatCallPre = DiagnosticFactory1.create(ERROR); - DiagnosticFactory1 InconsistentCallPost = DiagnosticFactory1.create(WARNING); - DiagnosticFactory1 InconsistentConditions = DiagnosticFactory1.create(WARNING); - DiagnosticFactory1 InconsistentInvariants = DiagnosticFactory1.create(ERROR); - DiagnosticFactory1 UnsatInvariants = DiagnosticFactory1.create(ERROR); - DiagnosticFactory1 LiskovProblem = DiagnosticFactory1.create(ERROR); - DiagnosticFactory1 ErrorParsingPredicate = DiagnosticFactory1.create(ERROR); - DiagnosticFactory1 WarningParsingPredicate = DiagnosticFactory1.create(WARNING); - DiagnosticFactory1 UnsupportedElement = DiagnosticFactory1.create(WARNING); - DiagnosticFactory1 AnalysisException = DiagnosticFactory1.create(ERROR); - - /** - * needed to prevent NPE in - * org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages#getRendererForDiagnostic(org.jetbrains.kotlin.diagnostics.Diagnostic) - */ - @SuppressWarnings("UnusedDeclaration") - Object _initializer = new Object() { - { - Errors.Initializer.initializeFactoryNamesAndDefaultErrorMessages(MetaErrors.class, MetaDefaultErrorMessagesJvm.INSTANCE); - } - }; -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/RenderString.java b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/RenderString.java deleted file mode 100644 index 468e6518e..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/java/arrow/meta/plugins/analysis/errors/RenderString.java +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.errors; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticParameterRenderer; -import org.jetbrains.kotlin.diagnostics.rendering.RenderingContext; - -public class RenderString implements DiagnosticParameterRenderer { - - static final RenderString instance = new RenderString(); - - @NotNull - @Override - public String render(String o, @NotNull RenderingContext renderingContext) { - return o; - } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt deleted file mode 100644 index 867673578..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/AnalysisPlugin.kt +++ /dev/null @@ -1,11 +0,0 @@ -package arrow.meta - -import arrow.meta.phases.CompilerContext -import arrow.meta.plugins.analysis.phases.analysisPhases - -class AnalysisPlugin : Meta() { - override fun intercept(ctx: CompilerContext): List = - listOf("Arrow Analysis" { meta(analysisPhases()) }) -} - -class AnalysisMetaCliProcessor : MetaCliProcessor("analysis") diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt deleted file mode 100644 index c03428bd7..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/Phases.kt +++ /dev/null @@ -1,242 +0,0 @@ -package arrow.meta.plugins.analysis.phases - -import arrow.meta.ArrowMetaConfigurationKeys -import arrow.meta.Meta -import arrow.meta.phases.CompilerContext -import arrow.meta.phases.Composite -import arrow.meta.phases.ExtensionPhase -import arrow.meta.phases.analysis.getOrCreateBaseDirectory -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnalysisResult -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.KotlinResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.check.checkDeclarationConstraints -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.collectConstraintsFromAnnotations -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.collectConstraintsFromDSL -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import arrow.meta.plugins.analysis.phases.ir.HintState -import arrow.meta.plugins.analysis.phases.ir.annotateWithConstraints -import arrow.meta.plugins.analysis.phases.ir.hintsFile -import kotlin.io.path.Path -import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext - -internal fun Meta.analysisPhases(): ExtensionPhase = - Composite( - listOf( - analysis( - doAnalysis = { _, module, _, _, bindingTrace, _ -> - val kotlinModule: KotlinModuleDescriptor = KotlinModuleDescriptor(module) - initialize(kotlinModule) - when (get(Keys.hints(kotlinModule))) { - HintState.NeedsProcessing -> { - setHintsAs(kotlinModule, HintState.Processed) - val path = getOrCreateBaseDirectory(configuration) - org.jetbrains.kotlin.analyzer.AnalysisResult.RetryWithAdditionalRoots( - bindingTrace.bindingContext, - module, - emptyList(), - listOfNotNull(path) - ) - } - else -> null - } - }, - analysisCompleted = { _, module, bindingTrace, files -> - if (isInStage(module, Stage.CollectConstraints)) { - val kotlinModule: KotlinModuleDescriptor = KotlinModuleDescriptor(module) - val solverState = solverState(module) - val context = KotlinResolutionContext(solverState, bindingTrace, module) - if (solverState != null) { - val locals = files.declarationDescriptors(context) - val (result, interesting) = - solverState.collectConstraintsFromAnnotations(locals, kotlinModule, context) - val currentParseWarnings = bindingTrace.bindingContext.diagnostics.toList() - setParseWarningsAs(module, currentParseWarnings) - setStageAs(module, Stage.Prove) // we end the CollectConstraints phase - when (result) { - AnalysisResult.Retry -> { - if (interesting.isNotEmpty()) { - // 1. generate the additional file with hints - val path = getOrCreateBaseDirectory(configuration) - hintsFile(path.absolutePath, module, interesting) - setHintsAs(kotlinModule, HintState.NeedsProcessing) - // 2. retry with all the gathered information - org.jetbrains.kotlin.analyzer.AnalysisResult.RetryWithAdditionalRoots( - bindingTrace.bindingContext, - module, - emptyList(), - listOf(path.absoluteFile) - ) - } else { - // no need to create the hints file - setHintsAs(kotlinModule, HintState.Processed) - org.jetbrains.kotlin.analyzer.AnalysisResult.RetryWithAdditionalRoots( - bindingTrace.bindingContext, - module, - emptyList(), - emptyList() - ) - } - } - AnalysisResult.ParsingError -> { - solverState.notifyModuleProcessed(kotlinModule) - org.jetbrains.kotlin.analyzer.AnalysisResult.compilationError( - bindingTrace.bindingContext - ) - } - AnalysisResult.Completed -> { - // TODO this is never reached - solverState.notifyModuleProcessed(kotlinModule) - null - } - } - } else { - null - } - } else { - // HACK: because diagnostics are cleared after retrying - // we keep them in a temporary place and re-issue them - if (isInStage(module, Stage.Prove)) { - getParseWarnings(module)?.forEach { bindingTrace.report(it) } - } - val solverState = solverState(module) - solverState?.notifyModuleProcessed(KotlinModuleDescriptor(module)) - null - } - }, - ), - declarationChecker { declaration, descriptor, context -> - if ( - isInStage(context.moduleDescriptor, Stage.Init) || - isInStage(context.moduleDescriptor, Stage.CollectConstraints) - ) { - setStageAs(context.moduleDescriptor, Stage.CollectConstraints) - val solverState = solverState(context) - val kotlinContext = - KotlinResolutionContext(solverState, context.trace, context.moduleDescriptor) - val decl = declaration.model() as? Declaration - if (decl != null && solverState != null) { - decl.collectConstraintsFromDSL(solverState, kotlinContext, descriptor.model()) - } - } - }, - declarationChecker { declaration, descriptor, context -> - if (isInStage(context.moduleDescriptor, Stage.Prove)) { - val solverState = solverState(context) - val kotlinContext = - KotlinResolutionContext(solverState, context.trace, context.moduleDescriptor) - val decl = declaration.model() as? Declaration - if (decl != null && solverState != null && !solverState.hadParseErrors()) { - solverState.checkDeclarationConstraints(kotlinContext, decl, descriptor.model()) - } - } - }, - irFunction { fn -> - compilerContext.solverState(moduleFragment.descriptor)?.let { - annotateWithConstraints(it, fn) - } - null - }, - irDumpKotlinLike() - ) - ) - -enum class Stage { - Init, - CollectConstraints, - Prove -} - -object Keys { - fun stage(moduleDescriptor: ModuleDescriptor): String = "Stage-${moduleDescriptor.name}" - - fun stage(moduleDescriptor: org.jetbrains.kotlin.descriptors.ModuleDescriptor): String = - "Stage-${moduleDescriptor.name}" - - fun solverState(moduleDescriptor: ModuleDescriptor): String = - "SolverState-${moduleDescriptor.name}" - - fun hints(module: ModuleDescriptor): String = "arrow-analysis-hint-${module.name}" - - fun parseWarnings(module: ModuleDescriptor): String = - "arrow-analysis-parse-warnings-${module.name}" - - fun parseWarnings(module: org.jetbrains.kotlin.descriptors.ModuleDescriptor): String = - "arrow-analysis-parse-warnings-${module.name}" -} - -internal fun CompilerContext.solverState(context: DeclarationCheckerContext): SolverState? = - solverState(context.moduleDescriptor) - -internal fun CompilerContext.solverState( - module: org.jetbrains.kotlin.descriptors.ModuleDescriptor -): SolverState? = get(Keys.solverState(KotlinModuleDescriptor(module))) - -internal fun CompilerContext.initialize(module: ModuleDescriptor) { - ensureInitialized(Keys.solverState(module)) { - val baseDir = - configuration?.get(ArrowMetaConfigurationKeys.BASE_DIR)?.firstOrNull() - ?: System.getProperty("user.dir") - val createOutputFile = { s: String -> - val buildDir = getOrCreateBaseDirectory(configuration) - val path = Path(buildDir.path, s) - path.parent.toFile().mkdirs() - path.toFile().writer() - } - SolverState(baseDir, createOutputFile) - } - ensureInitialized(Keys.hints(module)) { HintState.NeedsProcessing } - ensureInitialized(Keys.stage(module)) { Stage.Init } - ensureInitialized(Keys.parseWarnings(module)) { emptyList() } -} - -internal inline fun CompilerContext.ensureInitialized( - key: String, - acquire: () -> A -) { - val thing: A? = get(key) - if (thing == null) { - set(key, acquire()) - } -} - -fun Collection.declarationDescriptors( - context: ResolutionContext -): List = - this.flatMap { file -> - file.declarations.mapNotNull { decl -> context.descriptorFor(decl.model()) } - } - -private fun CompilerContext.setHintsAs(module: ModuleDescriptor, state: HintState) { - set(Keys.hints(module), state) -} - -private fun CompilerContext.isInStage( - module: org.jetbrains.kotlin.descriptors.ModuleDescriptor, - stage: Stage -) = get(Keys.stage(module)) == stage - -private fun CompilerContext.setStageAs( - module: org.jetbrains.kotlin.descriptors.ModuleDescriptor, - stage: Stage -) { - set(Keys.stage(module), stage) -} - -private fun CompilerContext.setParseWarningsAs( - module: org.jetbrains.kotlin.descriptors.ModuleDescriptor, - warnings: List -) { - set(Keys.parseWarnings(module), warnings) -} - -private fun CompilerContext.getParseWarnings( - module: org.jetbrains.kotlin.descriptors.ModuleDescriptor -) = get>(Keys.parseWarnings(module)) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt deleted file mode 100644 index 0954202c9..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolutionContext.kt +++ /dev/null @@ -1,215 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin - -import arrow.meta.plugins.analysis.errors.MetaErrors -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Types -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType -import arrow.meta.plugins.analysis.phases.analysis.solver.errors.ErrorIds -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import org.jetbrains.kotlin.cfg.getDeclarationDescriptorIncludingConstructors -import org.jetbrains.kotlin.com.intellij.psi.PsiElement -import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.callExpressionRecursiveVisitor -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.BindingTrace - -class KotlinResolutionContext( - private val state: SolverState?, - private val impl: BindingTrace, - private val moduleImpl: org.jetbrains.kotlin.descriptors.ModuleDescriptor -) : ResolutionContext, BindingTrace by impl { - - fun reportLiskovProblem(expression: Element, msg: String) { - report(MetaErrors.LiskovProblem.on(expression.element(), msg)) - } - - fun reportUnsatInvariants(expression: Element, msg: String) { - report(MetaErrors.UnsatInvariants.on(expression.element(), msg)) - } - - fun reportInconsistentInvariants(expression: Element, msg: String) { - report(MetaErrors.InconsistentInvariants.on(expression.element(), msg)) - } - - fun reportInconsistentConditions(expression: Element, msg: String) { - report(MetaErrors.InconsistentConditions.on(expression.element(), msg)) - } - - fun reportInconsistentCallPost(expression: Element, msg: String) { - report(MetaErrors.InconsistentCallPost.on(expression.element(), msg)) - } - - private fun reportUnsatBodyPost(declaration: Element, msg: String) { - report(MetaErrors.UnsatBodyPost.on(declaration.element(), msg)) - } - - private fun reportInconsistentBodyPre(declaration: Element, msg: String) { - report(MetaErrors.InconsistentBodyPre.on(declaration.element(), msg)) - } - - fun reportUnsupported(expression: Element, msg: String) { - report(MetaErrors.UnsupportedElement.on(expression.element(), msg)) - } - - fun reportAnalysisException(element: Element, msg: String) { - report(MetaErrors.AnalysisException.on(element.element(), msg)) - } - - override val types: Types = - object : Types { - override val nothingType: Type = KotlinType(moduleImpl.builtIns.nothingType) - } - - /** - * Recursively walks [this] element for calls to [arrow.analysis.pre] and [arrow.analysis.post] - * that hold preconditions - */ - override fun Element.constraintsDSLElements(): List { - val results = hashSetOf() - val visitor = callExpressionRecursiveVisitor { - if ( - it.calleeExpression?.text == "pre" || - it.calleeExpression?.text == "post" || - it.calleeExpression?.text == "require" || - it.calleeExpression?.text == "doNotLookAtArgumentsWhen" - ) { - results.add(it) - } - } - val psi = element() - psi.accept(visitor) - psi.acceptChildren(visitor) - return results.filterIsInstance().map { it.model() } - } - - override fun type(typeReference: TypeReference?): Type? = - typeReference - ?.let { (it.psiOrParent as? KtExpression)?.let { expr -> bindingContext.getType(expr) } } - ?.let { KotlinType(it) } - - override fun handleError(error: ErrorIds, element: Element, msg: String): Unit { - when (error) { - ErrorIds.Exception.IllegalState -> reportAnalysisException(element, msg) - ErrorIds.Exception.OtherException -> reportAnalysisException(element, msg) - ErrorIds.Inconsistency.InconsistentBodyPre -> reportInconsistentBodyPre(element, msg) - ErrorIds.Inconsistency.InconsistentDefaultValues -> reportInconsistentBodyPre(element, msg) - ErrorIds.Inconsistency.InconsistentConditions -> reportInconsistentConditions(element, msg) - ErrorIds.Inconsistency.InconsistentCallPost -> reportInconsistentCallPost(element, msg) - ErrorIds.Inconsistency.InconsistentInvariants -> reportInconsistentInvariants(element, msg) - ErrorIds.Liskov.NotWeakerPrecondition -> reportLiskovProblem(element, msg) - ErrorIds.Liskov.NotStrongerPostcondition -> reportLiskovProblem(element, msg) - ErrorIds.Parsing.ErrorParsingPredicate -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Parsing.WarningParsingPredicate -> reportWarningsParsingPredicate(element, msg) - ErrorIds.Parsing.UnexpectedReference -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Parsing.UnexpectedFieldInitBlock -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Laws.LawMustCallFunction -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Laws.LawMustHaveParametersInOrder -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Laws.SubjectWithoutName -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Laws.CouldNotResolveSubject -> reportErrorsParsingPredicate(element, msg) - ErrorIds.Unsatisfiability.UnsatCallPre -> reportUnsatCallPre(element, msg) - ErrorIds.Unsatisfiability.UnsatBodyPost -> reportUnsatBodyPost(element, msg) - ErrorIds.Unsatisfiability.UnsatInvariants -> reportUnsatInvariants(element, msg) - ErrorIds.Unsupported.UnsupportedExpression -> reportUnsupported(element, msg) - } - state?.notifySarifReport(error, element, msg) - } - - private fun reportErrorsParsingPredicate(element: Element, msg: String) { - report(MetaErrors.ErrorParsingPredicate.on(element.element(), msg)) - } - - private fun reportWarningsParsingPredicate(element: Element, msg: String) { - report(MetaErrors.WarningParsingPredicate.on(element.element(), msg)) - } - - private fun reportUnsatCallPre(element: Element, msg: String) { - report(MetaErrors.UnsatCallPre.on(element.element(), msg)) - } - - private val descriptorCache: MutableMap> = mutableMapOf() - override fun descriptorFor(fqName: FqName): List { - // add if not there yet - if (!descriptorCache.containsKey(fqName.name)) { - val info: List = descriptorWorker(fqName).map { it.model() } - descriptorCache[fqName.name] = info - } - return descriptorCache.getValue(fqName.name) - } - - private fun descriptorWorker( - fqName: FqName - ): List { - val portions = fqName.name.split(".") - - fun org.jetbrains.kotlin.descriptors.ClassDescriptor.getAllDescriptors() = - unsubstitutedMemberScope.getContributedDescriptors { true } + - staticScope.getContributedDescriptors { true } + - unsubstitutedInnerClassesScope.getContributedDescriptors { true } - - var current: List = - listOfNotNull(moduleImpl.getPackage(org.jetbrains.kotlin.name.FqName(portions.first()))) - for (portion in portions.drop(1)) { - current = - when (portion) { - "" -> - current.flatMap { - when (it) { - is org.jetbrains.kotlin.descriptors.ClassDescriptor -> it.constructors - is org.jetbrains.kotlin.descriptors.TypeAliasDescriptor -> it.constructors - else -> emptyList() - } - } - else -> - current.flatMap { decl -> - when (decl) { - is org.jetbrains.kotlin.descriptors.PackageViewDescriptor -> - decl.memberScope.getContributedDescriptors { true } - is org.jetbrains.kotlin.descriptors.ClassDescriptor -> decl.getAllDescriptors() - is org.jetbrains.kotlin.descriptors.TypeAliasDescriptor -> - decl.classDescriptor?.getAllDescriptors() - else -> null - } - .orEmpty() - .flatMap { - when (it) { - is org.jetbrains.kotlin.descriptors.PropertyDescriptor -> - listOfNotNull(it, it.getter, it.setter) - else -> listOf(it) - } - } - .filter { it.name.asString() == portion } - } - } - } - - return current - } - - override fun descriptorFor(declaration: Declaration): DeclarationDescriptor? = - (declaration.impl() as? KtDeclaration) - ?.getDeclarationDescriptorIncludingConstructors(impl.bindingContext) - ?.model() - - override fun backingPropertyForConstructorParameter( - parameter: ValueParameterDescriptor - ): PropertyDescriptor? = - (parameter.impl() as? org.jetbrains.kotlin.descriptors.ValueParameterDescriptor)?.let { - impl.bindingContext.get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, it)?.model() - } - - override val module: ModuleDescriptor = KotlinModuleDescriptor(moduleImpl) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt deleted file mode 100644 index 6e8b70adf..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/KotlinResolvedCall.kt +++ /dev/null @@ -1,81 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinDefaultValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinExpressionValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinReceiverValue -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType -import org.jetbrains.kotlin.js.translate.callTranslator.getReturnType -import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument -import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument -import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument -import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver - -class KotlinResolvedCall( - val impl: - org.jetbrains.kotlin.resolve.calls.model.ResolvedCall< - out org.jetbrains.kotlin.descriptors.CallableDescriptor - > -) : ResolvedCall { - - fun impl(): - org.jetbrains.kotlin.resolve.calls.model.ResolvedCall< - out org.jetbrains.kotlin.descriptors.CallableDescriptor - > = impl - - override val callElement: Element - get() = impl().call.callElement.model() - - override fun getReceiverExpression(): Expression? = - impl() - .let { - // do not use .getReceiverExpression() directly, - // because it's in different packages on each version - // and leads to NoSuchMethodError exceptions (see #1014) - (it.extensionReceiver as? ExpressionReceiver) - ?: (it.dispatchReceiver as? ExpressionReceiver) - } - ?.expression - ?.model() - - override fun getReturnType(): Type = KotlinType(impl().getReturnType()) - - override val dispatchReceiver: ReceiverValue? - get() = impl().dispatchReceiver?.let { KotlinReceiverValue(it) } - - override val extensionReceiver: ReceiverValue? - get() = impl().extensionReceiver?.let { KotlinReceiverValue(it) } - - override val resultingDescriptor: CallableDescriptor - get() = impl().resultingDescriptor.model() - - override val valueArguments: Map - get() = - impl() - .valueArguments - .map { (param, resolvedArg) -> - val p: ValueParameterDescriptor = param.model() - val a: ResolvedValueArgument = - when (resolvedArg) { - is DefaultValueArgument -> KotlinDefaultValueArgument(resolvedArg) - is VarargValueArgument -> KotlinResolvedValueArgument(resolvedArg) - is ExpressionValueArgument -> KotlinExpressionValueArgument(resolvedArg) - else -> TODO() - } - p to a - } - .toMap() - - override val typeArguments: Map - get() = TODO("Not yet implemented") -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt deleted file mode 100644 index 3e8661ba3..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/ast/KotlinInterpreter.kt +++ /dev/null @@ -1,152 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast - -/* ktlint-disable no-wildcard-imports */ -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.* -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements.* -import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor -import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor -import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.isNull - -/* ktlint-enable no-wildcard-imports */ - -@Suppress("UNUSED_PARAMETER", "UNCHECKED_CAST") -private fun A.repr(unit: Unit = Unit): B = - this as B - -@Suppress("UNCHECKED_CAST") fun A.repr(): B = this as B - -fun A - .model(): B = - when (this) { - is SimpleFunctionDescriptor -> KotlinSimpleFunctionDescriptor(this).repr() - is TypeAliasConstructorDescriptor -> KotlinTypeAliasConstructorDescriptor(this).repr() - is ConstructorDescriptor -> KotlinConstructorDescriptor(this).repr() - is PropertyAccessorDescriptor -> KotlinPropertyAccessorDescriptor(this).repr() - is PropertyDescriptor -> KotlinPropertyDescriptor(this).repr() - is PackageViewDescriptor -> KotlinPackageViewDescriptor(this).repr() - is ClassDescriptor -> KotlinClassDescriptor(this).repr() - is TypeAliasDescriptor -> KotlinTypeAliasDescriptor(this).repr() - is ValueParameterDescriptor -> KotlinValueParameterDescriptor(this).repr() - is ModuleDescriptor -> KotlinModuleDescriptor(this).repr() - is ReceiverParameterDescriptor -> KotlinReceiverParameterDescriptor(this).repr() - is LocalVariableDescriptor -> KotlinLocalVariableDescriptor(this).repr() - is PackageFragmentDescriptor -> KotlinPackageFragmentDescriptor(this).repr() - // fallback cases: we sometimes find unknown descriptors - // and for those cases we need nothing else than what the - // abstract classes provide - is FunctionDescriptor -> KotlinDefaultFunctionDescriptor(this).repr() - is VariableDescriptor -> KotlinDefaultVariableDescriptor(this).repr() - is DeclarationDescriptorWithVisibility -> - KotlinDefaultDeclarationDescriptorWithVisibility(this).repr() - else -> KotlinDefaultDeclarationDescriptor(this).repr() - } - -fun A.model(): B = - when (this) { - is KtNamedFunction -> KotlinNamedFunction(this).repr() - is KtProperty -> KotlinProperty(this).repr() - is KtPropertyAccessor -> KotlinPropertyAccessor(this).repr() - is KtParameter -> KotlinParameter(this).repr() - is KtDestructuringDeclaration -> KotlinDestructuringDeclaration(this).repr() - is KtDestructuringDeclarationEntry -> KotlinDestructuringDeclarationEntry(this).repr() - is KtBinaryExpression -> - when (this.operationToken.toString()) { - "EQ" -> KotlinAssignmentExpression(this).repr() - else -> KotlinBinaryExpression(this).repr() - } - is KtBinaryExpressionWithTypeRHS -> - when (this.operationReference.getReferencedName()) { - "as", - "as?" -> KotlinTypeCastExpression(this).repr() - else -> KotlinDefaultExpression(this).repr() - } - is KtNameReferenceExpression -> KotlinNameReferenceExpression(this).repr() - is KtLabelReferenceExpression -> KotlinLabelReferenceExpression(this).repr() - is KtOperationReferenceExpression -> KotlinOperationReferenceExpression(this).repr() - is KtConstantExpression -> - if (this.isNull()) KotlinNullExpression(this).repr() - else KotlinConstantExpression(this).repr() - is KtCallExpression -> KotlinCallExpression(this).repr() - is KtEnumEntry -> KotlinEnumEntry(this).repr() - is KtTypeAlias -> KotlinTypeAlias(this).repr() - is KtClass -> KotlinClass(this).repr() - is KtObjectDeclaration -> KotlinObjectDeclaration(this).repr() - is KtObjectLiteralExpression -> KotlinObjectLiteralExpression(this).repr() - is KtPropertyDelegate -> KotlinPropertyDelegate(this).repr() - is KtClassBody -> KotlinClassBody(this).repr() - is KtLambdaExpression -> KotlinLambdaExpression(this).repr() - is KtValueArgument -> KotlinValueArgument(this).repr() - is KtValueArgumentList -> KotlinValueArgumentList(this).repr() - is KtBlockExpression -> KotlinBlockExpression(this).repr() - is KtStringTemplateExpression -> - if (!this.hasInterpolation()) KotlinConstantStringExpression(this).repr() - else KotlinStringTemplateExpression(this).repr() - is KtReturnExpression -> KotlinReturnExpression(this).repr() - is KtBreakExpression -> KotlinBreakExpression(this).repr() - is KtContinueExpression -> KotlinContinueExpression(this).repr() - is KtParenthesizedExpression -> KotlinParenthesizedExpression(this).repr() - is KtAnnotatedExpression -> KotlinAnnotatedExpression(this).repr() - is KtFunctionLiteral -> KotlinFunctionLiteral(this).repr() - is KtDotQualifiedExpression -> KotlinDotQualifiedExpression(this).repr() - is KtUnaryExpression -> KotlinUnaryExpression(this).repr() - is KtThisExpression -> KotlinThisExpression(this).repr() - is KtSuperExpression -> KotlinSuperExpression(this).repr() - is KtIfExpression -> KotlinIfExpression(this).repr() - is KtPrimaryConstructor -> KotlinPrimaryConstructor(this).repr() - is KtSecondaryConstructor -> KotlinSecondaryConstructor(this).repr() - is KtClassInitializer -> KotlinClassInitializer(this).repr() - is KtParameterList -> KotlinParameterList(this).repr() - is KtIsExpression -> KotlinIsExpression(this).repr() - is KtTypeReference -> KotlinTypeReference(this).repr() - is KtThrowExpression -> KotlinThrowExpression(this).repr() - is KtTryExpression -> KotlinTryExpression(this).repr() - is KtCatchClause -> KotlinCatchClause(this).repr() - is KtFinallySection -> KotlinFinallySection(this).repr() - is KtClassLiteralExpression -> KotlinClassLiteralExpression(this).repr() - is KtCallableReferenceExpression -> KotlinCallableReferenceExpression(this).repr() - is KtConstructorCalleeExpression -> KotlinConstructorCalleeExpression(this).repr() - is KtSuperTypeCallEntry -> KotlinSuperTypeCallEntry(this).repr() - is KtDelegatedSuperTypeEntry -> KotlinDelegatedSuperTypeEntry(this).repr() - is KtSuperTypeEntry -> KotlinSuperTypeEntry(this).repr() - is KtWhileExpression -> KotlinWhileExpression(this).repr() - is KtDoWhileExpression -> KotlinDoWhileExpression(this).repr() - is KtArrayAccessExpression -> KotlinArrayAccessExpression(this).repr() - is KtForExpression -> KotlinForExpression(this).repr() - is KtWhenExpression -> KotlinWhenExpression(this).repr() - is KtWhenEntry -> KotlinWhenEntry(this).repr() - is KtWhenConditionWithExpression -> KotlinWhenConditionWithExpression(this).repr() - is KtWhenConditionIsPattern -> KotlinWhenConditionIsPattern(this).repr() - is KtWhenConditionInRange -> KotlinWhenConditionInRange(this).repr() - is KtConstructorDelegationCall -> KotlinConstructorDelegationCall(this).repr() - is KtConstructorDelegationReferenceExpression -> - KotlinConstructorDelegationReferenceExpression(this).repr() - is KtSafeQualifiedExpression -> KotlinSafeQualifiedExpression(this).repr() - is KtSuperTypeList -> KotlinSuperTypeList(this).repr() - is KtInitializerList -> KotlinInitializerList(this).repr() - is KtTypeParameter -> KotlinTypeParameter(this).repr() - is KtTypeParameterList -> KotlinTypeParameterList(this).repr() - is KtTypeConstraint -> KotlinTypeConstraint(this).repr() - is KtTypeConstraintList -> KotlinTypeConstraintList(this).repr() - is KtTypeArgumentList -> KotlinTypeArgumentList(this).repr() - is KtAnnotation -> KotlinAnnotation(this).repr() - is KtAnnotationEntry -> KotlinAnnotationEntry(this).repr() - is KtModifierList -> KotlinModifierList(this).repr() - // fallbacks - is KtFunction -> KotlinDefaultFunction(this).repr() - is KtContainerNodeForControlStructureBody -> this.expression?.model() - ?: KotlinDefaultElement(this).repr() - is KtContainerNode -> KotlinDefaultElement(this).repr() - // final fallback for expressions - is KtExpression -> KotlinDefaultExpression(this).repr() - // is KtFile -> KotlinFile(this).repr() - else -> - TODO( - "Missing impl for ${this.text} ${this.containingKtFile.virtualFilePath} (${this.javaClass.name})" - ) - } - -@Suppress("UNCHECKED_CAST") fun A.element(): B = impl() as B diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated.kt deleted file mode 100644 index b47bf2df1..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotated.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotated -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations - -fun interface KotlinAnnotated : Annotated { - fun impl(): org.jetbrains.kotlin.descriptors.annotations.Annotated - override fun annotations(): Annotations = KotlinAnnotations(impl().annotations) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor.kt deleted file mode 100644 index a003049eb..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotationDescriptor.kt +++ /dev/null @@ -1,35 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType -import org.jetbrains.kotlin.resolve.annotations.argumentValue -import org.jetbrains.kotlin.resolve.constants.StringValue - -class KotlinAnnotationDescriptor( - val impl: org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor -) : AnnotationDescriptor { - - fun impl(): org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor = impl - - override val allValueArguments: Map - get() = - impl().allValueArguments.map { (key, value) -> Name(key.asString()) to value.value }.toMap() - - override fun argumentValueAsString(argName: String): String? = - impl().argumentValue(argName)?.value as? String - - override fun argumentValueAsArrayOfString(argName: String): List = - (impl().argumentValue(argName)?.value as? List<*>) - ?.filterIsInstance() - ?.map { it.value } - .orEmpty() - - override val fqName: FqName? - get() = impl().fqName?.let { FqName(it.asString()) } - - override val type: Type - get() = KotlinType(impl().type) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations.kt deleted file mode 100644 index e25b93cdc..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinAnnotations.kt +++ /dev/null @@ -1,23 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.AnnotationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName - -class KotlinAnnotations( - override val impl: org.jetbrains.kotlin.descriptors.annotations.Annotations -) : Annotations { - - override fun iterable(): Iterable = - impl.map { KotlinAnnotationDescriptor(it) } - - override fun isEmpty(): Boolean = impl.isEmpty() - - override fun findAnnotation(fqName: FqName): AnnotationDescriptor? = - impl.findAnnotation(org.jetbrains.kotlin.name.FqName(fqName.name))?.let { - KotlinAnnotationDescriptor(it) - } - - override fun hasAnnotation(fqName: FqName): Boolean = - impl.hasAnnotation(org.jetbrains.kotlin.name.FqName(fqName.name)) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor.kt deleted file mode 100644 index 7164380db..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableDescriptor.kt +++ /dev/null @@ -1,49 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType -import org.jetbrains.kotlin.backend.common.descriptors.allParameters -import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe - -fun interface KotlinCallableDescriptor : CallableDescriptor, KotlinDeclarationDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.CallableDescriptor - - fun descriptor(): KotlinDeclarationDescriptor = KotlinDeclarationDescriptor({ impl() }) - - override fun annotations(): Annotations = KotlinAnnotations(descriptor().impl().annotations) - - override fun element(): Element? = (impl().findPsi() as? KtElement)?.model() - - override val fqNameSafe: FqName - get() = FqName(impl().fqNameSafe.asString()) - override val name: Name - get() = Name(impl().name.asString()) - override val extensionReceiverParameter: ReceiverParameterDescriptor? - get() = impl().extensionReceiverParameter?.model() - override val dispatchReceiverParameter: ReceiverParameterDescriptor? - get() = impl().dispatchReceiverParameter?.model() - override val typeParameters: List - get() = impl().typeParameters.map { it.model() } - override val returnType: Type? - get() = impl().returnType?.let { KotlinType(it) } - override val valueParameters: List - get() = impl().valueParameters.map { it.model() } - override val overriddenDescriptors: Collection - get() = impl().overriddenDescriptors.map { it.model() } - - override val allParameters: List - get() = impl().allParameters.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor.kt deleted file mode 100644 index a46325cb4..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinCallableMemberDescriptor.kt +++ /dev/null @@ -1,40 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind -import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe - -fun interface KotlinCallableMemberDescriptor : - CallableMemberDescriptor, KotlinCallableDescriptor, KotlinMemberDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.CallableMemberDescriptor - - override val kind: CallableMemberDescriptor.Kind - get() = - when (impl().kind) { - Kind.DECLARATION -> CallableMemberDescriptor.Kind.DECLARATION - Kind.FAKE_OVERRIDE -> CallableMemberDescriptor.Kind.FAKE_OVERRIDE - Kind.DELEGATION -> CallableMemberDescriptor.Kind.DELEGATION - Kind.SYNTHESIZED -> CallableMemberDescriptor.Kind.SYNTHESIZED - } - - override fun annotations(): Annotations = KotlinAnnotations(impl().annotations) - - override val containingDeclaration: DeclarationDescriptor? - get() = impl().containingDeclaration.model() - - override fun element(): Element? = (impl().findPsi() as? KtElement)?.model() - - override val fqNameSafe: FqName - get() = FqName(impl().fqNameSafe.asString()) - override val name: Name - get() = Name(impl().name.asString()) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor.kt deleted file mode 100644 index f640eaaf0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassDescriptor.kt +++ /dev/null @@ -1,65 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType -import org.jetbrains.kotlin.descriptors.ClassKind - -class KotlinClassDescriptor(val impl: org.jetbrains.kotlin.descriptors.ClassDescriptor) : - ClassDescriptor, KotlinDeclarationDescriptor, KotlinClassifierDescriptorWithTypeParameters { - - override fun impl(): org.jetbrains.kotlin.descriptors.ClassDescriptor = impl - override fun annotations(): Annotations = KotlinAnnotations(impl().annotations) - - override val unsubstitutedMemberScope: MemberScope - get() = KotlinMemberScope { impl.unsubstitutedMemberScope } - override val staticScope: MemberScope - get() = KotlinMemberScope { impl.staticScope } - override val unsubstitutedInnerClassesScope: MemberScope - get() = KotlinMemberScope { impl.unsubstitutedInnerClassesScope } - - override val constructors: Collection - get() = impl().constructors.map { it.model() } - override val companionObjectDescriptor: ClassDescriptor? - get() = impl().companionObjectDescriptor?.model() - override val kind: ClassDescriptor.ClassKind - get() = - when (impl().kind) { - ClassKind.CLASS -> ClassDescriptor.ClassKind.CLASS - ClassKind.INTERFACE -> ClassDescriptor.ClassKind.INTERFACE - ClassKind.ENUM_CLASS -> ClassDescriptor.ClassKind.ENUM_CLASS - ClassKind.ENUM_ENTRY -> ClassDescriptor.ClassKind.ENUM_ENTRY - ClassKind.ANNOTATION_CLASS -> ClassDescriptor.ClassKind.ANNOTATION_CLASS - ClassKind.OBJECT -> ClassDescriptor.ClassKind.OBJECT - } - override val isCompanionObject: Boolean - get() = impl().isCompanionObject - override val isData: Boolean - get() = impl().isData - override val isInline: Boolean - get() = impl().isInline - override val isFun: Boolean - get() = impl().isFun - override val isValue: Boolean - get() = impl().isValue - override val isEnumEntry: Boolean - get() = impl().kind == ClassKind.ENUM_ENTRY - override val thisAsReceiverParameter: ReceiverParameterDescriptor - get() = impl().thisAsReceiverParameter.model() - override val unsubstitutedPrimaryConstructor: ConstructorDescriptor? - get() = impl().unsubstitutedPrimaryConstructor?.model() - override val sealedSubclasses: Collection - get() = impl().sealedSubclasses.map { it.model() } - override val superTypes: Collection - get() = impl.defaultType.constructor.supertypes.map { KotlinType(it) } - override val isInner: Boolean - get() = impl.isInner - override val declaredTypeParameters: List - get() = impl().declaredTypeParameters.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor.kt deleted file mode 100644 index af2756378..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptor.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType - -fun interface KotlinClassifierDescriptor : ClassifierDescriptor { - fun impl(): org.jetbrains.kotlin.descriptors.ClassifierDescriptor - - override val typeConstructor: TypeConstructor - get() = KotlinTypeConstructor { impl().typeConstructor } - override val defaultType: Type - get() = KotlinType(impl().defaultType) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters.kt deleted file mode 100644 index 34dbdaefe..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinClassifierDescriptorWithTypeParameters.kt +++ /dev/null @@ -1,24 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptorWithTypeParameters -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -fun interface KotlinClassifierDescriptorWithTypeParameters : - ClassifierDescriptorWithTypeParameters, - KotlinClassifierDescriptor, - KotlinDeclarationDescriptorWithVisibility, - KotlinMemberDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters - - override val isInner: Boolean - get() = impl().isInner - - override val declaredTypeParameters: List - get() = impl().declaredTypeParameters.map { it.model() } - - override val visibility: Visibility - get() = KotlinVisibility { impl().visibility.delegate } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor.kt deleted file mode 100644 index 0ec68a431..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinConstructorDescriptor.kt +++ /dev/null @@ -1,17 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -open class KotlinConstructorDescriptor( - override val impl: org.jetbrains.kotlin.descriptors.ConstructorDescriptor -) : ConstructorDescriptor, KotlinFunctionDescriptor(impl) { - override fun impl(): org.jetbrains.kotlin.descriptors.ConstructorDescriptor = impl - - override val constructedClass: ClassDescriptor - get() = impl().constructedClass.model() - - override val isPrimary: Boolean - get() = impl().isPrimary -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor.kt deleted file mode 100644 index bfe295070..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptor.kt +++ /dev/null @@ -1,38 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Annotations -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.descriptors.containingPackage -import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe - -fun interface KotlinDeclarationDescriptor : DeclarationDescriptor { - override fun impl(): org.jetbrains.kotlin.descriptors.DeclarationDescriptor - - override fun annotations(): Annotations = KotlinAnnotations(impl().annotations) - - override val containingDeclaration: DeclarationDescriptor? - get() = impl().containingDeclaration?.model() - - override val containingPackage: FqName? - get() = impl().containingPackage()?.let { FqName(it.asString()) } - - override fun element(): Element? = (impl().findPsi() as? KtElement)?.model() - - override val fqNameSafe: FqName - get() = FqName(impl().fqNameSafe.asString()) - - override val name: Name - get() = Name(impl().name.asString()) -} - -class KotlinDefaultDeclarationDescriptor( - val impl: org.jetbrains.kotlin.descriptors.DeclarationDescriptor -) : KotlinDeclarationDescriptor { - override fun impl(): org.jetbrains.kotlin.descriptors.DeclarationDescriptor = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility.kt deleted file mode 100644 index 362e28f59..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDeclarationDescriptorWithVisibility.kt +++ /dev/null @@ -1,17 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptorWithVisibility -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility - -fun interface KotlinDeclarationDescriptorWithVisibility : - DeclarationDescriptorWithVisibility, KotlinDeclarationDescriptor { - override fun impl(): org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility - override val visibility: Visibility - get() = KotlinVisibility { impl().visibility.delegate } -} - -class KotlinDefaultDeclarationDescriptorWithVisibility( - val impl: org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility -) : KotlinDeclarationDescriptorWithVisibility { - override fun impl(): org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument.kt deleted file mode 100644 index a3fb634fe..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinDefaultValueArgument.kt +++ /dev/null @@ -1,27 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DefaultValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName - -open class KotlinDefaultValueArgument( - override val impl: org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument -) : ValueArgument, DefaultValueArgument, KotlinResolvedValueArgument(impl) { - override fun impl(): org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument = impl - - override val argumentExpression: Expression? - get() = valueArgument?.argumentExpression - - override val isSpread: Boolean - get() = valueArgument?.isSpread ?: false - - override fun getArgumentName(): ValueArgumentName? = valueArgument?.getArgumentName() - - override fun isNamed(): Boolean = valueArgument?.isNamed() == true - - override fun isExternal(): Boolean = valueArgument?.isExternal() == true - - override val valueArgument: ValueArgument? - get() = impl().arguments.getOrNull(0)?.let { KotlinValueArgument(it) } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument.kt deleted file mode 100644 index 847f25d25..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinExpressionValueArgument.kt +++ /dev/null @@ -1,33 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ExpressionValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements.KotlinValueArgumentName - -open class KotlinExpressionValueArgument( - override val impl: org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument -) : - ValueArgument, - ExpressionValueArgument, - ExpressionResolvedValueArgument, - KotlinResolvedValueArgument(impl) { - override fun impl(): org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument = impl - override val argumentExpression: Expression? - get() = impl().valueArgument?.getArgumentExpression()?.model() - override val isSpread: Boolean - get() = impl().valueArgument?.getSpreadElement() != null - - override fun getArgumentName(): ValueArgumentName? = - impl().valueArgument?.getArgumentName()?.let { KotlinValueArgumentName(it) } - - override fun isNamed(): Boolean = impl().valueArgument?.isNamed() == true - - override fun isExternal(): Boolean = impl().valueArgument?.isExternal() == true - - override val valueArgument: ValueArgument? - get() = impl().valueArgument?.let { KotlinValueArgument(it) } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor.kt deleted file mode 100644 index 790450283..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFieldDescriptor.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FieldDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -fun interface KotlinFieldDescriptor : FieldDescriptor, KotlinAnnotated { - override fun impl(): org.jetbrains.kotlin.descriptors.FieldDescriptor - - override val correspondingProperty: PropertyDescriptor - get() = impl().correspondingProperty.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor.kt deleted file mode 100644 index 7930364a0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinFunctionDescriptor.kt +++ /dev/null @@ -1,34 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind - -abstract class KotlinFunctionDescriptor( - open val impl: org.jetbrains.kotlin.descriptors.FunctionDescriptor -) : FunctionDescriptor, KotlinCallableMemberDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.FunctionDescriptor = impl - - override val kind: CallableMemberDescriptor.Kind - get() = - when (impl().kind) { - Kind.DECLARATION -> CallableMemberDescriptor.Kind.DECLARATION - Kind.FAKE_OVERRIDE -> CallableMemberDescriptor.Kind.FAKE_OVERRIDE - Kind.DELEGATION -> CallableMemberDescriptor.Kind.DELEGATION - Kind.SYNTHESIZED -> CallableMemberDescriptor.Kind.SYNTHESIZED - } - override val isOperator: Boolean - get() = impl().isOperator - override val isInfix: Boolean - get() = impl().isInfix - override val isInline: Boolean - get() = impl().isInline - override val isTailrec: Boolean - get() = impl().isTailrec - override val isSuspend: Boolean - get() = impl().isSuspend -} - -class KotlinDefaultFunctionDescriptor(impl: org.jetbrains.kotlin.descriptors.FunctionDescriptor) : - KotlinFunctionDescriptor(impl) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor.kt deleted file mode 100644 index eebbb0722..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinLocalVariableDescriptor.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.LocalVariableDescriptor - -class KotlinLocalVariableDescriptor( - override val impl: org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor -) : LocalVariableDescriptor, KotlinVariableDescriptor(impl) { - override fun impl(): org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor.kt deleted file mode 100644 index 893ddd7e0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberDescriptor.kt +++ /dev/null @@ -1,35 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Modality -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility -import org.jetbrains.kotlin.descriptors.Modality.ABSTRACT -import org.jetbrains.kotlin.descriptors.Modality.FINAL -import org.jetbrains.kotlin.descriptors.Modality.OPEN -import org.jetbrains.kotlin.descriptors.Modality.SEALED - -fun interface KotlinMemberDescriptor : MemberDescriptor, KotlinDeclarationDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.MemberDescriptor - - override val modality: Modality - get() = - when (impl().modality) { - FINAL -> Modality.FINAL - SEALED -> Modality.SEALED - OPEN -> Modality.OPEN - ABSTRACT -> Modality.ABSTRACT - } - - override val visibility: Visibility - get() = KotlinVisibility { impl().visibility.delegate } - - override val isExpect: Boolean - get() = impl().isExpect - - override val isActual: Boolean - get() = impl().isActual - - override val isExternal: Boolean - get() = impl().isExternal -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt deleted file mode 100644 index 846ee2fd9..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinMemberScope.kt +++ /dev/null @@ -1,28 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.DeclarationDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter - -fun interface KotlinMemberScope : MemberScope { - - fun impl(): org.jetbrains.kotlin.resolve.scopes.MemberScope - - override fun getClassifierNames(): Set = - impl().getClassifierNames()?.map { Name(it.asString()) }.orEmpty().toSet() - - override fun getFunctionNames(): Set = - impl().getFunctionNames().map { Name(it.asString()) }.toSet() - - override fun getVariableNames(): Set = - impl().getVariableNames().map { Name(it.asString()) }.toSet() - - override fun getContributedDescriptors( - filter: (name: String) -> Boolean - ): List = - impl() - .getContributedDescriptors(DescriptorKindFilter.ALL) { filter(it.toString()) } - .map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt deleted file mode 100644 index 8b8084ad5..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinModuleDescriptor.kt +++ /dev/null @@ -1,24 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ModuleDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageViewDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -class KotlinModuleDescriptor(val impl: org.jetbrains.kotlin.descriptors.ModuleDescriptor) : - ModuleDescriptor, KotlinDeclarationDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.ModuleDescriptor = impl - - override fun getPackage(pck: String): PackageViewDescriptor = - impl().getPackage(org.jetbrains.kotlin.name.FqName(pck)).model() - - override fun getSubPackagesOf(fqName: FqName): List = - impl() - .getSubPackagesOf(org.jetbrains.kotlin.name.FqName(fqName.name)) { true } - .map { FqName(it.asString()) } - - override val stableName: Name? - get() = impl().stableName?.let { Name(it.asString()) } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed.kt deleted file mode 100644 index 25ec4bd78..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinNamed.kt +++ /dev/null @@ -1,10 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Named -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name - -fun interface KotlinNamed : Named { - fun impl(): org.jetbrains.kotlin.descriptors.Named - override val name: Name - get() = Name(impl().name.asString()) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor.kt deleted file mode 100644 index cb9a0a442..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageFragmentDescriptor.kt +++ /dev/null @@ -1,10 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageFragmentDescriptor - -class KotlinPackageFragmentDescriptor( - val impl: org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor -) : PackageFragmentDescriptor, KotlinDeclarationDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor.kt deleted file mode 100644 index 6759fac94..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPackageViewDescriptor.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.MemberScope -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PackageViewDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName - -class KotlinPackageViewDescriptor( - val impl: org.jetbrains.kotlin.descriptors.PackageViewDescriptor -) : PackageViewDescriptor, KotlinDeclarationDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.PackageViewDescriptor = impl - - override val memberScope: MemberScope - get() = KotlinMemberScope { impl().memberScope } - - override val fqName: FqName - get() = FqName(impl().fqName.asString()) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor.kt deleted file mode 100644 index 85516004f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinParameterDescriptor.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ParameterDescriptor - -fun interface KotlinParameterDescriptor : ParameterDescriptor, KotlinValueDescriptor { - override fun impl(): org.jetbrains.kotlin.descriptors.ParameterDescriptor -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor.kt deleted file mode 100644 index dd427edc5..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyAccessorDescriptor.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyAccessorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptorWithAccessors -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -class KotlinPropertyAccessorDescriptor( - override val impl: org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor -) : PropertyAccessorDescriptor, KotlinVariableAccessorDescriptor(impl) { - override fun impl(): org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor = impl - override val overriddenDescriptors: Collection - get() = impl().overriddenDescriptors.map { it.model() } - override val correspondingVariable: VariableDescriptorWithAccessors - get() = impl().correspondingVariable.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor.kt deleted file mode 100644 index 2202dc472..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinPropertyDescriptor.kt +++ /dev/null @@ -1,21 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FieldDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyAccessorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.PropertyDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -class KotlinPropertyDescriptor( - override val impl: org.jetbrains.kotlin.descriptors.PropertyDescriptor -) : - PropertyDescriptor, KotlinVariableDescriptorWithAccessors(impl), KotlinCallableMemberDescriptor { - override fun impl(): org.jetbrains.kotlin.descriptors.PropertyDescriptor = impl - override val isSetterProjectedOut: Boolean - get() = impl().isSetterProjectedOut - override val accessors: List - get() = impl().accessors.map { it.model() } - override val backingField: FieldDescriptor? - get() = impl().backingField?.let { KotlinFieldDescriptor { it } } - override val delegateField: FieldDescriptor? - get() = impl().delegateField?.let { KotlinFieldDescriptor { it } } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor.kt deleted file mode 100644 index 318452e39..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverParameterDescriptor.kt +++ /dev/null @@ -1,14 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue - -class KotlinReceiverParameterDescriptor( - val impl: org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor -) : ReceiverParameterDescriptor, KotlinParameterDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor = impl - - override val value: ReceiverValue - get() = KotlinReceiverValue(impl().value) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue.kt deleted file mode 100644 index 09baae351..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinReceiverValue.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ReceiverValue -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType -import org.jetbrains.kotlin.resolve.scopes.receivers.ClassValueReceiver - -class KotlinReceiverValue(val impl: org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue) : - ReceiverValue { - fun impl(): org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue = impl - override val type: Type - get() = KotlinType(impl().type) - override val isClassReceiver: Boolean - get() = impl is ClassValueReceiver -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument.kt deleted file mode 100644 index cf0e51d02..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinResolvedValueArgument.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ResolvedValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument - -open class KotlinResolvedValueArgument( - open val impl: org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument -) : ResolvedValueArgument { - open fun impl(): org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument = impl - override val arguments: List - get() = impl().arguments.map { KotlinValueArgument(it) } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor.kt deleted file mode 100644 index a4778a45b..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinSimpleFunctionDescriptor.kt +++ /dev/null @@ -1,31 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.CallableMemberDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.SimpleFunctionDescriptor -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind - -class KotlinSimpleFunctionDescriptor( - override val impl: org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor -) : SimpleFunctionDescriptor, KotlinFunctionDescriptor(impl) { - - override fun impl(): org.jetbrains.kotlin.descriptors.FunctionDescriptor = impl - - override val kind: CallableMemberDescriptor.Kind - get() = - when (impl().kind) { - Kind.DECLARATION -> CallableMemberDescriptor.Kind.DECLARATION - Kind.FAKE_OVERRIDE -> CallableMemberDescriptor.Kind.FAKE_OVERRIDE - Kind.DELEGATION -> CallableMemberDescriptor.Kind.DELEGATION - Kind.SYNTHESIZED -> CallableMemberDescriptor.Kind.SYNTHESIZED - } - override val isOperator: Boolean - get() = impl().isOperator - override val isInfix: Boolean - get() = impl().isInfix - override val isInline: Boolean - get() = impl().isInline - override val isTailrec: Boolean - get() = impl().isTailrec - override val isSuspend: Boolean - get() = impl().isSuspend -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor.kt deleted file mode 100644 index 53e2e9789..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasConstructorDescriptor.kt +++ /dev/null @@ -1,17 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasDescriptor - -class KotlinTypeAliasConstructorDescriptor( - override val impl: org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor -) : KotlinConstructorDescriptor(impl), TypeAliasConstructorDescriptor { - override fun impl(): org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor = impl - - override val underlyingConstructorDescriptor: ConstructorDescriptor - get() = KotlinConstructorDescriptor(impl.underlyingConstructorDescriptor) - - override fun getContainingDeclaration(): TypeAliasDescriptor = - KotlinTypeAliasDescriptor(impl.containingDeclaration) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor.kt deleted file mode 100644 index 08dc5c646..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeAliasDescriptor.kt +++ /dev/null @@ -1,21 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasConstructorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeAliasDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType - -class KotlinTypeAliasDescriptor(val impl: org.jetbrains.kotlin.descriptors.TypeAliasDescriptor) : - TypeAliasDescriptor, KotlinClassifierDescriptorWithTypeParameters { - override fun impl(): org.jetbrains.kotlin.descriptors.TypeAliasDescriptor = impl - override val underlyingType: Type - get() = KotlinType(impl().underlyingType) - override val expandedType: Type - get() = KotlinType(impl().expandedType) - override val classDescriptor: ClassDescriptor? - get() = impl().classDescriptor?.model() - override val constructors: Collection - get() = impl().constructors.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor.kt deleted file mode 100644 index 7c5469a1f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeConstructor.kt +++ /dev/null @@ -1,24 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassifierDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType - -fun interface KotlinTypeConstructor : TypeConstructor { - - fun impl(): org.jetbrains.kotlin.types.TypeConstructor - - override val parameters: List - get() = impl().parameters.map { it.model() } - override val supertypes: Collection - get() = impl().supertypes.map { KotlinType(it) } - override val isFinal: Boolean - get() = impl().isFinal - override val isDenotable: Boolean - get() = impl().isDenotable - override val declarationDescriptor: ClassifierDescriptor? - get() = impl().declarationDescriptor?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor.kt deleted file mode 100644 index 6a8514e5e..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinTypeParameterDescriptor.kt +++ /dev/null @@ -1,30 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.TypeParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType -import org.jetbrains.kotlin.types.Variance.INVARIANT -import org.jetbrains.kotlin.types.Variance.IN_VARIANCE -import org.jetbrains.kotlin.types.Variance.OUT_VARIANCE - -fun interface KotlinTypeParameterDescriptor : TypeParameterDescriptor, KotlinClassifierDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.TypeParameterDescriptor - - override val isReified: Boolean - get() = impl().isReified - override val variance: Variance - get() = - when (impl().variance) { - INVARIANT -> Variance.Invariant - IN_VARIANCE -> Variance.In - OUT_VARIANCE -> Variance.Out - } - override val upperBounds: List - get() = impl().upperBounds.map { KotlinType(it) } - override val index: Int - get() = impl().index - override val isCapturedFromOuterDeclaration: Boolean - get() = impl().isCapturedFromOuterDeclaration -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument.kt deleted file mode 100644 index 33c412b03..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueArgument.kt +++ /dev/null @@ -1,26 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements.KotlinElement -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements.KotlinValueArgumentName -import org.jetbrains.kotlin.psi.KtElement - -class KotlinValueArgument(val impl: org.jetbrains.kotlin.psi.ValueArgument) : - ValueArgument, KotlinElement { - override fun getArgumentName(): ValueArgumentName? = - impl.getArgumentName()?.let { KotlinValueArgumentName(it) } - - override fun isNamed(): Boolean = impl.isNamed() - - override fun isExternal(): Boolean = impl.isExternal() - - override val argumentExpression: Expression? - get() = impl.getArgumentExpression()?.model() - override val isSpread: Boolean - get() = impl.getSpreadElement() != null - - override fun impl(): KtElement = impl.asElement() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor.kt deleted file mode 100644 index 5cfdeb948..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueDescriptor.kt +++ /dev/null @@ -1,11 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType - -fun interface KotlinValueDescriptor : ValueDescriptor, KotlinCallableDescriptor { - override fun impl(): org.jetbrains.kotlin.descriptors.ValueDescriptor - override val type: Type - get() = KotlinType(impl().type) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor.kt deleted file mode 100644 index 8c6baf901..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinValueParameterDescriptor.kt +++ /dev/null @@ -1,27 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ValueParameterDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.resolve.source.getPsi - -class KotlinValueParameterDescriptor( - override val impl: org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -) : ValueParameterDescriptor, KotlinVariableDescriptor(impl), KotlinParameterDescriptor { - override fun impl(): org.jetbrains.kotlin.descriptors.ValueParameterDescriptor = impl - override val index: Int - get() = impl().index - override val isCrossinline: Boolean - get() = impl().isCrossinline - override val isNoinline: Boolean - get() = impl().isNoinline - override val varargElementType: Type? - get() = impl().varargElementType?.let { KotlinType(it) } - - override fun declaresDefaultValue(): Boolean = impl().declaresDefaultValue() - override val defaultValue: Expression? - get() = (impl.source.getPsi() as? KtParameter)?.defaultValue?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor.kt deleted file mode 100644 index 29fd5c478..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableAccessorDescriptor.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableAccessorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptorWithAccessors -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -abstract class KotlinVariableAccessorDescriptor( - override val impl: org.jetbrains.kotlin.descriptors.VariableAccessorDescriptor -) : VariableAccessorDescriptor, KotlinFunctionDescriptor(impl) { - override fun impl(): org.jetbrains.kotlin.descriptors.VariableAccessorDescriptor = impl - override val correspondingVariable: VariableDescriptorWithAccessors - get() = impl().correspondingVariable.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor.kt deleted file mode 100644 index 54edd367e..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptor.kt +++ /dev/null @@ -1,20 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor - -abstract class KotlinVariableDescriptor( - open val impl: org.jetbrains.kotlin.descriptors.VariableDescriptor -) : VariableDescriptor, KotlinValueDescriptor { - - override fun impl(): org.jetbrains.kotlin.descriptors.VariableDescriptor = impl - - override val isVar: Boolean - get() = impl().isVar - override val isConst: Boolean - get() = impl().isConst - override val isLateInit: Boolean - get() = impl().isLateInit -} - -class KotlinDefaultVariableDescriptor(impl: org.jetbrains.kotlin.descriptors.VariableDescriptor) : - KotlinVariableDescriptor(impl) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors.kt deleted file mode 100644 index c397d5d02..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVariableDescriptorWithAccessors.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableAccessorDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptorWithAccessors -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -abstract class KotlinVariableDescriptorWithAccessors( - override val impl: org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors -) : VariableDescriptorWithAccessors, KotlinVariableDescriptor(impl) { - - override fun impl(): org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors = impl - override val getter: VariableAccessorDescriptor? - get() = impl().getter?.model() - override val isDelegated: Boolean - get() = impl().isDelegated - override val setter: VariableAccessorDescriptor? - get() = impl().setter?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility.kt deleted file mode 100644 index 5abba2d83..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/descriptors/KotlinVisibility.kt +++ /dev/null @@ -1,11 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.Visibility - -fun interface KotlinVisibility : Visibility { - fun impl(): org.jetbrains.kotlin.descriptors.Visibility - override val isPublicAPI: Boolean - get() = impl().isPublicAPI - override val name: String - get() = impl().name -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated.kt deleted file mode 100644 index 9e7f2fa24..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotated.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotated -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtAnnotated - -fun interface KotlinAnnotated : Annotated, KotlinElement { - override fun impl(): KtAnnotated - - override fun getAnnotations(): List = impl().annotations.map { it.model() } - - override val annotationEntries: List - get() = impl().annotationEntries.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression.kt deleted file mode 100644 index b7d77cd60..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotatedExpression.kt +++ /dev/null @@ -1,14 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotatedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtAnnotatedExpression - -class KotlinAnnotatedExpression(val impl: KtAnnotatedExpression) : - AnnotatedExpression, KotlinAnnotated, KotlinAnnotationsContainer { - override fun impl(): KtAnnotatedExpression = impl - - override val baseExpression: Expression? - get() = impl().baseExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation.kt deleted file mode 100644 index a056161f2..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotation.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationUseSiteTarget -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtAnnotation - -class KotlinAnnotation(val impl: KtAnnotation) : Annotation, KotlinElement { - override fun impl(): KtAnnotation = impl - override val entries: List - get() = impl().entries.map { it.model() } - override val useSiteTarget: AnnotationUseSiteTarget? - get() = impl().useSiteTarget?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry.kt deleted file mode 100644 index 813bcaa70..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationEntry.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationUseSiteTarget -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtAnnotationEntry - -class KotlinAnnotationEntry(val impl: KtAnnotationEntry) : AnnotationEntry, KotlinCallElement { - override fun impl(): KtAnnotationEntry = impl - override val typeReference: TypeReference? - get() = impl().typeReference?.model() - override val useSiteTarget: AnnotationUseSiteTarget? - get() = impl().useSiteTarget?.model() - override val shortName: Name? - get() = impl().shortName?.asString()?.let { Name(it) } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer.kt deleted file mode 100644 index a4a68ad2f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnnotationsContainer.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationsContainer -import org.jetbrains.kotlin.psi.KtAnnotationsContainer - -fun interface KotlinAnnotationsContainer : AnnotationsContainer, KotlinElement { - override fun impl(): KtAnnotationsContainer -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer.kt deleted file mode 100644 index 0eec5e1d0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAnonymousInitializer.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtAnonymousInitializer - -fun interface KotlinAnonymousInitializer : AnonymousInitializer, KotlinDeclaration { - override fun impl(): KtAnonymousInitializer - override val containingDeclaration: Declaration - get() = impl().containingDeclaration.model() - override val body: Expression? - get() = impl().body?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression.kt deleted file mode 100644 index d00c83b64..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinArrayAccessExpression.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ArrayAccessExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtArrayAccessExpression - -class KotlinArrayAccessExpression(val impl: KtArrayAccessExpression) : - ArrayAccessExpression, KotlinReferenceExpression { - override fun impl(): KtArrayAccessExpression = impl - override val arrayExpression: Expression? - get() = impl().arrayExpression?.model() - override val indexExpressions: List - get() = impl().indexExpressions.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression.kt deleted file mode 100644 index 20351d667..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinAssignmentExpression.kt +++ /dev/null @@ -1,20 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AssignmentExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.lexer.KtSingleValueToken -import org.jetbrains.kotlin.psi.KtBinaryExpression - -class KotlinAssignmentExpression(val impl: KtBinaryExpression) : - AssignmentExpression, KotlinOperationExpression { - override fun impl(): KtBinaryExpression = impl - override val operationToken: String - get() = (impl().operationToken as KtSingleValueToken).value - override val operationTokenRpr: String - get() = impl().operationToken.toString() - override val left: Expression? - get() = impl().left?.model() - override val right: Expression? - get() = impl().right?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression.kt deleted file mode 100644 index 0859d284f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBinaryExpression.kt +++ /dev/null @@ -1,20 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BinaryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.lexer.KtSingleValueToken -import org.jetbrains.kotlin.psi.KtBinaryExpression - -class KotlinBinaryExpression(val impl: KtBinaryExpression) : - BinaryExpression, KotlinOperationExpression { - override fun impl(): KtBinaryExpression = impl - override val operationToken: String - get() = (impl().operationToken as KtSingleValueToken).value - override val operationTokenRpr: String - get() = impl().operationToken.toString() - override val left: Expression? - get() = impl().left?.model() - override val right: Expression? - get() = impl().right?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression.kt deleted file mode 100644 index 866e333a2..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBlockExpression.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtBlockExpression - -class KotlinBlockExpression(val impl: KtBlockExpression) : - BlockExpression, KotlinElement, KotlinExpression { - override fun impl(): KtBlockExpression = impl - override val firstStatement: Expression? - get() = impl().firstStatement?.model() - override val statements: List - get() = impl().statements.map { it.model() } - override val implicitReturnFromLast: Boolean = true -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression.kt deleted file mode 100644 index b3a11b8fd..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinBreakExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BreakExpression -import org.jetbrains.kotlin.psi.KtBreakExpression - -class KotlinBreakExpression(val impl: KtBreakExpression) : - BreakExpression, KotlinExpressionWithLabel { - override fun impl(): KtBreakExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement.kt deleted file mode 100644 index efb8d4392..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallElement.kt +++ /dev/null @@ -1,22 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallElement -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionLambdaArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.descriptors.KotlinValueArgument -import org.jetbrains.kotlin.psi.KtCallElement - -fun interface KotlinCallElement : CallElement, KotlinElement { - override fun impl(): KtCallElement - override val calleeExpression: Expression? - get() = impl().calleeExpression?.model() - override val valueArguments: List - get() = impl().valueArguments.map { KotlinValueArgument(it) } - override val lambdaArguments: List - get() = impl().lambdaArguments.map { it.model() } - override val typeArguments: List - get() = TODO("Not yet implemented") -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression.kt deleted file mode 100644 index 31a4cda29..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallExpression -import org.jetbrains.kotlin.psi.KtCallExpression - -class KotlinCallExpression(val impl: KtCallExpression) : - CallExpression, KotlinCallElement, KotlinReferenceExpression { - override fun impl(): KtCallExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration.kt deleted file mode 100644 index ad06dc356..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableDeclaration.kt +++ /dev/null @@ -1,21 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtCallableDeclaration - -fun interface KotlinCallableDeclaration : - CallableDeclaration, KotlinNamedDeclaration, KotlinTypeParameterListOwner { - override fun impl(): KtCallableDeclaration - override val valueParameterList: ParameterList? - get() = impl().valueParameterList?.model() - override val valueParameters: List - get() = impl().valueParameters.map { it.model() } - override val receiverTypeReference: TypeReference? - get() = impl().receiverTypeReference?.model() - override val typeReference: TypeReference? - get() = impl().typeReference?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression.kt deleted file mode 100644 index 9e0abff56..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCallableReferenceExpression.kt +++ /dev/null @@ -1,14 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableReferenceExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtCallableReferenceExpression - -class KotlinCallableReferenceExpression(val impl: KtCallableReferenceExpression) : - CallableReferenceExpression, KotlinDoubleColonExpression { - override fun impl(): KtCallableReferenceExpression = impl - - override val callableReference: SimpleNameExpression - get() = impl.callableReference.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause.kt deleted file mode 100644 index 5400b722e..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCatchClause.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CatchClause -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtCatchClause - -class KotlinCatchClause(val impl: KtCatchClause) : CatchClause, KotlinElement { - override fun impl(): KtCatchClause = impl - override val parameterList: ParameterList? - get() = impl().parameterList?.model() - override val catchParameter: Parameter? - get() = impl().catchParameter?.model() - override val catchBody: Expression? - get() = impl().catchBody?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass.kt deleted file mode 100644 index edaf606af..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClass.kt +++ /dev/null @@ -1,34 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Class -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtClass - -open class KotlinClass(open val impl: KtClass) : Class, KotlinClassOrObject { - override fun impl(): KtClass = impl - - override fun getProperties(): List = impl().getProperties().map { it.model() } - - override fun isInterface(): Boolean = impl().isInterface() - - override fun isEnum(): Boolean = impl().isEnum() - - override fun isData(): Boolean = impl().isData() - - override fun isSealed(): Boolean = impl().isSealed() - - override fun isInner(): Boolean = impl().isInner() - - override fun isInline(): Boolean = impl().isInline() - - override fun isValue(): Boolean = impl().isValue() - - override fun getAnonymousInitializers(): List = - impl().getAnonymousInitializers().map { it.model() } - - override fun isTopLevel(): Boolean = impl().isTopLevel() - - override fun isAnnotation(): Boolean = impl().isAnnotation() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody.kt deleted file mode 100644 index d4a3ea1c0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassBody.kt +++ /dev/null @@ -1,25 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedFunction -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtClassBody - -class KotlinClassBody(val impl: KtClassBody) : - ClassBody, KotlinDeclarationContainer, KotlinElement { - override fun impl(): KtClassBody = impl - override val anonymousInitializers: List - get() = impl().anonymousInitializers.map { it.model() } - override val properties: List - get() = impl().properties.map { it.model() } - override val functions: List - get() = impl().functions.map { it.model() } - override val enumEntries: List - get() = impl().enumEntries.map { it.model() } - override val allCompanionObjects: List - get() = impl().allCompanionObjects.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer.kt deleted file mode 100644 index adb87c7da..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassInitializer.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassInitializer -import org.jetbrains.kotlin.psi.KtClassInitializer - -class KotlinClassInitializer(val impl: KtClassInitializer) : - ClassInitializer, KotlinAnonymousInitializer { - override fun impl(): KtClassInitializer = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression.kt deleted file mode 100644 index 234d486c2..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassLiteralExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassLiteralExpression -import org.jetbrains.kotlin.psi.KtClassLiteralExpression - -class KotlinClassLiteralExpression(val impl: KtClassLiteralExpression) : - ClassLiteralExpression, KotlinDoubleColonExpression { - override fun impl(): KtClassLiteralExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject.kt deleted file mode 100644 index 9a1c524b4..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinClassOrObject.kt +++ /dev/null @@ -1,24 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnonymousInitializer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtClassOrObject - -fun interface KotlinClassOrObject : ClassOrObject, KotlinNamedDeclaration, KotlinPureClassOrObject { - override fun impl(): KtClassOrObject - - override fun getAnonymousInitializers(): List = - impl().getAnonymousInitializers().map { it.model() } - - override fun isTopLevel(): Boolean = impl().isTopLevel() - - override fun isAnnotation(): Boolean = impl().isAnnotation() - - override val name: String? - get() = impl().name - - override val psiOrParent: Element - get() = impl().psiOrParent.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation.kt deleted file mode 100644 index 591601490..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinCompilerMessageSourceLocation.kt +++ /dev/null @@ -1,20 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation - -class KotlinCompilerMessageSourceLocation( - val impl: org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation -) : CompilerMessageSourceLocation { - override val column: Int - get() = impl.column - override val columnEnd: Int - get() = impl.columnEnd - override val line: Int - get() = impl.line - override val lineContent: String? - get() = impl.lineContent - override val lineEnd: Int - get() = impl.lineEnd - override val path: String - get() = impl.path -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression.kt deleted file mode 100644 index 13586789a..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression -import org.jetbrains.kotlin.psi.KtConstantExpression - -open class KotlinConstantExpression(val impl: KtConstantExpression) : - ConstantExpression, KotlinExpression { - override fun impl(): KtConstantExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression.kt deleted file mode 100644 index b2f0dfb11..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstantStringExpression.kt +++ /dev/null @@ -1,14 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstantExpression -import org.jetbrains.kotlin.psi.KtStringTemplateExpression - -open class KotlinConstantStringExpression(val impl: KtStringTemplateExpression) : - ConstantExpression, KotlinExpression { - - init { - require(!impl.hasInterpolation()) - } - - override fun impl(): KtStringTemplateExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor.kt deleted file mode 100644 index effb4f439..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructor.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassOrObject -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Constructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtConstructor - -fun interface KotlinConstructor> : Constructor, KotlinFunction { - override fun impl(): KtConstructor<*> - override fun getContainingClassOrObject(): ClassOrObject = - impl().getContainingClassOrObject().model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression.kt deleted file mode 100644 index 6dd7c0de3..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorCalleeExpression.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorCalleeExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtConstructorCalleeExpression - -class KotlinConstructorCalleeExpression(override val impl: KtConstructorCalleeExpression) : - ConstructorCalleeExpression, KotlinDefaultExpression(impl) { - override fun impl(): KtConstructorCalleeExpression = impl - override val typeReference: TypeReference? - get() = impl().typeReference?.model() - override val constructorReferenceExpression: SimpleNameExpression? - get() = impl().constructorReferenceExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall.kt deleted file mode 100644 index 6c1f11f24..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationCall.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorDelegationCall -import org.jetbrains.kotlin.psi.KtConstructorDelegationCall - -class KotlinConstructorDelegationCall(val impl: KtConstructorDelegationCall) : - ConstructorDelegationCall, KotlinElement, KotlinCallElement { - override fun impl(): KtConstructorDelegationCall = impl - override val isImplicit: Boolean - get() = impl().isImplicit - override val isCallToThis: Boolean - get() = impl().isCallToThis -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression.kt deleted file mode 100644 index 341c73c28..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinConstructorDelegationReferenceExpression.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorDelegationReferenceExpression -import org.jetbrains.kotlin.psi.KtConstructorDelegationReferenceExpression - -class KotlinConstructorDelegationReferenceExpression( - val impl: KtConstructorDelegationReferenceExpression -) : ConstructorDelegationReferenceExpression, KotlinExpression, KotlinReferenceExpression { - override fun impl(): KtConstructorDelegationReferenceExpression = impl - override val isThis: Boolean - get() = impl().isThis -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression.kt deleted file mode 100644 index faca88c4d..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinContinueExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ContinueExpression -import org.jetbrains.kotlin.psi.KtContinueExpression - -class KotlinContinueExpression(val impl: KtContinueExpression) : - ContinueExpression, KotlinExpressionWithLabel { - override fun impl(): KtContinueExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt deleted file mode 100644 index 04b07d598..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclaration.kt +++ /dev/null @@ -1,23 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.psiUtil.parents - -fun interface KotlinDeclaration : Declaration, KotlinExpression, KotlinModifierListOwner { - override fun impl(): KtDeclaration - override val name: String? - get() = impl().name - override val parents: List - get() = - impl() - .parents - .filter { it !is KtFile } - .filterIsInstance() - .toList() - .map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer.kt deleted file mode 100644 index 420457a40..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationContainer.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Declaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationContainer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtDeclarationContainer - -fun interface KotlinDeclarationContainer : DeclarationContainer { - fun impl(): KtDeclarationContainer - override val declarations: List - get() = impl().declarations.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody.kt deleted file mode 100644 index 16841362a..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithBody.kt +++ /dev/null @@ -1,29 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.phases.analysis.body -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtDeclarationWithBody - -fun interface KotlinDeclarationWithBody : DeclarationWithBody, KotlinDeclaration { - override fun impl(): KtDeclarationWithBody - override val bodyExpression: Expression? - get() = impl().bodyExpression?.model() - - override fun hasBlockBody(): Boolean = impl().hasBlockBody() - - override fun hasBody(): Boolean = impl().hasBody() - - override fun hasDeclaredReturnType(): Boolean = impl().hasDeclaredReturnType() - - override fun body(): Expression? = impl().body()?.model() - - override val valueParameters: List - get() = impl().valueParameters.map { it.model() } - - override val bodyBlockExpression: BlockExpression? - get() = impl().bodyBlockExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer.kt deleted file mode 100644 index b75ec8203..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDeclarationWithInitializer.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithInitializer -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtDeclarationWithInitializer - -fun interface KotlinDeclarationWithInitializer : DeclarationWithInitializer, KotlinDeclaration { - override fun impl(): KtDeclarationWithInitializer - - override val initializer: Expression? - get() = impl().initializer?.model() - - override fun hasInitializer(): Boolean = impl().hasInitializer() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement.kt deleted file mode 100644 index 48834b67a..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultElement.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import org.jetbrains.kotlin.psi.KtElement - -open class KotlinDefaultElement(open val impl: KtElement) : KotlinElement { - override fun impl(): KtElement = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression.kt deleted file mode 100644 index 8d6338330..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDefaultExpression.kt +++ /dev/null @@ -1,7 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import org.jetbrains.kotlin.psi.KtExpression - -open class KotlinDefaultExpression(open val impl: KtExpression) : KotlinExpression { - override fun impl(): KtExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry.kt deleted file mode 100644 index 4d63aac1e..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDelegatedSuperTypeEntry.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DelegatedSuperTypeEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtDelegatedSuperTypeEntry - -class KotlinDelegatedSuperTypeEntry(val impl: KtDelegatedSuperTypeEntry) : - DelegatedSuperTypeEntry, KotlinSuperTypeListEntry { - override fun impl(): KtDelegatedSuperTypeEntry = impl - override val delegateExpression: Expression? - get() = impl().delegateExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration.kt deleted file mode 100644 index 88a09df41..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclaration.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclarationEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtDestructuringDeclaration - -class KotlinDestructuringDeclaration(val impl: KtDestructuringDeclaration) : - DestructuringDeclaration, KotlinDeclarationWithInitializer { - override fun impl(): KtDestructuringDeclaration = impl - override val entries: List - get() = impl().entries.map { it.model() } - override val isVar: Boolean - get() = impl().isVar -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry.kt deleted file mode 100644 index c9fd74fe7..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDestructuringDeclarationEntry.kt +++ /dev/null @@ -1,11 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclarationEntry -import org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry - -class KotlinDestructuringDeclarationEntry(val impl: KtDestructuringDeclarationEntry) : - DestructuringDeclarationEntry, KotlinVariableDeclaration { - override fun impl(): KtDestructuringDeclarationEntry = impl - override val isVar: Boolean - get() = impl().isVar -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression.kt deleted file mode 100644 index 2712db0d0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoWhileExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoWhileExpression -import org.jetbrains.kotlin.psi.KtDoWhileExpression - -class KotlinDoWhileExpression(val impl: KtDoWhileExpression) : - DoWhileExpression, KotlinWhileExpressionBase { - override fun impl(): KtDoWhileExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression.kt deleted file mode 100644 index 3f895f42c..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDotQualifiedExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DotQualifiedExpression -import org.jetbrains.kotlin.psi.KtDotQualifiedExpression - -class KotlinDotQualifiedExpression(val impl: KtDotQualifiedExpression) : - DotQualifiedExpression, KotlinQualifiedExpression { - override fun impl(): KtDotQualifiedExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression.kt deleted file mode 100644 index 3600b74e1..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinDoubleColonExpression.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DoubleColonExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtDoubleColonExpression - -fun interface KotlinDoubleColonExpression : DoubleColonExpression, KotlinExpression { - override fun impl(): KtDoubleColonExpression - override val receiverExpression: Expression? - get() = impl().receiverExpression?.model() - override val hasQuestionMarks: Boolean - get() = impl().hasQuestionMarks - override val isEmptyLHS: Boolean - get() = impl().isEmptyLHS -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt deleted file mode 100644 index 1acea71e0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinElement.kt +++ /dev/null @@ -1,53 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.VariableDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CompilerMessageSourceLocation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.KotlinResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.KotlinResolvedCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.cli.common.messages.MessageUtil -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtStringTemplateEntry -import org.jetbrains.kotlin.psi.psiUtil.parents -import org.jetbrains.kotlin.resolve.BindingContextUtils -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall -import org.jetbrains.kotlin.utils.IDEAPluginsCompatibilityAPI - -@OptIn(IDEAPluginsCompatibilityAPI::class) -fun interface KotlinElement : Element { - override fun impl(): KtElement - - override val text: String - get() = impl().text - - override fun getResolvedCall(context: ResolutionContext): ResolvedCall? = - (context as? KotlinResolutionContext)?.let { ctx -> - impl().getResolvedCall(ctx.bindingContext)?.let { KotlinResolvedCall(it) } - } - - override fun getVariableDescriptor(context: ResolutionContext): VariableDescriptor? = - (context as? KotlinResolutionContext)?.let { ctx -> - BindingContextUtils.extractVariableDescriptorFromReference(ctx.bindingContext, impl()) - ?.model() - } - - override fun parents(): List = - impl() - .parents - .filter { it !is KtFile && it !is KtStringTemplateEntry } - .filterIsInstance() - .toList() - .map { it.model() } - - override fun location(): CompilerMessageSourceLocation? = - MessageUtil.psiElementToMessageLocation(impl().psiOrParent)?.let { - KotlinCompilerMessageSourceLocation(it) - } - - override val psiOrParent: Element - get() = impl().psiOrParent.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry.kt deleted file mode 100644 index 0ada19b30..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinEnumEntry.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.EnumEntry -import org.jetbrains.kotlin.psi.KtEnumEntry - -class KotlinEnumEntry(override val impl: KtEnumEntry) : EnumEntry, KotlinClass(impl) { - override fun impl(): KtEnumEntry = impl - override fun hasInitializer(): Boolean = impl().hasInitializer() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt deleted file mode 100644 index be46d1a94..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpression.kt +++ /dev/null @@ -1,23 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.ResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.KotlinResolutionContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types.KotlinType -import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.psiUtil.lastBlockStatementOrThis -import org.jetbrains.kotlin.resolve.calls.callUtil.getType -import org.jetbrains.kotlin.utils.IDEAPluginsCompatibilityAPI - -@OptIn(IDEAPluginsCompatibilityAPI::class) -fun interface KotlinExpression : Expression, KotlinElement { - override fun impl(): KtExpression - override fun type(context: ResolutionContext): Type? = - if (context is KotlinResolutionContext) - impl().getType(context.bindingContext)?.let { KotlinType(it) } - else null - - override fun lastBlockStatementOrThis(): Expression = impl().lastBlockStatementOrThis().model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument.kt deleted file mode 100644 index 1398551bb..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionLambdaArgument.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionLambdaArgument -import org.jetbrains.kotlin.psi.KtLambdaArgument - -class KotlinExpressionLambdaArgument(override val impl: KtLambdaArgument) : - ExpressionLambdaArgument, KotlinLambdaArgument(impl) { - override fun impl(): KtLambdaArgument = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument.kt deleted file mode 100644 index e6e081aea..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgument.kt +++ /dev/null @@ -1,22 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -open class KotlinExpressionValueArgument(open val impl: org.jetbrains.kotlin.psi.KtValueArgument) : - ValueArgument, KotlinElement { - override fun impl(): org.jetbrains.kotlin.psi.KtValueArgument = impl - - override fun getArgumentName(): ValueArgumentName? = impl().getArgumentName()?.model() - - override fun isNamed(): Boolean = impl().isNamed() - - override fun isExternal(): Boolean = impl().isExternal() - - override val argumentExpression: Expression? - get() = impl().getArgumentExpression()?.model() - override val isSpread: Boolean - get() = impl().isSpread -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName.kt deleted file mode 100644 index 416396eb5..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionValueArgumentName.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtValueArgumentName - -fun interface KotlinExpressionValueArgumentName : ValueArgumentName { - fun impl(): KtValueArgumentName - override val asName: Name - get() = Name(impl().asName.asString()) - override val referenceExpression: SimpleNameExpression? - get() = impl().referenceExpression.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel.kt deleted file mode 100644 index ed8064f87..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinExpressionWithLabel.kt +++ /dev/null @@ -1,17 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ExpressionWithLabel -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtExpressionWithLabel - -fun interface KotlinExpressionWithLabel : ExpressionWithLabel, KotlinExpression { - override fun impl(): KtExpressionWithLabel - override fun getTargetLabel(): SimpleNameExpression? = impl().getTargetLabel()?.model() - - override fun getLabelName(): String? = impl().getLabelName() - - override fun getLabelNameAsName(): Name? = - impl().getLabelNameAsName()?.let { Name(it.asString()) } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection.kt deleted file mode 100644 index 111f59122..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFinallySection.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FinallySection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtFinallySection - -class KotlinFinallySection(val impl: KtFinallySection) : FinallySection, KotlinElement { - override fun impl(): KtFinallySection = impl - override val finalExpression: BlockExpression - get() = impl.finalExpression.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression.kt deleted file mode 100644 index 1db308c87..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinForExpression.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ForExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtForExpression - -class KotlinForExpression(val impl: KtForExpression) : ForExpression, KotlinLoopExpression { - override fun impl(): KtForExpression = impl - override val loopParameter: Parameter? - get() = impl().loopParameter?.model() - override val destructuringDeclaration: DestructuringDeclaration? - get() = impl().destructuringDeclaration?.model() - override val loopRange: Expression? - get() = impl().loopRange?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction.kt deleted file mode 100644 index c5a5ba565..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunction.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Function -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtFunction - -interface KotlinFunction : Function, KotlinDeclarationWithBody, KotlinCallableDeclaration { - override fun impl(): KtFunction - override val isLocal: Boolean - get() = impl().isLocal - override val valueParameters: List - get() = impl().valueParameters.map { it.model() } -} - -class KotlinDefaultFunction(val impl: KtFunction) : KotlinFunction { - override fun impl(): KtFunction = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral.kt deleted file mode 100644 index 269016edd..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinFunctionLiteral.kt +++ /dev/null @@ -1,14 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FunctionLiteral -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtFunctionLiteral - -class KotlinFunctionLiteral(val impl: KtFunctionLiteral) : FunctionLiteral, KotlinFunction { - override fun impl(): KtFunctionLiteral = impl - override fun hasParameterSpecification(): Boolean = impl().hasParameterSpecification() - - override val bodyExpression: Expression? - get() = impl().bodyExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression.kt deleted file mode 100644 index 9d13b9e05..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIfExpression.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IfExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtIfExpression - -class KotlinIfExpression(val impl: KtIfExpression) : IfExpression, KotlinExpression { - override fun impl(): KtIfExpression = impl - override val condition: Expression? - get() = impl().condition?.model() - override val thenExpression: Expression? - get() = impl().then?.model() - override val elseExpression: Expression? - get() = impl().`else`?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList.kt deleted file mode 100644 index 0bb649b4d..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInitializerList.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.InitializerList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtInitializerList - -class KotlinInitializerList(val impl: KtInitializerList) : InitializerList, KotlinElement { - override fun impl() = impl - - override val entries: List - get() = impl.initializers.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel.kt deleted file mode 100644 index cd39c7c36..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinInstanceExpressionWithLabel.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.InstanceExpressionWithLabel -import org.jetbrains.kotlin.psi.KtInstanceExpressionWithLabel - -fun interface KotlinInstanceExpressionWithLabel : - InstanceExpressionWithLabel, KotlinExpressionWithLabel { - override fun impl(): KtInstanceExpressionWithLabel -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression.kt deleted file mode 100644 index 40066f8b2..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinIsExpression.kt +++ /dev/null @@ -1,21 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.IsExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtIsExpression - -class KotlinIsExpression(val impl: KtIsExpression) : - IsExpression, KotlinExpression, KotlinOperationExpression { - override fun impl(): KtIsExpression = impl - override val leftHandSide: Expression - get() = impl().leftHandSide.model() - override val typeReference: TypeReference? - get() = impl().typeReference?.model() - override val operationReference: SimpleNameExpression - get() = impl().operationReference.model() - override val isNegated: Boolean - get() = impl().isNegated -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression.kt deleted file mode 100644 index 38e453760..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabelReferenceExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LabelReferenceExpression -import org.jetbrains.kotlin.psi.KtLabelReferenceExpression - -class KotlinLabelReferenceExpression(val impl: KtLabelReferenceExpression) : - LabelReferenceExpression, KotlinSimpleNameExpression { - override fun impl(): KtLabelReferenceExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression.kt deleted file mode 100644 index 20320af3f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLabeledExpression.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LabeledExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtLabeledExpression - -fun interface KotlinLabeledExpression : LabeledExpression, KotlinExpressionWithLabel { - override fun impl(): KtLabeledExpression - override val baseExpression: Expression? - get() = impl().baseExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument.kt deleted file mode 100644 index f90d1ed85..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaArgument.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtLambdaArgument - -open class KotlinLambdaArgument(override val impl: KtLambdaArgument) : - LambdaArgument, KotlinExpressionValueArgument(impl) { - override fun impl(): KtLambdaArgument = impl - override fun getLambdaExpression(): LambdaExpression? = impl().getLambdaExpression()?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression.kt deleted file mode 100644 index 945bc59b1..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLambdaExpression.kt +++ /dev/null @@ -1,20 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FunctionLiteral -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LambdaExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtLambdaExpression - -class KotlinLambdaExpression(val impl: KtLambdaExpression) : LambdaExpression, KotlinExpression { - override fun impl(): KtLambdaExpression = impl - override val functionLiteral: FunctionLiteral - get() = impl().functionLiteral.model() - override val valueParameters: List - get() = impl().valueParameters.map { it.model() } - override val bodyExpression: BlockExpression? - get() = impl().bodyExpression?.model() - - override fun hasDeclaredReturnType(): Boolean = impl().hasDeclaredReturnType() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression.kt deleted file mode 100644 index c88675f11..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinLoopExpression.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.LoopExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtLoopExpression - -fun interface KotlinLoopExpression : LoopExpression, KotlinExpression { - override fun impl(): KtLoopExpression - override val body: Expression? - get() = impl().body?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList.kt deleted file mode 100644 index 94f672be4..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierList.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Annotation -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.AnnotationEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtModifierList - -class KotlinModifierList(val impl: KtModifierList) : ModifierList, KotlinAnnotationsContainer { - override fun impl(): KtModifierList = impl - override val annotations: List - get() = impl().annotations.map { it.model() } - override val annotationEntries: List - get() = impl().annotationEntries.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner.kt deleted file mode 100644 index 3a08f92eb..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinModifierListOwner.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierListOwner -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtModifierListOwner - -fun interface KotlinModifierListOwner : ModifierListOwner, KotlinAnnotated { - override fun impl(): KtModifierListOwner - - override val modifierList: ModifierList? - get() = impl().modifierList?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression.kt deleted file mode 100644 index e3928571f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNameReferenceExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NameReferenceExpression -import org.jetbrains.kotlin.psi.KtNameReferenceExpression - -class KotlinNameReferenceExpression(val impl: KtNameReferenceExpression) : - NameReferenceExpression, KotlinSimpleNameExpression { - override fun impl(): KtNameReferenceExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration.kt deleted file mode 100644 index 48f05ee65..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedDeclaration.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedDeclaration -import org.jetbrains.kotlin.psi.KtNamedDeclaration - -fun interface KotlinNamedDeclaration : NamedDeclaration, KotlinDeclaration { - override fun impl(): KtNamedDeclaration - override val nameAsName: Name? - get() = impl().nameAsName?.let { Name(it.asString()) } - override val nameAsSafeName: Name - get() = Name(impl().nameAsSafeName.asString()) - override val fqName: FqName? - get() = impl().fqName?.let { FqName(it.asString()) } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction.kt deleted file mode 100644 index 437a85af8..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNamedFunction.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NamedFunction -import org.jetbrains.kotlin.psi.KtNamedFunction - -class KotlinNamedFunction(val impl: KtNamedFunction) : - KotlinFunction, NamedFunction, KotlinDeclarationWithInitializer { - override fun impl(): KtNamedFunction = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression.kt deleted file mode 100644 index dc598a2bb..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinNullExpression.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.NullExpression -import org.jetbrains.kotlin.psi.KtConstantExpression -import org.jetbrains.kotlin.psi.psiUtil.isNull - -class KotlinNullExpression(impl: KtConstantExpression) : - NullExpression, KotlinConstantExpression(impl) { - init { - require(impl.isNull()) - } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration.kt deleted file mode 100644 index 1db7e02f7..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectDeclaration.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration -import org.jetbrains.kotlin.psi.KtObjectDeclaration - -class KotlinObjectDeclaration(val impl: KtObjectDeclaration) : - ObjectDeclaration, KotlinClassOrObject { - override fun impl(): KtObjectDeclaration = impl - - override fun isCompanion(): Boolean = impl().isCompanion() - - override fun isObjectLiteral(): Boolean = impl().isObjectLiteral() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression.kt deleted file mode 100644 index ee5d7ca3b..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinObjectLiteralExpression.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectLiteralExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtObjectLiteralExpression - -class KotlinObjectLiteralExpression(val impl: KtObjectLiteralExpression) : - ObjectLiteralExpression, KotlinExpression { - override fun impl(): KtObjectLiteralExpression = impl - override val objectDeclaration: ObjectDeclaration - get() = impl().objectDeclaration.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression.kt deleted file mode 100644 index 640e1bd8f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationExpression.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.OperationExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtOperationExpression - -fun interface KotlinOperationExpression : OperationExpression, KotlinExpression { - override fun impl(): KtOperationExpression - override val operationReference: SimpleNameExpression - get() = impl().operationReference.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression.kt deleted file mode 100644 index 1cfd9d9a8..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinOperationReferenceExpression.kt +++ /dev/null @@ -1,10 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.OperationReferenceExpression -import org.jetbrains.kotlin.psi.KtOperationReferenceExpression - -class KotlinOperationReferenceExpression(val impl: KtOperationReferenceExpression) : - OperationReferenceExpression, KotlinSimpleNameExpression { - override fun impl(): KtOperationReferenceExpression = impl - override fun isConventionOperator(): Boolean = impl().isConventionOperator() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter.kt deleted file mode 100644 index 06ab59475..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameter.kt +++ /dev/null @@ -1,31 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DeclarationWithBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.DestructuringDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtParameter - -class KotlinParameter(val impl: KtParameter) : Parameter, KotlinCallableDeclaration { - override fun impl(): KtParameter = impl - override fun hasDefaultValue(): Boolean = impl().hasDefaultValue() - - override val defaultValue: Expression? - get() = impl().defaultValue?.model() - override val isMutable: Boolean - get() = impl().isMutable - override val isVarArg: Boolean - get() = impl().isVarArg - - override fun hasValOrVar(): Boolean = impl.hasValOrVar() - - override val destructuringDeclaration: DestructuringDeclaration? - get() = impl().destructuringDeclaration?.model() - override val isLoopParameter: Boolean - get() = impl().isLoopParameter - override val isCatchParameter: Boolean - get() = impl().isCatchParameter - override val ownerFunction: DeclarationWithBody? - get() = impl().ownerFunction?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList.kt deleted file mode 100644 index 5f5b38e4c..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParameterList.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.psi.KtParameterList - -class KotlinParameterList(val impl: KtParameterList) : KotlinElement { - override fun impl(): KtElement = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression.kt deleted file mode 100644 index 8710204f2..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinParenthesizedExpression.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParenthesizedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtParenthesizedExpression - -class KotlinParenthesizedExpression(override val impl: KtParenthesizedExpression) : - ParenthesizedExpression, KotlinDefaultExpression(impl) { - override val expression: Expression? - get() = impl.expression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor.kt deleted file mode 100644 index bc4fda6bb..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPrimaryConstructor.kt +++ /dev/null @@ -1,10 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor -import org.jetbrains.kotlin.psi.KtConstructor -import org.jetbrains.kotlin.psi.KtPrimaryConstructor - -class KotlinPrimaryConstructor(val impl: KtPrimaryConstructor) : - PrimaryConstructor, KotlinConstructor { - override fun impl(): KtConstructor<*> = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind.kt deleted file mode 100644 index 6e3f4f259..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProjectionKind.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -enum class KotlinProjectionKind { - IN, - OUT, - STAR, - NONE -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty.kt deleted file mode 100644 index 02157d3e3..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinProperty.kt +++ /dev/null @@ -1,45 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PropertyAccessor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PropertyDelegate -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtProperty - -class KotlinProperty(val impl: KtProperty) : Property, KotlinVariableDeclaration { - override fun impl(): KtProperty = impl - override val isLocal: Boolean - get() = impl().isLocal - override val isMember: Boolean - get() = impl().isMember - override val isTopLevel: Boolean - get() = impl().isTopLevel - override val accessors: List - get() = impl().accessors.map { it.model() } - override val getter: PropertyAccessor? - get() = impl().getter?.model() - override val setter: PropertyAccessor? - get() = impl().setter?.model() - - override fun hasDelegate(): Boolean = impl().hasDelegate() - - override val delegate: PropertyDelegate? - get() = impl().delegate?.model() - - override fun hasDelegateExpression(): Boolean = impl().hasDelegateExpression() - - override val delegateExpression: Expression? - get() = impl().delegateExpression?.model() - - override fun hasDelegateExpressionOrInitializer(): Boolean = - impl().hasDelegateExpressionOrInitializer() - - override val delegateExpressionOrInitializer: Expression? - get() = impl().delegateExpressionOrInitializer?.model() - - override fun hasBody(): Boolean = impl().hasBody() - - override val isVar: Boolean - get() = impl().isVar -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor.kt deleted file mode 100644 index 44db7ccb0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyAccessor.kt +++ /dev/null @@ -1,29 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PropertyAccessor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtPropertyAccessor - -class KotlinPropertyAccessor(val impl: KtPropertyAccessor) : - PropertyAccessor, - KotlinDeclarationWithBody, - KotlinModifierListOwner, - KotlinDeclarationWithInitializer { - override fun impl(): KtPropertyAccessor = impl - override val isSetter: Boolean - get() = impl().isSetter - override val isGetter: Boolean - get() = impl().isGetter - override val parameterList: ParameterList? - get() = impl().parameterList?.model() - override val parameter: Parameter? - get() = impl().parameter?.model() - override val returnTypeReference: TypeReference? - get() = impl().returnTypeReference?.model() - override val property: Property - get() = impl().property.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate.kt deleted file mode 100644 index 177f15de5..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPropertyDelegate.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PropertyDelegate -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtPropertyDelegate - -class KotlinPropertyDelegate(val impl: KtPropertyDelegate) : PropertyDelegate, KotlinElement { - override fun impl(): KtPropertyDelegate = impl - override val expression: Expression? - get() = impl().expression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject.kt deleted file mode 100644 index d82cb06b0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinPureClassOrObject.kt +++ /dev/null @@ -1,43 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ClassBody -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Element -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ModifierList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ObjectDeclaration -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Parameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PrimaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.PureClassOrObject -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtPureClassOrObject - -fun interface KotlinPureClassOrObject : PureClassOrObject, KotlinDeclarationContainer { - override fun impl(): KtPureClassOrObject - - override val name: String? - get() = impl().name - override val isLocal: Boolean - get() = impl().isLocal - override val superTypeListEntries: List - get() = impl().superTypeListEntries.map { it.model() } - override val companionObjects: List - get() = impl().companionObjects.map { it.model() } - - override fun hasExplicitPrimaryConstructor(): Boolean = impl().hasExplicitPrimaryConstructor() - - override fun hasPrimaryConstructor(): Boolean = impl().hasPrimaryConstructor() - - override val primaryConstructor: PrimaryConstructor? - get() = impl().primaryConstructor?.model() - override val primaryConstructorModifierList: ModifierList? - get() = impl().primaryConstructorModifierList?.model() - override val primaryConstructorParameters: List - get() = impl().primaryConstructorParameters.map { it.model() } - override val secondaryConstructors: List - get() = impl().secondaryConstructors.map { it.model() } - override val body: ClassBody? - get() = impl().body?.model() - override val psiOrParent: Element - get() = impl().psiOrParent.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression.kt deleted file mode 100644 index 31d24ecea..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinQualifiedExpression.kt +++ /dev/null @@ -1,14 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.QualifiedExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtQualifiedExpression - -fun interface KotlinQualifiedExpression : QualifiedExpression, KotlinExpression { - override fun impl(): KtQualifiedExpression - override val receiverExpression: Expression - get() = impl().receiverExpression.model() - override val selectorExpression: Expression? - get() = impl().selectorExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression.kt deleted file mode 100644 index 0abd7fd96..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReferenceExpression.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReferenceExpression -import org.jetbrains.kotlin.psi.KtReferenceExpression - -fun interface KotlinReferenceExpression : ReferenceExpression, KotlinExpression { - override fun impl(): KtReferenceExpression -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression.kt deleted file mode 100644 index 035c9f63f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinReturnExpression.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ReturnExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.psi.KtReturnExpression - -class KotlinReturnExpression(val impl: KtReturnExpression) : - ReturnExpression, KotlinExpressionWithLabel { - override fun impl(): KtReturnExpression = impl - override val returnedExpression: Expression? - get() = impl().returnedExpression?.model() - override val labeledExpression: Expression? - get() = (impl().labeledExpression as? KtElement)?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression.kt deleted file mode 100644 index a817a7027..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSafeQualifiedExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SafeQualifiedExpression -import org.jetbrains.kotlin.psi.KtSafeQualifiedExpression - -class KotlinSafeQualifiedExpression(val impl: KtSafeQualifiedExpression) : - SafeQualifiedExpression, KotlinQualifiedExpression { - override fun impl(): KtSafeQualifiedExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor.kt deleted file mode 100644 index fddf044b6..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSecondaryConstructor.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ConstructorDelegationCall -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SecondaryConstructor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtSecondaryConstructor - -class KotlinSecondaryConstructor(val impl: KtSecondaryConstructor) : - SecondaryConstructor, KotlinConstructor { - override fun impl(): KtSecondaryConstructor = impl - override fun getDelegationCall(): ConstructorDelegationCall? = - impl().getDelegationCallOrNull()?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType.kt deleted file mode 100644 index 2678c1e88..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSelfType.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SelfType -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtSelfType - -fun interface KotlinSelfType : SelfType, KotlinTypeElement { - override fun impl(): KtSelfType - override val typeArgumentsAsTypes: List - get() = impl().typeArgumentsAsTypes.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression.kt deleted file mode 100644 index 8cfe3ebb7..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSimpleNameExpression.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import org.jetbrains.kotlin.psi.KtSimpleNameExpression - -fun interface KotlinSimpleNameExpression : SimpleNameExpression, KotlinReferenceExpression { - override fun impl(): KtSimpleNameExpression - override fun getReferencedName(): String = impl().getReferencedName() - - override fun getReferencedNameAsName(): Name = Name(impl().getReferencedNameAsName().asString()) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression.kt deleted file mode 100644 index 1efc7ec87..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinStringTemplateExpression.kt +++ /dev/null @@ -1,27 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateEntryString -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.StringTemplateExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtEscapeStringTemplateEntry -import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry -import org.jetbrains.kotlin.psi.KtStringTemplateEntryWithExpression -import org.jetbrains.kotlin.psi.KtStringTemplateExpression - -class KotlinStringTemplateExpression(val impl: KtStringTemplateExpression) : - StringTemplateExpression, KotlinExpression { - override fun impl(): KtStringTemplateExpression = impl - - override val entries: List = - impl.entries.mapNotNull { entry -> - when (entry) { - is KtEscapeStringTemplateEntry -> StringTemplateEntryString(entry.unescapedValue) - is KtLiteralStringTemplateEntry -> StringTemplateEntryString(entry.text) - is KtStringTemplateEntryWithExpression -> - entry.expression?.let { e -> StringTemplateEntryExpression(e.model()) } - else -> null - } - } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression.kt deleted file mode 100644 index b2beba2dc..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperExpression.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtSuperExpression - -class KotlinSuperExpression(val impl: KtSuperExpression) : - SuperExpression, KotlinInstanceExpressionWithLabel { - override fun impl(): KtSuperExpression = impl - override val superTypeQualifier: TypeReference? - get() = impl.superTypeQualifier?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry.kt deleted file mode 100644 index 85a128240..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeCallEntry.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeCallEntry -import org.jetbrains.kotlin.psi.KtSuperTypeCallEntry - -class KotlinSuperTypeCallEntry(val impl: KtSuperTypeCallEntry) : - SuperTypeCallEntry, KotlinSuperTypeListEntry, KotlinCallElement { - override fun impl(): KtSuperTypeCallEntry = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry.kt deleted file mode 100644 index 859196aee..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeEntry.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeEntry -import org.jetbrains.kotlin.psi.KtSuperTypeEntry - -class KotlinSuperTypeEntry(val impl: KtSuperTypeEntry) : SuperTypeEntry, KotlinSuperTypeListEntry { - override fun impl(): KtSuperTypeEntry = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList.kt deleted file mode 100644 index d121ef4e5..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeList.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtSuperTypeList - -class KotlinSuperTypeList(val impl: KtSuperTypeList) : SuperTypeList, KotlinElement { - override fun impl() = impl - - override val entries: List - get() = impl.entries.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry.kt deleted file mode 100644 index ce8d84404..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinSuperTypeListEntry.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SuperTypeListEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtSuperTypeListEntry - -fun interface KotlinSuperTypeListEntry : SuperTypeListEntry, KotlinElement { - override fun impl(): KtSuperTypeListEntry - override val typeReference: TypeReference? - get() = impl().typeReference?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression.kt deleted file mode 100644 index 5f521efe2..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThisExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThisExpression -import org.jetbrains.kotlin.psi.KtThisExpression - -class KotlinThisExpression(val impl: KtThisExpression) : - ThisExpression, KotlinInstanceExpressionWithLabel { - override fun impl(): KtThisExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression.kt deleted file mode 100644 index c605889bf..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinThrowExpression.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ThrowExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtThrowExpression - -class KotlinThrowExpression(val impl: KtThrowExpression) : ThrowExpression, KotlinExpression { - override fun impl(): KtThrowExpression = impl - override val thrownExpression: Expression? - get() = impl().thrownExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression.kt deleted file mode 100644 index b8c4a74d4..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTryExpression.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.BlockExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CatchClause -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FinallySection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTryExpression - -class KotlinTryExpression(val impl: KtTryExpression) : TryExpression, KotlinExpression { - override fun impl(): KtTryExpression = impl - override val tryBlock: BlockExpression - get() = impl().tryBlock.model() - override val catchClauses: List - get() = impl().catchClauses.map { it.model() } - override val finallyBlock: FinallySection? - get() = impl().finallyBlock?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias.kt deleted file mode 100644 index 50d9e6023..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeAlias.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeAlias -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTypeAlias - -class KotlinTypeAlias(val impl: KtTypeAlias) : TypeAlias, KotlinNamedDeclaration { - override fun impl(): KtTypeAlias = impl - override fun isTopLevel(): Boolean = impl.isTopLevel() - override fun getTypeReference(): TypeReference? = impl.getTypeReference()?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList.kt deleted file mode 100644 index bdd62f5cc..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeArgumentList.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeArgumentList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTypeArgumentList - -class KotlinTypeArgumentList(val impl: KtTypeArgumentList) : TypeArgumentList, KotlinElement { - override fun impl(): KtTypeArgumentList = impl - override val arguments: List - get() = impl().arguments.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression.kt deleted file mode 100644 index 182f3fec3..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeCastExpression.kt +++ /dev/null @@ -1,27 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpresionKind -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeCastExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtBinaryExpressionWithTypeRHS - -class KotlinTypeCastExpression(val impl: KtBinaryExpressionWithTypeRHS) : - TypeCastExpression, KotlinOperationExpression { - override fun impl(): KtBinaryExpressionWithTypeRHS = impl - - override val operationToken: String - get() = this.operationReference.getReferencedName() - override val left: Expression - get() = impl.left.model() - override val right: TypeReference? - get() = impl.right?.model() - override val kind: TypeCastExpresionKind - get() = - when (operationToken) { - "as" -> TypeCastExpresionKind.POSITIVE_TYPE_CAST - "as?" -> TypeCastExpresionKind.QUESTION_TYPE_CAST - else -> throw IllegalArgumentException("type cast with wrong operator") - } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint.kt deleted file mode 100644 index e176adc69..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraint.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTypeConstraint - -class KotlinTypeConstraint(val impl: KtTypeConstraint) : TypeConstraint, KotlinElement { - override fun impl(): KtTypeConstraint = impl - override val subjectTypeParameterName: SimpleNameExpression? - get() = impl().subjectTypeParameterName?.model() - override val boundTypeReference: TypeReference? - get() = impl().boundTypeReference?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList.kt deleted file mode 100644 index 598f199be..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeConstraintList.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTypeConstraintList - -class KotlinTypeConstraintList(val impl: KtTypeConstraintList) : TypeConstraintList, KotlinElement { - override fun impl(): KtTypeConstraintList = impl - override val constraints: List - get() = impl().constraints.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement.kt deleted file mode 100644 index 08ba8f2bc..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeElement.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeElement -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTypeElement - -fun interface KotlinTypeElement : TypeElement, KotlinElement { - override fun impl(): KtTypeElement - override val typeArgumentsAsTypes: List - get() = impl().typeArgumentsAsTypes.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter.kt deleted file mode 100644 index fbef141a4..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameter.kt +++ /dev/null @@ -1,23 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTypeParameter -import org.jetbrains.kotlin.types.Variance.INVARIANT -import org.jetbrains.kotlin.types.Variance.IN_VARIANCE -import org.jetbrains.kotlin.types.Variance.OUT_VARIANCE - -class KotlinTypeParameter(val impl: KtTypeParameter) : TypeParameter, KotlinNamedDeclaration { - override fun impl(): KtTypeParameter = impl - override val variance: Variance - get() = - when (impl().variance) { - INVARIANT -> Variance.Invariant - IN_VARIANCE -> Variance.In - OUT_VARIANCE -> Variance.Out - } - override val extendsBounds: List - get() = listOfNotNull(impl().extendsBound?.model()) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList.kt deleted file mode 100644 index 562f50335..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterList.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTypeParameterList - -class KotlinTypeParameterList(val impl: KtTypeParameterList) : TypeParameterList, KotlinElement { - override fun impl(): KtTypeParameterList = impl - override val parameters: List - get() = impl().parameters.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner.kt deleted file mode 100644 index 866b10251..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeParameterListOwner.kt +++ /dev/null @@ -1,21 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeConstraintList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameter -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeParameterListOwner -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTypeParameterListOwner - -fun interface KotlinTypeParameterListOwner : TypeParameterListOwner, KotlinNamedDeclaration { - override fun impl(): KtTypeParameterListOwner - override val typeParameterList: TypeParameterList? - get() = impl().typeParameterList?.model() - override val typeConstraintList: TypeConstraintList? - get() = impl().typeConstraintList?.model() - override val typeConstraints: List - get() = impl().typeConstraints.map { it.model() } - override val typeParameters: List - get() = impl().typeParameters.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection.kt deleted file mode 100644 index 32f182f8d..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeProjection.kt +++ /dev/null @@ -1,22 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ProjectionKind -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeProjection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtProjectionKind -import org.jetbrains.kotlin.psi.KtTypeProjection - -fun interface KotlinTypeProjection : TypeProjection { - fun impl(): KtTypeProjection - override val projectionKind: ProjectionKind - get() = - when (impl().projectionKind) { - KtProjectionKind.IN -> ProjectionKind.IN - KtProjectionKind.OUT -> ProjectionKind.OUT - KtProjectionKind.STAR -> ProjectionKind.STAR - KtProjectionKind.NONE -> ProjectionKind.NONE - } - override val typeReference: TypeReference? - get() = impl().typeReference?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference.kt deleted file mode 100644 index 436ba27df..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinTypeReference.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeElement -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtTypeReference - -class KotlinTypeReference(val impl: KtTypeReference) : - TypeReference, KotlinAnnotated, KotlinAnnotationsContainer { - override fun impl(): KtTypeReference = impl - override val typeElement: TypeElement? - get() = impl().typeElement?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression.kt deleted file mode 100644 index 99bb53ff3..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinUnaryExpression.kt +++ /dev/null @@ -1,16 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.UnaryExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtUnaryExpression - -class KotlinUnaryExpression(val impl: KtUnaryExpression) : - UnaryExpression, KotlinExpression, KotlinOperationExpression { - override fun impl(): KtUnaryExpression = impl - override val baseExpression: Expression? - get() = impl().baseExpression?.model() - override val operationReference: SimpleNameExpression - get() = impl().operationReference.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList.kt deleted file mode 100644 index 1b530c66d..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentList.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgument -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentList -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtValueArgumentList - -class KotlinValueArgumentList(val impl: KtValueArgumentList) : ValueArgumentList, KotlinElement { - override fun impl(): KtValueArgumentList = impl - override val arguments: List - get() = impl().arguments.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName.kt deleted file mode 100644 index d7c54a8ef..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinValueArgumentName.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Name -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.SimpleNameExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.ValueArgumentName -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model - -class KotlinValueArgumentName(val impl: org.jetbrains.kotlin.psi.ValueArgumentName) : - ValueArgumentName { - fun impl(): org.jetbrains.kotlin.psi.ValueArgumentName = impl - override val asName: Name - get() = Name(impl().asName.asString()) - override val referenceExpression: SimpleNameExpression? - get() = impl().referenceExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration.kt deleted file mode 100644 index 62a27c794..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinVariableDeclaration.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.CallableDeclaration -import org.jetbrains.kotlin.psi.KtVariableDeclaration - -fun interface KotlinVariableDeclaration : - CallableDeclaration, KotlinCallableDeclaration, KotlinDeclarationWithInitializer { - override fun impl(): KtVariableDeclaration -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition.kt deleted file mode 100644 index da0148695..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenCondition.kt +++ /dev/null @@ -1,8 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenCondition -import org.jetbrains.kotlin.psi.KtWhenCondition - -fun interface KotlinWhenCondition : WhenCondition, KotlinElement { - override fun impl(): KtWhenCondition -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange.kt deleted file mode 100644 index d429b273a..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionInRange.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.OperationReferenceExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionInRange -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtWhenConditionInRange - -class KotlinWhenConditionInRange(val impl: KtWhenConditionInRange) : - WhenConditionInRange, KotlinWhenCondition { - override fun impl(): KtWhenConditionInRange = impl - override val isNegated: Boolean - get() = impl().isNegated - override val rangeExpression: Expression? - get() = impl().rangeExpression?.model() - override val operationReference: OperationReferenceExpression - get() = impl().operationReference.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern.kt deleted file mode 100644 index 3552ee69f..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionIsPattern.kt +++ /dev/null @@ -1,15 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.TypeReference -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionIsPattern -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtWhenConditionIsPattern - -class KotlinWhenConditionIsPattern(val impl: KtWhenConditionIsPattern) : - WhenConditionIsPattern, KotlinWhenCondition { - override fun impl(): KtWhenConditionIsPattern = impl - override val isNegated: Boolean - get() = impl().isNegated - override val typeReference: TypeReference? - get() = impl().typeReference?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression.kt deleted file mode 100644 index 171675335..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenConditionWithExpression.kt +++ /dev/null @@ -1,13 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenConditionWithExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtWhenConditionWithExpression - -class KotlinWhenConditionWithExpression(val impl: KtWhenConditionWithExpression) : - WhenConditionWithExpression, KotlinWhenCondition { - override fun impl(): KtWhenConditionWithExpression = impl - override val expression: Expression? - get() = impl().expression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry.kt deleted file mode 100644 index b598e293d..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenEntry.kt +++ /dev/null @@ -1,17 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenCondition -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtWhenEntry - -class KotlinWhenEntry(val impl: KtWhenEntry) : WhenEntry, KotlinElement { - override fun impl(): KtWhenEntry = impl - override val isElse: Boolean - get() = impl().isElse - override val expression: Expression? - get() = impl().expression?.model() - override val conditions: List - get() = impl().conditions.map { it.model() } -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression.kt deleted file mode 100644 index d8085a0a1..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhenExpression.kt +++ /dev/null @@ -1,22 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Property -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenEntry -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhenExpression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtWhenExpression - -class KotlinWhenExpression(val impl: KtWhenExpression) : WhenExpression, KotlinExpression { - - override fun impl(): KtWhenExpression = impl - - override val entries: List - get() = impl().entries.map { it.model() } - override val subjectVariable: Property? - get() = impl().subjectVariable?.model() - override val subjectExpression: Expression? - get() = impl().subjectExpression?.model() - override val elseExpression: Expression? - get() = impl().subjectExpression?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression.kt deleted file mode 100644 index a85e58022..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhileExpression -import org.jetbrains.kotlin.psi.KtWhileExpression - -class KotlinWhileExpression(val impl: KtWhileExpression) : - WhileExpression, KotlinWhileExpressionBase { - override fun impl(): KtWhileExpression = impl -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase.kt deleted file mode 100644 index 0b9a18064..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/elements/KotlinWhileExpressionBase.kt +++ /dev/null @@ -1,12 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.elements - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.Expression -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.WhileExpressionBase -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.psi.KtWhileExpressionBase - -fun interface KotlinWhileExpressionBase : WhileExpressionBase, KotlinLoopExpression { - override fun impl(): KtWhileExpressionBase - override val condition: Expression? - get() = impl().condition?.model() -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinType.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinType.kt deleted file mode 100644 index 9c35ea65a..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinType.kt +++ /dev/null @@ -1,86 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types - -import arrow.meta.phases.resolve.unwrappedNotNullableType -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.ClassDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.TypeProjection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.types.TypeUtils -import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker -import org.jetbrains.kotlin.types.isNullable -import org.jetbrains.kotlin.types.typeUtil.isAnyOrNullableAny -import org.jetbrains.kotlin.types.typeUtil.isBoolean -import org.jetbrains.kotlin.types.typeUtil.isByte -import org.jetbrains.kotlin.types.typeUtil.isChar -import org.jetbrains.kotlin.types.typeUtil.isDouble -import org.jetbrains.kotlin.types.typeUtil.isFloat -import org.jetbrains.kotlin.types.typeUtil.isInt -import org.jetbrains.kotlin.types.typeUtil.isLong -import org.jetbrains.kotlin.types.typeUtil.isShort -import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf -import org.jetbrains.kotlin.types.typeUtil.isTypeParameter -import org.jetbrains.kotlin.types.typeUtil.isUnsignedNumberType - -internal class KotlinType(val impl: org.jetbrains.kotlin.types.KotlinType) : Type { - override val descriptor: ClassDescriptor? - get() = TypeUtils.getClassDescriptor(impl)?.model() - override val unwrappedNotNullableType: Type - get() = KotlinType(impl.unwrappedNotNullableType) - override val isMarkedNullable: Boolean - get() = impl.isMarkedNullable - override val arguments: List - get() = impl.arguments.map { KotlinTypeProjection(it) } - - override fun isBoolean(): Boolean = impl.isBoolean() - - override fun isNullable(): Boolean = impl.isNullable() - - override fun isSubtypeOf(other: Type): Boolean { - if (this === other) return true - if (other !is KotlinType) return false - if (this.isTypeParameter() && other.isTypeParameter()) return true - if (isMarkedNullable != other.isMarkedNullable) return false - if (NewKotlinTypeChecker.Default.isSubtypeOf(impl.unwrap(), other.impl.unwrap())) return true - - return impl.superTypesAndMe.any { possibleSuperType -> - possibleSuperType.constructor == other.impl.unwrap().constructor - } - } - - private val org.jetbrains.kotlin.types.KotlinType.superTypesAndMe: - List - get() = listOf(this) + this.unwrap().constructor.supertypes.flatMap { it.superTypesAndMe } - - override fun isEqualTo(other: Type): Boolean { - if (this === other) return true - if (other !is KotlinType) return false - if (this.isTypeParameter() && other.isTypeParameter()) return true - if (isMarkedNullable != other.isMarkedNullable) return false - if (NewKotlinTypeChecker.Default.equalTypes(impl.unwrap(), other.impl.unwrap())) return true - - return impl.unwrap().constructor == other.impl.unwrap().constructor - } - - override fun isInt(): Boolean = impl.isInt() - - override fun isLong(): Boolean = impl.isLong() - - override fun isFloat(): Boolean = impl.isFloat() - - override fun isDouble(): Boolean = impl.isDouble() - - override fun isTypeParameter(): Boolean = impl.isTypeParameter() - - override fun isAnyOrNullableAny(): Boolean = impl.isAnyOrNullableAny() - - override fun isByte(): Boolean = impl.isByte() - - override fun isShort(): Boolean = impl.isShort() - - override fun isUnsignedNumberType(): Boolean = impl.isUnsignedNumberType() - - override fun isChar(): Boolean = impl.isChar() - - override fun isString(): Boolean = KotlinBuiltIns.isString(impl) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection.kt deleted file mode 100644 index 94d1e86c0..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/analysis/solver/ast/kotlin/types/KotlinTypeProjection.kt +++ /dev/null @@ -1,19 +0,0 @@ -package arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.types - -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Type -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.TypeProjection -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.types.Variance - -class KotlinTypeProjection(val impl: org.jetbrains.kotlin.types.TypeProjection) : TypeProjection { - override val projectionKind: Variance - get() = - when (impl.projectionKind) { - org.jetbrains.kotlin.types.Variance.IN_VARIANCE -> Variance.In - org.jetbrains.kotlin.types.Variance.OUT_VARIANCE -> Variance.Out - org.jetbrains.kotlin.types.Variance.INVARIANT -> Variance.Invariant - } - override val type: Type - get() = KotlinType(impl.type) - override val isStarProjection: Boolean - get() = impl.isStarProjection -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt deleted file mode 100644 index 982c7c2c7..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/ConstraintsAnnotations.kt +++ /dev/null @@ -1,205 +0,0 @@ -package arrow.meta.plugins.analysis.phases.ir - -import arrow.meta.phases.codegen.ir.IrUtils -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.FunctionDescriptor -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.descriptors.withAliasUnwrapped -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.ast.model -import arrow.meta.plugins.analysis.phases.analysis.solver.collect.model.NamedConstraint -import arrow.meta.plugins.analysis.phases.analysis.solver.isALaw -import arrow.meta.plugins.analysis.phases.analysis.solver.search.getConstraintsFor -import arrow.meta.plugins.analysis.phases.analysis.solver.state.SolverState -import arrow.meta.plugins.analysis.smt.fieldNames -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor -import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies -import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrMutableAnnotationContainer -import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor -import org.jetbrains.kotlin.ir.expressions.IrConst -import org.jetbrains.kotlin.ir.expressions.IrConstKind -import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression -import org.jetbrains.kotlin.ir.expressions.IrReturn -import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl -import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl -import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol -import org.jetbrains.kotlin.ir.util.statements -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.sosy_lab.java_smt.api.FormulaManager - -internal fun IrUtils.annotateWithConstraints(solverState: SolverState, fn: IrFunction) { - if (!solverState.hadParseErrors()) { - val model = - fn - .toIrBasedDescriptor() - .model() - val declarationConstraints = solverState.getConstraintsFor(model) - if (declarationConstraints != null) { - solverState.solver.formulae { - preAnnotation(declarationConstraints.pre, solverState.solver.formulaManager)?.let { - fn.addAnnotation(it) - } - postAnnotation(declarationConstraints.post, solverState.solver.formulaManager)?.let { - fn.addAnnotation(it) - } - notLookAnnotation( - declarationConstraints.doNotLookAtArgumentsWhen, - solverState.solver.formulaManager - ) - ?.let { fn.addAnnotation(it) } - if (model.isALaw()) { - getIrReturnedExpressionWithoutPostcondition(fn)?.let { fnDescriptor -> - lawSubjectAnnotation(fnDescriptor.withAliasUnwrapped)?.let { fn.addAnnotation(it) } - } - } - } - } - } -} - -private fun getIrReturnedExpressionWithoutPostcondition(function: IrFunction): FunctionDescriptor? { - val lastElement = function.body?.statements?.lastOrNull() - val lastElementWithoutReturn = - when (lastElement) { - is IrReturn -> lastElement.value - else -> lastElement - } - // remove outer layer of postcondition - val veryLast: IrStatement? = - when (lastElementWithoutReturn) { - is IrMemberAccessExpression<*> -> - when (val symbol = lastElementWithoutReturn.symbol) { - is IrFunctionSymbol -> - lastElementWithoutReturn.extensionReceiver.takeIf { - symbol.owner.toIrBasedDescriptor().fqNameSafe == FqName("arrow.analysis.post") - } - else -> null - } - else -> null - } - ?: lastElementWithoutReturn - // and finally obtain the model - return when (veryLast) { - is IrMemberAccessExpression<*> -> - when (val symbol = veryLast.symbol) { - is IrFunctionSymbol -> - symbol.owner - .toIrBasedDescriptor() - .model() - else -> null - } - else -> null - } -} - -private fun IrMutableAnnotationContainer.addAnnotation(annotation: IrConstructorCall) { - this.annotations = this.annotations + listOf(annotation) -} - -private fun IrUtils.preAnnotation( - formulae: List, - manager: FormulaManager -): IrConstructorCall? = - annotationFromClassId( - ClassId.fromString("arrow/analysis/Pre"), - formulae.map { it.msg }, - formulae.map { it.formula.toString() }, - formulae.flatMap { manager.fieldNames(it.formula).map { fld -> fld.first }.toSet() } - ) - -private fun IrUtils.postAnnotation( - formulae: List, - manager: FormulaManager -): IrConstructorCall? = - annotationFromClassId( - ClassId.fromString("arrow/analysis/Post"), - formulae.map { it.msg }, - formulae.map { it.formula.toString() }, - formulae.flatMap { manager.fieldNames(it.formula).map { fld -> fld.first }.toSet() } - ) - -private fun IrUtils.notLookAnnotation( - formulae: List, - manager: FormulaManager -): IrConstructorCall? = - annotationFromClassId( - ClassId.fromString("arrow/analysis/DoNotLookAtArguments"), - formulae.map { it.msg }, - formulae.map { it.formula.toString() }, - formulae.flatMap { manager.fieldNames(it.formula).map { fld -> fld.first }.toSet() } - ) - -private fun IrUtils.lawSubjectAnnotation(descriptor: FunctionDescriptor): IrConstructorCall? = - lawSubjectAnnotationFromClassId(ClassId.fromString("arrow/analysis/Subject"), descriptor) - -private fun IrUtils.annotationFromClassId( - classId: ClassId, - messages: List, - formulae: List, - dependencies: List -): IrConstructorCall? = - when { - formulae.isEmpty() -> null - else -> - moduleFragment.descriptor.findClassAcrossModuleDependencies(classId)?.let { - annotation(messages, formulae, dependencies, it) - } - } - -private fun IrUtils.lawSubjectAnnotationFromClassId( - classId: ClassId, - descriptor: FunctionDescriptor -): IrConstructorCall? = - moduleFragment.descriptor.findClassAcrossModuleDependencies(classId)?.let { - lawSubjectAnnotation(descriptor, it) - } - -private fun IrUtils.lawSubjectAnnotation( - fnDescriptor: FunctionDescriptor, - descriptor: ClassDescriptor -): IrConstructorCall? = - descriptor.irConstructorCall()?.also { - it.putValueArgument(0, constantValue(fnDescriptor.fqNameSafe.name)) - } - -private fun IrUtils.annotation( - messages: List, - formulae: List, - dependencies: List, - descriptor: ClassDescriptor -): IrConstructorCall? = - descriptor.irConstructorCall()?.also { - it.putValueArgument(0, arrayOfStrings(messages)) - it.putValueArgument(1, arrayOfStrings(formulae)) - it.putValueArgument(2, arrayOfStrings(dependencies)) - } - -private fun IrUtils.arrayOfStrings(values: List): IrVarargImpl? = - moduleFragment.descriptor - .getPackage(FqName("kotlin")) - .memberScope - .getContributedDescriptors { it.asString() == "arrayOf" } - .filterIsInstance() - .firstOrNull() - ?.let { - IrVarargImpl( - startOffset = UNDEFINED_OFFSET, - endOffset = UNDEFINED_OFFSET, - type = it.returnType?.toIrType()!!, - varargElementType = moduleFragment.irBuiltins.stringType, - elements = values.map(this::constantValue) - ) - } - -private fun IrUtils.constantValue(value: String): IrConst = - IrConstImpl( - startOffset = UNDEFINED_OFFSET, - endOffset = UNDEFINED_OFFSET, - type = moduleFragment.irBuiltins.stringType, - kind = IrConstKind.String, - value = value - ) diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt deleted file mode 100644 index 0c2e0e514..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/kotlin/arrow/meta/plugins/analysis/phases/ir/Hints.kt +++ /dev/null @@ -1,42 +0,0 @@ -package arrow.meta.plugins.analysis.phases.ir - -import arrow.meta.phases.CompilerContext -import arrow.meta.plugins.analysis.phases.analysis.solver.ast.context.elements.FqName -import java.io.File -import java.util.UUID -import org.jetbrains.kotlin.descriptors.ModuleDescriptor - -fun CompilerContext.hintsFile( - parentPath: String, - descriptor: ModuleDescriptor, - packages: Set -): File = - File( - parentPath, - "/AnalysisHints.kt", - ) - .also { - it.createNewFile() - it.writeText(hints(descriptor, packages)) - } - -fun hints(descriptor: ModuleDescriptor, packages: Set): String { - val hintPackageName = - descriptor.stableName?.asString()?.replace('.', '_') - ?: "unknown_${UUID.randomUUID().toString().replace('-', '_')}" - val packageList = packages.joinToString() { name -> "\"${name.name}\"" } - return """ - |package arrow.analysis.hints - | - |import arrow.analysis.PackagesWithLaws - | - |@PackagesWithLaws([$packageList]) - |class hints_$hintPackageName { } - |""" - .trimMargin() -} - -enum class HintState { - NeedsProcessing, - Processed -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor deleted file mode 100644 index b81dfa873..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor +++ /dev/null @@ -1 +0,0 @@ -arrow.meta.AnalysisMetaCliProcessor \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar b/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar deleted file mode 100644 index 52dfa5908..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar +++ /dev/null @@ -1 +0,0 @@ -arrow.meta.AnalysisPlugin \ No newline at end of file diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/Utils.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/Utils.kt deleted file mode 100644 index bea0fd12d..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/Utils.kt +++ /dev/null @@ -1,18 +0,0 @@ -package arrow.meta.plugins - -import arrow.meta.plugin.testing.CompilerPlugin -import arrow.meta.plugin.testing.Config -import arrow.meta.plugin.testing.ConfigSyntax -import arrow.meta.plugin.testing.Dependency - -fun ConfigSyntax.newMetaDependencies(): List { - val currentVersion = System.getProperty("CURRENT_VERSION") - val analysisPlugin = - CompilerPlugin( - "AnalysisPlugin", - listOf(Dependency("arrow-analysis-kotlin-plugin:$currentVersion")) - ) - return metaDependencies + - addCompilerPlugins(analysisPlugin) + - addDependencies(analysisLib(currentVersion)) -} diff --git a/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt b/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt deleted file mode 100644 index d61e30072..000000000 --- a/arrow-libs/analysis/analysis/kotlin-plugin/src/test/kotlin/arrow/meta/plugins/analysis/AnalysisTests.kt +++ /dev/null @@ -1,2131 +0,0 @@ -package arrow.meta.plugins.analysis - -import arrow.meta.plugin.testing.Assert -import arrow.meta.plugin.testing.AssertSyntax -import arrow.meta.plugin.testing.CompilerTest -import arrow.meta.plugin.testing.assertThis -import arrow.meta.plugins.newMetaDependencies -import org.junit.jupiter.api.Test - -class AnalysisTests { - - @Test - fun `bad predicate, could not parse predicate`() { - """ - ${imports()} - fun bar(): Int { - pre( "a" == "b" ) { "wrong" } - return 1 - } - """( - withPlugin = { failsWith { it.contains("not parse predicate") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `bad predicate, refers to local variable`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre(x > 0) { "ok" } - val z = 2 - return 1.post({ z > 0 }) { "wrong" } - } - """( - withPlugin = { failsWith { it.contains("unexpected reference") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `boolean variable used as predicate`() { - """ - ${imports()} - fun negate(x: Boolean): Boolean { - pre(x) { "x is true" } - return (!x).post({ !it }) { "returns false" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `bad predicate, in require`() { - """ - ${imports()} - fun bar(): Int { - require( "a" == "b" ) { "wrong" } - return 1 - } - """( - withPlugin = { compilesWith { it.contains("not parse predicate") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `inconsistent preconditions`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre( x == 42 ) { "x is 42" } - pre( x == 43 ) { "x is also 43" } - val z = x + 2 - return z.post({ it == x + 2 }) { "returns 44" } - } - val result = bar(1) - """( - withPlugin = { failsWith { it.contains("inconsistent pre-conditions") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `post-conditions are checked, 1`() { - """ - ${imports()} - fun bar(x: Int): Int = - 3.post({ it > 0 }) { "greater than 0" } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `post-conditions are checked, 2`() { - """ - ${imports()} - fun bar(x: Int): Int = - 3.post({ it < 0 }) { "smaller than 0" } - """( - withPlugin = { - failsWith { - it.contains("declaration `bar` fails to satisfy the post-condition: ${'$'}result < 0") - } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `post-conditions are on if`() { - """ - ${imports()} - fun bar(x: Int): Int = - (if (x > 0) 1 else -1).post({ it > 0 }) { "greater than 0" } - """( - withPlugin = { - failsWith { - it.contains("declaration `bar` fails to satisfy the post-condition: ${'$'}result > 0") && - it.contains("in branch: !(x > 0)") - } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `checks special functions, 1`() { - """ - ${imports()} - fun bar(x: Int): Int = - 0.let { it + 1 }.post({ it > 0 }) { "greater than 0" } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `checks special functions, 2`() { - """ - ${imports()} - fun bar(x: Int): Int = - 1.run { this - 1 }.post({ it > 0 }) { "greater than 0" } - """( - withPlugin = { failsWith { it.contains("fails to satisfy the post-condition") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `scopes work well`() { - """ - ${imports()} - fun bar(x: Int): Int { - val x = 0 - { val x = 2 } - return x.post({ r -> r > 0 }) { "greater than 0" } - } - """( - withPlugin = { - failsWith { - it.contains("declaration `bar` fails to satisfy the post-condition: ${'$'}result > 0") - } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `invariants in variables`() { - """ - ${imports()} - fun bar(x: Int): Int { - var z = 2.invariant({ it > 0 }) { "invariant it > 0" } - z = 0 - return z - } - """( - withPlugin = { failsWith { it.contains("invariants are not satisfied in `z = 0`") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `var only knows the invariant, 1`() { - """ - ${imports()} - fun bar(x: Int): Int { - var z = 2 - z = 3 - return z.post({ it > 0 }) { "greater than 0" } - } - """( - withPlugin = { - failsWith { - it.contains("declaration `bar` fails to satisfy the post-condition: ${'$'}result > 0") - } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `var only knows the invariant, 2`() { - """ - ${imports()} - fun bar(x: Int): Int { - var z = 2.invariant({ it > 0 }) { "invariant it > 0" } - z = 3 - return z.post({ it >= 0 }) { "greater or equal to 0" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `unreachable code`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre( x > 0 ) { "x is > 0" } - if (x > 0) return 2 else return 3 - } - """( - withPlugin = { - compilesWith { it.contains("unreachable code due to conflicting conditions") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `when with patterns`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre( x >= 0 ) { "x is >= 0" } - return (when (x) { - 0 -> 1 - else -> x - }).post({ it > 0 }) { "result is > 0" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `when with val`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre( x >= 0 ) { "x is >= 0" } - return (when (val y = x + 1) { - else -> y - }).post({ it > 0 }) { "result is > 0" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `when, absolute value`() { - """ - ${imports()} - fun absoluteValue(n: Int): Int = when { - n >= 0 -> n - else -> -n - }.post({ it >= 0 }) { "result >= 0" } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `pre-conditions are not satisfied in call`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre( x == 42 ) { "x is 42" } - val z = x + 2 - return z - } - val result = bar(1) - """( - withPlugin = { - failsWith { it.contains("pre-condition `x is 42` is not satisfied in `bar(1)`") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `pre-conditions are not satisfied in call, but trust me, 1`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre( x == 42 ) { "x is 42" } - val z = x + 2 - return z - } - val result = unsafeCall(bar(1)) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `pre-conditions are not satisfied in call, but trust me, 2`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre( x == 42 ) { "x is 42" } - val z = x + 2 - return z - } - val result = unsafeBlock { bar(1) } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `pre-conditions are not satisfied in call, but trust me, 3`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre( x == 42 ) { "x is 42" } - val z = x + 2 - return z - } - val result = unsafeBlock { bar(1) + 1 } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `pre-conditions are satisfied in call`() { - """ - ${imports()} - fun bar(x: Int): Int { - pre( x > 0 ) { "x greater than 0" } - pre( x < 10 ) { "x less than 10" } - val z = x + 2 - return z.post({ r -> r == x + 2 }) { "it == x + 2" } - } - val result = bar(1) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `pre-conditions are not satisfied in loop, while`() { - """ - ${imports()} - @Pre(messages = ["(< (int x) 0)"], formulae = ["(< (int x) 0)"], dependencies = []) - fun bar(x: Int): Int = - x + 2 - - fun loopy1(t: Int): Int { - while (t > 0) { - bar(1) - } - return 2 - } - """( - withPlugin = { - failsWith { it.contains("pre-condition `(< (int x) 0)` is not satisfied in `bar(1)") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `pre-conditions are not satisfied in loop, for`() { - """ - ${imports()} - @Pre(messages = ["(< (int x) 0)"], formulae = ["(< (int x) 0)"], dependencies = []) - fun bar(x: Int): Int = - x + 2 - - fun loopy1(t: List): Int { - for (elt in t) { - bar(1) - } - return 2 - } - """( - withPlugin = { - failsWith { it.contains("pre-condition `(< (int x) 0)` is not satisfied in `bar(1)`") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `annotated pre-conditions are satisfied in call`() { - """ - ${imports()} - - @Pre(messages = ["x less than 10", "x less than 0"], formulae = ["(< (int x) 10)", "(> (int x) 0)"], dependencies = []) - fun bar(x: Int): Int = - x + 2 - - val result = bar(1) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `annotated pre-conditions are checked in call `() { - """ - ${imports()} - - @Pre(messages = ["x less than 10", "x less than 0"], formulae = ["(< (int x) 10)", "(> (int x) 0)"], dependencies = []) - fun bar(x: Int): Int = - x + 2 - - val result = bar(30) - """( - withPlugin = { - failsWith { it.contains("pre-condition `x less than 10` is not satisfied in `bar(30)`") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `pre-conditions for subjects`() { - """ - ${imports()} - @Pre(messages = ["not zero divisor"], formulae = ["(not (= (int other) 0))"], dependencies = []) - @Subject(fqName = "kotlin.Int.div") - fun Int.divLaw(other: Int) = this / other - - val x: Int = 1 / 0 - """( - withPlugin = { - failsWith { it.contains("pre-condition `not zero divisor` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `post-conditions for subjects`() { - """ - ${imports()} - import kotlin.Result.Companion.success - - @Post(messages = ["create a success"], formulae = ["true"], dependencies = ["kotlin.Result.isSuccess"]) - @Subject(fqName = "kotlin.Result.Companion.success") - fun Result.Companion.successLaw(x: T): Result = success(x) - - val x: Result = success(3) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `post-conditions for subjects, subtype`() { - """ - ${imports()} - @Post(messages = ["example"], formulae = ["true"], dependencies = []) - @Subject(fqName = "kotlin.collections.minus") - fun Collection.minusLaw(element: E) = minus(element) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `post-conditions for subjects, function`() { - """ - ${imports()} - @Pre(messages = ["not empty"], formulae = ["(>= (int (field kotlin.collections.List.size this)) 1)"], dependencies = ["kotlin.collections.List.size"]) - @Subject(fqName = "kotlin.collections.first") - fun List.firstLaw(predicate: (x: E) -> Boolean) = first(predicate) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `ad-hoc laws are checked in call, 1`() { - """ - ${imports()} - - @Law - fun Int.safeDiv(theOtherNumber: Int): Int { - pre( theOtherNumber != 0 ) { "other is not zero" } - return this / theOtherNumber - } - - val result = 1 / 0 - """( - withPlugin = { - failsWith { it.contains("pre-condition `other is not zero` is not satisfied in `1 / 0`") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `ad-hoc laws are checked in call, 2`() { - """ - ${imports()} - - @Law - fun Int.safeDiv(theOtherNumber: Int): Int { - pre( theOtherNumber != 0 ) { "other is not zero" } - return this / theOtherNumber - } - - fun foo() { - val x = 1 - 2 - val result = 1 / x - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `ad-hoc laws are checked in call, 3`() { - """ - ${imports()} - - @Laws - object IntLaws { - @Law - fun Int.safeDiv(theOtherNumber: Int): Int { - pre( theOtherNumber != 0 ) { "other is not zero" } - return this / theOtherNumber - } - } - - val result = 1 / 0 - """( - withPlugin = { - failsWith { it.contains("pre-condition `other is not zero` is not satisfied in `1 / 0`") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `ad-hoc laws are checked in call, 4`() { - """ - ${imports()} - - @Laws - object IntLaws { - @Law - fun Int.safeDiv(theOtherNumber: Int): Int { - pre( theOtherNumber != 0 ) { "other is not zero" } - return this / theOtherNumber - } - } - - val result = 1 / 2 - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `ad-hoc laws are checked in lambda, 1`() { - """ - ${imports()} - - @Law - fun Int.safeDiv(theOtherNumber: Int): Int { - pre( theOtherNumber != 0 ) { "other is not zero" } - return this / theOtherNumber - } - - val result = listOf(1, 0).map { n -> 1 / n } - """( - withPlugin = { - failsWith { it.contains("pre-condition `other is not zero` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `ad-hoc laws are checked in lambda, 2`() { - """ - ${imports()} - - @Law - fun Int.safeDiv(theOtherNumber: Int): Int { - pre( theOtherNumber != 0 ) { "other is not zero" } - return this / theOtherNumber - } - - val result = listOf(1, 0).map { 1 / it } - """( - withPlugin = { - failsWith { it.contains("pre-condition `other is not zero` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `ad-hoc laws for constructors, 1`() { - """ - ${imports()} - ${arrayListLaws()} - - val result = ArrayList(-1) - """( - withPlugin = { - failsWith { - it.contains("pre-condition `initial capacity should be non-negative` is not satisfied") - } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `ad-hoc laws for constructors, 2`() { - """ - ${imports()} - ${arrayListLaws()} - - val result = ArrayList(1) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `ad-hoc laws for constructors, 3`() { - """ - ${imports()} - - import kotlin.collections.ArrayList - - @Pre(messages = ["initial capacity should be non-negative"], formulae = ["(>= (int initialCapacity) 0)"], dependencies = []) - @Subject(fqName = "kotlin.collections.ArrayList.") - fun ArrayListConstruction(initialCapacity: Int): ArrayList { - pre( initialCapacity >= 0 ) { "initial capacity should be non-negative" } - return ArrayList(initialCapacity) - } - - val result = ArrayList(-1) - """( - withPlugin = { - failsWith { - it.contains("pre-condition `initial capacity should be non-negative` is not satisfied") - } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `incorrect ad-hoc law`() { - """ - ${imports()} - - @Law - fun Int.safeDiv(theOtherNumber: Int): Int { - pre( theOtherNumber != 0 ) { "other is not zero" } - return theOtherNumber / this - } - """( - withPlugin = { failsWith { it.contains("must use the arguments in order") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `safe get`() { - """ - ${imports()} - - @Law - fun List.safeGet(index: Int): A { - pre( index >= 0 ) { "index non-negative" } - pre( index < size ) { "index smaller than size" } - return get(index) - } - - @Law - fun emptyListIsEmpty(): List = - emptyList().post({ it.size == 0 }) { "is empty" } - - val wrong: String = emptyList().get(0) - """( - withPlugin = { - failsWith { - it.contains("pre-condition `index smaller than size` is not satisfied in `get(0)`") - } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `safe indexing`() { - """ - ${imports()} - - @Law - fun List.safeGet(index: Int): A { - pre( index >= 0 ) { "index non-negative" } - pre( index < size ) { "index smaller than size" } - return get(index) - } - - @Law - fun emptyListIsEmpty(): List = - emptyList().post({ it.size == 0 }) { "is empty" } - - val wrong: String = emptyList()[0] - """( - withPlugin = { - failsWith { - it.contains( - "pre-condition `index smaller than size` is not satisfied in `emptyList()[0]`" - ) - } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `isEmpty is size == 0`() { - """ - ${imports()} - - @Law - fun List.safeGet(index: Int): A { - pre( index >= 0 ) { "index non-negative" } - pre( index < size ) { "index smaller than size" } - return get(index) - } - - @Law - fun List.refinedIsEmpty(): Boolean = - isEmpty().post({ it == (size <= 0) }) { "equivalent to size 0" } - - fun ok(x: List): String { - pre( !x.isEmpty() ) { "non-empty" } - return x.get(0) - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `isEmpty is size == 0, on map`() { - """ - ${imports()} - - @Law - inline fun List.getLaw(index: Int): E { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - - @Law - inline fun Collection.isEmptyLaw(): Boolean = - isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } - - data class Order(val entries: List) - data class Entry(val id: String, val amount: Int) - - fun Order.containsSingleValue() = - if (entries.isEmpty()) false - else entries.all { entry -> entry.id == entries[0].id } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `nullability, predicate with null, 1`() { - """ - ${imports()} - fun nully1a(x: Int?): Int? { - val y = x?.let { 1 } - return y.post({ - if (x == null) { it == null } - else { (it != null) && (it > 0) } - }) { "greater than 0" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `nullability, predicate with null, 2, if`() { - """ - ${imports()} - fun nully1b(x: Int?): Int? { - val y = x?.let { 1 } - return y.post({ - if (x == null) { it == null } - else { (it != null) && (it < 0) } - }) { "smaller than 0" } - } - """( - withPlugin = { failsWith { it.contains("`nully1b` fails to satisfy the post-condition") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `nullability, predicate with null, 2, when`() { - """ - ${imports()} - fun nully1b(x: Int?): Int? { - val y = x?.let { 1 } - return y.post({ - when { - x == null -> it == null - else -> (it != null) && (it < 0) - } - }) { "smaller than 0" } - } - """( - withPlugin = { failsWith { it.contains("`nully1b` fails to satisfy the post-condition") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `nullability, null check in pre`() { - """ - ${imports()} - fun nully1b(x: Int?): Int? { - pre((x == null) || (x > 0)) { "x is null or positive" } - val y = x?.let { it + 1 } - return y.post({ (it == null) || (it > 1) }) { "greater than 1" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `nullability, branches are followed on null check`() { - """ - ${imports()} - fun nully2(x: Int?): Int { - val y = if (x == null) 1 else 2 - return y.post({ it > 0 }) { "greater than 0" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `nullability, Elvis operator`() { - """ - ${imports()} - fun nully3(x: Int?): Int { - val y = x ?: 1 - return y.post({ it > 0 }) { "greater than 0" } - } - """( - withPlugin = { failsWith { it.contains("`nully3` fails to satisfy the post-condition") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `nullability, is implies non-nullability`() { - """ - ${imports()} - fun nully4(x: Int?): Int { - val y = if (x is Int) 1 else 2 - return y.post({ it > 0 }) { "greater than 0" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `try, 1`() { - """ - ${imports()} - fun try1(x: Int): Int { - val y = try { 1 } catch (e: Exception) { 2 } - return y.post({ it > 0 }) { "greater than 0" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `try, 2`() { - """ - ${imports()} - fun try2(x: Int): Int { - val y = try { 1 } catch (e: Exception) { 0 } - return y.post({ it > 0 }) { "greater than 0" } - } - """( - withPlugin = { failsWith { it.contains("`try2` fails to satisfy the post-condition") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `subtyping, pre- and post-conditions are checked in overridden functions`() { - """ - ${imports()} - open class A() { - open fun f(): Int = 2.post({ it > 0 }) { "greater than 0" } - } - - class B(): A() { - override fun f(): Int = 0 - } - """( - withPlugin = { failsWith { it.contains("`f` fails to satisfy the post-condition") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `subtyping, Liskov Substitution Principle, 1`() { - """ - ${imports()} - open class A() { - open fun f(): Int = 2.post({ it > 0 }) { "greater than 0" } - } - - class B(): A() { - override fun f(): Int = 1.post({ it >= 0 }) { "non-negative" } - } - """( - withPlugin = { - failsWith { - it.contains("post-condition `greater than 0` from overridden member is not satisfied") - } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `subtyping, Liskov Substitution Principle, 2`() { - """ - ${imports()} - open class A() { - open fun f(x: Int): Int { - pre(x > 0) { "greater than 0" } - val y = x + 1 - return y.post({ it > 0 }) { "greater than 0" } - } - } - - class B(): A() { - override fun f(x: Int): Int { - pre(x >= 0) { "greater or equal to 0" } - val y = x + 1000 - return y.post({ it > 1 }) { "greater than 1" } - } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `subtyping, Liskov Substitution Principle, interface`() { - """ - ${imports()} - interface A { - fun f(): Int - - @Law - fun f_Law(): Int = - f().post({ it > 0 }) { "greater than 0" } - } - - class B(): A { - override fun f(): Int = 0 - } - """( - withPlugin = { - failsWith { it.contains("declaration `f` fails to satisfy the post-condition") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class with two init blocks`() { - """ - ${imports()} - data class A(val n: Int) { - init { - pre(n > 0) { "n must be positive" } - } - init { - post({ n > 0 }) { "n must be positive" } - } - fun f(x: Int) = x - } - - val wrong = A(0) - """( - withPlugin = { - failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class with two (wrong) init blocks`() { - """ - ${imports()} - data class A(val n: Int) { - init { - pre(n > 0) { "n must be positive" } - } - init { - post({ n < 0 }) { "n must be negative" } - } - fun f(x: Int) = x - } - """( - withPlugin = { - failsWith { it.contains("declaration `A` fails to satisfy the post-condition") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class with require`() { - """ - ${imports()} - data class B(val n: Int) { - init { - require(n > 0) { "n must be positive" } - } - fun f(x: Int) = x - } - - val wrong = B(0) - """( - withPlugin = { - failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class with require, field knows about invariant, 1`() { - """ - ${imports()} - data class B(val n: Int) { - init { - require(n > 0) { "n must be positive" } - } - fun f(x: Int): Int { - pre(x > 0) { "x is positive" } - val y = x - return (y + n).post({it > 0}) { "result is positive" } - } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class with require, field knows about invariant, 2`() { - """ - ${imports()} - data class B(val n: Int) { - init { - require(n > 0) { "n must be positive" } - } - } - - fun f(b: B, x: Int): Int { - pre(x > 0) { "x is positive" } - return (x + b.n).post({it > 0}) { "result is positive" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class with require, secondary constructor`() { - """ - ${imports()} - data class B(val n: Int) { - init { - require(n > 0) { "n must be positive" } - } - constructor() : this(0) { } - fun f(x: Int) = x - } - """( - withPlugin = { - failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class with require, two classes`() { - """ - ${imports()} - open class A(val n: Int) { - init { - require(n > 0) { "n must be positive" } - } - fun f(x: Int) = x - } - - class B(): A(0) { } - """( - withPlugin = { - failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class with require on field, implicit constructor`() { - """ - ${imports()} - class A { - val n = 0 - init { - require(n > 0) { "n must be positive" } - } - } - - val x = A() - """( - withPlugin = { - failsWith { it.contains("declaration `A` fails to satisfy the post-condition") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `larger example of invariant`() { - """ - ${imports()} - class Positive(val n: Int) { - init { require(n >= 0) } - - operator fun minus(y: Positive): Positive { - pre(this.n >= y.n) { "ensure positive answer" } - return Positive(this.n - y.n) - } - } - - val p = Positive(1) - Positive(2) - """( - withPlugin = { - failsWith { it.contains("pre-condition `ensure positive answer` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `enumerations, init blocks ok`() { - """ - ${imports()} - enum class Color(val rgb: Int) { - RED(0xFF0000), - GREEN(0x00FF00), - BLUE(0x0000FF); - - init { - require(rgb != 0) { "no zero color" } - } - } - - val result: Int = Color.RED.rgb.post({ it != 0 }) { "check this" } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `enumerations, init blocks wrong`() { - """ - ${imports()} - enum class Cosa(val x: Int) { - Esto(0), - Eso(1), - Aquello(2); - - init { - require(x > 0) { "positive" } - } - } - """( - withPlugin = { failsWith { it.contains("pre-condition `positive` is not satisfied") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `overloads work right, 1`() { - """ - ${imports()} - fun f(x: Int): Int { - pre(x > 10) { "greater than ten" } - return 1 - } - - fun f(x: List): Int = 1 - - val result = f(1) - """( - withPlugin = { - failsWith { it.contains("pre-condition `greater than ten` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `overloads work right, 2`() { - """ - ${imports()} - fun f(x: Int): Int { - pre(x > 10) { "greater than ten" } - return 1 - } - - fun f(x: List): Int = 1 - - val result = f(emptyList()) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `optional arguments, 1`() { - """ - ${imports()} - fun f(x: Int = 0): Int { - pre(x > 10) { "greater than ten" } - return 1 - } - """( - withPlugin = { failsWith { it.contains("has inconsistent default values") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `optional arguments, 2`() { - """ - ${imports()} - fun f(x: Int = 1): Int { - pre(x > 0) { "greater than ten" } - return 1 - } - - val result1 = f() - val result2 = f(3) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `optional arguments, only knows pre`() { - """ - ${imports()} - fun f(x: Int = 1): Int { - pre(x > 0) { "greater than ten" } - return x.post({ it == 1 }) { "is one" } - } - """( - withPlugin = { failsWith { it.contains("fails to satisfy the post-condition") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `parses predicates, Result`() { - """ - ${imports()} - - import kotlin.Result.Companion.success - import kotlin.Result.Companion.failure - - @Law - inline fun successLaw(x: T): Result = - success(x).post({ it.isSuccess == true }) { "create a success" } - - @Law - inline fun failureLaw(e: Throwable): Result = - failure(e).post({ it.isFailure == true }) { "create a failure" } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `parses predicates, Lazy`() { - """ - ${imports()} - - @Law - inline fun lazyOfLaw(value: T): Lazy = - lazyOf(value).post({ it.value == value }) { "lazy value is argument" } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `parses predicates, Collection, 1`() { - """ - ${imports()} - ${collectionListLaws()} - - val problem = emptyList().map { it + 1 }.first() - """( - withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `parses predicates, Collection, 2`() { - """ - ${imports()} - ${collectionListLaws()} - - val oki = emptyList().map { it + 1 } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `function reference`() { - """ - ${imports()} - ${collectionListLaws()} - - fun addOne(n: Int): Int = n + 1 - val problem = emptyList().map(::addOne).first() - """( - withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `parses predicates, Collection, using annotations`() { - """ - ${imports()} - - @Laws - object ListLaws { - @Law - @Post(messages = ["empty list is empty"], formulae = ["(= (int (field kotlin.collections.List.size ${'\\'}${'$'}result)) 0)"], dependencies = ["kotlin.collections.List.size"]) - @Subject(fqName = "kotlin.collections.emptyList") - inline fun emptyListLaw(): List = emptyList() - - @Law - @Pre(messages = ["not empty"], formulae = ["(>= (int (field kotlin.collections.List.size this)) 1)"], dependencies = ["kotlin.collections.List.size"]) - @Subject(fqName = "kotlin.collections.first") - inline fun List.firstLaw(): E = first() - } - - val oki = emptyList().first() - """( - withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `string literals, fail`() { - """ - ${imports()} - ${stringLaws()} - fun bar(name: String): Int { - pre( name.isNotEmpty() ) { "not empty name" } - return 2 - } - val result = bar("") - """( - withPlugin = { - failsWith { it.contains("pre-condition `not empty name` is not satisfied in `bar(\"\")`") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `string literals, ok`() { - """ - ${imports()} - ${stringLaws()} - fun bar(name: String): Int { - pre( name.isNotEmpty() ) { "not empty name" } - return 2 - } - val result = bar("alex") - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `string templates, fail`() { - """ - ${imports()} - ${stringLaws()} - fun bar(name: String): Int { - pre( name.isNotEmpty() ) { "not empty name" } - return 2 - } - // we don't know upfront the length of the expression - val result = bar("${'$'}{1 + 2}") - """( - withPlugin = { failsWith { it.contains("pre-condition `not empty name` is not satisfied") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `late initialization, without this`() { - """ - ${imports()} - - class A { - val thing: Int - - public constructor() { - thing = 0 - post({ it.thing == 0 }) { "thing is zero" } - } - - /* cannot be in 'init' because it's "too early" - and the compiler says 'thing' is not initialized - init { - require(thing == 0) { "thing is zero" } - } - */ - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `late initialization, with this`() { - """ - ${imports()} - - class A { - val thing: Int - - public constructor() { - this.thing = 0 - post({ it.thing == 0 }) { "thing is zero" } - } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `implicit primary constructor, ok`() { - """ - ${imports()} - - class A { - val thing: Int = 0 - - init { - require(thing == 0) { "thing is zero" } - } - } - - val example = A() - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `implicit primary constructor, fail`() { - """ - ${imports()} - - class A { - val thing: Int = 1 - - init { - require(thing == 0) { "thing is zero" } - } - } - - val example = A() - """( - withPlugin = { - failsWith { it.contains("declaration `A` fails to satisfy the post-condition") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `implicit primary constructor on object, fail`() { - """ - ${imports()} - - object A { - val thing: Int = 1 - - init { - require(thing == 0) { "thing is zero" } - } - } - - val example = A.thing - """( - withPlugin = { - failsWith { it.contains("declaration `A` fails to satisfy the post-condition") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `do nothing on empty lists, without annotation`() { - """ - ${imports()} - ${collectionListLaws()} - - fun List.containsSingleElement() = - this.all { n -> n == first() } - """( - withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `do nothing on empty lists, with annotation`() { - """ - ${imports()} - ${collectionListLaws()} - - @Law - inline fun List.allLaw(predicate: (x: E) -> Boolean): Boolean { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return all(predicate) - } - - fun List.containsSingleElement() = - this.all { n -> n == first() } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `empty list, ok`() { - """ - ${imports()} - ${collectionListLaws()} - - fun List.x(): Int { - pre(isEmpty()) { "list is not empty" } - return 1 - } - - val l = listOf().x() - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `empty map, ok`() { - """ - ${imports()} - ${collectionListLaws()} - - fun Map.x(): Int { - pre(isEmpty()) { "map is not empty" } - return 1 - } - - val l = mapOf().x() - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `fun interface exception`() { - """ - ${imports()} - - fun interface Example { - fun helloWorld(content: String): Int - } - - fun example(): Example = - Example { content -> content.length } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `weird scoping problem`() { - """ - ${imports()} - - fun Int.a(a: String): Unit { } - - fun b(a: Int) { - a.apply { - a("inline-block address") - } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `escape known names`() { - """ - ${imports()} - - fun f(div: Int, floor: Int): Int = div / floor - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class and element references are recognized`() { - """ - ${imports()} - - import kotlin.reflect.KClass - import kotlin.reflect.KCallable - - fun f(k: KClass): Int = 3 - val value = f(String ::class) - - fun g(k: KCallable): Int = 2 - val other = g(String::capitalize) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `if without else`() { - """ - ${imports()} - - fun f(x: Int): Int { - if (x > 0) { print("positive") } - return x + 1 - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `as expressions`() { - """ - ${imports()} - - fun f(x: Any): Int = (x as Int) + 1 - fun g(x: Any): Int? = (x as? Int)?.let { it + 1 } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `finally`() { - """ - ${imports()} - - fun f(x: Int): Int { - var n = 1.invariant({ it > 0 }) { "positive" } - try { n = 2 } finally { n = 3 } - return 2.post({ it > 0 }) { "positive" } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `class with type parameters`() { - """ - ${imports()} - - data class Thing(val x: A, val n: Int) { - init { pre(n > 0) { "n must be positive" } } - } - - val x = Thing(true, -1) - """( - withPlugin = { - failsWith { it.contains("pre-condition `n must be positive` is not satisfied") } - }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `delegated property, ok`() { - """ - ${imports()} - - val p by lazy { object : Any() {} } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `delegated property, wrong`() { - """ - ${imports()} - ${collectionListLaws()} - - val p: Int by lazy { emptyList().first() } - """( - withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `throw does not break`() { - """ - ${imports()} - - fun f(n: Int) = when { - n > 0 -> n + 1 - else -> throw IllegalArgumentException("positive") - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `issue #1002`() { - """ - ${imports()} - ${collectionListLaws()} - - fun domain(value: String): String? { - val parts = value.split("@") // no pattern matching in kotlin :(((( - return if (parts.size != 2) - null - else - parts[1] - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `issue #997, part 1`() { - """ - ${imports()} - ${collectionListLaws()} - - val ok = listOf(1).first() - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `issue #997, part 2`() { - """ - ${imports()} - ${collectionListLaws()} - - val ok = listOf(1, 2).first() - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `issue #997, part 3`() { - """ - ${imports()} - ${collectionListLaws()} - - val ok = listOf().first() - """( - withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `issue #997, part 4`() { - """ - ${imports()} - ${collectionListLaws()} - - val ok = listOf(-1).map { it + 1 }.first() - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `expect and actual`() { - """ - ${imports()} - ${collectionListLaws()} - - expect class Thing - - actual class Thing { - val problem: Int = emptyList().first() - } - """( - withPlugin = { failsWith { it.contains("pre-condition `not empty` is not satisfied") } }, - withoutPlugin = { compiles }, - isMultiplatform = true - ) - } - - @Test - fun `field named field (issue #1031)`() { - """ - ${imports()} - - data class Field(val key: String, val value: String) - - private fun List.findField(tag: String, field: String): Field? = - Field(tag, field) - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `double conditional, part 1 (issue #31)`() { - """ - ${imports()} - - @JvmInline - value class String5till10(val value: String) { - init { - require(value.length >= 5) { "String should be minimal 5 characters" } - require(value.length <= 10) { "String should be maximum 10 characters" } - } - } - - fun getRandomString(): String = "hello!" - - // This works - fun f() { - val value = getRandomString() - if (value.length > 6) { - if (value.length < 10) { - String5till10(value) - } - } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } - - @Test - fun `double conditional, part 2 (issue #31)`() { - """ - ${imports()} - - @JvmInline - value class String5till10(val value: String) { - init { - require(value.length >= 5) { "String should be minimal 5 characters" } - require(value.length <= 10) { "String should be maximum 10 characters" } - } - } - - fun getRandomString(): String = "hello!" - - // This does not - fun f() { - val value = getRandomString() - if (value.length > 6 && value.length < 10) { - String5till10(value) - } - } - """( - withPlugin = { compilesNoUnreachable }, - withoutPlugin = { compiles } - ) - } -} - -private val AssertSyntax.compilesNoUnreachable: Assert.SingleAssert - get() = compilesWith { !it.contains("unreachable code") } - -private fun imports() = - """ -package test - -import arrow.analysis.invariant -import arrow.analysis.pre -import arrow.analysis.post -import arrow.analysis.Pre -import arrow.analysis.Post -import arrow.analysis.Law -import arrow.analysis.Laws -import arrow.analysis.Subject -import arrow.analysis.doNotLookAtArgumentsWhen -import arrow.analysis.unsafeBlock -import arrow.analysis.unsafeCall - - """ - -private fun collectionListLaws(): String = - """ -@Laws -object CollectionLaws { - @Law - inline fun Collection.firstLaw(): E { - pre(size >= 1) { "not empty" } - return first() - } - @Law - inline fun Collection.mapLaw(transform: (A) -> B): List = - map(transform).post({ it.size == this.size }) { "size remains after map" } -} - -@Laws -object ListLaws { - @Law - inline fun emptyListLaw(): List = - emptyList().post({ it.size == 0 }) { "empty list is empty" } - @Law - inline fun emptyListOfLaw(): List = - listOf().post({ it.size == 0 }) { "empty list is empty" } - @Law - inline fun singletonListLaw(element: E): List = - listOf(element).post({ it.size == 1 }) { "singleton list has size 1" } - @Law - inline fun listOfLaw(vararg elements: E): List = - listOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun List.firstLaw(): E { - pre(size >= 1) { "not empty" } - return first() - } - @Law - inline fun List.isEmptyLaw(): Boolean = - isEmpty().post({ it == (size <= 0) }) { "empty list has size 0" } - @Law - inline fun List.getLaw(index: Int): E { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } -} - -@Laws -object MapLaws { - @Law - inline fun Map.isEmptyLaw(): Boolean = - isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } - @Law - inline fun emptyMapOfLaw(): Map = - mapOf().post({ it.size == 0 }) { "empty map is empty" } -} -""" - -private fun arrayListLaws(): String = - """ -import kotlin.collections.ArrayList - -@Laws -object ArrayListLaws { - @Law - fun ArrayListConstruction(initialCapacity: Int): ArrayList { - pre( initialCapacity >= 0 ) { "initial capacity should be non-negative" } - return ArrayList(initialCapacity) - } -} -""" - -private fun stringLaws(): String = - """ -@Law -fun CharSequence.noneLaw(): Boolean = - none().post({ it == (length <= 0) }) { "none when length is 0" } -@Law -fun CharSequence.isNotEmptyLaw(): Boolean = - isNotEmpty().post({ it == (length > 0) }) { "not empty when length is > 0" } -""" - -// TODO update arrow dependencies to latest to test validated support -private operator fun String.invoke( - withPlugin: AssertSyntax.() -> Assert, - withoutPlugin: AssertSyntax.() -> Assert, - isMultiplatform: Boolean = false -) { - assertThis( - CompilerTest( - config = { - newMetaDependencies() + listOf(addArguments("-Xmulti-platform")).filter { isMultiplatform } - // addPluginOptions(PluginOption("arrow.meta.plugin.compiler", "generatedSrcOutputDir", - // "value")) - }, - code = { this@invoke.source }, - assert = { withPlugin() } - ) - ) - assertThis( - CompilerTest( - config = { - listOf(addDependencies(analysisLib(System.getProperty("CURRENT_VERSION")))) + - listOf(addArguments("-Xmulti-platform")).filter { isMultiplatform } - }, - code = { this@invoke.source }, - assert = { withoutPlugin() } - ) - ) -} diff --git a/arrow-libs/analysis/analysis/laws/build.gradle.kts b/arrow-libs/analysis/analysis/laws/build.gradle.kts deleted file mode 100644 index 8c1875eea..000000000 --- a/arrow-libs/analysis/analysis/laws/build.gradle.kts +++ /dev/null @@ -1,66 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - id(libs.plugins.kotlin.multiplatform.get().pluginId) - alias(libs.plugins.arrowGradleConfig.kotlin) - alias(libs.plugins.arrowGradleConfig.publish) - alias(libs.plugins.arrowGradleConfig.versioning) - alias(libs.plugins.arrowGradleConfig.formatter) - alias(libs.plugins.kotlin.binaryCompatibilityValidator) -} - -kotlin { - explicitApi = null - - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) - } - - sourceSets { - commonMain { - dependencies { - implementation(libs.kotlin.stdlibCommon) - api(projects.arrowAnalysisTypes) - } - } - - named("jvmMain") { - dependencies { - implementation(libs.kotlin.stdlibJDK8) - } - } - - named("jsMain") { - dependencies { - implementation(libs.kotlin.stdlibJS) - } - } - } -} - -dependencies { - kotlinCompilerClasspath(projects.arrowAnalysisKotlinPlugin) -} - -tasks.compileKotlinJvm { - kotlinOptions { - dependsOn(":arrow-analysis-kotlin-plugin:jar") - freeCompilerArgs = listOf( - "-Xplugin=$rootDir/analysis/kotlin-plugin/build/libs/arrow-analysis-kotlin-plugin-$version.jar", - "-P", "plugin:arrow.meta.plugin.compiler.analysis:generatedSrcOutputDir=$buildDir/generated/meta", - "-P", "plugin:arrow.meta.plugin.compiler.analysis:baseDir=${project.rootProject.rootDir.path}" - ) - } -} - -tasks.compileKotlinJs { - kotlinOptions.suppressWarnings = true -} - -tasks.compileKotlinMetadata { - kotlinOptions.suppressWarnings = true -} - -apiValidation { - validationDisabled = true -} diff --git a/arrow-libs/analysis/analysis/laws/gradle.properties b/arrow-libs/analysis/analysis/laws/gradle.properties deleted file mode 100644 index 838fd9d30..000000000 --- a/arrow-libs/analysis/analysis/laws/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Maven publishing configuration -POM_NAME=Arrow Analysis Laws -POM_ARTIFACT_ID=arrow-analysis-laws -POM_PACKAGING=jar - -pom.name=Arrow Analysis Laws diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Array.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Array.kt deleted file mode 100644 index 28b1ebf65..000000000 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Array.kt +++ /dev/null @@ -1,400 +0,0 @@ -// ktlint-disable filename -@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") - -package arrow.analysis.laws.kotlin - -import arrow.analysis.Law -import arrow.analysis.Laws -import arrow.analysis.post -import arrow.analysis.pre - -@Laws -object ArrayLaws { - @Law - inline fun constructorLaw(size: Int, noinline init: (Int) -> E): Array { - return Array(size, init).post({ it.size == size }) { "size is the given one" } - } - @Law - inline fun emptyArrayLaw(): Array = - emptyArray().post({ it.size == 0 }) { "empty array" } - - @Law inline fun Array.sizeLaw(): Int = size.post({ it >= 0 }) { "size is non-negative" } - @Law - inline fun Array.countLaw(): Int = count().post({ it == this.size }) { "count is size" } - @Law - inline fun Array.countLaw(predicate: (E) -> Boolean): Int = - count(predicate).post({ it <= this.size }) { "count bounded by size" } - @Law - inline fun Array.lastIndexLaw(): Int = - lastIndex.post({ it == size - 1 }) { "last index is size - 1" } - - @Law - inline fun Array.isEmptyLaw(): Boolean = - isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } - @Law - inline fun Array.noneLaw(): Boolean = - none().post({ it == (size <= 0) }) { "none when size is 0" } - @Law - inline fun Array.isNotEmptyLaw(): Boolean = - isNotEmpty().post({ it == (size > 0) }) { "not empty when size is > 0" } - @Law - inline fun Array?.isNullOrEmptyLaw(): Boolean = - isNullOrEmpty().post({ it == ((this == null) || (this.size <= 0)) }) { - "either null or size is 0" - } - - @Law - inline fun Array.getLaw(index: Int): E { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun Array.setLaw(index: Int, value: E) { - pre(index >= 0 && index < size) { "index within bounds" } - return set(index, value) - } - - @Law - inline fun Array.elementAtLaw(index: Int): E { - pre(index >= 0 && index < size) { "index within bounds" } - return elementAt(index) - } - @Law - inline fun Array.elementAtOrNullLaw(index: Int): E? = - elementAtOrNull(index).post({ (it == null) == (index < 0 && index >= size) }) { - "null iff out of bounds" - } - @Law - inline fun Collection.firstLaw(): E { - pre(size >= 1) { "not empty" } - return first() - } - @Law - inline fun Array.firstLawWithPredicate(predicate: (x: E) -> Boolean): E { - pre(size >= 1) { "not empty" } - return first(predicate) - } - @Law - inline fun Array.firstOrNullLaw(): E? = - firstOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } - @Law - inline fun Array.lastLaw(): E { - pre(size >= 1) { "not empty" } - return last() - } - @Law - inline fun Array.lastLaw(predicate: (x: E) -> Boolean): E { - pre(size >= 1) { "not empty" } - return last(predicate) - } - @Law - inline fun Array.lastOrNullLaw(): E? = - lastOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } - - @Law - inline fun Array.singleLaw(): E { - pre(size == 1) { "size should be exactly 1" } - return single() - } - @Law - inline fun Array.singleOrNullLaw(): E? = - singleOrNull().post({ (it == null) == (this.size != 1) }) { "null iff size is not 1" } - - @Law - inline fun Array.indexOfLaw(element: E): Int = - indexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOf" - } - @Law - inline fun Array.lastIndexOfLaw(element: E): Int = - lastIndexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for lastIndexOf" - } - @Law - inline fun Array.indexOfFirstLaw(predicate: (x: E) -> Boolean): Int = - indexOfFirst(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOfFirst" - } - @Law - inline fun Array.indexOfLastLaw(predicate: (x: E) -> Boolean): Int = - indexOfLast(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOfLast" - } - - @Law - inline fun Array.randomLaw(): T { - pre(size > 0) { "not empty" } - return random() - } - @Law - inline fun Array.randomOrNullLaw(): T? = - randomOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } - - @Law - inline fun Array.filterLaw(predicate: (E) -> Boolean): List = - filter(predicate).post({ it.size <= this.size }) { "bounds after filter" } - @Law - inline fun Array.filterNotLaw(predicate: (E) -> Boolean): List = - filterNot(predicate).post({ it.size <= this.size }) { "bounds after filter" } - @Law - inline fun Array.filterNotNullLaw(): List = - filterNotNull().post({ it.size <= this.size }) { "bounds after filter" } - @Law - inline fun Array.filterIndexedLaw(predicate: (Int, E) -> Boolean): List = - filterIndexed(predicate).post({ it.size <= this.size }) { "bounds after filter" } - @Law - inline fun Array<*>.filterIsInstanceLaw(): List = - filterIsInstance().post({ it.size <= this.size }) { "bounds after filter" } - - @Law - inline fun Array.distinctLaw(): List = - distinct().post({ it.size <= this.size }) { "size bounded by original " } - @Law - inline fun Array.distinctByLaw(selector: (T) -> K): List = - distinctBy(selector).post({ it.size <= this.size }) { "size bounded by original " } - - @Law - inline fun Array.mapLaw(transform: (A) -> B): List = - map(transform).post({ it.size == this.size }) { "size remains after map" } - @Law - inline fun Array.mapIndexedLaw(transform: (Int, A) -> B): List = - mapIndexed(transform).post({ it.size == this.size }) { "size remains after map" } - - @Law - inline fun Array.mapNotNullLaw(transform: (A) -> B?): List = - mapNotNull(transform).post({ it.size <= this.size }) { "size bounded by original" } - @Law - inline fun Array.mapIndexedNotNullLaw(transform: (Int, A) -> B?): List = - mapIndexedNotNull(transform).post({ it.size == this.size }) { "size bounded by original" } - - @Law - inline fun Array.intersectLaw(other: Collection): Set = - intersect(other).post({ it.size <= this.size && it.size <= other.size }) { - "bounds for intersection" - } - @Law - inline fun Array.subtractLaw(other: Collection): Set = - subtract(other).post({ it.size <= this.size }) { "bounds for subtraction" } - @Law - inline fun Array.unionLaw(other: Collection): Set = - union(other).post({ it.size >= this.size && it.size >= other.size }) { - "bounds for subtraction" - } - - @Law - inline fun Array.component1Law(): E { - pre(this.size >= 1) { "element #1 available" } - return component1() - } - @Law - inline fun Array.component2Law(): E { - pre(this.size >= 2) { "element #2 available" } - return component2() - } - @Law - inline fun Array.component3Law(): E { - pre(this.size >= 3) { "element #3 available" } - return component3() - } - @Law - inline fun Array.component4Law(): E { - pre(this.size >= 4) { "element #4 available" } - return component4() - } - @Law - inline fun Array.component5Law(): E { - pre(this.size >= 5) { "element #5 available" } - return component5() - } -} - -@Laws -object ArrayConversionsLaws { - @Law - inline fun Array>.toMapLaw(): Map = - toMap().post({ it.size <= this.size }) { "size bounded by array" } - @Law - inline fun Array.associateLaw(transform: (T) -> Pair): Map = - associate(transform).post({ it.size <= this.size }) { "size bounded by array" } - @Law - inline fun Array.associateByLaw(keySelector: (T) -> K): Map = - associateBy(keySelector).post({ it.size <= this.size }) { "size bounded by array" } - @Law - inline fun Array.associateWithLaw(valueSelector: (K) -> T): Map = - associateWith(valueSelector).post({ it.size <= this.size }) { "size bounded by array" } - - @Law - inline fun Array.toListLaw(): List = - toList().post({ it.size == this.size }) { "size remains after converstion to list" } - @Law - inline fun Array.toSetLaw(): Set = - toSet().post({ it.size < this.size }) { "size bounded by original size" } -} - -@Laws -object CharArrayLaws { - @Law - inline fun constructorLaw(size: Int, noinline init: (Int) -> Char): CharArray { - return CharArray(size, init).post({ it.size == size }) { "size is the given one" } - } - @Law - inline fun charArrayOfLaw(vararg elements: Char): CharArray = - charArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun CharArray.getLaw(index: Int): Char { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun CharArray.setLaw(index: Int, value: Char) { - pre(index >= 0 && index < size) { "index within bounds" } - return set(index, value) - } -} - -@Laws -object BooleanArrayLaws { - @Law - inline fun constructorLaw(size: Int, noinline init: (Int) -> Boolean): BooleanArray { - return BooleanArray(size, init).post({ it.size == size }) { "size is the given one" } - } - @Law - inline fun booleanArrayOfLaw(vararg elements: Boolean): BooleanArray = - booleanArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun BooleanArray.getLaw(index: Int): Boolean { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun BooleanArray.setLaw(index: Int, value: Boolean) { - pre(index >= 0 && index < size) { "index within bounds" } - return set(index, value) - } -} - -@Laws -object ByteArrayLaws { - @Law - inline fun constructorLaw(size: Int, noinline init: (Int) -> Byte): ByteArray { - return ByteArray(size, init).post({ it.size == size }) { "size is the given one" } - } - @Law - inline fun byteArrayOfLaw(vararg elements: Byte): ByteArray = - byteArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun ByteArray.getLaw(index: Int): Byte { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun ByteArray.setLaw(index: Int, value: Byte) { - pre(index >= 0 && index < size) { "index within bounds" } - return set(index, value) - } -} - -@Laws -object ShortArrayLaws { - @Law - inline fun constructorLaw(size: Int, noinline init: (Int) -> Short): ShortArray { - return ShortArray(size, init).post({ it.size == size }) { "size is the given one" } - } - @Law - inline fun shortArrayOfLaw(vararg elements: Short): ShortArray = - shortArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun ShortArray.getLaw(index: Int): Short { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun ShortArray.setLaw(index: Int, value: Short) { - pre(index >= 0 && index < size) { "index within bounds" } - return set(index, value) - } -} - -@Laws -object IntArrayLaws { - @Law - inline fun constructorLaw(size: Int, noinline init: (Int) -> Int): IntArray { - return IntArray(size, init).post({ it.size == size }) { "size is the given one" } - } - @Law - inline fun intArrayOfLaw(vararg elements: Int): IntArray = - intArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun IntArray.getLaw(index: Int): Int { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun IntArray.setLaw(index: Int, value: Int) { - pre(index >= 0 && index < size) { "index within bounds" } - return set(index, value) - } -} - -@Laws -object LongArrayLaws { - @Law - inline fun constructorLaw(size: Int, noinline init: (Int) -> Long): LongArray { - return LongArray(size, init).post({ it.size == size }) { "size is the given one" } - } - @Law - inline fun longArrayOfLaw(vararg elements: Long): LongArray = - longArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun LongArray.getLaw(index: Int): Long { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun LongArray.setLaw(index: Int, value: Long) { - pre(index >= 0 && index < size) { "index within bounds" } - return set(index, value) - } -} - -@Laws -object FloatArrayLaws { - @Law - inline fun constructorLaw(size: Int, noinline init: (Int) -> Float): FloatArray { - return FloatArray(size, init).post({ it.size == size }) { "size is the given one" } - } - @Law - inline fun floatArrayOfLaw(vararg elements: Float): FloatArray = - floatArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun FloatArray.getLaw(index: Int): Float { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun FloatArray.setLaw(index: Int, value: Float) { - pre(index >= 0 && index < size) { "index within bounds" } - return set(index, value) - } -} - -@Laws -object DoubleArrayLaws { - @Law - inline fun constructorLaw(size: Int, noinline init: (Int) -> Double): DoubleArray { - return DoubleArray(size, init).post({ it.size == size }) { "size is the given one" } - } - @Law - inline fun doubleArrayOfLaw(vararg elements: Double): DoubleArray = - doubleArrayOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun DoubleArray.getLaw(index: Int): Double { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun DoubleArray.setLaw(index: Int, value: Double) { - pre(index >= 0 && index < size) { "index within bounds" } - return set(index, value) - } -} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt deleted file mode 100644 index 8346064da..000000000 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/CharAndString.kt +++ /dev/null @@ -1,261 +0,0 @@ -// ktlint-disable filename -@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") - -package arrow.analysis.laws.kotlin - -import arrow.analysis.Law -import arrow.analysis.Laws -import arrow.analysis.post -import arrow.analysis.pre - -@Laws -object CharSequenceLaws { - @Law - inline fun CharSequence.lengthLaw(): Int = length.post({ it >= 0 }) { "length is non-negative" } - @Law - inline fun CharSequence.countLaw(): Int = - count().post({ it == this.length }) { "count is length" } - @Law - inline fun CharSequence.countLaw(predicate: (Char) -> Boolean): Int = - count(predicate).post({ it <= this.length }) { "count bounded by length" } - @Law - inline fun CharSequence.lastIndexLaw(): Int = - lastIndex.post({ it == length - 1 }) { "last index is length - 1" } - - @Law - inline fun CharSequence.isEmptyLaw(): Boolean = - isEmpty().post({ it == (length <= 0) }) { "empty when length is 0" } - @Law - inline fun CharSequence.noneLaw(): Boolean = - none().post({ it == (length <= 0) }) { "none when length is 0" } - @Law - inline fun CharSequence.isNotEmptyLaw(): Boolean = - isNotEmpty().post({ it == (length > 0) }) { "not empty when length is > 0" } - @Law - inline fun CharSequence?.isNullOrEmptyLaw(): Boolean = - isNullOrEmpty().post({ it == ((this == null) || (this.length <= 0)) }) { - "either null or length is 0" - } - - @Law - inline fun CharSequence.getLaw(index: Int): Char { - pre(index >= 0 && index < length) { "index within bounds" } - return get(index) - } - - @Law - inline fun CharSequence.elementAtLaw(index: Int): Char { - pre(index >= 0 && index < length) { "index within bounds" } - return elementAt(index) - } - @Law - inline fun CharSequence.elementAtOrNullLaw(index: Int): Char? = - elementAtOrNull(index).post({ (it == null) == (index < 0 && index >= length) }) { - "null iff out of bounds" - } - @Law - inline fun CharSequence.firstLaw(): Char { - pre(length >= 1) { "not empty" } - return first() - } - @Law - inline fun CharSequence.firstLawWithPredicate(predicate: (x: Char) -> Boolean): Char { - pre(length >= 1) { "not empty" } - return first(predicate) - } - @Law - inline fun CharSequence.firstOrNullLaw(): Char? = - firstOrNull().post({ (it == null) == (this.length <= 0) }) { "null iff empty" } - @Law - inline fun CharSequence.lastLaw(): Char { - pre(length >= 1) { "not empty" } - return last() - } - @Law - inline fun CharSequence.lastLaw(predicate: (x: Char) -> Boolean): Char { - pre(length >= 1) { "not empty" } - return last(predicate) - } - @Law - inline fun CharSequence.lastOrNullLaw(): Char? = - lastOrNull().post({ (it == null) == (this.length <= 0) }) { "null iff empty" } - - @Law - inline fun CharSequence.singleLaw(): Char { - pre(length == 1) { "length should be exactly 1" } - return single() - } - @Law - inline fun CharSequence.singleOrNullLaw(): Char? = - singleOrNull().post({ (it == null) == (this.length != 1) }) { "null iff length is not 1" } - - @Law - inline fun CharSequence.indexOfLawChar(element: Char, startIndex: Int, ignoreCase: Boolean): Int = - indexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { - "bounds for indexOf" - } - @Law - inline fun CharSequence.indexOfLawString( - element: String, - startIndex: Int, - ignoreCase: Boolean - ): Int = - indexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { - "bounds for indexOf" - } - @Law - inline fun CharSequence.lastIndexOfLawChar( - element: Char, - startIndex: Int, - ignoreCase: Boolean - ): Int = - lastIndexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { - "bounds for lastIndexOf" - } - @Law - inline fun CharSequence.lastIndexOfLawString( - element: String, - startIndex: Int, - ignoreCase: Boolean - ): Int = - lastIndexOf(element, startIndex, ignoreCase).post({ - if (this.length <= 0) (it == -1) else (it >= -1) - }) { - "bounds for lastIndexOf" - } - @Law - inline fun CharSequence.indexOfFirstLaw(predicate: (x: Char) -> Boolean): Int = - indexOfFirst(predicate).post({ if (this.length <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOfFirst" - } - @Law - inline fun CharSequence.indexOfLastLaw(predicate: (x: Char) -> Boolean): Int = - indexOfLast(predicate).post({ if (this.length <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOfLast" - } - - @Law - inline fun CharSequence.randomLaw(): Char { - pre(length > 0) { "not empty" } - return random() - } - - @Law - inline fun CharSequence.filterLaw(predicate: (Char) -> Boolean): CharSequence = - filter(predicate).post({ it.length <= this.length }) { "bounds after filter" } - @Law - inline fun CharSequence.filterNotLaw(predicate: (Char) -> Boolean): CharSequence = - filterNot(predicate).post({ it.length <= this.length }) { "bounds after filter" } - @Law - inline fun CharSequence.filterIndexedLaw(predicate: (Int, Char) -> Boolean): CharSequence = - filterIndexed(predicate).post({ it.length <= this.length }) { "bounds after filter" } - - @Law - inline fun CharSequence.mapLaw(transform: (Char) -> B): List = - map(transform).post({ it.size == this.length }) { "length remains after map" } - @Law - inline fun CharSequence.mapIndexedLaw(transform: (Int, Char) -> B): List = - mapIndexed(transform).post({ it.size == this.length }) { "length remains after map" } - - @Law - inline fun CharSequence.mapNotNullLaw(transform: (Char) -> B?): List = - mapNotNull(transform).post({ it.size <= this.length }) { "length bounded by original" } - @Law - inline fun CharSequence.mapIndexedNotNullLaw(transform: (Int, Char) -> B?): List = - mapIndexedNotNull(transform).post({ it.size == this.length }) { "length bounded by original" } - - @Law - inline fun CharSequence.dropLaw(n: Int): CharSequence { - pre(n >= 0) { "n must be non-negative" } - return drop(n).post({ - if (this.length <= n) (it.length == 0) else (it.length == this.length - n) - }) { - "bounds for drop" - } - } - @Law - inline fun CharSequence.takeLaw(n: Int): CharSequence { - pre(n >= 0) { "n must be non-negative" } - return take(n).post({ it.length <= this.length && it.length <= n }) { "bounds for take" } - } - @Law - inline fun CharSequence.dropLastLaw(n: Int): CharSequence { - pre(n >= 0) { "n must be non-negative" } - return dropLast(n).post({ - if (this.length <= n) (it.length == 0) else (it.length == this.length - n) - }) { - "bounds for drop" - } - } - @Law - inline fun CharSequence.takeLastLaw(n: Int): CharSequence { - pre(n >= 0) { "n must be non-negative" } - return takeLast(n).post({ it.length <= this.length && it.length <= n }) { "bounds for take" } - } - - @Law - inline fun CharSequence.trimLaw(): CharSequence = - trim().post({ it.length <= this.length }) { "trim may reduce the size" } - @Law - inline fun CharSequence.trimLaw(vararg chars: Char): CharSequence = - trim(*chars).post({ it.length <= this.length }) { "trim may reduce the size" } - @Law - inline fun CharSequence.trimEndLaw(): CharSequence = - trimEnd().post({ it.length <= this.length }) { "trim may reduce the size" } - @Law - inline fun CharSequence.trimEndLaw(vararg chars: Char): CharSequence = - trimEnd(*chars).post({ it.length <= this.length }) { "trim may reduce the size" } - @Law - inline fun CharSequence.trimStartLaw(): CharSequence = - trimStart().post({ it.length <= this.length }) { "trim may reduce the size" } - @Law - inline fun CharSequence.trimStartLaw(vararg chars: Char): CharSequence = - trimStart(*chars).post({ it.length <= this.length }) { "trim may reduce the size" } -} - -@Laws -object CharSequenceConversionsLaws { - @Law - inline fun CharSequence.associateLaw(transform: (Char) -> Pair): Map = - associate(transform).post({ it.size <= this.length }) { "length bounded by array" } - @Law - inline fun CharSequence.associateByLaw(keySelector: (Char) -> K): Map = - associateBy(keySelector).post({ it.size <= this.length }) { "length bounded by array" } - @Law - inline fun CharSequence.associateWithLaw(valueSelector: (Char) -> T): Map = - associateWith(valueSelector).post({ it.size <= this.length }) { "length bounded by array" } - - @Law - inline fun CharSequence.toListLaw(): List = - toList().post({ it.size == this.length }) { "length remains after converstion to list" } - @Law - inline fun CharSequence.toMutableListLaw(): List = - toMutableList().post({ it.size == this.length }) { "length remains after converstion to list" } - - @Law - inline fun CharSequence.toSetLaw(): Set = - toSet().post({ it.size < this.length }) { "length bounded by original length" } - @Law - inline fun CharSequence.toHashSetLaw(): HashSet = - toHashSet().post({ it.size < this.length }) { "length bounded by original length" } -} - -@Laws -object StringLaws { - @Law - inline fun String.plusLaw(other: CharSequence?): String = - plus(other).post({ - when { - other == null -> it.length == this.length - else -> it.length == this.length + other.length - } - }) { - "concatenation adds lengths" - } -} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt deleted file mode 100644 index f59e7023f..000000000 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Collections.kt +++ /dev/null @@ -1,734 +0,0 @@ -// ktlint-disable filename -@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") - -package arrow.analysis.laws.kotlin - -import arrow.analysis.Law -import arrow.analysis.Laws -import arrow.analysis.doNotLookAtArgumentsWhen -import arrow.analysis.post -import arrow.analysis.pre - -// based on core/builtins/native/kotlin/Collections.kt -// and libraries/stdlib/src/kotlin/collections/*.kt -// and libraries/stdlib/common/src/generated/_Collections.kt -// remember that laws are inherited by subclasses - -@Laws -object CollectionLaws { - @Law - inline fun Collection.sizeLaw(): Int = size.post({ it >= 0 }) { "size is non-negative" } - @Law - inline fun Collection.countLaw(): Int = - count().post({ it == this.size }) { "count is size" } - @Law - inline fun Collection.countLaw(predicate: (E) -> Boolean): Int { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return count(predicate).post({ it <= this.size }) { "count bounded by size" } - } - - @Law - inline fun Collection.isEmptyLaw(): Boolean = - isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } - @Law - inline fun Collection.noneLaw(): Boolean = - none().post({ it == (size <= 0) }) { "none when size is 0" } - @Law - inline fun Collection.isNotEmptyLaw(): Boolean = - isNotEmpty().post({ it == (size > 0) }) { "not empty when size is > 0" } - @Law - inline fun Collection?.isNullOrEmptyLaw(): Boolean = - isNullOrEmpty().post({ it == ((this == null) || (this.size <= 0)) }) { - "either null or size is 0" - } - @Law - inline fun Collection?.orEmptyLaw(): Collection = - orEmpty().post({ if (this == null) (it.size == 0) else (it.size == this.size) }) { - "returns empty when this is null" - } - - @Law - inline fun Collection.elementAtLaw(index: Int): E { - pre(index >= 0 && index < size) { "index within bounds" } - return elementAt(index) - } - @Law - inline fun Collection.elementAtOrNullLaw(index: Int): E? = - elementAtOrNull(index).post({ (it == null) == (index < 0 && index >= size) }) { - "null iff out of bounds" - } - @Law - inline fun Collection.firstLaw(): E { - pre(size >= 1) { "not empty" } - return first() - } - @Law - inline fun Collection.firstLawWithPredicate(predicate: (x: E) -> Boolean): E { - pre(size >= 1) { "not empty" } - return first(predicate) - } - @Law - inline fun Collection.firstOrNullLaw(): E? = - firstOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } - @Law - inline fun Collection.lastLaw(): E { - pre(size >= 1) { "not empty" } - return last() - } - @Law - inline fun Collection.lastLaw(predicate: (x: E) -> Boolean): E { - pre(size >= 1) { "not empty" } - return last(predicate) - } - @Law - inline fun Collection.lastOrNullLaw(): E? = - lastOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } - - @Law - inline fun Collection.singleLaw(): E { - pre(size == 1) { "size should be exactly 1" } - return single() - } - @Law - inline fun Collection.singleOrNullLaw(): E? = - singleOrNull().post({ (it == null) == (this.size != 1) }) { "null iff size is not 1" } - - @Law - inline fun Collection.indexOfLaw(element: E): Int = - indexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOf" - } - @Law - inline fun Collection.lastIndexOfLaw(element: E): Int = - lastIndexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for lastIndexOf" - } - @Law - inline fun Collection.indexOfFirstLaw(predicate: (x: E) -> Boolean): Int { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return indexOfFirst(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOfFirst" - } - } - @Law - inline fun Collection.indexOfLastLaw(predicate: (x: E) -> Boolean): Int { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return indexOfLast(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOfLast" - } - } - - @Law - inline fun Collection.randomLaw(): T { - pre(size > 0) { "not empty" } - return random() - } - @Law - inline fun Collection.randomOrNullLaw(): T? = - randomOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } - - // zip and unzip - @Law - inline fun Collection>.unzipLaw(): Pair, List> = - unzip().post({ it.first.size == this.size && it.second.size == this.size }) { - "size remains after unzip" - } - @Law - inline fun Collection.zipLaw(other: Collection): List> { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return zip(other).post({ it.size <= this.size && it.size <= other.size }) { - "size bounded by the smallest" - } - } - @Law - inline fun Collection.zipLaw( - other: Collection, - transform: (a: T, b: R) -> V - ): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return zip(other, transform).post({ it.size <= this.size && it.size <= other.size }) { - "size bounded by the smallest" - } - } - @Law - inline fun Collection.zipWithNextLaw(): List> = - zipWithNext().post({ if (this.size < 2) (it.size == 0) else (it.size == this.size - 1) }) { - "size is one less" - } - @Law - inline fun Collection.zipWithNextLaw(transform: (a: T, b: T) -> V): List { - doNotLookAtArgumentsWhen(size < 2) { "empty lists have no elements" } - return zipWithNext(transform).post({ - if (this.size < 2) (it.size == 0) else (it.size == this.size - 1) - }) { - "size bounded by the smallest" - } - } - - // operations which remove things - @Law - inline fun Collection.dropLaw(n: Int): List { - pre(n >= 0) { "n must be non-negative" } - return drop(n).post({ if (this.size <= n) (it.size == 0) else (it.size == this.size - n) }) { - "bounds for drop" - } - } - @Law - inline fun Collection.dropWhileLaw(predicate: (E) -> Boolean): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return dropWhile(predicate).post({ it.size <= this.size }) { "bounds for dropWhile" } - } - @Law - inline fun Collection.takeLaw(n: Int): List { - pre(n >= 0) { "n must be non-negative" } - return take(n).post({ it.size <= this.size && it.size <= n }) { "bounds for take" } - } - @Law - inline fun Collection.takeWhileLaw(predicate: (E) -> Boolean): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return takeWhile(predicate).post({ it.size <= this.size }) { "bounds for takeWhile" } - } - - @Law - inline fun Collection.filterLaw(predicate: (E) -> Boolean): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return filter(predicate).post({ it.size <= this.size }) { "bounds after filter" } - } - @Law - inline fun Collection.filterNotLaw(predicate: (E) -> Boolean): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return filterNot(predicate).post({ it.size <= this.size }) { "bounds after filter" } - } - @Law - inline fun Collection.filterNotNullLaw(): List = - filterNotNull().post({ it.size <= this.size }) { "bounds after filter" } - @Law - inline fun Collection.filterIndexedLaw(predicate: (Int, E) -> Boolean): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return filterIndexed(predicate).post({ it.size <= this.size }) { "bounds after filter" } - } - @Law - inline fun Collection<*>.filterIsInstanceLaw(): List = - filterIsInstance().post({ it.size <= this.size }) { "bounds after filter" } - - @Law - inline fun Collection.distinctLaw(): List = - distinct().post({ it.size <= this.size }) { "size bounded by original " } - @Law - inline fun Collection.distinctByLaw(selector: (T) -> K): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return distinctBy(selector).post({ it.size <= this.size }) { "size bounded by original " } - } - - @Law - inline fun Collection.plusLaw(element: E): List = - plus(element).post({ it.size == this.size + 1 }) { "size increases by 1" } - @Law - inline fun Collection.plusLawWithElements(elements: Collection): List = - plus(elements).post({ it.size == this.size + elements.size }) { - "size increases by size of the collection" - } - - @Law - inline fun Collection.minusLaw(element: E): List = - minus(element).post({ it.size >= this.size - 1 && it.size <= this.size }) { - "size may decrease by 1" - } - @Law - inline fun Collection.minusLawWithElements(elements: Collection): List = - minus(elements).post({ it.size >= this.size - elements.size && it.size <= this.size }) { - "size may decrease by size of the removed elements" - } - - // operations which keep the size - @Law - inline fun Collection.reversedLaw(): List = - reversed().post({ it.size == this.size }) { "size remains after reversal" } - @Law - inline fun > Collection.sortedLaw(): List = - sorted().post({ it.size == this.size }) { "size remains after sorting" } - @Law - inline fun > Collection.sortedDescendingLaw(): List = - sortedDescending().post({ it.size == this.size }) { "size remains after sorting" } - @Law - inline fun > Collection.sortedByLaw( - crossinline selector: (T) -> R? - ): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return sortedBy(selector).post({ it.size == this.size }) { "size remains after sorting" } - } - @Law - inline fun > Collection.sortedByDescendingLaw( - crossinline selector: (T) -> R? - ): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return sortedByDescending(selector).post({ it.size == this.size }) { - "size remains after sorting" - } - } - @Law - inline fun Collection.sortedWithLaw(comparator: Comparator): List = - sortedWith(comparator).post({ it.size == this.size }) { "size remains after sorting" } - - @Law - inline fun Collection.shuffledLaw(): List = - shuffled().post({ it.size == this.size }) { "size remains after shuffle" } - - @Law - inline fun Collection.mapLaw(transform: (A) -> B): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return map(transform).post({ it.size == this.size }) { "size remains after map" } - } - @Law - inline fun Collection.mapIndexedLaw(transform: (Int, A) -> B): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return mapIndexed(transform).post({ it.size == this.size }) { "size remains after map" } - } - - @Law - inline fun Collection.mapNotNullLaw(transform: (A) -> B?): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return mapNotNull(transform).post({ it.size <= this.size }) { "size bounded by original" } - } - @Law - inline fun Collection.mapIndexedNotNullLaw(transform: (Int, A) -> B?): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return mapIndexedNotNull(transform).post({ it.size == this.size }) { - "size bounded by original" - } - } - - @Law - inline fun Collection.forEachLaw(action: (A) -> Unit): Unit { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return forEach(action) - } - @Law - inline fun Collection.forEachIndexedLaw(action: (Int, A) -> Unit): Unit { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return forEachIndexed(action) - } - - @Law - inline fun > C.onEachLaw(action: (A) -> Unit): C { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return onEach(action).post({ it.size == size }) { "onEach does nothing" } - } - @Law - inline fun > C.onEachIndexedLaw(action: (Int, A) -> Unit): C { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return onEachIndexed(action).post({ it.size == this.size }) { "onEach does nothing" } - } - - @Law - inline fun Collection.flatMapLaw(transform: (A) -> Iterable): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return flatMap(transform).post({ - if (size <= 0) it.size == 0 else /* true means no info */ true - }) { - "size of empty list" - } - } - @Law - inline fun Collection.flatMapIndexedLaw( - transform: (index: Int, A) -> Iterable - ): List { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return flatMapIndexed(transform).post({ - if (size <= 0) it.size == 0 else /* true means no info */ true - }) { - "size of empty list" - } - } - @Law - inline fun Collection>.flattenLaw(): List = - flatten().post({ if (size <= 0) it.size == 0 else /* true means no info */ true }) { - "size of empty list" - } - - // operations between several collections - @Law - inline fun Collection.intersectLaw(other: Collection): Set = - intersect(other).post({ it.size <= this.size && it.size <= other.size }) { - "bounds for intersection" - } - @Law - inline fun Collection.subtractLaw(other: Collection): Set = - subtract(other).post({ it.size <= this.size }) { "bounds for subtraction" } - @Law - inline fun Collection.unionLaw(other: Collection): Set = - union(other).post({ it.size >= this.size && it.size >= other.size }) { - "bounds for subtraction" - } - - // iteration over the list - @Law - inline fun Collection.allLaw(predicate: (T) -> Boolean): Boolean { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return all(predicate).post({ if (size <= 0) it == true else /* true means no info */ true }) { - "true for empty lists" - } - } - @Law - inline fun Collection.anyLaw(): Boolean = - any().post({ it == (size > 0) }) { "any means at least one element" } - @Law - inline fun Collection.anyLaw(predicate: (T) -> Boolean): Boolean { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return any(predicate).post({ if (size <= 0) it == false else /* true means no info */ true }) { - "false for empty lists" - } - } -} - -@Laws -object ListLaws { - // size is inherited - // isEmpty is inherited - - @Law - inline fun List.getLaw(index: Int): E { - pre(index >= 0 && index < size) { "index within bounds" } - return get(index) - } - @Law - inline fun List.elementAtLaw(index: Int): E { - pre(index >= 0 && index < size) { "index within bounds" } - return elementAt(index) - } - @Law - inline fun List.getOrNullLaw(index: Int): E? = - getOrNull(index).post({ (it == null) == (index < 0 && index >= size) }) { - "null iff out of bounds" - } - @Law - inline fun List.elementAtOrNullLaw(index: Int): E? = - elementAtOrNull(index).post({ (it == null) == (index < 0 && index >= size) }) { - "null iff out of bounds" - } - - @Law - inline fun List.firstLaw(): E { - pre(size >= 1) { "not empty" } - return first() - } - @Law - inline fun List.firstOrNullLaw(): E? = - firstOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } - @Law - inline fun List.lastLaw(): E { - pre(size >= 1) { "not empty" } - return last() - } - @Law - inline fun List.lastLaw(predicate: (x: E) -> Boolean): E { - pre(size >= 1) { "not empty" } - return last(predicate) - } - @Law - inline fun List.lastOrNullLaw(): E? = - lastOrNull().post({ (it == null) == (this.size <= 0) }) { "null iff empty" } - - @Law - inline fun List.singleLaw(): E { - pre(size == 1) { "size should be exactly 1" } - return single() - } - @Law - inline fun List.singleOrNullLaw(): E? = - singleOrNull().post({ (it == null) == (this.size != 1) }) { "null iff size is not 1" } - - @Law - inline fun List.indexOfLaw(element: E): Int = - indexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOf" - } - @Law - inline fun List.lastIndexOfLaw(element: E): Int = - lastIndexOf(element).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for lastIndexOf" - } - @Law - inline fun List.lastIndexLaw(): Int = - lastIndex.post({ it == size - 1 }) { "last index is size - 1" } - @Law - inline fun List.indexOfFirstLaw(predicate: (x: E) -> Boolean): Int { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return indexOfFirst(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOfFirst" - } - } - @Law - inline fun List.indexOfLastLaw(predicate: (x: E) -> Boolean): Int { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return indexOfLast(predicate).post({ if (this.size <= 0) (it == -1) else (it >= -1) }) { - "bounds for indexOfLast" - } - } - - @Law - inline fun emptyListLaw(): List = - emptyList().post({ it.size == 0 }) { "empty list is empty" } - @Law - inline fun emptyListOfLaw(): List = - listOf().post({ it.size == 0 }) { "empty list is empty" } - @Law - inline fun listOfNotNullLaw(element: E?): List = - listOfNotNull(element).post({ if (element == null) (it.size == 0) else (it.size == 1) }) { - "empty iff element is null" - } - @Law - inline fun singletonListOfLaw(element: E): List = - listOf(element).post({ it.size == 1 }) { "singleton list has size 1" } - @Law - inline fun listOfLaw(vararg elements: E): List = - listOf(*elements).post({ it.size == elements.size }) { "literal size" } - @Law - inline fun listOfNotNullLaw(vararg elements: E?): List = - listOfNotNull(*elements).post({ it.size <= elements.size }) { "bounded by the literal" } - - @Law - inline fun emptyMutableListLaw(): List = - mutableListOf().post({ it.size == 0 }) { "empty list is empty" } - @Law - inline fun mutableListOfLaw(vararg elements: E): MutableList = - mutableListOf(*elements).post({ it.size == elements.size }) { "literal size" } - - @Law - inline fun List?.orEmptyLaw(): List = - orEmpty().post({ if (this == null) (it.size == 0) else (it.size == this.size) }) { - "returns empty when this is null" - } - - @Law - inline fun List.asReversedLaw(): List = - asReversed().post({ it.size == this.size }) { "size remains after reversal" } - - @Law - inline fun List.component1Law(): E { - pre(this.size >= 1) { "element #1 available" } - return component1() - } - @Law - inline fun List.component2Law(): E { - pre(this.size >= 2) { "element #2 available" } - return component2() - } - @Law - inline fun List.component3Law(): E { - pre(this.size >= 3) { "element #3 available" } - return component3() - } - @Law - inline fun List.component4Law(): E { - pre(this.size >= 4) { "element #4 available" } - return component4() - } - @Law - inline fun List.component5Law(): E { - pre(this.size >= 5) { "element #5 available" } - return component5() - } - - // operations - @Law - inline fun List.dropLastLaw(n: Int): List { - pre(n >= 0) { "n must be non-negative" } - return dropLast(n).post({ - if (this.size <= n) (it.size == 0) else (it.size == this.size - n) - }) { - "bounds for drop" - } - } - @Law - inline fun List.takeLastLaw(n: Int): List { - pre(n >= 0) { "n must be non-negative" } - return takeLast(n).post({ it.size <= this.size && it.size <= n }) { "bounds for take" } - } - - @Law - inline fun List.isEmptyLaw(): Boolean = - isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } -} - -@Laws -object SetLaws { - // size is inherited - // isEmpty is inherited - - @Law - inline fun emptySetLaw(): Set = - emptySet().post({ it.size == 0 }) { "empty set is empty" } - @Law - inline fun emptySetOfLaw(): Set = - setOf().post({ it.size == 0 }) { "empty set is empty" } - @Law - inline fun setOfNotNullLaw(element: E?): Set = - setOfNotNull(element).post({ if (element == null) (it.size == 0) else (it.size == 1) }) { - "empty iff element is null" - } - @Law - inline fun setOfLaw(vararg elements: E): Set = - setOf(*elements).post({ it.size <= elements.size }) { "bounded by the literal" } - @Law - inline fun setOfNotNullLaw(vararg elements: E?): Set = - setOfNotNull(*elements).post({ it.size <= elements.size }) { "bounded by the literal" } - - @Law - inline fun emptyMutableSetOfLaw(): MutableSet = - mutableSetOf().post({ it.size == 0 }) { "empty set is empty" } - @Law - inline fun mutableSetOfLaw(vararg elements: E): MutableSet = - mutableSetOf(*elements).post({ it.size <= elements.size }) { "bounded by the literal" } - - @Law - inline fun Set?.orEmptyLaw(): Set = - orEmpty().post({ if (this == null) (it.size == 0) else (it.size == this.size) }) { - "returns empty when this is null" - } -} - -@Laws -object MapLaws { - @Law - inline fun Map.sizeLaw(): Int = size.post({ it >= 0 }) { "size is non-negative" } - @Law - inline fun Map.isEmptyLaw(): Boolean = - isEmpty().post({ it == (size <= 0) }) { "empty when size is 0" } - @Law - inline fun Map.isNotEmptyLaw(): Boolean = - isNotEmpty().post({ it == (size > 0) }) { "not empty when size is > 0" } - @Law - inline fun Map?.isNullOrEmptyLaw(): Boolean = - isNullOrEmpty().post({ it == ((this == null) || (this.size <= 0)) }) { - "either null or size is 0" - } - @Law - inline fun Map?.orEmptyLaw(): Map = - orEmpty().post({ if (this == null) (it.size == 0) else (it.size == this.size) }) { - "returns empty when this is null" - } - - @Law - inline fun Map.keysLaw(): Set = - keys.post({ it.size == this.size }) { "size of keys remains" } - @Law - inline fun Map.valuesLaw(): Collection = - values.post({ it.size == this.size }) { "size of values remains" } - @Law - inline fun Map.entriesLaw(): Set> = - entries.post({ it.size == this.size }) { "size of entries remains" } - - @Law - inline fun emptyMapLaw(): Map = - emptyMap().post({ it.size == 0 }) { "empty map is empty" } - @Law - inline fun emptyMapOfLaw(): Map = - mapOf().post({ it.size == 0 }) { "empty map is empty" } - @Law - inline fun mapOfLaw(vararg elements: Pair): Map = - mapOf(*elements).post({ it.size <= elements.size }) { "literal size" } - - @Law - inline fun emptyMutableMapLaw(): Map = - mutableMapOf().post({ it.size == 0 }) { "empty map is empty" } - @Law - inline fun mutableMapOfLaw(vararg elements: Pair): MutableMap = - mutableMapOf(*elements).post({ it.size <= elements.size }) { "literal size" } - - @Law - inline fun Map.mapValuesLaw(transform: (Map.Entry) -> R): Map { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return mapValues(transform).post({ it.size == this.size }) { "size remains after mapValues" } - } - @Law - inline fun Map.mapKeysLaw(transform: (Map.Entry) -> R): Map { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return mapKeys(transform).post({ it.size <= this.size }) { "size bounded after mapKeys" } - } - - @Law - inline fun Map.filterLaw(predicate: (Map.Entry) -> Boolean): Map { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return filter(predicate).post({ it.size <= this.size }) { "size bounded after filter" } - } - @Law - inline fun Map.filterNotLaw(predicate: (Map.Entry) -> Boolean): Map { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return filterNot(predicate).post({ it.size <= this.size }) { "size bounded after filter" } - } - @Law - inline fun Map.filterValuesLaw(predicate: (V) -> Boolean): Map { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return filterValues(predicate).post({ it.size <= this.size }) { "size bounded after filter" } - } - @Law - inline fun Map.filterKeysLaw(predicate: (K) -> Boolean): Map { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return filterKeys(predicate).post({ it.size <= this.size }) { "size bounded after filter" } - } - - @Law - inline fun Map.plusLaw(pair: Pair): Map = - plus(pair).post({ it.size <= this.size + 1 }) { "size may increase by 1" } - @Law - inline fun Map.plusLawWithElements(pairs: Collection>): Map = - plus(pairs).post({ it.size <= this.size + pairs.size }) { - "size may increase by size of the collection" - } - @Law - inline fun Map.plusLawWithMap(map: Map): Map = - plus(map).post({ it.size <= this.size + map.size }) { "size may increase by size of the map" } - - @Law - inline fun Map.minusLaw(key: K): Map = - minus(key).post({ it.size <= this.size && it.size >= this.size - 1 }) { - "size may decrease by 1" - } - @Law - inline fun Map.minusLawWithElements(keys: Collection): Map = - minus(keys).post({ it.size <= this.size && it.size >= this.size - keys.size }) { - "size may decrease by size of the collection" - } -} - -@Laws -object MapEntryLaws { - @Law - inline fun Map.Entry.component1Law(): K = - component1().post({ it == this.key }) { "1st component is key" } - @Law - inline fun Map.Entry.component2Law(): V = - component2().post({ it == this.value }) { "2nd component is value" } -} - -@Laws -object CollectionConversionsLaws { - @Law - inline fun Collection>.toMapLaw(): Map = - toMap().post({ it.size <= this.size }) { "size bounded by collection" } - @Law - inline fun Collection.associateLaw(transform: (T) -> Pair): Map { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return associate(transform).post({ it.size <= this.size }) { "size bounded by collection" } - } - @Law - inline fun Collection.associateByLaw(keySelector: (T) -> K): Map { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return associateBy(keySelector).post({ it.size <= this.size }) { "size bounded by collection" } - } - @Law - inline fun Collection.associateWithLaw(valueSelector: (K) -> T): Map { - doNotLookAtArgumentsWhen(isEmpty()) { "empty lists have no elements" } - return associateWith(valueSelector).post({ it.size <= this.size }) { - "size bounded by collection" - } - } - - @Law - inline fun Collection.toListLaw(): List = - toList().post({ it.size == this.size }) { "size remains after converstion to list" } - @Law - inline fun Collection.toSetLaw(): Set = - toSet().post({ it.size < this.size }) { "size bounded by original size" } -} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Enum.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Enum.kt deleted file mode 100644 index ff9fb84db..000000000 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Enum.kt +++ /dev/null @@ -1,15 +0,0 @@ -// ktlint-disable filename -@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") - -package arrow.analysis.laws.kotlin - -import arrow.analysis.Law -import arrow.analysis.Laws -import arrow.analysis.post - -@Laws -object EnumLaws { - @Law - inline fun > Enum.ordinalLaw(): Int = - ordinal.post({ it >= 0 }) { "ordinal is non-negative" } -} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt deleted file mode 100644 index 7d4fe1cb4..000000000 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Math.kt +++ /dev/null @@ -1,179 +0,0 @@ -// ktlint-disable filename -@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") - -package arrow.analysis.laws.kotlin - -import arrow.analysis.Law -import arrow.analysis.Laws -import arrow.analysis.post -import kotlin.math.abs -import kotlin.math.absoluteValue -import kotlin.math.max -import kotlin.math.min -import kotlin.math.sign - -@Laws -object MathLaws { - @Law - inline fun Int.absoluteValueLaw(): Int = - absoluteValue.post({ it >= 0 && (if (this >= 0) it == this else it == -this) }) { - "absolute value is non-negative + definition" - } - @Law - inline fun Long.absoluteValueLaw(): Long = - absoluteValue.post({ it >= 0L && (if (this >= 0L) it == this else it == -this) }) { - "absolute value is non-negative + definition" - } - @Law - inline fun Float.absoluteValueLaw(): Float = - absoluteValue.post({ it >= 0.0F && (if (this >= 0.0F) it == this else it == -this) }) { - "absolute value is non-negative + definition" - } - @Law - inline fun Double.absoluteValueLaw(): Double = - absoluteValue.post({ it >= 0.0 && (if (this >= 0.0) it == this else it == -this) }) { - "absolute value is non-negative + definition" - } - @Law - inline fun absLaw(x: Int): Int = - abs(x).post({ it >= 0 && (if (x >= 0) it == x else it == -x) }) { - "absolute value is non-negative + definition" - } - @Law - inline fun absLaw(x: Long): Long = - abs(x).post({ it >= 0L && (if (x >= 0L) it == x else it == -x) }) { - "absolute value is non-negative + definition" - } - @Law - inline fun absLaw(x: Float): Float = - abs(x).post({ it >= 0.0F && (if (x >= 0.0F) it == x else it == -x) }) { - "absolute value is non-negative + definition" - } - @Law - inline fun absLaw(x: Double): Double = - abs(x).post({ it >= 0.0 && (if (x >= 0.0) it == x else it == -x) }) { - "absolute value is non-negative + definition" - } - - @Law - inline fun Int.signLaw(): Int = - sign.post({ - it >= -1 && - it <= 1 && - when { - this == 0 -> it == 0 - this > 0 -> it == 1 - else -> it == -1 - } - }) { - "sign bounds + definition" - } - @Law - inline fun Long.signLaw(): Int = - sign.post({ - it >= -1 && - it <= 1 && - when { - this == 0L -> it == 0 - this > 0L -> it == 1 - else -> it == -1 - } - }) { - "sign bounds + definition" - } - @Law - inline fun Double.signLaw(): Double = - sign.post({ - it >= -1.0 && - it <= 1.0 && - when { - this == 0.0 -> it == 0.0 - this > 0.0 -> it == 1.0 - else -> it == -1.0 - } - }) { - "sign bounds + definition" - } - @Law - inline fun Float.signLaw(): Float = - sign.post({ - it >= -1.0F && - it <= 1.0F && - when { - this == 0.0F -> it == 0.0F - this > 0.0F -> it == 1.0F - else -> it == -1.0F - } - }) { - "sign bounds + definition" - } - - @Law - inline fun signTopLevelLaw(x: Double): Double = - sign(x).post({ - it >= -1.0 && - it <= 1.0 && - when { - x == 0.0 -> it == 0.0 - x > 0.0 -> it == 1.0 - else -> it == -1.0 - } - }) { - "sign bounds + definition" - } - @Law - inline fun signTopLevelLaw(x: Float): Float = - sign(x).post({ - it >= -1.0F && - it <= 1.0F && - when { - x == 0.0F -> it == 0.0F - x > 0.0F -> it == 1.0F - else -> it == -1.0F - } - }) { - "sign bounds + definition" - } - - @Law - inline fun maxLaw(a: Int, b: Int): Int = - max(a, b).post({ it >= a && it >= b && (if (a >= b) it == a else it == b) }) { - "bounds for max + definition" - } - @Law - inline fun maxLaw(a: Long, b: Long): Long = - max(a, b).post({ it >= a && it >= b && (if (a >= b) it == a else it == b) }) { - "bounds for max + definition" - } - @Law - inline fun maxLaw(a: Float, b: Float): Float = - max(a, b).post({ it >= a && it >= b && (if (a >= b) it == a else it == b) }) { - "bounds for max + definition" - } - @Law - inline fun maxLaw(a: Double, b: Double): Double = - max(a, b).post({ it >= a && it >= b && (if (a >= b) it == a else it == b) }) { - "bounds for max + definition" - } - - @Law - inline fun minLaw(a: Int, b: Int): Int = - min(a, b).post({ it <= a && it <= b && (if (a <= b) it == a else it == b) }) { - "bounds for min + definition" - } - @Law - inline fun minLaw(a: Long, b: Long): Long = - min(a, b).post({ it <= a && it <= b && (if (a <= b) it == a else it == b) }) { - "bounds for min + definition" - } - @Law - inline fun minLaw(a: Float, b: Float): Float = - min(a, b).post({ it <= a && it <= b && (if (a <= b) it == a else it == b) }) { - "bounds for min + definition" - } - @Law - inline fun minLaw(a: Double, b: Double): Double = - min(a, b).post({ it <= a && it <= b && (if (a <= b) it == a else it == b) }) { - "bounds for min + definition" - } -} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Numbers.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Numbers.kt deleted file mode 100644 index f7d6f9883..000000000 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Numbers.kt +++ /dev/null @@ -1,113 +0,0 @@ -// ktlint-disable filename -@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") - -package arrow.analysis.laws.kotlin - -import arrow.analysis.Law -import arrow.analysis.Laws -import arrow.analysis.post -import arrow.analysis.pre - -@Laws -object ByteLaws { - @Law - inline fun Byte.divLaw(other: Int): Int { - pre(other != 0) { "other is not zero" } - return this / other - } - @Law - inline fun Byte.divLaw(other: Long): Long { - pre(other != 0L) { "other is not zero" } - return this / other - } - - @Law - inline fun Byte.countOneBitsLaw(): Int = - this.countOneBits().post({ it >= 0 }) { "number of ones is >= 0" } - - @Law - inline fun Byte.countLeadingZeroBitsLaw(): Int = - this.countLeadingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } - - @Law - inline fun Byte.countTrailingZeroBitsLaw(): Int = - this.countTrailingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } -} - -@Laws -object ShortLaws { - @Law - inline fun Short.divLaw(other: Int): Int { - pre(other != 0) { "other is not zero" } - return this / other - } - @Law - inline fun Short.divLaw(other: Long): Long { - pre(other != 0L) { "other is not zero" } - return this / other - } - - @Law - inline fun Short.countOneBitsLaw(): Int = - this.countOneBits().post({ it >= 0 }) { "number of ones is >= 0" } - - @Law - inline fun Short.countLeadingZeroBitsLaw(): Int = - this.countLeadingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } - - @Law - inline fun Short.countTrailingZeroBitsLaw(): Int = - this.countTrailingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } -} - -@Laws -object IntLaws { - @Law - inline fun Int.divLaw(other: Int): Int { - pre(other != 0) { "other is not zero" } - return this / other - } - @Law - inline fun Int.divLaw(other: Long): Long { - pre(other != 0L) { "other is not zero" } - return this / other - } - - @Law - inline fun Int.countOneBitsLaw(): Int = - this.countOneBits().post({ it >= 0 }) { "number of ones is >= 0" } - - @Law - inline fun Int.countLeadingZeroBitsLaw(): Int = - this.countLeadingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } - - @Law - inline fun Int.countTrailingZeroBitsLaw(): Int = - this.countTrailingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } -} - -@Laws -object LongLaws { - @Law - inline fun Long.divLaw(other: Int): Long { - pre(other != 0) { "other is not zero" } - return this / other - } - @Law - inline fun Long.divLaw(other: Long): Long { - pre(other != 0L) { "other is not zero" } - return this / other - } - - @Law - inline fun Long.countOneBitsLaw(): Int = - this.countOneBits().post({ it >= 0 }) { "number of ones is >= 0" } - - @Law - inline fun Long.countLeadingZeroBitsLaw(): Int = - this.countLeadingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } - - @Law - inline fun Long.countTrailingZeroBitsLaw(): Int = - this.countTrailingZeroBits().post({ it >= 0 }) { "number of zeros is >= 0" } -} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Ranges.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Ranges.kt deleted file mode 100644 index 26ac57da8..000000000 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Ranges.kt +++ /dev/null @@ -1,17 +0,0 @@ -// ktlint-disable filename -@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") - -package arrow.analysis.laws.kotlin - -import arrow.analysis.Law -import arrow.analysis.Laws -import arrow.analysis.post - -@Laws -object ComparableRangeLaws { - @Law - inline fun > T.rangeToLaw(that: T): ClosedRange = - this.rangeTo(that).post({ it.start == this && it.endInclusive == that }) { - "range with given bounds" - } -} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Result.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Result.kt deleted file mode 100644 index c4db34441..000000000 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Result.kt +++ /dev/null @@ -1,34 +0,0 @@ -// ktlint-disable filename -@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") - -package arrow.analysis.laws.kotlin - -import arrow.analysis.Law -import arrow.analysis.Laws -import arrow.analysis.post - -@Laws -object ResultLaws { - // we define isFailure in terms of isSuccess, - // but not the other way around, - // to prevent infinite recursion in the solver - @Law - inline fun Result.isFailureLaw(): Boolean = - this.isFailure.post({ it == !this.isSuccess }) { "failure is opposite to success" } - - @Law - inline fun Result.getOrNullLaw(): T? = - this.getOrNull().post({ result -> (this.isSuccess) xor (result == null) }) { "null if failure" } - - @Law - inline fun Result.Companion.successLaw(x: T): Result = - success(x).post({ it.isSuccess == true }) { "create a success" } - - @Law - inline fun Result.Companion.failureLaw(e: Throwable): Result = - failure(e).post({ it.isFailure == true }) { "create a failure" } - - @Law - inline fun Result.mapLaw(transform: (value: T) -> R): Result = - this.map(transform).post({ it.isSuccess == this.isSuccess }) { "map preserves success" } -} diff --git a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Util.kt b/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Util.kt deleted file mode 100644 index 767ab8f73..000000000 --- a/arrow-libs/analysis/analysis/laws/src/commonMain/kotlin/arrow/analysis/laws/kotlin/Util.kt +++ /dev/null @@ -1,28 +0,0 @@ -// ktlint-disable filename -@file:Suppress("NOTHING_TO_INLINE", "UNREACHABLE_CODE") - -package arrow.analysis.laws.kotlin - -import arrow.analysis.Law -import arrow.analysis.post - -// run, with, apply, also, let -// are treated in a special way by the analysis - -@Law -inline fun Any?.hashCodeLaw(): Int = - this.hashCode().post({ if (this == null) (it == 0) else true }) { "if null, hashcode is 0" } - -@Law -inline fun lazyOfLaw(value: T): Lazy = - lazyOf(value).post({ it.value == value }) { "lazy value is argument" } - -@Law inline fun TODOLaw(): Nothing = TODO().post({ false }) { "nothing executes after TODO" } - -@Law -inline fun TODOLaw(reason: String): Nothing = - TODO(reason).post({ false }) { "nothing executes after TODO" } - -@Law -inline fun A.toLaw(other: B): Pair = - (this to other).post({ it.first == this && it.second == other }) { "components" } diff --git a/arrow-libs/analysis/analysis/types/README.md b/arrow-libs/analysis/analysis/types/README.md deleted file mode 100644 index af147524c..000000000 --- a/arrow-libs/analysis/analysis/types/README.md +++ /dev/null @@ -1,199 +0,0 @@ -# Module arrow-refined-types - -# Package arrow.refinement - -A refined type is any regular type constrained by predicates expected to hold in all possible values of the type's -constructor. - -The Arrow refined-types plugin verifies at compile and runtime refined types constructor calls, ensuring values in -declared types truly represent the programmers intent. - -## Setup. - -The refined-types plugin is a Kotlin compiler plugin that can be enabled via Gradle in your build by adding it to the -list of your Gradle plugins. - -Release - -```groovy -plugins { - id "io.arrow-kt.refined-types" version "" -} -``` - -Snapshots - -```groovy -buildscript { - repositories { - maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } - } - dependencies { - classpath "io.arrow-kt:arrow-refined-types-gradle-plugin:" - } -} -apply plugin: "io.arrow-kt.refined-types" -``` - -## Issues modeling with primitives types. - -Leveraging programming languages built-in types like `String` and `Int` is convenient and allows us to express a wide -range of domain problems. Unfortunately, types like `String` or `Int` accept a broader range of values than desirable in -our programs and functions. By choosing overly broad types for our models like `Int` or `String`, we move the -responsibility of validating the value to each call site. - -Consider the following type that attempts to model a machine port number using the type `Int.` - -```kotlin:ank -val x: Int = 5555 -``` - -While there does not seem to be anything wrong at first sight with this definition, simply using `Int` does not prevent -invalid out-of-range inputs of what's considered a valid port number. - -```kotlin:ank -val x: Int = 70000 -``` - -Because the valid range for port numbers is `0..65353`, the value `70000` is incorrect as it would be other negative -values that `Int` accepts. In this case, the best we can do is create a new type and require in its initialization that -input arguments get validated before construction. - -```kotlin:ank -@JvmInline -value class Port(val value: Int) { - init { - require(value in 0..65353) { "$value should be in range of 0..65353 " } - } -} -``` - -Adding these requirements to `init` static blocks guarantees `Port` instances are not constructed but invoking the -constructor with an invalid input will result in an `IllegalArgumentException` thrown at runtime. -Throwing exceptions imposes the burden in the call site to preemptively `try/catch` all constructor calls or crashing the program at runtime. - -```kotlin:ank -try { - Port(70000) -} catch (e: IllegalArgumentException) { - e.message -} -``` - -Runtime exceptions are what most programming languages offer as the solution to validating constructor arguments. Since -the `init` static initialization blocks can't produce values and only accept statements, we can only resort to -throwing `IllegalArgumentException` if we encounter a case where the value is considered invalid. - -## Refining custom types. - -The refined-types plugin monitors all calls to Refined type constructors, ensuring arguments provided are verifiable in -the range of the declared predicates constraining the type. - -Considering the example above, instead of using `Int` to describe a port number, we will create our own `Port` type and -enable the refined-types capabilities by making the `Port` companion extend the `Refined` class. - -```kotlin:ank -import arrow.refinement.Refined -import arrow.refinement.ensure - -@JvmInline -value class Port /* private constructor */ (val value: Int) { - companion object : Refined(::Port, { - ensure((it in 0..65535) to "$it should be in the closed range of 0..65535 to be a valid port number") - }) -} -``` - -In the declaration above the `Refined` class takes as first argument a function `(Int) -> Port` with value `::Port`. -It's important to make constructors `private` so they are not visible and instead handled by the `Refined` -implementation. - -When attempting to instantiate a Port with invalid values as constants, the Refined Types compiler plugin fails before -our program can compile and forces us to correct the input preventing a potential runtime exception. - -```kotlin:ank:silent -Port(70000) -// error: "$it should be in the closed range of 0..65535 to be a valid port number" -``` - -For cases where the input values are dynamic and not evaluable at compile-time, the plugin advises us to use a safe API -based on nullable types. - -```kotlin:ank -fun f(n: Int) { - Port(n) -} -// error: Prefer a safe alternative such as Port.orNull(n) or for explicit use of exceptions `Port.require(n)` -``` - -By implementing the `Refined` interface we gain access to the following validation APIs. - -## Safe nullable construction. - -```kotlin:ank -Port.orNull(70000) -``` - -```kotlin:ank -Port.orNull(5555) -``` - -## Resolved constraints. - -```kotlin:ank -Port.constraints(70000) -``` - -```kotlin:ank -Port.constraints(5555) -``` - -```kotlin:ank -Port.isValid(70000) -``` - - ```kotlin:ank - Port.isValid(5555) - ``` - -## Fold validation. - -```kotlin:ank -Port.fold(70000, { "failed: $it" }, { "success: $it" }) -``` - -```kotlin:ank -Port.fold(5555, { "failed: $it" }, { "success: $it" }) -``` - -## Unsafe require. - -```kotlin:ank -Port.require(5555) -``` - -```kotlin:ank -try { - Port.require(70000) -} catch (e: IllegalArgumentException) { - e.message -} -``` - -## Refined types library. - -The refined-types plugin includes a runtime library that also works standalone independently of the compiler plugin and -includes useful predicates for [chars](/booleans/arrow-refined-types/arrow.refinement.booleans/), [chars](/apidocs/arrow-refined-types/arrow.refinement.chars/), [strings](/apidocs/arrow-refined-types/arrow.refinement.strings/), [collections](/apidocs/arrow-refined-types/arrow.refinement.collections/), [digests](/apidocs/arrow-refined-types/arrow.refinement.digests/), [network](/apidocs/arrow-refined-types/arrow.refinement.network/), and [time](/apidocs/arrow-refined-types/arrow.refinement.time/) that can be composed and used alongside user type -definitions. - -## Credits. - -The refined-types plugin is inspired by libraries like [scala's refined](https://github.com/fthomas/refined) -, [Haskell's refined](https://github.com/nikita-volkov/refined) -and [Liquid Haskell](https://ucsd-progsys.github.io/liquidhaskell-blog/). - -In contrast to a type-level implementation as we find in these libraries in Scala and Haskell, the refined-types plugin -takes a different approach and leverages the Kotlin compiler APIs and its ability to interpret IR code to offer similar -compile-time guarantees. - -[Refined Types were originally introduced in ML by Freeman and Pfenning](https://www.cs.cmu.edu/afs/cs.cmu.edu/user/fp/www/papers/pldi91.pdf) diff --git a/arrow-libs/analysis/analysis/types/api/arrow-analysis-types.api b/arrow-libs/analysis/analysis/types/api/arrow-analysis-types.api deleted file mode 100644 index d0db085d6..000000000 --- a/arrow-libs/analysis/analysis/types/api/arrow-analysis-types.api +++ /dev/null @@ -1,50 +0,0 @@ -public abstract interface annotation class arrow/analysis/DoNotLookAtArguments : java/lang/annotation/Annotation { - public abstract fun dependencies ()[Ljava/lang/String; - public abstract fun formulae ()[Ljava/lang/String; - public abstract fun messages ()[Ljava/lang/String; -} - -public abstract interface annotation class arrow/analysis/Law : java/lang/annotation/Annotation { -} - -public abstract interface annotation class arrow/analysis/Laws : java/lang/annotation/Annotation { -} - -public abstract interface class arrow/analysis/Messager { - public abstract fun invoke ()Ljava/lang/String; -} - -public abstract interface annotation class arrow/analysis/PackagesWithLaws : java/lang/annotation/Annotation { - public abstract fun packages ()[Ljava/lang/String; -} - -public abstract interface annotation class arrow/analysis/Post : java/lang/annotation/Annotation { - public abstract fun dependencies ()[Ljava/lang/String; - public abstract fun formulae ()[Ljava/lang/String; - public abstract fun messages ()[Ljava/lang/String; -} - -public abstract interface annotation class arrow/analysis/Pre : java/lang/annotation/Annotation { - public abstract fun dependencies ()[Ljava/lang/String; - public abstract fun formulae ()[Ljava/lang/String; - public abstract fun messages ()[Ljava/lang/String; -} - -public abstract interface class arrow/analysis/Predicate { - public abstract fun invoke (Ljava/lang/Object;)Z -} - -public final class arrow/analysis/RefinementDSLKt { - public static final fun doNotLookAtArgumentsWhen (ZLarrow/analysis/Messager;)V - public static final fun invariant (Ljava/lang/Object;Larrow/analysis/Predicate;Larrow/analysis/Messager;)Ljava/lang/Object; - public static final fun post (Larrow/analysis/Predicate;Larrow/analysis/Messager;)V - public static final fun post (Ljava/lang/Object;Larrow/analysis/Predicate;Larrow/analysis/Messager;)Ljava/lang/Object; - public static final fun pre (ZLarrow/analysis/Messager;)V - public static final fun unsafeBlock (Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; - public static final fun unsafeCall (Ljava/lang/Object;)Ljava/lang/Object; -} - -public abstract interface annotation class arrow/analysis/Subject : java/lang/annotation/Annotation { - public abstract fun fqName ()Ljava/lang/String; -} - diff --git a/arrow-libs/analysis/analysis/types/build.gradle.kts b/arrow-libs/analysis/analysis/types/build.gradle.kts deleted file mode 100644 index 46fc442f1..000000000 --- a/arrow-libs/analysis/analysis/types/build.gradle.kts +++ /dev/null @@ -1,37 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - id(libs.plugins.kotlin.multiplatform.get().pluginId) - alias(libs.plugins.arrowGradleConfig.kotlin) - alias(libs.plugins.arrowGradleConfig.publish) - alias(libs.plugins.arrowGradleConfig.versioning) - alias(libs.plugins.kotlin.binaryCompatibilityValidator) -} - -kotlin { - explicitApi = null - - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) - } - - sourceSets { - commonMain { - dependencies { - implementation(libs.kotlin.stdlibCommon) - } - } - - named("jvmMain") { - dependencies { - implementation(libs.kotlin.stdlibJDK8) - } - } - - named("jsMain") { - dependencies { - implementation(libs.kotlin.stdlibJS) - } - } - } -} diff --git a/arrow-libs/analysis/analysis/types/gradle.properties b/arrow-libs/analysis/analysis/types/gradle.properties deleted file mode 100644 index 789e4fcf8..000000000 --- a/arrow-libs/analysis/analysis/types/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Maven publishing configuration -POM_NAME=Arrow Analysis Types -POM_ARTIFACT_ID=arrow-analysis-types -POM_PACKAGING=jar - -pom.name=Arrow Analysis Types diff --git a/arrow-libs/analysis/analysis/types/src/commonMain/kotlin/arrow/analysis/RefinementDSL.kt b/arrow-libs/analysis/analysis/types/src/commonMain/kotlin/arrow/analysis/RefinementDSL.kt deleted file mode 100644 index 00298bf3a..000000000 --- a/arrow-libs/analysis/analysis/types/src/commonMain/kotlin/arrow/analysis/RefinementDSL.kt +++ /dev/null @@ -1,80 +0,0 @@ -@file:Suppress("NOTHING_TO_INLINE") - -package arrow.analysis - -public fun interface Messager { - public operator fun invoke(): String -} - -public fun interface Predicate { - public operator fun invoke(value: A): Boolean -} - -public inline fun pre(predicate: Boolean, msg: Messager): Unit = require(predicate) { msg() } - -public inline fun doNotLookAtArgumentsWhen(predicate: Boolean, msg: Messager): Unit = Unit - -public inline fun A.post(predicate: Predicate, msg: Messager): A { - require(predicate(this)) { msg() } - return this -} - -public inline fun post(predicate: Predicate, msg: Messager): Unit {} - -public inline fun A.invariant(predicate: Predicate, msg: Messager): A { - require(predicate(this)) { msg() } - return this -} - -@Target(AnnotationTarget.FUNCTION) -public annotation class Pre( - val messages: Array, - val formulae: Array, - val dependencies: Array -) - -@Target(AnnotationTarget.FUNCTION) -public annotation class Post( - val messages: Array, - val formulae: Array, - val dependencies: Array -) - -@Target(AnnotationTarget.FUNCTION) -public annotation class DoNotLookAtArguments( - val messages: Array, - val formulae: Array, - val dependencies: Array -) - -/** Annotation to flag ad-hoc refinements over third party functions */ -@Target(AnnotationTarget.FUNCTION) public annotation class Law - -/** Annotation to flag ad-hoc refinements over third party functions */ -@Target(AnnotationTarget.FUNCTION) public annotation class Subject(val fqName: String) - -/** - * This is used to mark an object as containing only laws. This way you do not have to write the - * annotation on every element, and you can group several of them together. - * - * ``` - * @Laws - * object IntLaws { - * fun Int.plusLaw { ... } - * } - * ``` - */ -@Target(AnnotationTarget.CLASS) public annotation class Laws - -/** - * This is used internally to speed up the search for laws Each package with any law should include - * this annotation in a class of module 'arrow.analysis.hints' - */ -@Target(AnnotationTarget.CLASS) -public annotation class PackagesWithLaws(val packages: Array) - -/** Indicates that the preconditions for a call should not be checked. */ -public inline fun unsafeCall(call: A): A = call - -/** Indicates that nothing in this block should be checked. */ -public inline fun unsafeBlock(block: () -> A): A = block() diff --git a/gradle.properties b/gradle.properties index 7ff33e951..8d06dadbe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,3 +24,5 @@ kotlin.mpp.stability.nowarn=true # Kotlin Test configuration #Parallelism needs to be set to 1 since the concurrent tests in arrow-effects become flaky otherwise kotlintest.parallelism=1 + +org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers diff --git a/gradle/projects.libs.versions.toml b/gradle/projects.libs.versions.toml index 6d1d29f9b..20695e33e 100644 --- a/gradle/projects.libs.versions.toml +++ b/gradle/projects.libs.versions.toml @@ -1,18 +1,18 @@ [versions] -arrow = "1.2.0-RC" -arrowGradleConfig = "0.12.0-rc.3" +arrow = "2.0.1" +arrowGradleConfig = "0.12.0-rc.26" assertj = "3.24.2" classgraph = "4.8.157" -dokka = "1.8.10" +dokka = "2.0.0" intellijOpenApi = "7.0.3" javaAssist = "3.29.2-GA" junit = "5.9.2" -kotlin = "1.9.21" -kotlinCompileTesting = "0.4.0" +kotlin = "2.1.10" +kotlinCompileTesting = "0.7.0" javaCompileTesting = "0.21.0" -kotlinBinaryCompatibilityValidator = "0.13.0" +kotlinBinaryCompatibilityValidator = "0.17.0" detekt = "1.22.0" -ksp = "1.9.21-1.0.15" +ksp = "2.1.0-1.0.29" [libraries] arrowCore = { module = "io.arrow-kt:arrow-core", version.ref = "arrow" } diff --git a/libs/arrow-meta/api/arrow-meta.api b/libs/arrow-meta/api/arrow-meta.api index c18813c5c..3dc07c4a1 100644 --- a/libs/arrow-meta/api/arrow-meta.api +++ b/libs/arrow-meta/api/arrow-meta.api @@ -700,80 +700,60 @@ public abstract interface class arrow/meta/phases/codegen/ir/IRGeneration : arro public abstract fun generate (Larrow/meta/phases/CompilerContext;Lorg/jetbrains/kotlin/ir/declarations/IrModuleFragment;Lorg/jetbrains/kotlin/backend/common/extensions/IrPluginContext;)V } -public final class arrow/meta/phases/codegen/ir/IrUtils : org/jetbrains/kotlin/ir/declarations/IrFactory, org/jetbrains/kotlin/ir/types/IrTypeSystemContext, org/jetbrains/kotlin/ir/util/ReferenceSymbolTable { +public final class arrow/meta/phases/codegen/ir/IrUtils : org/jetbrains/kotlin/ir/types/IrTypeSystemContext, org/jetbrains/kotlin/ir/util/ReferenceSymbolTable { public fun (Lorg/jetbrains/kotlin/backend/common/extensions/IrPluginContext;Larrow/meta/phases/CompilerContext;Lorg/jetbrains/kotlin/ir/declarations/IrModuleFragment;)V public fun anySuperTypeConstructor (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;Lkotlin/jvm/functions/Function1;)Z public fun anyType ()Lorg/jetbrains/kotlin/ir/types/IrSimpleType; public synthetic fun anyType ()Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; public fun areEqualTypeConstructors (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun argumentsCount (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)I - public fun arrayType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; - public fun asArgumentList (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Lorg/jetbrains/kotlin/ir/types/IrSimpleType; - public synthetic fun asArgumentList (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Lorg/jetbrains/kotlin/types/model/TypeArgumentListMarker; + public fun arrayType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/ir/types/IrSimpleType; + public synthetic fun arrayType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun asArgumentList (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/ir/types/IrSimpleType; + public synthetic fun asArgumentList (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/TypeArgumentListMarker; + public fun asCapturedType (Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker;)Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker; public fun asCapturedType (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker; - public fun asDefinitelyNotNullType (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Lorg/jetbrains/kotlin/types/model/DefinitelyNotNullTypeMarker; + public fun asCapturedTypeUnwrappingDnn (Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker;)Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker; + public fun asCapturedTypeUnwrappingDnn (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker; + public fun asDefinitelyNotNullType (Lorg/jetbrains/kotlin/types/model/DefinitelyNotNullTypeMarker;)Lorg/jetbrains/kotlin/types/model/DefinitelyNotNullTypeMarker; + public fun asDefinitelyNotNullType (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/DefinitelyNotNullTypeMarker; + public fun asDynamicType (Lorg/jetbrains/kotlin/types/model/DynamicTypeMarker;)Lorg/jetbrains/kotlin/types/model/DynamicTypeMarker; public fun asDynamicType (Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker;)Lorg/jetbrains/kotlin/ir/types/IrDynamicType; public synthetic fun asDynamicType (Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker;)Lorg/jetbrains/kotlin/types/model/DynamicTypeMarker; + public fun asFlexibleType (Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker;)Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker; public fun asFlexibleType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker; - public fun asSimpleType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public synthetic fun asRigidType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; + public fun asRigidType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun asRigidType (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; public fun asTypeArgument (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/ir/types/IrTypeArgument; public synthetic fun asTypeArgument (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker; public fun canHaveUndefinedNullability (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z - public fun captureFromArguments (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;Lorg/jetbrains/kotlin/types/model/CaptureStatus;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun captureFromArguments (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;Lorg/jetbrains/kotlin/types/model/CaptureStatus;)Lorg/jetbrains/kotlin/ir/types/IrSimpleType; + public synthetic fun captureFromArguments (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;Lorg/jetbrains/kotlin/types/model/CaptureStatus;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; public fun captureFromExpression (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; public fun captureStatus (Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker;)Lorg/jetbrains/kotlin/types/model/CaptureStatus; - public fun createAnonymousInitializer (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrAnonymousInitializerSymbol;Z)Lorg/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer; - public fun createBlockBody (II)Lorg/jetbrains/kotlin/ir/expressions/IrBlockBody; - public synthetic fun createBlockBody (IILjava/util/List;)Lorg/jetbrains/kotlin/ir/expressions/IrBlockBody; - public synthetic fun createBlockBody (IILkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/ir/expressions/IrBlockBody; - public synthetic fun createClass (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrClassSymbol;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/ClassKind;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/descriptors/Modality;ZZZZZZZLorg/jetbrains/kotlin/descriptors/SourceElement;)Lorg/jetbrains/kotlin/ir/declarations/IrClass; - public fun createClass (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/ir/symbols/IrClassSymbol;Lorg/jetbrains/kotlin/descriptors/ClassKind;Lorg/jetbrains/kotlin/descriptors/Modality;ZZZZZZZLorg/jetbrains/kotlin/descriptors/SourceElement;)Lorg/jetbrains/kotlin/ir/declarations/IrClass; - public synthetic fun createConstructor (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrConstructorSymbol;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/ir/types/IrType;ZZZZLorg/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedContainerSource;)Lorg/jetbrains/kotlin/ir/declarations/IrConstructor; - public fun createConstructor (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;ZZLorg/jetbrains/kotlin/ir/types/IrType;Lorg/jetbrains/kotlin/ir/symbols/IrConstructorSymbol;ZZLorg/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedContainerSource;)Lorg/jetbrains/kotlin/ir/declarations/IrConstructor; public fun createEmptySubstitutor ()Lorg/jetbrains/kotlin/types/model/TypeSubstitutorMarker; - public synthetic fun createEnumEntry (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrEnumEntrySymbol;Lorg/jetbrains/kotlin/name/Name;)Lorg/jetbrains/kotlin/ir/declarations/IrEnumEntry; - public fun createEnumEntry (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/ir/symbols/IrEnumEntrySymbol;)Lorg/jetbrains/kotlin/ir/declarations/IrEnumEntry; - public fun createErrorDeclaration (IILorg/jetbrains/kotlin/descriptors/DeclarationDescriptor;)Lorg/jetbrains/kotlin/ir/declarations/IrErrorDeclaration; - public fun createErrorType (Ljava/lang/String;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; - public fun createExpressionBody (IILorg/jetbrains/kotlin/ir/expressions/IrExpression;)Lorg/jetbrains/kotlin/ir/expressions/IrExpressionBody; - public synthetic fun createExpressionBody (Lorg/jetbrains/kotlin/ir/expressions/IrExpression;)Lorg/jetbrains/kotlin/ir/expressions/IrExpressionBody; - public synthetic fun createField (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrFieldSymbol;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/ir/types/IrType;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;ZZZ)Lorg/jetbrains/kotlin/ir/declarations/IrField; - public fun createField (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/ir/symbols/IrFieldSymbol;Lorg/jetbrains/kotlin/ir/types/IrType;ZZZ)Lorg/jetbrains/kotlin/ir/declarations/IrField; - public fun createFlexibleType (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; - public synthetic fun createFunction (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrSimpleFunctionSymbol;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/descriptors/Modality;Lorg/jetbrains/kotlin/ir/types/IrType;ZZZZZZZZLorg/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedContainerSource;)Lorg/jetbrains/kotlin/ir/declarations/IrSimpleFunction; - public synthetic fun createFunctionWithLateBinding (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/descriptors/Modality;Lorg/jetbrains/kotlin/ir/types/IrType;ZZZZZZZ)Lorg/jetbrains/kotlin/ir/declarations/IrSimpleFunction; - public fun createFunctionWithLateBinding (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;ZZLorg/jetbrains/kotlin/ir/types/IrType;Lorg/jetbrains/kotlin/descriptors/Modality;ZZZZZZ)Lorg/jetbrains/kotlin/ir/declarations/IrFunctionWithLateBinding; - public synthetic fun createLocalDelegatedProperty (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrLocalDelegatedPropertySymbol;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/ir/types/IrType;Z)Lorg/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty; - public fun createLocalDelegatedProperty (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/ir/symbols/IrLocalDelegatedPropertySymbol;Lorg/jetbrains/kotlin/ir/types/IrType;Z)Lorg/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty; - public synthetic fun createProperty (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrPropertySymbol;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/descriptors/Modality;ZZZZZZZLorg/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedContainerSource;)Lorg/jetbrains/kotlin/ir/declarations/IrProperty; - public fun createProperty (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/descriptors/Modality;Lorg/jetbrains/kotlin/ir/symbols/IrPropertySymbol;ZZZZZLorg/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedContainerSource;ZZ)Lorg/jetbrains/kotlin/ir/declarations/IrProperty; - public synthetic fun createPropertyWithLateBinding (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/descriptors/Modality;ZZZZZZ)Lorg/jetbrains/kotlin/ir/declarations/IrProperty; - public fun createPropertyWithLateBinding (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/descriptors/Modality;ZZZZZZZ)Lorg/jetbrains/kotlin/ir/declarations/IrPropertyWithLateBinding; - public fun createSimpleFunction (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;ZZLorg/jetbrains/kotlin/ir/types/IrType;Lorg/jetbrains/kotlin/descriptors/Modality;Lorg/jetbrains/kotlin/ir/symbols/IrSimpleFunctionSymbol;ZZZZZLorg/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedContainerSource;Z)Lorg/jetbrains/kotlin/ir/declarations/IrSimpleFunction; - public fun createSimpleType (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;Ljava/util/List;ZZLjava/util/List;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun createErrorType (Ljava/lang/String;Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun createFlexibleType (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; + public fun createSimpleType (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;Ljava/util/List;ZZLjava/util/List;)Lorg/jetbrains/kotlin/ir/types/IrSimpleType; + public synthetic fun createSimpleType (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;Ljava/util/List;ZZLjava/util/List;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; public fun createStarProjection (Lorg/jetbrains/kotlin/types/model/TypeParameterMarker;)Lorg/jetbrains/kotlin/ir/types/impl/IrStarProjectionImpl; public synthetic fun createStarProjection (Lorg/jetbrains/kotlin/types/model/TypeParameterMarker;)Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker; - public fun createTypeAlias (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/ir/symbols/IrTypeAliasSymbol;ZLorg/jetbrains/kotlin/ir/types/IrType;)Lorg/jetbrains/kotlin/ir/declarations/IrTypeAlias; - public synthetic fun createTypeAlias (IILorg/jetbrains/kotlin/ir/symbols/IrTypeAliasSymbol;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/descriptors/DescriptorVisibility;Lorg/jetbrains/kotlin/ir/types/IrType;ZLorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;)Lorg/jetbrains/kotlin/ir/declarations/IrTypeAlias; public fun createTypeArgument (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;Lorg/jetbrains/kotlin/types/model/TypeVariance;)Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker; - public synthetic fun createTypeParameter (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrTypeParameterSymbol;Lorg/jetbrains/kotlin/name/Name;IZLorg/jetbrains/kotlin/types/Variance;)Lorg/jetbrains/kotlin/ir/declarations/IrTypeParameter; - public fun createTypeParameter (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/ir/symbols/IrTypeParameterSymbol;Lorg/jetbrains/kotlin/types/Variance;IZ)Lorg/jetbrains/kotlin/ir/declarations/IrTypeParameter; public fun createUninferredType (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; - public synthetic fun createValueParameter (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/ir/symbols/IrValueParameterSymbol;Lorg/jetbrains/kotlin/name/Name;ILorg/jetbrains/kotlin/ir/types/IrType;Lorg/jetbrains/kotlin/ir/types/IrType;ZZZZ)Lorg/jetbrains/kotlin/ir/declarations/IrValueParameter; - public fun createValueParameter (IILorg/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin;Lorg/jetbrains/kotlin/name/Name;Lorg/jetbrains/kotlin/ir/types/IrType;ZLorg/jetbrains/kotlin/ir/symbols/IrValueParameterSymbol;ILorg/jetbrains/kotlin/ir/types/IrType;ZZZ)Lorg/jetbrains/kotlin/ir/declarations/IrValueParameter; public fun enterScope (Lorg/jetbrains/kotlin/ir/declarations/IrDeclaration;)V public fun enterScope (Lorg/jetbrains/kotlin/ir/symbols/IrSymbol;)V - public fun fastCorrespondingSupertypes (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Ljava/util/List; - public fun findCommonIntegerLiteralTypesSuperType (Ljava/util/List;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun fastCorrespondingSupertypes (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Ljava/util/List; + public fun findCommonIntegerLiteralTypesSuperType (Ljava/util/List;)Lorg/jetbrains/kotlin/ir/types/IrSimpleType; + public synthetic fun findCommonIntegerLiteralTypesSuperType (Ljava/util/List;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; public fun get (Lorg/jetbrains/kotlin/types/model/TypeArgumentListMarker;I)Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker; public fun getAnnotationFirstArgumentValue (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;Lorg/jetbrains/kotlin/name/FqName;)Ljava/lang/Object; public fun getArgument (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;I)Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker; - public fun getArgumentOrNull (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;I)Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker; + public fun getArgumentOrNull (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;I)Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker; public fun getArguments (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Ljava/util/List; public fun getAttributes (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Ljava/util/List; public fun getClassFqNameUnsafe (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Lorg/jetbrains/kotlin/name/FqNameUnsafe; public final fun getCompilerContext ()Larrow/meta/phases/CompilerContext; - public fun getCustomAttributes (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Ljava/util/List; public fun getDescriptorExtension ()Lorg/jetbrains/kotlin/ir/util/ReferenceSymbolTableExtension; public fun getIrBuiltIns ()Lorg/jetbrains/kotlin/ir/IrBuiltIns; public final fun getModuleFragment ()Lorg/jetbrains/kotlin/ir/declarations/IrModuleFragment; @@ -785,10 +765,8 @@ public final class arrow/meta/phases/codegen/ir/IrUtils : org/jetbrains/kotlin/i public fun getPrimitiveArrayType (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Lorg/jetbrains/kotlin/builtins/PrimitiveType; public fun getPrimitiveType (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Lorg/jetbrains/kotlin/builtins/PrimitiveType; public fun getRepresentativeUpperBound (Lorg/jetbrains/kotlin/types/model/TypeParameterMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; - public fun getStageController ()Lorg/jetbrains/kotlin/ir/declarations/StageController; public fun getSubstitutedUnderlyingType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; - public fun getType (Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker;)Lorg/jetbrains/kotlin/ir/types/IrType; - public synthetic fun getType (Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; + public fun getType (Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; public fun getTypeConstructor (Lorg/jetbrains/kotlin/types/model/TypeParameterMarker;)Lorg/jetbrains/kotlin/ir/symbols/IrTypeParameterSymbol; public synthetic fun getTypeConstructor (Lorg/jetbrains/kotlin/types/model/TypeParameterMarker;)Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker; public fun getTypeParameter (Lorg/jetbrains/kotlin/types/model/TypeVariableTypeConstructorMarker;)Lorg/jetbrains/kotlin/types/model/TypeParameterMarker; @@ -801,45 +779,45 @@ public final class arrow/meta/phases/codegen/ir/IrUtils : org/jetbrains/kotlin/i public fun getVariance (Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker;)Lorg/jetbrains/kotlin/types/model/TypeVariance; public fun getVariance (Lorg/jetbrains/kotlin/types/model/TypeParameterMarker;)Lorg/jetbrains/kotlin/types/model/TypeVariance; public fun hasAnnotation (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;Lorg/jetbrains/kotlin/name/FqName;)Z - public fun hasCustomAttributes (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun hasFlexibleNullability (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun hasRecursiveBounds (Lorg/jetbrains/kotlin/types/model/TypeParameterMarker;Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z - public fun identicalArguments (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z - public fun intersectTypes (Ljava/util/List;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; - public fun intersectTypes (Ljava/util/List;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun identicalArguments (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z + public fun intersectTypes (Ljava/util/Collection;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; + public fun intersectTypes (Ljava/util/Collection;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; public final fun irCall (Lorg/jetbrains/kotlin/descriptors/CallableDescriptor;)Lorg/jetbrains/kotlin/ir/expressions/IrExpression; public final fun irConstructorCall (Lorg/jetbrains/kotlin/descriptors/ClassDescriptor;)Lorg/jetbrains/kotlin/ir/expressions/IrConstructorCall; public final fun irGetterCall (Lorg/jetbrains/kotlin/descriptors/PropertyDescriptor;)Lorg/jetbrains/kotlin/ir/expressions/IrCall; public fun isAnonymous (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isAnyConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z + public fun isArrayConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isArrayOrNullableArray (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isCapturedDynamic (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isCapturedType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z - public fun isClassType (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z + public fun isClassType (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z public fun isClassTypeConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isCommonFinalClassConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z - public fun isDefinitelyClassTypeConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isDefinitelyNotNullType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z + public fun isDefinitelyNotNullType (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z public fun isDenotable (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isDynamic (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isError (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isError (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z - public fun isExtensionFunction (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z + public fun isExtensionFunction (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z public fun isFinalClassOrEnumEntryOrAnnotationClassConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isFlexible (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isFlexibleNothing (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z + public fun isFlexibleWithDifferentTypeConstructors (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isInlineClass (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isInnerClass (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isIntegerConstantOperatorTypeConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isIntegerLiteralConstantTypeConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z - public fun isIntegerLiteralType (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z + public fun isIntegerLiteralType (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z public fun isIntegerLiteralTypeConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isInterface (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isInterfaceOrAnnotationClass (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isIntersection (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isLocalType (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isMarkedNullable (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z - public fun isMarkedNullable (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z public fun isMultiFieldValueClass (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isNotNullTypeParameter (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isNothing (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z @@ -848,16 +826,17 @@ public final class arrow/meta/phases/codegen/ir/IrUtils : org/jetbrains/kotlin/i public fun isNullableNothing (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isNullableType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isOldCapturedType (Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker;)Z + public fun isPrimitiveType (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z public fun isPrimitiveType (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z public fun isProjectionNotNull (Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker;)Z public fun isRawType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isReified (Lorg/jetbrains/kotlin/types/model/TypeParameterMarker;)Z - public fun isSimpleType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z - public fun isSingleClassifierType (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z + public fun isRigidType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z + public fun isSingleClassifierType (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z public fun isStarProjection (Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker;)Z - public fun isStubType (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z - public fun isStubTypeForBuilderInference (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z - public fun isStubTypeForVariableInSubtyping (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Z + public fun isStubType (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z + public fun isStubTypeForBuilderInference (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z + public fun isStubTypeForVariableInSubtyping (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Z public fun isTypeParameterTypeConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z public fun isTypeVariableType (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Z public fun isUnderKotlinPackage (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Z @@ -865,12 +844,17 @@ public final class arrow/meta/phases/codegen/ir/IrUtils : org/jetbrains/kotlin/i public fun iterator (Lorg/jetbrains/kotlin/types/model/TypeArgumentListMarker;)Ljava/util/Iterator; public fun leaveScope (Lorg/jetbrains/kotlin/ir/declarations/IrDeclaration;)V public fun leaveScope (Lorg/jetbrains/kotlin/ir/symbols/IrSymbol;)V - public fun lowerBound (Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; - public fun lowerBoundIfFlexible (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun lowerBound (Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker;)Lorg/jetbrains/kotlin/ir/types/IrSimpleType; + public synthetic fun lowerBound (Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; + public fun lowerBoundIfFlexible (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; + public fun lowerBoundIfFlexible (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; public fun lowerType (Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; + public fun makeDefinitelyNotNullOrNotNull (Lorg/jetbrains/kotlin/types/model/DefinitelyNotNullTypeMarker;)Lorg/jetbrains/kotlin/types/model/DefinitelyNotNullTypeMarker; public fun makeDefinitelyNotNullOrNotNull (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; + public fun makeDefinitelyNotNullOrNotNull (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;Z)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; + public synthetic fun makeDefinitelyNotNullOrNotNull (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; + public fun makeDefinitelyNotNullOrNotNull (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; public fun makeNullable (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; - public fun makeSimpleTypeDefinitelyNotNullOrNotNull (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; public fun newTypeCheckerState (ZZ)Lorg/jetbrains/kotlin/types/TypeCheckerState; public fun nothingType ()Lorg/jetbrains/kotlin/ir/types/IrSimpleType; public synthetic fun nothingType ()Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; @@ -879,10 +863,11 @@ public final class arrow/meta/phases/codegen/ir/IrUtils : org/jetbrains/kotlin/i public fun nullableNothingType ()Lorg/jetbrains/kotlin/ir/types/IrSimpleType; public synthetic fun nullableNothingType ()Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; public fun original (Lorg/jetbrains/kotlin/types/model/DefinitelyNotNullTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun originalIfDefinitelyNotNullable (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; public fun originalIfDefinitelyNotNullable (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; public fun parametersCount (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)I - public synthetic fun possibleIntegerTypes (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Ljava/util/Collection; - public fun possibleIntegerTypes (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Ljava/util/Set; + public synthetic fun possibleIntegerTypes (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Ljava/util/Collection; + public fun possibleIntegerTypes (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Ljava/util/Set; public fun projection (Lorg/jetbrains/kotlin/types/model/CapturedTypeConstructorMarker;)Lorg/jetbrains/kotlin/types/model/TypeArgumentMarker; public fun referenceClass (Lorg/jetbrains/kotlin/ir/util/IdSignature;)Lorg/jetbrains/kotlin/ir/symbols/IrClassSymbol; public fun referenceConstructor (Lorg/jetbrains/kotlin/ir/util/IdSignature;)Lorg/jetbrains/kotlin/ir/symbols/IrConstructorSymbol; @@ -897,25 +882,29 @@ public final class arrow/meta/phases/codegen/ir/IrUtils : org/jetbrains/kotlin/i public fun safeSubstitute (Lorg/jetbrains/kotlin/types/model/TypeSubstitutorMarker;Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; public fun size (Lorg/jetbrains/kotlin/types/model/TypeArgumentListMarker;)I public final fun substitutedIrTypes (Lorg/jetbrains/kotlin/descriptors/CallableDescriptor;Lorg/jetbrains/kotlin/resolve/calls/inference/components/NewTypeSubstitutorByConstructorMap;)Ljava/util/List; - public fun substitutionSupertypePolicy (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Lorg/jetbrains/kotlin/types/TypeCheckerState$SupertypesPolicy; + public fun substitutionSupertypePolicy (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/TypeCheckerState$SupertypesPolicy; public fun supertypes (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Ljava/util/Collection; + public fun supportsImprovedVarianceInCst ()Z public fun toErrorType (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; public final fun toIrType (Lorg/jetbrains/kotlin/types/KotlinType;)Lorg/jetbrains/kotlin/ir/types/IrType; public final fun transform (Lorg/jetbrains/kotlin/ir/declarations/IrFunction;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Lorg/jetbrains/kotlin/ir/IrStatement; public static synthetic fun transform$default (Larrow/meta/phases/codegen/ir/IrUtils;Lorg/jetbrains/kotlin/ir/declarations/IrFunction;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lorg/jetbrains/kotlin/ir/IrStatement; public fun typeConstructor (Lorg/jetbrains/kotlin/types/model/CapturedTypeMarker;)Lorg/jetbrains/kotlin/types/model/CapturedTypeConstructorMarker; public fun typeConstructor (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker; - public fun typeConstructor (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker; + public fun typeConstructor (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker; public fun typeDepth (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)I - public fun typeDepth (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;)I + public fun typeDepth (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)I public fun typeSubstitutorByTypeConstructor (Ljava/util/Map;)Lorg/jetbrains/kotlin/types/model/TypeSubstitutorMarker; public fun unionTypeAttributes (Ljava/util/List;)Ljava/util/List; public fun unwrapStubTypeVariableConstructor (Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker;)Lorg/jetbrains/kotlin/types/model/TypeConstructorMarker; - public fun upperBound (Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun upperBound (Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker;)Lorg/jetbrains/kotlin/ir/types/IrSimpleType; + public synthetic fun upperBound (Lorg/jetbrains/kotlin/types/model/FlexibleTypeMarker;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; public fun upperBoundCount (Lorg/jetbrains/kotlin/types/model/TypeParameterMarker;)I - public fun upperBoundIfFlexible (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun upperBoundIfFlexible (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; + public fun upperBoundIfFlexible (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; public fun withNullability (Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker;Z)Lorg/jetbrains/kotlin/types/model/KotlinTypeMarker; - public fun withNullability (Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker;Z)Lorg/jetbrains/kotlin/types/model/SimpleTypeMarker; + public fun withNullability (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;Z)Lorg/jetbrains/kotlin/ir/types/IrSimpleType; + public synthetic fun withNullability (Lorg/jetbrains/kotlin/types/model/RigidTypeMarker;Z)Lorg/jetbrains/kotlin/types/model/RigidTypeMarker; } public final class arrow/meta/phases/codegen/ir/IrUtilsKt { diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/Meta.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/Meta.kt index 13cdfafd3..420674b31 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/Meta.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/Meta.kt @@ -91,7 +91,7 @@ abstract class Meta : CompilerPluginRegistrar(), MetaPluginSyntax, InternalRegis */ abstract override fun intercept(ctx: CompilerContext): List - override val supportsK2: Boolean = false + override val supportsK2: Boolean = true override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) { registerMetaComponents(configuration) diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/MetaCliProcessor.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/MetaCliProcessor.kt index 9a23b3022..5d80934e4 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/MetaCliProcessor.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/MetaCliProcessor.kt @@ -26,7 +26,7 @@ abstract class MetaCliProcessor(private val metaPluginId: String) : CommandLineP "arrow-meta-gen-src-output-dir", "Directory to locate generated sources", required = false, - allowMultipleOccurrences = false + allowMultipleOccurrences = false, ) val ARROW_META_BASE_DIR = CliOption( @@ -34,7 +34,7 @@ abstract class MetaCliProcessor(private val metaPluginId: String) : CommandLineP "arrow-meta-base-dir", "Base directory from where the plugin is run", required = false, - allowMultipleOccurrences = false + allowMultipleOccurrences = false, ) } @@ -47,7 +47,7 @@ abstract class MetaCliProcessor(private val metaPluginId: String) : CommandLineP override fun processOption( option: AbstractCliOption, value: String, - configuration: CompilerConfiguration + configuration: CompilerConfiguration, ) = when (option.optionName) { "generatedSrcOutputDir" -> diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/analysis/AnalysisSyntax.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/analysis/AnalysisSyntax.kt index f478ff60b..d5ce71cc6 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/analysis/AnalysisSyntax.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/analysis/AnalysisSyntax.kt @@ -39,14 +39,14 @@ interface AnalysisSyntax { fun additionalSources( collectAdditionalSourcesAndUpdateConfiguration: CompilerContext.( - knownSources: Collection, configuration: CompilerConfiguration, project: Project + knownSources: Collection, configuration: CompilerConfiguration, project: Project, ) -> Collection ): CollectAdditionalSources = object : CollectAdditionalSources { override fun CompilerContext.collectAdditionalSourcesAndUpdateConfiguration( knownSources: Collection, configuration: CompilerConfiguration, - project: Project + project: Project, ): Collection = collectAdditionalSourcesAndUpdateConfiguration(knownSources, configuration, project) } @@ -67,16 +67,16 @@ interface AnalysisSyntax { projectContext: ProjectContext, files: Collection, bindingTrace: BindingTrace, - componentProvider: ComponentProvider + componentProvider: ComponentProvider, ) -> AnalysisResult?, analysisCompleted: CompilerContext.( project: Project, module: ModuleDescriptor, bindingTrace: BindingTrace, - files: Collection + files: Collection, ) -> AnalysisResult? = - Noop.nullable5() + Noop.nullable5(), ): AnalysisHandler = object : AnalysisHandler { override fun CompilerContext.doAnalysis( @@ -85,7 +85,7 @@ interface AnalysisSyntax { projectContext: ProjectContext, files: Collection, bindingTrace: BindingTrace, - componentProvider: ComponentProvider + componentProvider: ComponentProvider, ): AnalysisResult? { return doAnalysis(project, module, projectContext, files, bindingTrace, componentProvider) } @@ -94,14 +94,14 @@ interface AnalysisSyntax { project: Project, module: ModuleDescriptor, bindingTrace: BindingTrace, - files: Collection + files: Collection, ): AnalysisResult? = analysisCompleted(project, module, bindingTrace, files) } fun preprocessedVirtualFileFactory( createPreprocessedFile: CompilerContext.(file: VirtualFile?) -> VirtualFile?, createPreprocessedLightFile: CompilerContext.(file: LightVirtualFile?) -> LightVirtualFile? = - Noop.nullable2() + Noop.nullable2(), ): PreprocessedVirtualFileFactory = object : PreprocessedVirtualFileFactory { override fun CompilerContext.isPassThrough(): Boolean = false @@ -150,10 +150,9 @@ interface AnalysisSyntax { val mutableDiagnostics = diagnostics.getOwnDiagnostics() as ArrayList mutableDiagnostics.removeIf(f) null - } + }, ) - } - ?: ExtensionPhase.Empty + } ?: ExtensionPhase.Empty /** @see [suppressDiagnostic] including access to the [BindingTrace] */ fun suppressDiagnosticWithTrace(f: BindingTrace.(Diagnostic) -> Boolean): ExtensionPhase = @@ -170,8 +169,7 @@ interface AnalysisSyntax { val mutableDiagnostics = diagnostics.getOwnDiagnostics() as ArrayList mutableDiagnostics.removeIf { f(bindingTrace, it) } null - } + }, ) - } - ?: ExtensionPhase.Empty + } ?: ExtensionPhase.Empty } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/codegen/asm/AsmSyntax.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/codegen/asm/AsmSyntax.kt index 62abbc136..597cbc443 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/codegen/asm/AsmSyntax.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/codegen/asm/AsmSyntax.kt @@ -24,25 +24,25 @@ interface AsmSyntax { fun codegen( applyFunction: CompilerContext.( - receiver: StackValue, resolvedCall: ResolvedCall<*>, c: ExpressionCodegenExtension.Context + receiver: StackValue, resolvedCall: ResolvedCall<*>, c: ExpressionCodegenExtension.Context, ) -> StackValue?, applyProperty: CompilerContext.( - receiver: StackValue, resolvedCall: ResolvedCall<*>, c: ExpressionCodegenExtension.Context + receiver: StackValue, resolvedCall: ResolvedCall<*>, c: ExpressionCodegenExtension.Context, ) -> StackValue?, - generateClassSyntheticParts: CompilerContext.(codegen: ImplementationBodyCodegen) -> Unit + generateClassSyntheticParts: CompilerContext.(codegen: ImplementationBodyCodegen) -> Unit, ): Codegen = object : Codegen { override fun CompilerContext.applyFunction( receiver: StackValue, resolvedCall: ResolvedCall<*>, - c: ExpressionCodegenExtension.Context + c: ExpressionCodegenExtension.Context, ): StackValue? = applyFunction(receiver, resolvedCall, c) override fun CompilerContext.applyProperty( receiver: StackValue, resolvedCall: ResolvedCall<*>, - c: ExpressionCodegenExtension.Context + c: ExpressionCodegenExtension.Context, ): StackValue? = applyProperty(receiver, resolvedCall, c) override fun CompilerContext.generateClassSyntheticParts(codegen: ImplementationBodyCodegen) = diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/codegen/ir/IrSyntax.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/codegen/ir/IrSyntax.kt index 37482f2d1..551e3469a 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/codegen/ir/IrSyntax.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/codegen/ir/IrSyntax.kt @@ -107,13 +107,13 @@ interface IrSyntax { ( compilerContext: CompilerContext, moduleFragment: IrModuleFragment, - pluginContext: IrPluginContext + pluginContext: IrPluginContext, ) -> Unit ): IRGeneration = object : IRGeneration { override fun CompilerContext.generate( moduleFragment: IrModuleFragment, - pluginContext: IrPluginContext + pluginContext: IrPluginContext, ) { generate(this, moduleFragment, pluginContext) } @@ -125,14 +125,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitModuleFragment( declaration: IrModuleFragment, - data: Unit + data: Unit, ): IrModuleFragment = declaration.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), declaration) ?: super.visitModuleFragment(declaration, data) } }, - Unit + Unit, ) } @@ -146,7 +146,7 @@ interface IrSyntax { ?: super.visitFile(declaration, data) } }, - Unit + Unit, ) } @@ -160,7 +160,7 @@ interface IrSyntax { ?: super.visitDeclaration(declaration, data) } }, - Unit + Unit, ) } @@ -174,7 +174,7 @@ interface IrSyntax { ?: super.visitClass(declaration, data) } }, - Unit + Unit, ) } @@ -188,7 +188,7 @@ interface IrSyntax { ?: super.visitFunction(declaration, data) } }, - Unit + Unit, ) } @@ -202,7 +202,7 @@ interface IrSyntax { ?: super.visitSimpleFunction(declaration, data) } }, - Unit + Unit, ) } @@ -216,7 +216,7 @@ interface IrSyntax { ?: super.visitConstructor(declaration, data) } }, - Unit + Unit, ) } @@ -230,7 +230,7 @@ interface IrSyntax { ?: super.visitProperty(declaration, data) } }, - Unit + Unit, ) } @@ -244,7 +244,7 @@ interface IrSyntax { ?: super.visitField(declaration, data) } }, - Unit + Unit, ) } @@ -255,14 +255,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitLocalDelegatedProperty( declaration: IrLocalDelegatedProperty, - data: Unit + data: Unit, ): IrStatement = declaration.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), declaration) ?: super.visitLocalDelegatedProperty(declaration, data) } }, - Unit + Unit, ) } @@ -276,7 +276,7 @@ interface IrSyntax { ?: super.visitEnumEntry(declaration, data) } }, - Unit + Unit, ) } @@ -287,14 +287,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitAnonymousInitializer( declaration: IrAnonymousInitializer, - data: Unit + data: Unit, ): IrStatement = declaration.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), declaration) ?: super.visitAnonymousInitializer(declaration, data) } }, - Unit + Unit, ) } @@ -308,7 +308,7 @@ interface IrSyntax { ?: super.visitVariable(declaration, data) } }, - Unit + Unit, ) } @@ -322,7 +322,7 @@ interface IrSyntax { ?: super.visitTypeParameter(declaration, data) } }, - Unit + Unit, ) } @@ -336,7 +336,7 @@ interface IrSyntax { ?: super.visitValueParameter(declaration, data) } }, - Unit + Unit, ) } @@ -350,7 +350,7 @@ interface IrSyntax { ?: super.visitTypeAlias(declaration, data) } }, - Unit + Unit, ) } @@ -364,7 +364,7 @@ interface IrSyntax { ?: super.visitBody(body, data) } }, - Unit + Unit, ) } @@ -378,7 +378,7 @@ interface IrSyntax { ?: super.visitExpressionBody(body, data) } }, - Unit + Unit, ) } @@ -392,7 +392,7 @@ interface IrSyntax { ?: super.visitBlockBody(body, data) } }, - Unit + Unit, ) } @@ -406,7 +406,7 @@ interface IrSyntax { ?: super.visitSyntheticBody(body, data) } }, - Unit + Unit, ) } @@ -417,14 +417,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitSuspendableExpression( expression: IrSuspendableExpression, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitSuspendableExpression(expression, data) } }, - Unit + Unit, ) } @@ -434,14 +434,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitSuspensionPoint( expression: IrSuspensionPoint, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitSuspensionPoint(expression, data) } }, - Unit + Unit, ) } @@ -455,21 +455,21 @@ interface IrSyntax { ?: super.visitExpression(expression, data) } }, - Unit + Unit, ) } - fun Meta.irConst(f: IrUtils.(IrConst<*>) -> IrExpression?): IRGeneration = + fun Meta.irConst(f: IrUtils.(IrConst) -> IrExpression?): IRGeneration = IrGeneration { compilerContext, moduleFragment, pluginContext -> moduleFragment.transformChildren( object : IrElementTransformer { - override fun visitConst(expression: IrConst<*>, data: Unit): IrExpression = + override fun visitConst(expression: IrConst, data: Unit): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitConst(expression, data) } }, - Unit + Unit, ) } @@ -483,7 +483,7 @@ interface IrSyntax { ?: super.visitVararg(expression, data) } }, - Unit + Unit, ) } @@ -497,7 +497,7 @@ interface IrSyntax { ?: super.visitSpreadElement(spread, data) } }, - Unit + Unit, ) } @@ -508,14 +508,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitContainerExpression( expression: IrContainerExpression, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitContainerExpression(expression, data) } }, - Unit + Unit, ) } @@ -529,7 +529,7 @@ interface IrSyntax { ?: super.visitBlock(expression, data) } }, - Unit + Unit, ) } @@ -543,7 +543,7 @@ interface IrSyntax { ?: super.visitComposite(expression, data) } }, - Unit + Unit, ) } @@ -554,14 +554,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitStringConcatenation( expression: IrStringConcatenation, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitStringConcatenation(expression, data) } }, - Unit + Unit, ) } @@ -572,14 +572,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitDeclarationReference( expression: IrDeclarationReference, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitDeclarationReference(expression, data) } }, - Unit + Unit, ) } @@ -589,14 +589,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitSingletonReference( expression: IrGetSingletonValue, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitSingletonReference(expression, data) } }, - Unit + Unit, ) } @@ -610,7 +610,7 @@ interface IrSyntax { ?: super.visitGetObjectValue(expression, data) } }, - Unit + Unit, ) } @@ -624,7 +624,7 @@ interface IrSyntax { ?: super.visitGetEnumValue(expression, data) } }, - Unit + Unit, ) } @@ -634,14 +634,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitValueAccess( expression: IrValueAccessExpression, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitValueAccess(expression, data) } }, - Unit + Unit, ) } @@ -655,7 +655,7 @@ interface IrSyntax { ?: super.visitGetValue(expression, data) } }, - Unit + Unit, ) } @@ -669,7 +669,7 @@ interface IrSyntax { ?: super.visitSetValue(expression, data) } }, - Unit + Unit, ) } @@ -679,14 +679,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitFieldAccess( expression: IrFieldAccessExpression, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitFieldAccess(expression, data) } }, - Unit + Unit, ) } @@ -700,7 +700,7 @@ interface IrSyntax { ?: super.visitGetField(expression, data) } }, - Unit + Unit, ) } @@ -714,7 +714,7 @@ interface IrSyntax { ?: super.visitSetField(expression, data) } }, - Unit + Unit, ) } @@ -724,14 +724,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitMemberAccess( expression: IrMemberAccessExpression<*>, - data: Unit + data: Unit, ): IrElement = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitMemberAccess(expression, data) } }, - Unit + Unit, ) } @@ -741,14 +741,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitFunctionAccess( expression: IrFunctionAccessExpression, - data: Unit + data: Unit, ): IrElement = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitFunctionAccess(expression, data) } }, - Unit + Unit, ) } @@ -762,7 +762,7 @@ interface IrSyntax { ?: super.visitCall(expression, data) } }, - Unit + Unit, ) } @@ -776,7 +776,7 @@ interface IrSyntax { ?: super.visitConstructorCall(expression, data) } }, - Unit + Unit, ) } @@ -787,14 +787,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitDelegatingConstructorCall( expression: IrDelegatingConstructorCall, - data: Unit + data: Unit, ): IrElement = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitDelegatingConstructorCall(expression, data) } }, - Unit + Unit, ) } @@ -804,14 +804,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitEnumConstructorCall( expression: IrEnumConstructorCall, - data: Unit + data: Unit, ): IrElement = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitEnumConstructorCall(expression, data) } }, - Unit + Unit, ) } @@ -825,7 +825,7 @@ interface IrSyntax { ?: super.visitGetClass(expression, data) } }, - Unit + Unit, ) } @@ -835,14 +835,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitCallableReference( expression: IrCallableReference<*>, - data: Unit + data: Unit, ): IrElement = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitCallableReference(expression, data) } }, - Unit + Unit, ) } @@ -852,14 +852,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitFunctionReference( expression: IrFunctionReference, - data: Unit + data: Unit, ): IrElement = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitFunctionReference(expression, data) } }, - Unit + Unit, ) } @@ -869,14 +869,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitPropertyReference( expression: IrPropertyReference, - data: Unit + data: Unit, ): IrElement = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitPropertyReference(expression, data) } }, - Unit + Unit, ) } @@ -887,14 +887,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitLocalDelegatedPropertyReference( expression: IrLocalDelegatedPropertyReference, - data: Unit + data: Unit, ): IrElement = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitLocalDelegatedPropertyReference(expression, data) } }, - Unit + Unit, ) } @@ -908,7 +908,7 @@ interface IrSyntax { ?: super.visitClassReference(expression, data) } }, - Unit + Unit, ) } @@ -919,14 +919,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitInstanceInitializerCall( expression: IrInstanceInitializerCall, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitInstanceInitializerCall(expression, data) } }, - Unit + Unit, ) } @@ -940,7 +940,7 @@ interface IrSyntax { ?: super.visitTypeOperator(expression, data) } }, - Unit + Unit, ) } @@ -954,7 +954,7 @@ interface IrSyntax { ?: super.visitWhen(expression, data) } }, - Unit + Unit, ) } @@ -968,7 +968,7 @@ interface IrSyntax { ?: super.visitBranch(branch, data) } }, - Unit + Unit, ) } @@ -982,7 +982,7 @@ interface IrSyntax { ?: super.visitElseBranch(branch, data) } }, - Unit + Unit, ) } @@ -996,7 +996,7 @@ interface IrSyntax { ?: super.visitLoop(loop, data) } }, - Unit + Unit, ) } @@ -1010,7 +1010,7 @@ interface IrSyntax { ?: super.visitWhileLoop(loop, data) } }, - Unit + Unit, ) } @@ -1024,7 +1024,7 @@ interface IrSyntax { ?: super.visitDoWhileLoop(loop, data) } }, - Unit + Unit, ) } @@ -1038,7 +1038,7 @@ interface IrSyntax { ?: super.visitTry(aTry, data) } }, - Unit + Unit, ) } @@ -1052,7 +1052,7 @@ interface IrSyntax { ?: super.visitCatch(aCatch, data) } }, - Unit + Unit, ) } @@ -1066,7 +1066,7 @@ interface IrSyntax { ?: super.visitBreakContinue(jump, data) } }, - Unit + Unit, ) } @@ -1080,7 +1080,7 @@ interface IrSyntax { ?: super.visitBreak(jump, data) } }, - Unit + Unit, ) } @@ -1094,7 +1094,7 @@ interface IrSyntax { ?: super.visitContinue(jump, data) } }, - Unit + Unit, ) } @@ -1108,7 +1108,7 @@ interface IrSyntax { ?: super.visitReturn(expression, data) } }, - Unit + Unit, ) } @@ -1122,7 +1122,7 @@ interface IrSyntax { ?: super.visitThrow(expression, data) } }, - Unit + Unit, ) } @@ -1132,14 +1132,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitDynamicExpression( expression: IrDynamicExpression, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitDynamicExpression(expression, data) } }, - Unit + Unit, ) } @@ -1150,14 +1150,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitDynamicOperatorExpression( expression: IrDynamicOperatorExpression, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitDynamicOperatorExpression(expression, data) } }, - Unit + Unit, ) } @@ -1168,14 +1168,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitDynamicMemberExpression( expression: IrDynamicMemberExpression, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitDynamicMemberExpression(expression, data) } }, - Unit + Unit, ) } @@ -1185,14 +1185,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitErrorDeclaration( declaration: IrErrorDeclaration, - data: Unit + data: Unit, ): IrStatement = declaration.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), declaration) ?: super.visitErrorDeclaration(declaration, data) } }, - Unit + Unit, ) } @@ -1202,14 +1202,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitErrorExpression( expression: IrErrorExpression, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitErrorExpression(expression, data) } }, - Unit + Unit, ) } @@ -1220,14 +1220,14 @@ interface IrSyntax { object : IrElementTransformer { override fun visitErrorCallExpression( expression: IrErrorCallExpression, - data: Unit + data: Unit, ): IrExpression = expression.transformChildren(this, Unit).let { f(IrUtils(pluginContext, compilerContext, moduleFragment), expression) ?: super.visitErrorCallExpression(expression, data) } }, - Unit + Unit, ) } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/config/ConfigSyntax.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/config/ConfigSyntax.kt index b48fe70b9..9270ac674 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/config/ConfigSyntax.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/config/ConfigSyntax.kt @@ -55,28 +55,28 @@ interface ConfigSyntax { fun storageComponent( registerModuleComponents: CompilerContext.( - container: StorageComponentContainer, moduleDescriptor: ModuleDescriptor + container: StorageComponentContainer, moduleDescriptor: ModuleDescriptor, ) -> Unit, check: CompilerContext.( declaration: KtDeclaration, descriptor: DeclarationDescriptor, - context: DeclarationCheckerContext + context: DeclarationCheckerContext, ) -> Unit = - Noop.effect4 + Noop.effect4, ): arrow.meta.phases.config.StorageComponentContainer = object : arrow.meta.phases.config.StorageComponentContainer { override fun CompilerContext.check( declaration: KtDeclaration, descriptor: DeclarationDescriptor, - context: DeclarationCheckerContext + context: DeclarationCheckerContext, ) { check(declaration, descriptor, context) } override fun CompilerContext.registerModuleComponents( container: StorageComponentContainer, - moduleDescriptor: ModuleDescriptor + moduleDescriptor: ModuleDescriptor, ) { registerModuleComponents(container, moduleDescriptor) } @@ -87,7 +87,7 @@ interface ConfigSyntax { CompilerContext.( declaration: KtDeclaration, descriptor: DeclarationDescriptor, - context: DeclarationCheckerContext + context: DeclarationCheckerContext, ) -> Unit ): arrow.meta.phases.config.StorageComponentContainer = storageComponent(Noop.effect3, check) @@ -110,7 +110,7 @@ interface ConfigSyntax { CompilerContext.( resolvedCall: ResolvedCall<*>, reportOn: org.jetbrains.kotlin.com.intellij.psi.PsiElement, - context: CallCheckerContext + context: CallCheckerContext, ) -> Unit ): arrow.meta.phases.config.StorageComponentContainer = storageComponent( @@ -121,7 +121,7 @@ interface ConfigSyntax { override fun check( resolvedCall: ResolvedCall<*>, reportOn: org.jetbrains.kotlin.com.intellij.psi.PsiElement, - context: CallCheckerContext + context: CallCheckerContext, ): Unit = ctx.check(resolvedCall, reportOn, context) } ) diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/resolve/ResolveSyntax.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/resolve/ResolveSyntax.kt index c78bacfa5..6f84e7b0c 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/resolve/ResolveSyntax.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/dsl/resolve/ResolveSyntax.kt @@ -49,7 +49,7 @@ interface ResolveSyntax { containingDeclaration: DeclarationDescriptor?, currentModality: Modality, bindingContext: BindingContext, - isImplicitModality: Boolean + isImplicitModality: Boolean, ) -> Modality? ): DeclarationAttributeAlterer = object : DeclarationAttributeAlterer { @@ -58,14 +58,14 @@ interface ResolveSyntax { declaration: DeclarationDescriptor?, containingDeclaration: DeclarationDescriptor?, currentModality: Modality, - isImplicitModality: Boolean + isImplicitModality: Boolean, ): Modality? = refineDeclarationModality( modifierListOwner, declaration, containingDeclaration, currentModality, - isImplicitModality + isImplicitModality, ) } @@ -83,7 +83,7 @@ interface ResolveSyntax { storageManager: StorageManager, trace: BindingTrace, moduleInfo: ModuleInfo?, - lookupTracker: LookupTracker + lookupTracker: LookupTracker, ) -> PackageFragmentProvider? ): PackageProvider = object : PackageProvider { @@ -93,7 +93,7 @@ interface ResolveSyntax { storageManager: StorageManager, trace: BindingTrace, moduleInfo: ModuleInfo?, - lookupTracker: LookupTracker + lookupTracker: LookupTracker, ): PackageFragmentProvider? = getPackageFragmentProvider( project, @@ -101,7 +101,7 @@ interface ResolveSyntax { storageManager, trace, moduleInfo, - lookupTracker + lookupTracker, ) } @@ -123,17 +123,17 @@ interface ResolveSyntax { Noop.emptyCollection2(), syntheticConstructorsForName: CompilerContext.( - contributedClassifier: ClassifierDescriptor, location: LookupLocation + contributedClassifier: ClassifierDescriptor, location: LookupLocation, ) -> Collection = Noop.emptyCollection3(), syntheticExtensionProperties: CompilerContext.( - receiverTypes: Collection, location: LookupLocation + receiverTypes: Collection, location: LookupLocation, ) -> Collection = Noop.emptyCollection3(), syntheticExtensionPropertiesForName: CompilerContext.( - receiverTypes: Collection, name: Name, location: LookupLocation + receiverTypes: Collection, name: Name, location: LookupLocation, ) -> Collection = Noop.emptyCollection4(), syntheticMemberFunctions: @@ -141,7 +141,7 @@ interface ResolveSyntax { Noop.emptyCollection2(), syntheticMemberFunctionsForName: CompilerContext.( - receiverTypes: Collection, name: Name, location: LookupLocation + receiverTypes: Collection, name: Name, location: LookupLocation, ) -> Collection = Noop.emptyCollection4(), syntheticStaticFunctions: @@ -151,9 +151,9 @@ interface ResolveSyntax { Noop.emptyCollection2(), syntheticStaticFunctionsForName: CompilerContext.( - contributedFunctions: Collection, location: LookupLocation + contributedFunctions: Collection, location: LookupLocation, ) -> Collection = - Noop.emptyCollection3() + Noop.emptyCollection3(), ): ExtensionPhase = object : SyntheticScopeProvider { override fun CompilerContext.syntheticConstructor( @@ -166,19 +166,19 @@ interface ResolveSyntax { override fun CompilerContext.syntheticConstructors( contributedClassifier: ClassifierDescriptor, - location: LookupLocation + location: LookupLocation, ): Collection = syntheticConstructorsForName(contributedClassifier, location) override fun CompilerContext.syntheticExtensionProperties( receiverTypes: Collection, - location: LookupLocation + location: LookupLocation, ): Collection = syntheticExtensionProperties(receiverTypes, location) override fun CompilerContext.syntheticExtensionProperties( receiverTypes: Collection, name: Name, - location: LookupLocation + location: LookupLocation, ): Collection = syntheticExtensionPropertiesForName(receiverTypes, name, location) @@ -189,7 +189,7 @@ interface ResolveSyntax { override fun CompilerContext.syntheticMemberFunctions( receiverTypes: Collection, name: Name, - location: LookupLocation + location: LookupLocation, ): Collection = syntheticMemberFunctionsForName(receiverTypes, name, location) @@ -199,7 +199,7 @@ interface ResolveSyntax { override fun CompilerContext.syntheticStaticFunctions( contributedFunctions: Collection, - location: LookupLocation + location: LookupLocation, ): Collection = syntheticStaticFunctionsForName(contributedFunctions, location) } @@ -215,7 +215,7 @@ interface ResolveSyntax { fun syntheticResolver( addSyntheticSupertypes: CompilerContext.( - thisDescriptor: ClassDescriptor, supertypes: MutableList + thisDescriptor: ClassDescriptor, supertypes: MutableList, ) -> Unit = Noop.effect3, /** @@ -230,7 +230,7 @@ interface ResolveSyntax { name: Name, ctx: LazyClassContext, declarationProvider: PackageMemberDeclarationProvider, - result: MutableSet + result: MutableSet, ) -> Unit = Noop.effect6, generateSyntheticClasses: @@ -239,7 +239,7 @@ interface ResolveSyntax { name: Name, ctx: LazyClassContext, declarationProvider: ClassMemberDeclarationProvider, - result: MutableSet + result: MutableSet, ) -> Unit = Noop.effect6, generateSyntheticMethods: @@ -248,7 +248,7 @@ interface ResolveSyntax { name: Name, bindingContext: BindingContext, fromSupertypes: List, - result: MutableCollection + result: MutableCollection, ) -> Unit = Noop.effect6, generateSyntheticProperties: @@ -257,14 +257,14 @@ interface ResolveSyntax { name: Name, bindingContext: BindingContext, fromSupertypes: ArrayList, - result: MutableSet + result: MutableSet, ) -> Unit = Noop.effect6, generateSyntheticSecondaryConstructors: CompilerContext.( thisDescriptor: ClassDescriptor, bindingContext: BindingContext, - result: MutableCollection + result: MutableCollection, ) -> Unit = Noop.effect4, getSyntheticCompanionObjectNameIfNeeded: @@ -273,12 +273,12 @@ interface ResolveSyntax { getSyntheticFunctionNames: CompilerContext.(thisDescriptor: ClassDescriptor) -> List? = Noop.nullable2(), getSyntheticNestedClassNames: CompilerContext.(thisDescriptor: ClassDescriptor) -> List? = - Noop.nullable2() + Noop.nullable2(), ): SyntheticResolver = object : SyntheticResolver { override fun CompilerContext.addSyntheticSupertypes( thisDescriptor: ClassDescriptor, - supertypes: MutableList + supertypes: MutableList, ) { addSyntheticSupertypes(thisDescriptor, supertypes) } @@ -288,7 +288,7 @@ interface ResolveSyntax { name: Name, ctx: LazyClassContext, declarationProvider: ClassMemberDeclarationProvider, - result: MutableSet + result: MutableSet, ) { generateSyntheticClasses(thisDescriptor, name, ctx, declarationProvider, result) } @@ -298,7 +298,7 @@ interface ResolveSyntax { name: Name, ctx: LazyClassContext, declarationProvider: PackageMemberDeclarationProvider, - result: MutableSet + result: MutableSet, ) { generatePackageSyntheticClasses(thisDescriptor, name, ctx, declarationProvider, result) } @@ -308,7 +308,7 @@ interface ResolveSyntax { name: Name, bindingContext: BindingContext, fromSupertypes: List, - result: MutableCollection + result: MutableCollection, ) { generateSyntheticMethods(thisDescriptor, name, bindingContext, fromSupertypes, result) } @@ -318,7 +318,7 @@ interface ResolveSyntax { name: Name, bindingContext: BindingContext, fromSupertypes: ArrayList, - result: MutableSet + result: MutableSet, ) { generateSyntheticProperties(thisDescriptor, name, bindingContext, fromSupertypes, result) } @@ -338,7 +338,7 @@ interface ResolveSyntax { override fun CompilerContext.generateSyntheticSecondaryConstructors( thisDescriptor: ClassDescriptor, bindingContext: BindingContext, - result: MutableCollection + result: MutableCollection, ): Unit = generateSyntheticSecondaryConstructors(thisDescriptor, bindingContext, result) } } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/Noop.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/Noop.kt index f78a5522b..86538ef42 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/Noop.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/Noop.kt @@ -8,32 +8,50 @@ object Noop { val effect4: (Any?, Any?, Any?, Any?) -> Unit = { _, _, _, _ -> Unit } val effect5: (Any?, Any?, Any?, Any?, Any?) -> Unit = { _, _, _, _, _ -> Unit } val effect6: (Any?, Any?, Any?, Any?, Any?, Any?) -> Unit = { _, _, _, _, _, _ -> Unit } + fun nullable1(): (Any?) -> A? = { null } + fun nullable2(): (Any?, Any?) -> A? = { _, _ -> null } + fun nullable3(): (Any?, Any?, Any?) -> A? = { _, _, _ -> null } + fun nullable4(): (Any?, Any?, Any?, Any?) -> A? = { _, _, _, _ -> null } + fun nullable5(): (Any?, Any?, Any?, Any?, Any?) -> A? = { _, _, _, _, _ -> null } + fun nullable6(): (Any?, Any?, Any?, Any?, Any?, Any?) -> A? = { _, _, _, _, _, _ -> null } + fun nullable7(): (Any?, Any?, Any?, Any?, Any?, Any?, Any?) -> A? = { _, _, _, _, _, _, _ -> null } + fun emptyCollection1(): (Any?) -> Collection = { emptyList() } + fun emptyList1(): (Any?) -> List = { emptyList() } + fun emptyCollection2(): (Any?, Any?) -> Collection = { _, _ -> emptyList() } + fun emptyList2(): (Any?, Any?) -> List = { _, _ -> emptyList() } + fun emptyCollection3(): (Any?, Any?, Any?) -> Collection = { _, _, _ -> emptyList() } + fun emptyCollection4(): (Any?, Any?, Any?, Any?) -> Collection = { _, _, _, _ -> emptyList() } + fun emptyCollection5(): (Any?, Any?, Any?, Any?, Any?) -> Collection = { _, _, _, _, _ -> emptyList() } + val boolean1True: (Any?) -> Boolean = { _ -> true } val boolean1False: (Any?) -> Boolean = { _ -> false } val boolean2True: (Any?, Any?) -> Boolean = { _, _ -> true } val boolean2False: (Any?, Any?) -> Boolean = { _, _ -> false } val boolean3True: (Any?, Any?, Any?) -> Boolean = { _, _, _ -> true } + fun string1(): (A) -> String = { _ -> "" } + fun string2(): (A, B) -> String = { _, _ -> "" } + fun string3(): (A, B, C) -> String = { _, _, _ -> "" } } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/Utils.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/Utils.kt index 2dd3be009..0e2f9551a 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/Utils.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/Utils.kt @@ -18,7 +18,7 @@ fun , T> Iterable.filterNotNullTo(destination: C inline fun > Iterable.mapNotNullTo( destination: C, - transform: (T) -> R? + transform: (T) -> R?, ): C { forEach { element -> transform(element)?.let { destination.add(it) } } return destination @@ -30,7 +30,7 @@ inline fun Iterable.mapNotNull(transform: (T) -> R?): List { inline fun > Map.mapNotNullTo( destination: C, - transform: (Map.Entry) -> R? + transform: (Map.Entry) -> R?, ): C { forEach { element -> transform(element)?.let { destination.add(it) } } return destination @@ -43,7 +43,7 @@ inline fun Map.mapNotNull(transform: (Map.Entry) -> R? data class SealedSubclass( val simpleName: Name, val fqName: FqName?, - val typeVariables: List + val typeVariables: List, ) fun KtClass.sealedSubclasses(): List = @@ -58,7 +58,7 @@ fun List.sealedVariants(superKt: KtClass): List = SealedSubclass( simpleName = it.nameAsSafeName, fqName = it.fqName, - typeVariables = if (it is KtClass) it.renderTypeParameters else emptyList() + typeVariables = if (it is KtClass) it.renderTypeParameters else emptyList(), ) } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/registry/InternalRegistry.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/registry/InternalRegistry.kt index 26c65a02b..73ddbcb70 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/registry/InternalRegistry.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/internal/registry/InternalRegistry.kt @@ -32,7 +32,6 @@ import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.backend.jvm.extensions.ClassGenerator import org.jetbrains.kotlin.backend.jvm.extensions.ClassGeneratorExtension -import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.codegen.ClassBuilderFactory @@ -45,6 +44,7 @@ import org.jetbrains.kotlin.com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.com.intellij.testFramework.LightVirtualFile import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi +import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.container.ComponentProvider import org.jetbrains.kotlin.container.useInstance @@ -113,7 +113,7 @@ interface InternalRegistry : ConfigSyntax { projectContext: ProjectContext, files: Collection, bindingTrace: BindingTrace, - componentProvider: ComponentProvider + componentProvider: ComponentProvider, ): AnalysisResult? { ctx.module = module ctx.componentProvider = componentProvider @@ -124,7 +124,7 @@ interface InternalRegistry : ConfigSyntax { project: Project, module: ModuleDescriptor, bindingTrace: BindingTrace, - files: Collection + files: Collection, ): AnalysisResult? { ctx.module = module return super.analysisCompleted(project, module, bindingTrace, files) @@ -136,7 +136,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerProjectComponents( project: MockProject, - configuration: CompilerConfiguration + configuration: CompilerConfiguration, ) { ide { println("registerProjectComponents!!!! CALLED in IDEA!!!! something is wrong.") } registerMetaComponents(configuration) @@ -144,7 +144,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerMetaComponents( configuration: CompilerConfiguration, - context: CompilerContext? = null + context: CompilerContext? = null, ) { cli { registerSyntheticScopeProviderIfNeeded() } val ctx: CompilerContext = @@ -152,7 +152,7 @@ interface InternalRegistry : ConfigSyntax { context } else { val messageCollector: MessageCollector? = cli { - configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE) + configuration.get(CommonConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE) } CompilerContext(configuration, messageCollector) } @@ -192,7 +192,7 @@ interface InternalRegistry : ConfigSyntax { else -> ctx.messageCollector?.report( CompilerMessageSeverity.ERROR, - "Unsupported extension phase: $this" + "Unsupported extension phase: $this", ) } } @@ -222,7 +222,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerExtraImports( phase: ExtraImports, - ctx: CompilerContext + ctx: CompilerContext, ) { ExtraImportsProviderExtension.registerExtension( object : ExtraImportsProviderExtension { @@ -234,7 +234,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerPreprocessedVirtualFileFactory( phase: PreprocessedVirtualFileFactory, - ctx: CompilerContext + ctx: CompilerContext, ) { PreprocessedVirtualFileFactoryExtension.registerExtension( object : PreprocessedVirtualFileFactoryExtension { @@ -251,13 +251,13 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerSyntheticScopeProvider( phase: SyntheticScopeProvider, - ctx: CompilerContext + ctx: CompilerContext, ) { SyntheticScopeProviderExtension.registerExtension( object : SyntheticScopeProviderExtension { override fun getScopes( moduleDescriptor: ModuleDescriptor, - javaSyntheticPropertiesScope: JavaSyntheticPropertiesScope + javaSyntheticPropertiesScope: JavaSyntheticPropertiesScope, ): List = phase.run { listOf( @@ -273,20 +273,20 @@ interface InternalRegistry : ConfigSyntax { override fun getSyntheticConstructors( contributedClassifier: ClassifierDescriptor, - location: LookupLocation + location: LookupLocation, ): Collection = phase.run { ctx.syntheticConstructors(contributedClassifier, location) } override fun getSyntheticExtensionProperties( receiverTypes: Collection, - location: LookupLocation + location: LookupLocation, ): Collection = phase.run { ctx.syntheticExtensionProperties(receiverTypes, location) } override fun getSyntheticExtensionProperties( receiverTypes: Collection, name: Name, - location: LookupLocation + location: LookupLocation, ): Collection = phase.run { ctx.syntheticExtensionProperties(receiverTypes, name, location) } @@ -298,7 +298,7 @@ interface InternalRegistry : ConfigSyntax { override fun getSyntheticMemberFunctions( receiverTypes: Collection, name: Name, - location: LookupLocation + location: LookupLocation, ): Collection = phase.run { ctx.syntheticMemberFunctions(receiverTypes, name, location) } @@ -309,7 +309,7 @@ interface InternalRegistry : ConfigSyntax { override fun getSyntheticStaticFunctions( contributedFunctions: Collection, - location: LookupLocation + location: LookupLocation, ): Collection = phase.run { ctx.syntheticStaticFunctions(contributedFunctions, location) } } @@ -321,7 +321,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerIRGeneration( phase: IRGeneration, - compilerContext: CompilerContext + compilerContext: CompilerContext, ) { IrGenerationExtension.registerExtension( object : IrGenerationExtension { @@ -334,13 +334,13 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerSyntheticResolver( phase: SyntheticResolver, - compilerContext: CompilerContext + compilerContext: CompilerContext, ) { SyntheticResolveExtension.registerExtension( object : SyntheticResolveExtension { override fun addSyntheticSupertypes( thisDescriptor: ClassDescriptor, - supertypes: MutableList + supertypes: MutableList, ) { phase.run { compilerContext.addSyntheticSupertypes(thisDescriptor, supertypes) } } @@ -350,7 +350,7 @@ interface InternalRegistry : ConfigSyntax { name: Name, ctx: LazyClassContext, declarationProvider: ClassMemberDeclarationProvider, - result: MutableSet + result: MutableSet, ) { phase.run { compilerContext.generateSyntheticClasses( @@ -358,7 +358,7 @@ interface InternalRegistry : ConfigSyntax { name, ctx, declarationProvider, - result + result, ) } } @@ -368,7 +368,7 @@ interface InternalRegistry : ConfigSyntax { name: Name, ctx: LazyClassContext, declarationProvider: PackageMemberDeclarationProvider, - result: MutableSet + result: MutableSet, ) { phase.run { compilerContext.generatePackageSyntheticClasses( @@ -376,7 +376,7 @@ interface InternalRegistry : ConfigSyntax { name, ctx, declarationProvider, - result + result, ) } } @@ -386,7 +386,7 @@ interface InternalRegistry : ConfigSyntax { name: Name, bindingContext: BindingContext, fromSupertypes: List, - result: MutableCollection + result: MutableCollection, ) { phase.run { compilerContext.generateSyntheticMethods( @@ -394,7 +394,7 @@ interface InternalRegistry : ConfigSyntax { name, bindingContext, fromSupertypes, - result + result, ) } } @@ -404,7 +404,7 @@ interface InternalRegistry : ConfigSyntax { name: Name, bindingContext: BindingContext, fromSupertypes: ArrayList, - result: MutableSet + result: MutableSet, ) { phase.run { compilerContext.generateSyntheticProperties( @@ -412,7 +412,7 @@ interface InternalRegistry : ConfigSyntax { name, bindingContext, fromSupertypes, - result + result, ) } } @@ -438,7 +438,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.packageFragmentProvider( phase: PackageProvider, - ctx: CompilerContext + ctx: CompilerContext, ) { PackageFragmentProviderExtension.registerExtension( object : PackageFragmentProviderExtension { @@ -448,7 +448,7 @@ interface InternalRegistry : ConfigSyntax { storageManager: StorageManager, trace: BindingTrace, moduleInfo: ModuleInfo?, - lookupTracker: LookupTracker + lookupTracker: LookupTracker, ): PackageFragmentProvider? { return phase.run { ctx.getPackageFragmentProvider( @@ -457,7 +457,7 @@ interface InternalRegistry : ConfigSyntax { storageManager, trace, moduleInfo, - lookupTracker + lookupTracker, ) } } @@ -467,7 +467,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerDeclarationAttributeAlterer( phase: DeclarationAttributeAlterer, - ctx: CompilerContext + ctx: CompilerContext, ) { DeclarationAttributeAltererExtension.registerExtension( object : DeclarationAttributeAltererExtension { @@ -476,7 +476,7 @@ interface InternalRegistry : ConfigSyntax { declaration: DeclarationDescriptor?, containingDeclaration: DeclarationDescriptor?, currentModality: Modality, - isImplicitModality: Boolean + isImplicitModality: Boolean, ): Modality? { return phase.run { ctx.refineDeclarationModality( @@ -484,7 +484,7 @@ interface InternalRegistry : ConfigSyntax { declaration, containingDeclaration, currentModality, - isImplicitModality + isImplicitModality, ) } } @@ -494,14 +494,14 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerCodegen( phase: Codegen, - ctx: CompilerContext + ctx: CompilerContext, ) { ExpressionCodegenExtension.registerExtension( object : ExpressionCodegenExtension { override fun applyFunction( receiver: StackValue, resolvedCall: ResolvedCall<*>, - c: ExpressionCodegenExtension.Context + c: ExpressionCodegenExtension.Context, ): StackValue? { return phase.run { ctx.applyFunction(receiver, resolvedCall, c) } } @@ -509,7 +509,7 @@ interface InternalRegistry : ConfigSyntax { override fun applyProperty( receiver: StackValue, resolvedCall: ResolvedCall<*>, - c: ExpressionCodegenExtension.Context + c: ExpressionCodegenExtension.Context, ): StackValue? { return phase.run { ctx.applyProperty(receiver, resolvedCall, c) } } @@ -523,14 +523,14 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerStorageComponentContainer( phase: StorageComponentContainer, - ctx: CompilerContext + ctx: CompilerContext, ) { StorageComponentContainerContributor.registerExtension(DelegatingContributor(phase, ctx)) } fun CompilerPluginRegistrar.ExtensionStorage.registerCollectAdditionalSources( phase: CollectAdditionalSources, - ctx: CompilerContext + ctx: CompilerContext, ) { cli { CollectAdditionalSourcesExtension.registerExtension( @@ -538,13 +538,13 @@ interface InternalRegistry : ConfigSyntax { override fun collectAdditionalSourcesAndUpdateConfiguration( knownSources: Collection, configuration: CompilerConfiguration, - project: Project + project: Project, ): Collection = phase.run { ctx.collectAdditionalSourcesAndUpdateConfiguration( knownSources, configuration, - project + project, ) } } @@ -554,7 +554,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerAnalysisHandler( phase: AnalysisHandler, - ctx: CompilerContext + ctx: CompilerContext, ) { phase.pushAnalysisPhase() cli { @@ -564,7 +564,7 @@ interface InternalRegistry : ConfigSyntax { project: Project, module: ModuleDescriptor, bindingTrace: BindingTrace, - files: Collection + files: Collection, ): AnalysisResult? = phase.run { popAnalysisPhase() @@ -578,7 +578,7 @@ interface InternalRegistry : ConfigSyntax { bindingTrace.bindingContext, module, emptyList(), - emptyList() + emptyList(), ) } else -> null @@ -591,7 +591,7 @@ interface InternalRegistry : ConfigSyntax { projectContext: ProjectContext, files: Collection, bindingTrace: BindingTrace, - componentProvider: ComponentProvider + componentProvider: ComponentProvider, ): AnalysisResult? { return phase.run { ctx.doAnalysis( @@ -600,7 +600,7 @@ interface InternalRegistry : ConfigSyntax { projectContext, files, bindingTrace, - componentProvider + componentProvider, ) } } @@ -611,13 +611,13 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerClassGenerator( phase: ClassGeneration, - ctx: CompilerContext + ctx: CompilerContext, ) { ClassGeneratorExtension.registerExtension( object : ClassGeneratorExtension { override fun generateClass( generator: ClassGenerator, - declaration: IrClass? + declaration: IrClass?, ): ClassGenerator = phase.run { ctx.interceptClassGenerator(generator, declaration) } } ) @@ -625,7 +625,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerClassBuilder( phase: ClassBuilder, - ctx: CompilerContext + ctx: CompilerContext, ) { @Suppress("DEPRECATION_ERROR") org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension.registerExtension( @@ -635,7 +635,7 @@ interface InternalRegistry : ConfigSyntax { override fun interceptClassBuilderFactory( interceptedFactory: ClassBuilderFactory, bindingContext: BindingContext, - diagnostics: DiagnosticSink + diagnostics: DiagnosticSink, ): ClassBuilderFactory = phase.run { ctx.interceptClassBuilder(interceptedFactory, bindingContext, diagnostics) } } @@ -644,7 +644,7 @@ interface InternalRegistry : ConfigSyntax { fun CompilerPluginRegistrar.ExtensionStorage.registerCompilerConfiguration( phase: Config, - ctx: CompilerContext + ctx: CompilerContext, ) { CompilerConfigurationExtension.registerExtension( object : CompilerConfigurationExtension { @@ -661,7 +661,7 @@ interface InternalRegistry : ConfigSyntax { override fun registerModuleComponents( container: org.jetbrains.kotlin.container.StorageComponentContainer, platform: TargetPlatform, - moduleDescriptor: ModuleDescriptor + moduleDescriptor: ModuleDescriptor, ) { phase.run { ctx.registerModuleComponents(container, moduleDescriptor) } container.useInstance( @@ -669,7 +669,7 @@ interface InternalRegistry : ConfigSyntax { override fun check( declaration: KtDeclaration, descriptor: DeclarationDescriptor, - context: DeclarationCheckerContext + context: DeclarationCheckerContext, ): Unit = phase.run { ctx.check(declaration, descriptor, context) } } ) @@ -679,6 +679,6 @@ interface InternalRegistry : ConfigSyntax { fun compilerContextService(): StorageComponentContainer = storageComponent( registerModuleComponents = { container, _ -> container.useInstance(this) }, - check = { _, _, _ -> } + check = { _, _, _ -> }, ) } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/CompilerContext.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/CompilerContext.kt index fe58556e6..2e5d8a0d5 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/CompilerContext.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/CompilerContext.kt @@ -18,8 +18,9 @@ open class CompilerContext( val configuration: CompilerConfiguration?, // open val project: Project, val messageCollector: MessageCollector? = null, -// val ktPsiElementFactory: KtPsiFactory = KtPsiFactory(project, false), -// val eval: (String) -> Any? = { KotlinJsr223JvmLocalScriptEngineFactory().scriptEngine.eval(it) } + // val ktPsiElementFactory: KtPsiFactory = KtPsiFactory(project, false), + // val eval: (String) -> Any? = { KotlinJsr223JvmLocalScriptEngineFactory().scriptEngine.eval(it) + // } ) { private var md: ModuleDescriptor? = null private var cp: ComponentProvider? = null @@ -56,7 +57,7 @@ open class CompilerContext( fun CompilerContext.evaluateDependsOn( noRewindablePhase: () -> T?, - rewindablePhase: (Boolean) -> T? + rewindablePhase: (Boolean) -> T?, ): T? { if (!analysisPhaseCanBeRewind.get()) return noRewindablePhase() return rewindablePhase(analysisPhaseWasRewind.get()) @@ -65,7 +66,7 @@ fun CompilerContext.evaluateDependsOn( fun CompilerContext.evaluateDependsOnRewindableAnalysisPhase(evaluation: () -> T?): T? = evaluateDependsOn( noRewindablePhase = evaluation, - rewindablePhase = { wasRewind -> if (wasRewind) evaluation() else null } + rewindablePhase = { wasRewind -> if (wasRewind) evaluation() else null }, ) inline fun KtElement.findInAnalysedDescriptors( diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/AnalysisContext.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/AnalysisContext.kt index 1226d6aa9..72e37978e 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/AnalysisContext.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/AnalysisContext.kt @@ -15,10 +15,13 @@ internal object AnalysisContext { private val pluginAnalysisExtensionQueue: Queue = LinkedList() fun AnalysisHandler.pushAnalysisPhase(): Boolean = pluginAnalysisExtensionQueue.offer(0) + fun AnalysisHandler.popAnalysisPhase(): Unit { if (pluginAnalysisExtensionQueue.isNotEmpty()) pluginAnalysisExtensionQueue.remove() } + fun AnalysisHandler.willRewind(rewind: Boolean): Unit = willRewind.set(rewind) + fun AnalysisHandler.canRewind(): Boolean = willRewind.get() && pluginAnalysisExtensionQueue.isEmpty() } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/AnalysisHandler.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/AnalysisHandler.kt index d64469ae3..7e02d973b 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/AnalysisHandler.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/AnalysisHandler.kt @@ -21,13 +21,13 @@ interface AnalysisHandler : ExtensionPhase { projectContext: ProjectContext, files: Collection, bindingTrace: BindingTrace, - componentProvider: ComponentProvider + componentProvider: ComponentProvider, ): AnalysisResult? fun CompilerContext.analysisCompleted( project: Project, module: ModuleDescriptor, bindingTrace: BindingTrace, - files: Collection + files: Collection, ): AnalysisResult? } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/CollectAdditionalSources.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/CollectAdditionalSources.kt index e0399d73a..43c205a4e 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/CollectAdditionalSources.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/CollectAdditionalSources.kt @@ -14,6 +14,6 @@ interface CollectAdditionalSources : ExtensionPhase { fun CompilerContext.collectAdditionalSourcesAndUpdateConfiguration( knownSources: Collection, configuration: CompilerConfiguration, - project: Project + project: Project, ): Collection } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/KtUtils.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/KtUtils.kt index cc7ecf23f..5b3320126 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/KtUtils.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/KtUtils.kt @@ -101,6 +101,7 @@ fun PsiElement.sequence(on: Class): List = traverseFilter interface Eq { // from arrow fun A.eqv(other: A): Boolean + fun A.neqv(other: A): Boolean = !eqv(other) companion object { @@ -153,7 +154,7 @@ fun resolveFunctionTypeEq(): Eq = Eq { t1, t2 -> */ fun C.intersect( eq: Eq, - types: KotlinBuiltIns.() -> List + types: KotlinBuiltIns.() -> List, ): List = eq.run { returnType?.let { result: KotlinType -> builtIns.types().filter { it.eqv(result) } } @@ -171,7 +172,7 @@ fun C.intersect( fun D.intersect( eq: Eq, list: List, - other: KotlinBuiltIns.() -> List + other: KotlinBuiltIns.() -> List, ): List = eq.run { val set = list.toMutableList() diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/MetaFileViewProvider.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/MetaFileViewProvider.kt index 700ce2cb1..e3939dc23 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/MetaFileViewProvider.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/MetaFileViewProvider.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.com.intellij.psi.SingleRootFileViewProvider class MetaFileViewProvider( psiManager: PsiManager, virtualFile: VirtualFile, - val transformation: (Document?) -> Document? + val transformation: (Document?) -> Document?, ) : SingleRootFileViewProvider(psiManager, virtualFile) { override fun getDocument(): Document? = transformation(super.getDocument()) } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/PreprocessedVirtualFileFactory.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/PreprocessedVirtualFileFactory.kt index 355cccd0a..ab6655c40 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/PreprocessedVirtualFileFactory.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/analysis/PreprocessedVirtualFileFactory.kt @@ -11,6 +11,8 @@ import org.jetbrains.kotlin.com.intellij.testFramework.LightVirtualFile */ interface PreprocessedVirtualFileFactory : ExtensionPhase { fun CompilerContext.isPassThrough(): Boolean + fun CompilerContext.createPreprocessedFile(file: VirtualFile?): VirtualFile? + fun CompilerContext.createPreprocessedLightFile(file: LightVirtualFile?): LightVirtualFile? } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/ClassBuilder.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/ClassBuilder.kt index 9261608d8..fb5225aa1 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/ClassBuilder.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/ClassBuilder.kt @@ -14,6 +14,6 @@ interface ClassBuilder : ExtensionPhase { fun CompilerContext.interceptClassBuilder( interceptedFactory: ClassBuilderFactory, bindingContext: BindingContext, - diagnostics: DiagnosticSink + diagnostics: DiagnosticSink, ): ClassBuilderFactory } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/ClassGeneration.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/ClassGeneration.kt index b0e71f56a..67c969329 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/ClassGeneration.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/ClassGeneration.kt @@ -14,6 +14,6 @@ interface ClassGeneration : ExtensionPhase { @OptIn(ObsoleteDescriptorBasedAPI::class) fun CompilerContext.interceptClassGenerator( generator: ClassGenerator, - declaration: IrClass? + declaration: IrClass?, ): ClassGenerator } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/Codegen.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/Codegen.kt index 550bfd668..1e53fa1b1 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/Codegen.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/asm/Codegen.kt @@ -15,13 +15,13 @@ interface Codegen : ExtensionPhase { fun CompilerContext.applyFunction( receiver: StackValue, resolvedCall: ResolvedCall<*>, - c: ExpressionCodegenExtension.Context + c: ExpressionCodegenExtension.Context, ): StackValue? fun CompilerContext.applyProperty( receiver: StackValue, resolvedCall: ResolvedCall<*>, - c: ExpressionCodegenExtension.Context + c: ExpressionCodegenExtension.Context, ): StackValue? fun CompilerContext.generateClassSyntheticParts(codegen: ImplementationBodyCodegen): Unit diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/ir/IrUtils.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/ir/IrUtils.kt index e450851e0..6c68f4208 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/ir/IrUtils.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/codegen/ir/IrUtils.kt @@ -1,4 +1,4 @@ -@file:OptIn(ObsoleteDescriptorBasedAPI::class) +@file:OptIn(ObsoleteDescriptorBasedAPI::class, UnsafeDuringIrConstructionAPI::class) package arrow.meta.phases.codegen.ir @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.IrConstructor -import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction @@ -26,10 +25,9 @@ import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression -import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl -import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl -import org.jetbrains.kotlin.ir.expressions.impl.IrGetObjectValueImpl +import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrTypeSystemContext import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl @@ -52,17 +50,16 @@ import org.jetbrains.kotlin.types.KotlinType class IrUtils( val pluginContext: IrPluginContext, val compilerContext: CompilerContext, - val moduleFragment: IrModuleFragment + val moduleFragment: IrModuleFragment, ) : ReferenceSymbolTable by pluginContext.symbols.externalSymbolTable, - IrTypeSystemContext by IrTypeSystemContextImpl(pluginContext.irBuiltIns), - IrFactory by pluginContext.irFactory { + IrTypeSystemContext by IrTypeSystemContextImpl(pluginContext.irBuiltIns) { val typeTranslator: TypeTranslator = TypeTranslatorImpl( symbolTable = pluginContext.symbols.externalSymbolTable, languageVersionSettings = pluginContext.languageVersionSettings, - moduleDescriptor = moduleFragment.descriptor + moduleDescriptor = moduleFragment.descriptor, ) fun KotlinType.toIrType(): IrType = typeTranslator.translateType(this) @@ -75,39 +72,47 @@ class IrUtils( pluginContext.symbols.externalSymbolTable.descriptorExtension.referenceField(this) irField.owner.correspondingPropertySymbol?.owner?.getter?.symbol?.let { irSimpleFunctionSymbol -> - IrCallImpl( + IrCallImplWithShape( startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET, type = irSimpleFunctionSymbol.owner.returnType, symbol = irSimpleFunctionSymbol, typeArgumentsCount = irSimpleFunctionSymbol.owner.typeParameters.size, - valueArgumentsCount = irSimpleFunctionSymbol.owner.valueParameters.size + valueArgumentsCount = irSimpleFunctionSymbol.owner.valueParameters.size, + contextParameterCount = irSimpleFunctionSymbol.owner.contextReceiverParametersCount, + hasDispatchReceiver = irSimpleFunctionSymbol.owner.dispatchReceiverParameter != null, + hasExtensionReceiver = irSimpleFunctionSymbol.owner.extensionReceiverParameter != null, ) - } - ?: TODO("Unsupported irCall for $this") + } ?: TODO("Unsupported irCall for $this") } is ClassConstructorDescriptor -> { val irSymbol = pluginContext.symbols.externalSymbolTable.descriptorExtension.referenceConstructor(this) - IrConstructorCallImpl( + IrConstructorCallImplWithShape( startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET, type = irSymbol.owner.returnType, symbol = irSymbol, typeArgumentsCount = irSymbol.owner.typeParameters.size, valueArgumentsCount = irSymbol.owner.valueParameters.size, - constructorTypeArgumentsCount = irSymbol.owner.typeParameters.size + constructorTypeArgumentsCount = irSymbol.owner.typeParameters.size, + contextParameterCount = irSymbol.owner.contextReceiverParametersCount, + hasDispatchReceiver = irSymbol.owner.dispatchReceiverParameter != null, + hasExtensionReceiver = irSymbol.owner.extensionReceiverParameter != null, ) } is FunctionDescriptor -> { val irSymbol = pluginContext.symbols.externalSymbolTable.referenceFunction(this) - IrCallImpl( + IrCallImplWithShape( startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET, type = irSymbol.owner.returnType, symbol = irSymbol as IrSimpleFunctionSymbol, typeArgumentsCount = irSymbol.owner.typeParameters.size, - valueArgumentsCount = irSymbol.owner.valueParameters.size + valueArgumentsCount = irSymbol.owner.valueParameters.size, + contextParameterCount = irSymbol.owner.contextReceiverParametersCount, + hasDispatchReceiver = irSymbol.owner.dispatchReceiverParameter != null, + hasExtensionReceiver = irSymbol.owner.extensionReceiverParameter != null, ) } is FakeCallableDescriptorForObject -> { @@ -119,7 +124,7 @@ class IrUtils( startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET, type = irSymbol.owner.defaultType, - symbol = irSymbol + symbol = irSymbol, ) } else -> { @@ -133,13 +138,16 @@ class IrUtils( val irField = pluginContext.symbols.externalSymbolTable.descriptorExtension.referenceField(this) return irField.owner.correspondingPropertySymbol?.owner?.getter?.symbol?.let { irSimpleFunctionSymbol -> - IrCallImpl( + IrCallImplWithShape( startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET, type = irSimpleFunctionSymbol.owner.returnType, symbol = irSimpleFunctionSymbol, typeArgumentsCount = irSimpleFunctionSymbol.owner.typeParameters.size, - valueArgumentsCount = irSimpleFunctionSymbol.owner.valueParameters.size + valueArgumentsCount = irSimpleFunctionSymbol.owner.valueParameters.size, + contextParameterCount = irSimpleFunctionSymbol.owner.contextReceiverParametersCount, + hasDispatchReceiver = irSimpleFunctionSymbol.owner.dispatchReceiverParameter != null, + hasExtensionReceiver = irSimpleFunctionSymbol.owner.extensionReceiverParameter != null, ) } } @@ -147,14 +155,17 @@ class IrUtils( fun ClassDescriptor.irConstructorCall(): IrConstructorCall? { val irClass = this.classId?.let { pluginContext.referenceClass(it) } return irClass!!.constructors.firstOrNull()?.let { irConstructorSymbol -> - IrConstructorCallImpl( + IrConstructorCallImplWithShape( startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET, type = irConstructorSymbol.owner.returnType, symbol = irConstructorSymbol, typeArgumentsCount = irConstructorSymbol.owner.typeParameters.size, valueArgumentsCount = irConstructorSymbol.owner.valueParameters.size, - constructorTypeArgumentsCount = declaredTypeParameters.size + constructorTypeArgumentsCount = declaredTypeParameters.size, + contextParameterCount = irConstructorSymbol.owner.contextReceiverParametersCount, + hasDispatchReceiver = irConstructorSymbol.owner.dispatchReceiverParameter != null, + hasExtensionReceiver = irConstructorSymbol.owner.extensionReceiverParameter != null, ) } } @@ -178,14 +189,14 @@ class IrUtils( return super.visitFunction(declaration, data) } }, - data + data, ) as IrStatement } inline fun IrElement.filterMap( crossinline filter: (E) -> Boolean, - crossinline map: (E) -> B + crossinline map: (E) -> B, ): List { val els = arrayListOf() val visitor = @@ -247,6 +258,6 @@ private fun IrSimpleFunction.substitutedValueParameters( ?: typeParameters .firstOrNull { typeParam -> typeParam.defaultType == type } ?.let { typeParam -> call.getTypeArgument(typeParam.index) } - ?: type // Could not resolve the substituted KotlinType + ?: type // Could not resolve the substituted KotlinType ) } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/config/StorageComponentContainer.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/config/StorageComponentContainer.kt index 7b8e51770..1f59020a0 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/config/StorageComponentContainer.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/config/StorageComponentContainer.kt @@ -14,12 +14,12 @@ import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext interface StorageComponentContainer : ExtensionPhase { fun CompilerContext.registerModuleComponents( container: org.jetbrains.kotlin.container.StorageComponentContainer, - moduleDescriptor: ModuleDescriptor + moduleDescriptor: ModuleDescriptor, ): Unit fun CompilerContext.check( declaration: KtDeclaration, descriptor: DeclarationDescriptor, - context: DeclarationCheckerContext + context: DeclarationCheckerContext, ): Unit } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/DeclarationAttributeAlterer.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/DeclarationAttributeAlterer.kt index 7b2596e4a..3e03cac75 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/DeclarationAttributeAlterer.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/DeclarationAttributeAlterer.kt @@ -16,6 +16,6 @@ interface DeclarationAttributeAlterer : ExtensionPhase { declaration: DeclarationDescriptor?, containingDeclaration: DeclarationDescriptor?, currentModality: Modality, - isImplicitModality: Boolean + isImplicitModality: Boolean, ): Modality? } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/PackageProvider.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/PackageProvider.kt index a6b2af7ad..265b00145 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/PackageProvider.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/PackageProvider.kt @@ -21,6 +21,6 @@ interface PackageProvider : ExtensionPhase { storageManager: StorageManager, trace: BindingTrace, moduleInfo: ModuleInfo?, - lookupTracker: LookupTracker + lookupTracker: LookupTracker, ): PackageFragmentProvider? } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/TypeUtils.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/TypeUtils.kt index bd67a7978..4a2285d99 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/TypeUtils.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/TypeUtils.kt @@ -36,6 +36,6 @@ fun KotlinType.intersection(vararg other: KotlinType): KotlinType { constructor, emptyList(), false, - constructor.createScopeForKotlinType() + constructor.createScopeForKotlinType(), ) } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/synthetics/SyntheticResolver.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/synthetics/SyntheticResolver.kt index ab52d1978..f70d99c28 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/synthetics/SyntheticResolver.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/synthetics/SyntheticResolver.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.types.KotlinType interface SyntheticResolver : ExtensionPhase { fun CompilerContext.addSyntheticSupertypes( thisDescriptor: ClassDescriptor, - supertypes: MutableList + supertypes: MutableList, ): Unit fun CompilerContext.generateSyntheticClasses( @@ -29,7 +29,7 @@ interface SyntheticResolver : ExtensionPhase { name: Name, ctx: LazyClassContext, declarationProvider: ClassMemberDeclarationProvider, - result: MutableSet + result: MutableSet, ): Unit fun CompilerContext.generatePackageSyntheticClasses( @@ -37,7 +37,7 @@ interface SyntheticResolver : ExtensionPhase { name: Name, ctx: LazyClassContext, declarationProvider: PackageMemberDeclarationProvider, - result: MutableSet + result: MutableSet, ): Unit fun CompilerContext.generateSyntheticMethods( @@ -45,7 +45,7 @@ interface SyntheticResolver : ExtensionPhase { name: Name, bindingContext: BindingContext, fromSupertypes: List, - result: MutableCollection + result: MutableCollection, ): Unit fun CompilerContext.generateSyntheticProperties( @@ -53,7 +53,7 @@ interface SyntheticResolver : ExtensionPhase { name: Name, bindingContext: BindingContext, fromSupertypes: ArrayList, - result: MutableSet + result: MutableSet, ): Unit fun CompilerContext.getSyntheticCompanionObjectNameIfNeeded( @@ -67,6 +67,6 @@ interface SyntheticResolver : ExtensionPhase { fun CompilerContext.generateSyntheticSecondaryConstructors( thisDescriptor: ClassDescriptor, bindingContext: BindingContext, - result: MutableCollection + result: MutableCollection, ): Unit } diff --git a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/synthetics/SyntheticScopeProvider.kt b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/synthetics/SyntheticScopeProvider.kt index b279fc7cd..b22a13071 100644 --- a/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/synthetics/SyntheticScopeProvider.kt +++ b/libs/arrow-meta/src/main/kotlin/arrow/meta/phases/resolve/synthetics/SyntheticScopeProvider.kt @@ -19,35 +19,43 @@ interface SyntheticScopeProvider : ExtensionPhase { fun CompilerContext.syntheticConstructor( constructor: ConstructorDescriptor ): ConstructorDescriptor? + fun CompilerContext.syntheticConstructors( classifierDescriptors: Collection ): Collection + fun CompilerContext.syntheticConstructors( contributedClassifier: ClassifierDescriptor, - location: LookupLocation + location: LookupLocation, ): Collection + fun CompilerContext.syntheticExtensionProperties( receiverTypes: Collection, - location: LookupLocation + location: LookupLocation, ): Collection + fun CompilerContext.syntheticExtensionProperties( receiverTypes: Collection, name: Name, - location: LookupLocation + location: LookupLocation, ): Collection + fun CompilerContext.syntheticMemberFunctions( receiverTypes: Collection ): Collection + fun CompilerContext.syntheticMemberFunctions( receiverTypes: Collection, name: Name, - location: LookupLocation + location: LookupLocation, ): Collection + fun CompilerContext.syntheticStaticFunctions( functionDescriptors: Collection ): Collection + fun CompilerContext.syntheticStaticFunctions( contributedFunctions: Collection, - location: LookupLocation + location: LookupLocation, ): Collection } diff --git a/libs/arrow-meta/src/test/kotlin/arrow/meta/ir/plugin/IrSyntaxPlugin.kt b/libs/arrow-meta/src/test/kotlin/arrow/meta/ir/plugin/IrSyntaxPlugin.kt index c108da23d..828e88d4d 100644 --- a/libs/arrow-meta/src/test/kotlin/arrow/meta/ir/plugin/IrSyntaxPlugin.kt +++ b/libs/arrow-meta/src/test/kotlin/arrow/meta/ir/plugin/IrSyntaxPlugin.kt @@ -159,7 +159,7 @@ open class IrSyntaxPlugin : Meta() { irDynamicMemberExpression(irVisit(IrDynamicMemberExpression::class.java)), irErrorDeclaration(irVisit(IrErrorDeclaration::class.java)), irErrorExpression(irVisit(IrErrorExpression::class.java)), - irErrorCallExpression(irVisit(IrErrorCallExpression::class.java)) + irErrorCallExpression(irVisit(IrErrorCallExpression::class.java)), ) } ) diff --git a/libs/arrow-meta/src/test/kotlin/arrow/meta/ir/syntax/IrSyntaxTest.kt b/libs/arrow-meta/src/test/kotlin/arrow/meta/ir/syntax/IrSyntaxTest.kt index d7256dc2b..df1376c21 100644 --- a/libs/arrow-meta/src/test/kotlin/arrow/meta/ir/syntax/IrSyntaxTest.kt +++ b/libs/arrow-meta/src/test/kotlin/arrow/meta/ir/syntax/IrSyntaxTest.kt @@ -193,7 +193,7 @@ class IrSyntaxTest { } } """ - .trimIndent() + .trimIndent(), ) } } @@ -205,6 +205,6 @@ private fun testIrVisit(elements: List>, src: Strin CompilerTest( config = { metaDependencies + addMetaPlugins(IrSyntaxPlugin()) }, code = { src.source }, - assert = { allOf(elements.map { element -> failsWith { it.contains(visits(element)) } }) } + assert = { allOf(elements.map { element -> failsWith { it.contains(visits(element)) } }) }, ) ) diff --git a/libs/gradle-plugin-commons/src/main/kotlin/arrow/meta/plugin/gradle/ArrowMetaGradlePlugin.kt b/libs/gradle-plugin-commons/src/main/kotlin/arrow/meta/plugin/gradle/ArrowMetaGradlePlugin.kt index c2bc441f1..c380b1154 100644 --- a/libs/gradle-plugin-commons/src/main/kotlin/arrow/meta/plugin/gradle/ArrowMetaGradlePlugin.kt +++ b/libs/gradle-plugin-commons/src/main/kotlin/arrow/meta/plugin/gradle/ArrowMetaGradlePlugin.kt @@ -83,12 +83,12 @@ public interface ArrowMetaGradlePlugin : KotlinCompilerPluginSupportPlugin { SubpluginOption( key = "generatedSrcOutputDir", value = - "${extension.generatedSrcOutputDir.get()}/${kotlinCompilation.defaultSourceSet.name}/kotlin" + "${extension.generatedSrcOutputDir.get()}/${kotlinCompilation.defaultSourceSet.name}/kotlin", ), SubpluginOption( key = "baseDir", - value = kotlinCompilation.target.project.rootProject.rootDir.path - ) + value = kotlinCompilation.target.project.rootProject.rootDir.path, + ), ) } } diff --git a/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/Compilation.kt b/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/Compilation.kt index c07f61b4d..ca3463d44 100644 --- a/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/Compilation.kt +++ b/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/Compilation.kt @@ -29,7 +29,7 @@ internal fun compile(data: CompilationData): CompilationResult { return createKotlinCompilation(data) .apply { sources = compilation.sources + compilation.kspGeneratedSourceFiles - symbolProcessorProviders = emptyList() + symbolProcessorProviders = mutableListOf() } .compile() } @@ -59,7 +59,7 @@ private fun createKotlinCompilation(data: CompilationData) = } kotlincArguments = data.arguments commandLineProcessors = data.commandLineProcessors - symbolProcessorProviders = data.symbolProcessors + symbolProcessorProviders = data.symbolProcessors.toMutableList() pluginOptions = data.pluginOptions.map { PluginOption(it.pluginId, it.key, it.value) } } @@ -70,7 +70,7 @@ private val KotlinCompilation.kspGeneratedSourceFiles: List .resolve("kotlin") .walk() .filter { it.isFile } - .map { SourceFile.fromPath(it.absoluteFile) } + .map { SourceFile.new(it.absoluteFile.name, it.absoluteFile.readText()) } .toList() private fun obtainTarget(data: CompilationData): String = diff --git a/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilationAssertions.kt b/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilationAssertions.kt index aa28bd86b..28b2128bf 100644 --- a/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilationAssertions.kt +++ b/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilationAssertions.kt @@ -113,7 +113,7 @@ private val interpreter: (CompilerTest) -> Unit = { compilationResult, singleAssert.source, singleAssert.output, - singleAssert.onError + singleAssert.onError, ) else -> TODO() } @@ -164,7 +164,7 @@ private fun assertEvalsTo( compilationResult: CompilationResult, source: Code.Source, output: Any?, - onError: (Throwable) -> Any? + onError: (Throwable) -> Any?, ) { assertCompiles(compilationResult) val className = source.filename.replace(".kt", "Kt") @@ -235,7 +235,7 @@ private fun eval( className: String, expression: String, classesDirectory: File, - onError: (Throwable) -> Any? + onError: (Throwable) -> Any?, ): Any? { val classLoader = URLClassLoader(arrayOf(classesDirectory.toURI().toURL())) val fullClassName = getFullClassName(classesDirectory, className) diff --git a/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilationData.kt b/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilationData.kt index a32fb36b2..94c33ddd2 100644 --- a/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilationData.kt +++ b/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilationData.kt @@ -19,7 +19,7 @@ internal data class CompilationData( val commandLineProcessors: List = emptyList(), val symbolProcessors: List = emptyList(), val pluginOptions: List = emptyList(), - val targetVersion: String? = null + val targetVersion: String? = null, ) { operator fun plus(other: CompilationData): CompilationData = @@ -32,7 +32,7 @@ internal data class CompilationData( commandLineProcessors = commandLineProcessors + other.commandLineProcessors, symbolProcessors = symbolProcessors + other.symbolProcessors, pluginOptions = pluginOptions + other.pluginOptions, - targetVersion = targetVersion ?: other.targetVersion + targetVersion = targetVersion ?: other.targetVersion, ) companion object { diff --git a/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilerTestDSL.kt b/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilerTestDSL.kt index 2ca8ac3fc..5c3fa5a9b 100644 --- a/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilerTestDSL.kt +++ b/libs/meta-test/src/main/kotlin/arrow/meta/plugin/testing/CompilerTestDSL.kt @@ -17,7 +17,7 @@ data class CompilerPlugin( val name: String, /** List of necessary dependencies to use that plugin during the compilation. */ - val dependencies: List + val dependencies: List, ) internal typealias CompilerTestInterpreter = (CompilerTest) -> Unit @@ -46,7 +46,7 @@ data class CompilerTest( * * @see [AssertSyntax] */ - val assert: Companion.() -> Assert + val assert: Companion.() -> Assert, ) { internal fun run(interpret: CompilerTestInterpreter): Unit = interpret(this) @@ -115,16 +115,24 @@ interface ConfigSyntax { /** Represents the different types of [Config] which will be managed. */ sealed class Config { internal data class AddCompilerPlugins(val plugins: List) : Config() + internal data class AddMetaPlugins(val plugins: List) : Config() + internal data class AddDependencies(val dependencies: List) : Config() + internal data class AddArguments(val arguments: List) : Config() + internal data class AddCommandLineProcessors( val commandLineProcessors: List ) : Config() + internal data class AddPluginOptions(val pluginOptions: List) : Config() + internal data class AddSymbolProcessors(val symbolProcessors: List) : Config() + internal data class Many(val configs: List) : Config() + internal object Empty : Config() internal companion object : ConfigSyntax { @@ -153,7 +161,7 @@ sealed class Code { /** Necessary filename to identify different code snippets. */ val filename: String = DEFAULT_FILENAME, /** Content of code snippet. */ - val text: String + val text: String, ) : Code() /** It's possible to provide one or several sources to be compiled */ @@ -212,7 +220,7 @@ interface AssertSyntax { */ fun Code.Source.evalsTo( value: Any?, - onError: (Throwable) -> Any? = { throw it } + onError: (Throwable) -> Any? = { throw it }, ): Assert.SingleAssert = Assert.EvalsTo(this, value, onError) /** Returns a Source object from a String. */ @@ -234,17 +242,22 @@ interface AssertSyntax { sealed class Assert { abstract class SingleAssert : Assert() + internal data class Many(val asserts: List) : Assert() internal data class EvalsTo( val source: Code.Source, val output: Any?, - val onError: (Throwable) -> Any? + val onError: (Throwable) -> Any?, ) : SingleAssert() + internal data class FailsWith(val f: (String) -> Boolean) : SingleAssert() + internal data class CompilesWith(val f: (String) -> Boolean) : SingleAssert() + internal sealed class CompilationResult : SingleAssert() { object Compiles : CompilationResult() + object Fails : CompilationResult() } diff --git a/libs/meta-test/src/test/kotlin/arrow/meta/plugin/testing/ExampleCommandLineProcessor.kt b/libs/meta-test/src/test/kotlin/arrow/meta/plugin/testing/ExampleCommandLineProcessor.kt index e04e7dea1..d244ca450 100644 --- a/libs/meta-test/src/test/kotlin/arrow/meta/plugin/testing/ExampleCommandLineProcessor.kt +++ b/libs/meta-test/src/test/kotlin/arrow/meta/plugin/testing/ExampleCommandLineProcessor.kt @@ -14,7 +14,7 @@ class ExampleCommandLineProcessor : CommandLineProcessor { "", description = "example", required = false, - allowMultipleOccurrences = false + allowMultipleOccurrences = false, ) } diff --git a/libs/meta-test/src/test/kotlin/arrow/meta/plugin/testing/ExampleTest.kt b/libs/meta-test/src/test/kotlin/arrow/meta/plugin/testing/ExampleTest.kt index 0eef89d42..07e390991 100755 --- a/libs/meta-test/src/test/kotlin/arrow/meta/plugin/testing/ExampleTest.kt +++ b/libs/meta-test/src/test/kotlin/arrow/meta/plugin/testing/ExampleTest.kt @@ -19,7 +19,7 @@ class ExampleTest { """ .source }, - assert = { compiles } + assert = { compiles }, ) ) } @@ -36,7 +36,7 @@ class ExampleTest { """ .source }, - assert = { "hello()".source.evalsTo("Hello world!") } + assert = { "hello()".source.evalsTo("Hello world!") }, ) ) } @@ -55,7 +55,7 @@ class ExampleTest { """ .source }, - assert = { "hello()".source.evalsTo("Hello world!") } + assert = { "hello()".source.evalsTo("Hello world!") }, ) ) } @@ -71,7 +71,7 @@ class ExampleTest { """ .source }, - assert = { fails } + assert = { fails }, ) ) } @@ -87,7 +87,7 @@ class ExampleTest { """ .source }, - assert = { failsWith { it.contains("Expecting a top level declaration") } } + assert = { failsWith { it.contains("Expecting a top level declaration") } }, ) ) } @@ -104,7 +104,7 @@ class ExampleTest { """ .source }, - assert = { "x".source.evalsTo("Hello world!") } + assert = { "x".source.evalsTo("Hello world!") }, ) ) } @@ -122,7 +122,7 @@ class ExampleTest { """ .source }, - assert = { "x".source.evalsTo("Hello world!") } + assert = { "x".source.evalsTo("Hello world!") }, ) ) } @@ -140,7 +140,7 @@ class ExampleTest { | | val x: String = "hello world!" | - """ + """, ), Source( filename = "UpperCase.kt", @@ -149,16 +149,16 @@ class ExampleTest { | | val y: String = "HELLO WORLD!" | - """ - ) + """, + ), ) }, assert = { allOf( Source(filename = "LowerCaseKt", text = "x").evalsTo("hello world!"), - Source(filename = "UpperCaseKt", text = "y").evalsTo("HELLO WORLD!") + Source(filename = "UpperCaseKt", text = "y").evalsTo("HELLO WORLD!"), ) - } + }, ) ) } @@ -180,10 +180,10 @@ class ExampleTest { | val y: String = "HELLO WORLD!" | """ - .source + .source, ) }, - assert = { compiles } + assert = { compiles }, ) ) } @@ -201,7 +201,7 @@ class ExampleTest { """ .source }, - assert = { compiles } + assert = { compiles }, ) ) } @@ -217,9 +217,9 @@ class ExampleTest { PluginOption( ExampleCommandLineProcessor().pluginId, ExampleCommandLineProcessor.CLI_OPTION.optionName, - "value" + "value", ) - ) + ), ) }, code = { @@ -230,7 +230,7 @@ class ExampleTest { """ .source }, - assert = { compiles } + assert = { compiles }, ) ) } @@ -252,7 +252,7 @@ class ExampleTest { failsWith { it.contains("Unsupported plugin option") && it.contains("plugin.id:key=value") } - } + }, ) ) } @@ -266,7 +266,7 @@ class ExampleTest { addCommandLineProcessors(ExampleCommandLineProcessor()), addPluginOptions( PluginOption(ExampleCommandLineProcessor().pluginId, "wrongKey", "value") - ) + ), ) }, code = { @@ -282,7 +282,7 @@ class ExampleTest { it.contains("Unsupported plugin option") && it.contains("${ExampleCommandLineProcessor().pluginId}:wrongKey=value") } - } + }, ) ) } From 73a0e65e0c7c05ae04a24c075fcd2b54387b3faa Mon Sep 17 00:00:00 2001 From: raulraja Date: Sun, 2 Feb 2025 01:20:54 +0100 Subject: [PATCH 11/12] Update Github actions to v4 --- .github/workflows/generate-alpha-tag.yaml | 10 +++++----- .github/workflows/generate-tag.yaml | 10 +++++----- .github/workflows/publish.yml | 14 +++++++------- .github/workflows/pull_request.yml | 10 +++++----- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/generate-alpha-tag.yaml b/.github/workflows/generate-alpha-tag.yaml index a2f978aff..91f1a80d4 100644 --- a/.github/workflows/generate-alpha-tag.yaml +++ b/.github/workflows/generate-alpha-tag.yaml @@ -14,12 +14,12 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' @@ -38,13 +38,13 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 token: ${{ secrets.TOKEN_GITHUB_ACTION }} - name: Set up Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' @@ -56,4 +56,4 @@ jobs: run: git push --follow-tags - name: Stop Gradle daemons - run: ./gradlew --stop \ No newline at end of file + run: ./gradlew --stop diff --git a/.github/workflows/generate-tag.yaml b/.github/workflows/generate-tag.yaml index af2d04153..c659be8d7 100644 --- a/.github/workflows/generate-tag.yaml +++ b/.github/workflows/generate-tag.yaml @@ -35,12 +35,12 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' @@ -59,13 +59,13 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 token: ${{ secrets.TOKEN_GITHUB_ACTION }} - name: Set up Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' @@ -77,4 +77,4 @@ jobs: run: git push --follow-tags - name: Stop Gradle daemons - run: ./gradlew --stop \ No newline at end of file + run: ./gradlew --stop diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a74996caa..b38fc8284 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -32,11 +32,11 @@ jobs: analysis-version: ${{ steps.get-analysis-version.outputs.analysis-version }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' @@ -53,7 +53,7 @@ jobs: echo "::set-output name=analysis-version::$(head -n 1 build/semver/version.txt)" - name: Upload reports - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: 'reports-${{ matrix.os }}' path: '**/build/reports/**' @@ -77,9 +77,9 @@ jobs: runs-on: macos-11 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' @@ -107,9 +107,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 4a564453c..cc2fb1bc6 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -17,11 +17,11 @@ jobs: jvm_target: [ '1.8', '11', '17' ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' @@ -32,7 +32,7 @@ jobs: arguments: -PjvmTargetVersion=${{ matrix.jvm_target }} build --scan --stacktrace -x apiCheck - name: Upload reports - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: 'reports-${{ matrix.os }}' path: '**/build/reports/**' @@ -42,7 +42,7 @@ jobs: timeout-minutes: 20 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -64,7 +64,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: "Create API Doc and validate, step 1" run: ./gradlew buildMetaDoc From 2a2e25cc1e966be25209ca21faf5e20137d06f57 Mon Sep 17 00:00:00 2001 From: raulraja Date: Sun, 2 Feb 2025 01:34:20 +0100 Subject: [PATCH 12/12] allow multiple artifacts uploads --- .github/workflows/publish.yml | 2 +- .github/workflows/pull_request.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b38fc8284..329d3ac50 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -55,7 +55,7 @@ jobs: - name: Upload reports uses: actions/upload-artifact@v4 with: - name: 'reports-${{ matrix.os }}' + name: 'reports-${{ matrix.os }}-${{ strategy.job-index }}' path: '**/build/reports/**' - name: Stop Gradle daemons diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index cc2fb1bc6..74f1838b0 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -34,7 +34,7 @@ jobs: - name: Upload reports uses: actions/upload-artifact@v4 with: - name: 'reports-${{ matrix.os }}' + name: 'reports-${{ matrix.os }}-${{ strategy.job-index }}' path: '**/build/reports/**' update_api: