コード例 #1
0
        protected MethodSymbol(IMethodSymbol sourceSymbol, AbstractPhaseContext context)
            : base(sourceSymbol, context)
        {
            if (sourceSymbol != null)
            {
                ContainingType = context.GetTypeSymbol(sourceSymbol.ContainingType);
                IsConstructor  = sourceSymbol.MethodKind == MethodKind.Constructor;

                ITypeSymbol returnType = sourceSymbol.ReturnType;

                if (returnType != context.GetTypeSymbol(SpecialType.System_Void).RoslynSymbol)
                {
                    ReturnType = context.GetTypeSymbol(returnType);
                }
                else if (IsConstructor)
                {
                    ReturnType = context.GetTypeSymbol(sourceSymbol.ContainingType);
                }

                if (sourceSymbol.Parameters != null)
                {
                    List <ParameterSymbol> parameterSymbols = new List <ParameterSymbol>();

                    foreach (IParameterSymbol parameterSymbol in sourceSymbol.Parameters)
                    {
                        ParameterSymbol newSymbol = (ParameterSymbol)context.GetSymbol(parameterSymbol);

                        parameterSymbols.Add(newSymbol);
                    }

                    Parameters = ImmutableArray.CreateRange <ParameterSymbol>(parameterSymbols);
                }
                else
                {
                    Parameters = ImmutableArray <ParameterSymbol> .Empty;
                }

                if (!IsGenericMethod && RoslynSymbol != RoslynSymbol.OriginalDefinition)
                {
                    TypeArguments = sourceSymbol.TypeArguments.Length > 0 ? sourceSymbol.TypeArguments.Select(context.GetTypeSymbol).ToImmutableArray() : ImmutableArray <TypeSymbol> .Empty;
                }
                else
                {
                    TypeArguments = sourceSymbol.TypeArguments.Length > 0 ? sourceSymbol.TypeArguments.Select(context.GetTypeSymbolWithoutRedirect).ToImmutableArray() : ImmutableArray <TypeSymbol> .Empty;
                }

                if (RoslynSymbol.IsOverride && RoslynSymbol.OverriddenMethod != null) // abstract methods can be overrides, but not have overriden methods
                {
                    OverridenMethod = (MethodSymbol)context.GetSymbol(RoslynSymbol.OverriddenMethod);
                }

                IsOperator = RoslynSymbol.MethodKind == MethodKind.BuiltinOperator ||
                             RoslynSymbol.MethodKind == MethodKind.UserDefinedOperator;

                if (RoslynSymbol.OriginalDefinition != RoslynSymbol)
                {
                    OriginalSymbol = context.GetSymbolNoRedirect(RoslynSymbol.OriginalDefinition);
                }
            }
        }
コード例 #2
0
        public ParameterSymbol(IParameterSymbol sourceSymbol, AbstractPhaseContext context)
            : base(sourceSymbol, context)
        {
            Type = context.GetTypeSymbol(RoslynSymbol.Type);

            if (RoslynSymbol.OriginalDefinition != RoslynSymbol)
            {
                OriginalSymbol = context.GetSymbol(RoslynSymbol.OriginalDefinition);
            }

            if (RoslynSymbol.HasExplicitDefaultValue)
            {
                if (Type.IsEnum)
                {
                    DefaultValue = (IConstantValue)Activator.CreateInstance(
                        typeof(ConstantValue <>).MakeGenericType(Type.UdonType.SystemType),
                        Enum.ToObject(Type.UdonType.SystemType, RoslynSymbol.ExplicitDefaultValue));
                }
                else
                {
                    DefaultValue = (IConstantValue)Activator.CreateInstance(
                        typeof(ConstantValue <>).MakeGenericType(Type.UdonType.SystemType),
                        RoslynSymbol.ExplicitDefaultValue);
                }
            }
        }
コード例 #3
0
ファイル: PropertySymbol.cs プロジェクト: ureishi/UdonSharp
        protected PropertySymbol(IPropertySymbol sourceSymbol, AbstractPhaseContext context)
            : base(sourceSymbol, context)
        {
            if (sourceSymbol == null)
            {
                return;
            }

            Type           = context.GetTypeSymbol(sourceSymbol.Type);
            ContainingType = context.GetTypeSymbol(sourceSymbol.ContainingType);

            Parameters = sourceSymbol.Parameters.Select(p => (ParameterSymbol)context.GetSymbol(p))
                         .ToImmutableArray();

            if (sourceSymbol.GetMethod != null)
            {
                GetMethod = (MethodSymbol)context.GetSymbol(sourceSymbol.GetMethod);
            }
            if (sourceSymbol.SetMethod != null)
            {
                SetMethod = (MethodSymbol)context.GetSymbol(sourceSymbol.SetMethod);
            }
        }
コード例 #4
0
 public MethodSymbol ConstructGenericMethod(AbstractPhaseContext context, TypeSymbol[] typeArguments)
 {
     return((MethodSymbol)context.GetSymbol(RoslynSymbol.OriginalDefinition.Construct(typeArguments.Select(e => e.RoslynSymbol).ToArray())));
 }