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); } } }
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); } } }