public override void VisitOutputDeclarationSyntax(OutputDeclarationSyntax syntax) => AssignTypeWithCaching(syntax, () => { var primitiveType = LanguageConstants.TryGetDeclarationType(syntax.Type.TypeName); if (primitiveType == null) { return(new ErrorTypeSymbol(DiagnosticBuilder.ForPosition(syntax.Type).InvalidOutputType())); } return(primitiveType); });
public TypeSymbol GetDeclaredType() { // assume "any" type when the parameter has parse errors (either missing or was skipped) var declaredType = this.ParameterType == null ? LanguageConstants.Any : LanguageConstants.TryGetDeclarationType(this.ParameterType.TypeName); if (declaredType == null) { return(ErrorType.Create(DiagnosticBuilder.ForPosition(this.Type).InvalidParameterType())); } return(declaredType); }
public override void VisitOutputDeclarationSyntax(OutputDeclarationSyntax syntax) => AssignTypeWithDiagnostics(syntax, diagnostics => { var primitiveType = LanguageConstants.TryGetDeclarationType(syntax.Type.TypeName); if (primitiveType == null) { return(new ErrorTypeSymbol(DiagnosticBuilder.ForPosition(syntax.Type).InvalidOutputType())); } var currentDiagnostics = GetOutputDeclarationDiagnostics(primitiveType, syntax); diagnostics.AddRange(currentDiagnostics); return(primitiveType); });
public override void VisitOutputDeclarationSyntax(OutputDeclarationSyntax syntax) => AssignTypeWithDiagnostics(syntax, diagnostics => { // assume "any" type if the output type has parse errors (either missing or skipped) var primitiveType = syntax.OutputType == null ? LanguageConstants.Any : LanguageConstants.TryGetDeclarationType(syntax.OutputType.TypeName); if (primitiveType == null) { return(new ErrorTypeSymbol(DiagnosticBuilder.ForPosition(syntax.Type).InvalidOutputType())); } var currentDiagnostics = GetOutputDeclarationDiagnostics(primitiveType, syntax); diagnostics.AddRange(currentDiagnostics); return(primitiveType); });
public override void VisitParameterDeclarationSyntax(ParameterDeclarationSyntax syntax) => AssignTypeWithDiagnostics(syntax, diagnostics => { diagnostics.AddRange(this.ValidateIdentifierAccess(syntax)); // assume "any" type when the parameter has parse errors (either missing or was skipped) var declaredType = syntax.ParameterType == null ? LanguageConstants.Any : LanguageConstants.TryGetDeclarationType(syntax.ParameterType.TypeName); if (declaredType == null) { return(new ErrorTypeSymbol(DiagnosticBuilder.ForPosition(syntax.Type).InvalidParameterType())); } var assignedType = declaredType; if (object.ReferenceEquals(assignedType, LanguageConstants.String)) { var allowedItemTypes = SyntaxHelper.TryGetAllowedItems(syntax)? .Select(item => typeManager.GetTypeInfo(item)); if (allowedItemTypes != null && allowedItemTypes.All(itemType => itemType is StringLiteralType)) { assignedType = UnionType.Create(allowedItemTypes); } } switch (syntax.Modifier) { case ParameterDefaultValueSyntax defaultValueSyntax: diagnostics.AddRange(ValidateDefaultValue(defaultValueSyntax, assignedType)); break; case ObjectSyntax modifierSyntax: var modifierType = LanguageConstants.CreateParameterModifierType(declaredType, assignedType); // we don't need to actually use the narrowed type; just need to use this to collect assignment diagnostics TypeValidator.NarrowTypeAndCollectDiagnostics(typeManager, modifierSyntax, modifierType, diagnostics); break; } return(assignedType); });
public override void VisitParameterDeclarationSyntax(ParameterDeclarationSyntax syntax) => AssignTypeWithCaching(syntax, () => { var primitiveType = LanguageConstants.TryGetDeclarationType(syntax.Type.TypeName); if (primitiveType == null) { return(new ErrorTypeSymbol(DiagnosticBuilder.ForPosition(syntax.Type).InvalidParameterType())); } if (!object.ReferenceEquals(primitiveType, LanguageConstants.String)) { return(primitiveType); } var allowedItemTypes = SyntaxHelper.TryGetAllowedItems(syntax)? .Select(item => VisitAndReturnType(item)); if (allowedItemTypes == null || !allowedItemTypes.All(itemType => itemType is StringLiteralType)) { return(primitiveType); } return(UnionType.Create(allowedItemTypes)); });
public static TypeSymbol?TryGetPrimitiveType(ParameterDeclarationSyntax parameterDeclarationSyntax) => LanguageConstants.TryGetDeclarationType(parameterDeclarationSyntax.ParameterType?.TypeName);
public TypeSymbol?TryGetPrimitiveType() => LanguageConstants.TryGetDeclarationType(this.DeclaringParameter.Type.TypeName);