Beispiel #1
0
        public void OnItemSelected(object selectedValue)
        {
            // TODO: Move dialogs to view
            if (selectedValue is MethodSpecifier methodSpecifier)
            {
                AddNode <CallMethodNode>(methodSpecifier, methodSpecifier.GenericArguments.Select(genArg => new GenericType(genArg.Name)).Cast <BaseType>().ToList());
            }
            else if (selectedValue is VariableSpecifier variableSpecifier)
            {
                // Open variable get / set for the property
                // Determine whether the getters / setters are public via GetAccessors
                // and the return type of the accessor methods

                if (EditorCommands.OpenVariableGetSet.CanExecute(variableSpecifier))
                {
                    EditorCommands.OpenVariableGetSet.Execute(variableSpecifier);
                }
            }
            else if (selectedValue is MakeDelegateTypeInfo makeDelegateTypeInfo)
            {
                var methods = App.ReflectionProvider.GetMethods(
                    new Reflection.ReflectionProviderMethodQuery()
                    .WithType(makeDelegateTypeInfo.Type)
                    .WithVisibleFrom(makeDelegateTypeInfo.FromType));

                SelectMethodDialog selectMethodDialog = new SelectMethodDialog()
                {
                    Methods = methods,
                };

                if (selectMethodDialog.ShowDialog() == true)
                {
                    // MakeDelegateNode(Method method, MethodSpecifier methodSpecifier)

                    AddNode <MakeDelegateNode>(selectMethodDialog.SelectedMethod);
                }
            }
            else if (selectedValue is TypeSpecifier t)
            {
                if (t == TypeSpecifier.FromType <ForLoopNode>())
                {
                    AddNode <ForLoopNode>();
                }
                else if (t == TypeSpecifier.FromType <IfElseNode>())
                {
                    AddNode <IfElseNode>();
                }
                else if (t == TypeSpecifier.FromType <ConstructorNode>())
                {
                    SelectTypeDialog selectTypeDialog = new SelectTypeDialog();
                    if (selectTypeDialog.ShowDialog() == true)
                    {
                        TypeSpecifier selectedType = selectTypeDialog.SelectedType;

                        if (selectedType.Equals(null))
                        {
                            throw new Exception($"Type {selectTypeDialog.SelectedType} was not found using reflection.");
                        }

                        // Get all public constructors for the type
                        IEnumerable <ConstructorSpecifier> constructors =
                            App.ReflectionProvider.GetConstructors(selectedType);

                        if (constructors?.Any() == true)
                        {
                            // Just choose the first constructor we find
                            ConstructorSpecifier constructorSpecifier = constructors.ElementAt(0);

                            // ConstructorNode(Method method, ConstructorSpecifier specifier)

                            AddNode <ConstructorNode>(constructorSpecifier);
                        }
                    }
                }
                else if (t == TypeSpecifier.FromType <TypeOfNode>())
                {
                    // TypeOfNode(Method method)
                    AddNode <TypeOfNode>();
                }
                else if (t == TypeSpecifier.FromType <ExplicitCastNode>())
                {
                    // ExplicitCastNode(Method method)
                    AddNode <ExplicitCastNode>();
                }
                else if (t == TypeSpecifier.FromType <ReturnNode>())
                {
                    AddNode <ReturnNode>();
                }
                else if (t == TypeSpecifier.FromType <MakeArrayNode>())
                {
                    // MakeArrayNode(Method method)
                    AddNode <MakeArrayNode>();
                }
                else if (t == TypeSpecifier.FromType <ThrowNode>())
                {
                    // ThrowNode(Method method)
                    AddNode <ThrowNode>();
                }
                else if (t == TypeSpecifier.FromType <TernaryNode>())
                {
                    // TernaryNode(NodeGraph graph)
                    AddNode <TernaryNode>();
                }
                else if (t == TypeSpecifier.FromType <LiteralNode>())
                {
                    SelectTypeDialog selectTypeDialog = new SelectTypeDialog();
                    if (selectTypeDialog.ShowDialog() == true)
                    {
                        TypeSpecifier selectedType = selectTypeDialog.SelectedType;

                        if (selectedType.Equals(null))
                        {
                            throw new Exception($"Type {selectTypeDialog.SelectedType} was not found using reflection.");
                        }

                        // LiteralNode(Method method, TypeSpecifier literalType)
                        AddNode <LiteralNode>(selectedType);
                    }
                }
                else if (t == TypeSpecifier.FromType <TypeNode>())
                {
                    SelectTypeDialog selectTypeDialog = new SelectTypeDialog();
                    if (selectTypeDialog.ShowDialog() == true)
                    {
                        TypeSpecifier selectedType = selectTypeDialog.SelectedType;

                        if (selectedType.Equals(null))
                        {
                            throw new Exception($"Type {selectTypeDialog.SelectedType} was not found using reflection.");
                        }

                        // LiteralNode(Method method, TypeSpecifier literalType)
                        AddNode <TypeNode>(selectedType);
                    }
                }
                else if (t == TypeSpecifier.FromType <MakeArrayTypeNode>())
                {
                    AddNode <MakeArrayTypeNode>();
                }
                else if (t == TypeSpecifier.FromType <AwaitNode>())
                {
                    AddNode <AwaitNode>();
                }
                else if (t == TypeSpecifier.FromType <DefaultNode>())
                {
                    AddNode <DefaultNode>();
                }
                else
                {
                    // Build a type node
                    AddNode <TypeNode>(t);
                }
            }
        }
