private DeclaredTypeAssignment? GetTypeAssignmentWithoutCycleCheck()

in src/Bicep.Core/TypeSystem/DeclaredTypeManager.cs [87:194]


        private DeclaredTypeAssignment? GetTypeAssignmentWithoutCycleCheck(SyntaxBase syntax)
        {
            RuntimeHelpers.EnsureSufficientExecutionStack();

            if (syntax is TypeSyntax)
            {
                return TryGetTypeAssignmentFromTypeSyntax(syntax);
            }

            switch (syntax)
            {
                case ExtensionDeclarationSyntax extension:
                    return GetExtensionType(extension);

                case ExtensionConfigAssignmentSyntax extConfigAssignment:
                    return GetExtensionConfigAssignmentType(extConfigAssignment);

                case MetadataDeclarationSyntax metadata:
                    return new DeclaredTypeAssignment(this.typeManager.GetTypeInfo(metadata.Value), metadata);

                case ParameterDeclarationSyntax parameter:
                    return GetParameterType(parameter);

                case ParameterAssignmentSyntax parameterAssignment:
                    return GetParameterAssignmentType(parameterAssignment);

                case TypeDeclarationSyntax typeDeclaration:
                    return GetTypeType(typeDeclaration);

                case ResourceDeclarationSyntax resource:
                    return GetResourceType(resource);

                case ModuleDeclarationSyntax module:
                    return GetModuleType(module);

                case TestDeclarationSyntax test:
                    return GetTestType(test);

                case VariableAccessSyntax variableAccess:
                    return GetVariableAccessType(variableAccess);

                case OutputDeclarationSyntax output:
                    return GetOutputType(output);

                case AssertDeclarationSyntax assert:
                    return new DeclaredTypeAssignment(TypeFactory.CreateBooleanType(), assert);

                case TargetScopeSyntax targetScope:
                    var supportedScopes = TargetScopeSyntax.GetDeclaredType(features);

                    return new DeclaredTypeAssignment(
                        supportedScopes,
                        targetScope, DeclaredTypeFlags.Constant);

                case IfConditionSyntax ifCondition:
                    return GetIfConditionType(ifCondition);

                case ForSyntax @for:
                    return GetForSyntaxType(@for);

                case AccessExpressionSyntax accessExpression:
                    return GetAccessExpressionType(accessExpression);

                case ResourceAccessSyntax resourceAccess:
                    return GetResourceAccessType(resourceAccess);

                case LocalVariableSyntax localVariable:
                    return new DeclaredTypeAssignment(this.typeManager.GetTypeInfo(localVariable), localVariable);

                case FunctionCallSyntax functionCall:
                    return GetFunctionType(functionCall);

                case InstanceFunctionCallSyntax instanceFunctionCall:
                    return GetFunctionType(instanceFunctionCall);

                case ArraySyntax array:
                    return GetArrayType(array);

                case ArrayItemSyntax arrayItem:
                    return GetArrayItemType(arrayItem);

                case ObjectSyntax @object:
                    return GetObjectType(@object);

                case ObjectPropertySyntax objectProperty:
                    return GetObjectPropertyType(objectProperty);

                case StringSyntax @string:
                    return GetStringType(@string);

                case FunctionArgumentSyntax functionArgument:
                    return GetFunctionArgumentType(functionArgument);

                case NonNullAssertionSyntax nonNullAssertion:
                    return GetNonNullType(nonNullAssertion);

                case TypedLocalVariableSyntax typedLocalVariable:
                    return GetTypedLocalVariableType(typedLocalVariable);

                case TypedLambdaSyntax typedLambda:
                    return GetTypedLambdaType(typedLambda);

                case VariableDeclarationSyntax variableDeclaration:
                    return GetVariableTypeIfDefined(variableDeclaration);
            }

            return null;
        }