Пример #1
0
        public bool HasRealInstantiable(IEmitter emitter)
        {
            if (HasInstantiable)
            {
                return(true);
            }

            if (StaticMethods.Any(group =>
            {
                return(group.Value.Any(method => Helpers.IsEntryPointMethod(emitter, method)));
            }))
            {
                return(true);
            }

            return(false);
        }
Пример #2
0
        public bool HasRealStatic(IEmitter emitter)
        {
            var result = ClassType == ClassType.Struct ||
                         StaticConfig.HasMembers ||
                         StaticProperties.Count > 0 ||
                         StaticCtor != null ||
                         Operators.Count > 0;

            if (result)
            {
                return(true);
            }

            if (StaticMethods.Any(group =>
            {
                foreach (var method in group.Value)
                {
                    if (Helpers.IsEntryPointMethod(emitter, method))
                    {
                        return(false);
                    }

                    if (method.Attributes.Count == 0)
                    {
                        return(true);
                    }

                    foreach (var attrSection in method.Attributes)
                    {
                        foreach (var attr in attrSection.Attributes)
                        {
                            var rr = emitter.Resolver.ResolveNode(attr.Type);
                            if (rr.Type.FullName == "H5.InitAttribute")
                            {
                                if (!attr.HasArgumentList)
                                {
                                    return(true);
                                }

                                var expr = attr.Arguments.First();

                                var argrr = emitter.Resolver.ResolveNode(expr);
                                if (argrr.ConstantValue is int)
                                {
                                    var value = (InitPosition)argrr.ConstantValue;

                                    if (value == InitPosition.Before || value == InitPosition.Top)
                                    {
                                        return(false);
                                    }
                                }

                                return(true);
                            }
                            else
                            {
                                return(true);
                            }
                        }
                    }
                }

                return(false);
            }))
            {
                return(true);
            }

            if (Type.GetConstructors().Any(c => c.Parameters.Count == 0 && emitter.GetInline(c) != null))
            {
                return(true);
            }

            return(false);
        }