Beispiel #2
0
        public void OnItemSelected(object selectedValue)
        {
            // TODO: Move dialogs to view
            if (selectedValue is MethodSpecifier methodSpecifier)
            {
                AddNode <CallMethodNode>(methodSpecifier, methodSpecifier.GenericArguments.Select(genArg => new GenericType(genArg.Name)).Cast <BaseType>().ToList());
            }
            else if (selectedValue is VariableSpecifier variableSpecifier)
            {
                // Open variable get / set for the property
                // Determine whether the getters / setters are public via GetAccessors
                // and the return type of the accessor methods

                var message = new AddGerOrSetNodeMessage(variableSpecifier, this.SuggestionPin);
                if (EditorCommands.OpenVariableGetSet.CanExecute(message))
                {
                    EditorCommands.OpenVariableGetSet.Execute(message);
                }
            }
            else if (selectedValue is MakeDelegateTypeInfo makeDelegateTypeInfo)
            {
                var targetType = makeDelegateTypeInfo.TargetType;

                if (targetType is null)
                {
                    if (PromptForType(out targetType) == false)
                    {
                        return;
                    }
                }

                var methods = App.ReflectionProvider.GetMethods(
                    new Reflection.ReflectionProviderMethodQuery()
                    .WithType(targetType)
                    .WithVisibleFrom(makeDelegateTypeInfo.FromType));

                SelectMethodDialog selectMethodDialog = new SelectMethodDialog()
                {
                    Methods = methods,
                };

                if (selectMethodDialog.ShowDialog() == true)
                {
                    // MakeDelegateNode(Method method, MethodSpecifier methodSpecifier)

                    AddNode <MakeDelegateNode>(selectMethodDialog.SelectedMethod, makeDelegateTypeInfo.DelegateType);
                }
            }
            else if (selectedValue is TypeSpecifier t)
            {
                if (t == TypeSpecifier.FromType <ForLoopNode>())
                {
                    AddNode <ForLoopNode>();
                }
                else if (t == TypeSpecifier.FromType <ForeachLoopNode>())
                {
                    AddNode <ForeachLoopNode>();
                }
                else if (t == TypeSpecifier.FromType <SequenceNode>())
                {
                    AddNode <SequenceNode>();
                }
                else if (t == TypeSpecifier.FromType <SelectValueNode>())
                {
                    AddNode <SelectValueNode>();
                }
                else if (t == TypeSpecifier.FromType <DelayNode>())
                {
                    AddNode <DelayNode>();
                }
                else if (t == TypeSpecifier.FromType <AttributesNode>())
                {
                    AddNode <AttributesNode>();
                }
                else if (t == TypeSpecifier.FromType <RerouteNode>())
                {
                    AddNode <RerouteNode>();
                }
                else if (t == TypeSpecifier.FromType <IfElseNode>())
                {
                    AddNode <IfElseNode>();
                }
                else if (t == TypeSpecifier.FromType <ConstructorNode>())
                {
                    if (PromptForType(out var selectedType))
                    {
                        // Get all public constructors for the type
                        IEnumerable <ConstructorSpecifier> constructors =
                            App.ReflectionProvider.GetConstructors(selectedType);

                        if (constructors?.Any() == true)
                        {
                            // Just choose the first constructor we find
                            ConstructorSpecifier constructorSpecifier = constructors.ElementAt(0);

                            // ConstructorNode(Method method, ConstructorSpecifier specifier)

                            AddNode <ConstructorNode>(constructorSpecifier);
                        }
                    }
                }
                else if (t == TypeSpecifier.FromType <TypeOfNode>())
                {
                    // TypeOfNode(Method method)
                    AddNode <TypeOfNode>();
                }
                else if (t == TypeSpecifier.FromType <ExplicitCastNode>())
                {
                    // ExplicitCastNode(Method method)
                    AddNode <ExplicitCastNode>();
                }
                else if (t == TypeSpecifier.FromType <ReturnNode>())
                {
                    AddNode <ReturnNode>();
                }
                else if (t == TypeSpecifier.FromType <MakeArrayNode>())
                {
                    // MakeArrayNode(Method method)
                    AddNode <MakeArrayNode>();
                }
                else if (t == TypeSpecifier.FromType <ThrowNode>())
                {
                    // ThrowNode(Method method)
                    AddNode <ThrowNode>();
                }
                else if (t == TypeSpecifier.FromType <TernaryNode>())
                {
                    // TernaryNode(NodeGraph graph)
                    AddNode <TernaryNode>();
                }
                else if (t == TypeSpecifier.FromType <LiteralNode>())
                {
                    if (PromptForType(out var selectedType))
                    {
                        // LiteralNode(Method method, TypeSpecifier literalType)
                        AddNode <LiteralNode>(selectedType);
                    }
                }
                else if (t == TypeSpecifier.FromType <TypeNode>())
                {
                    if (PromptForType(out var selectedType))
                    {
                        // LiteralNode(Method method, TypeSpecifier literalType)
                        AddNode <TypeNode>(selectedType);
                    }
                }
                else if (t == TypeSpecifier.FromType <MakeArrayTypeNode>())
                {
                    AddNode <MakeArrayTypeNode>();
                }
                else if (t == TypeSpecifier.FromType <AwaitNode>())
                {
                    AddNode <AwaitNode>();
                }
                else if (t == TypeSpecifier.FromType <DefaultNode>())
                {
                    AddNode <DefaultNode>();
                }
                else
                {
                    // Build a type node
                    AddNode <TypeNode>(t);
                }
            }
        }