コード例 #1
0
 public override object VisitNew(BoundNewEx x)
 {
     return(x.Update(
                (BoundTypeRef)Accept(x.TypeRef),
                VisitImmutableArray(x.ArgumentsInSourceOrder),
                VisitImmutableArray(x.TypeArguments)));
 }
コード例 #2
0
        public override void VisitNew(BoundNewEx x)
        {
            if (x.TypeRef.ResolvedType.IsValidType())
            {
                if (x.TypeRef.ResolvedType.IsInterfaceType())
                {
                    CannotInstantiate(x, "interface", x.TypeRef);
                }
                else if (x.TypeRef.ResolvedType.IsStatic)
                {
                    CannotInstantiate(x, "static", x.TypeRef);
                }
                else if (x.TypeRef.ResolvedType is IPhpTypeSymbol phpt && phpt.IsTrait)
                {
                    CannotInstantiate(x, "trait", x.TypeRef);
                }
            }

            base.VisitNew(x);
        }
コード例 #3
0
        public override T VisitNew(BoundNewEx x)
        {
            CheckMissusedPrimitiveType(x.TypeRef);

            var type = (TypeSymbol)x.TypeRef.Type;

            if (type.IsValidType())
            {
                if (type.IsInterfaceType())
                {
                    CannotInstantiate(x, "interface", x.TypeRef);
                }
                else if (type.IsStatic)
                {
                    CannotInstantiate(x, "static", x.TypeRef);
                }
                else if (type.IsTraitType())
                {
                    CannotInstantiate(x, "trait", x.TypeRef);
                }
                else // class:
                {
                    // cannot instantiate Closure
                    if (type == DeclaringCompilation.CoreTypes.Closure)
                    {
                        // Instantiation of '{0}' is not allowed
                        Add(x.TypeRef.PhpSyntax.Span, Devsense.PHP.Errors.Errors.ClosureInstantiated, type.Name);
                    }

                    //
                    else if (type.IsAbstract)
                    {
                        // Cannot instantiate abstract class {0}
                        CannotInstantiate(x, "abstract class", x.TypeRef);
                    }
                }
            }

            return base.VisitNew(x);
        }
コード例 #4
0
        public override void VisitNew(BoundNewEx x)
        {
            if (x.TypeRef.ResolvedType.IsValidType())
            {
                if (x.TypeRef.ResolvedType.IsInterfaceType())
                {
                    CannotInstantiate(x, "interface", x.TypeRef);
                }
                else if (x.TypeRef.ResolvedType.IsStatic)
                {
                    CannotInstantiate(x, "static", x.TypeRef);
                }
                else if (x.TypeRef.ResolvedType.IsTraitType())
                {
                    CannotInstantiate(x, "trait", x.TypeRef);
                }
                else // class:
                {
                    // cannot instantiate Closure
                    if (x.TypeRef.ResolvedType == DeclaringCompilation.CoreTypes.Closure)
                    {
                        // Instantiation of '{0}' is not allowed
                        Add(x.TypeRef.TypeRef.Span, Devsense.PHP.Errors.Errors.ClosureInstantiated, x.TypeRef.ResolvedType.Name);
                    }

                    //
                    else if (x.TypeRef.ResolvedType.IsAbstract)
                    {
                        // Cannot instantiate abstract class {0}
                        CannotInstantiate(x, "abstract class", x.TypeRef);
                    }
                }
            }

            base.VisitNew(x);
        }