public Entry(ActionDefinitionAsset asset) { @delegate = asset.delegateType; variable = asset.variableType; destroyEntitiesEntityCommandBufferSystem = asset.destroyEntitiesUsing; fieldOperations = asset.useFieldOperations; aggregator = asset.aggregator; }
private static MethodDTG MethodDtg(SerializableMethod methodModel) { return(new MethodDTG() { Name = methodModel.Name, MetadataName = methodModel.MetadataName, SerReturnType = LoadType(methodModel.SerReturnType), SerParameters = methodModel.SerParameters?.Select(ParameterDtg).ToList() }); }
public void Analyze(AssemblyDefinition assemblyDefinition, ModuleDefinition moduleDefinition, TypeDefinition typeDefinition, MethodDefinition methodDefinition) { var method = new SerializableMethod(methodDefinition.DeclaringType.AssemblyQualifiedName(), methodDefinition.Name); var returnType = methodDefinition.ReturnType.Resolve(); if (!data.TryGetValue(returnType.AssemblyQualifiedName(), out List <SerializableMethod> methods)) { methods = new List <SerializableMethod>(); data[returnType.AssemblyQualifiedName()] = methods; } methods.Add(method); }
public void Analyze(AssemblyDefinition assemblyDefinition, ModuleDefinition moduleDefinition, TypeDefinition typeDefinition, MethodDefinition methodDefinition) { var attr = methodDefinition.GetAttribute <ActionAttribute>(); if (attr.ConstructorArguments.Count < 2) { return; } TypeDefinition actionTypeDef = ((TypeReference)attr.ConstructorArguments[0].Value).Resolve(); string identifier = (string)attr.ConstructorArguments[1].Value; TypeDefinition configTypeDef = attr.ConstructorArguments.Count >= 3 ? ((TypeReference)attr.ConstructorArguments[2].Value).Resolve() : null; string displayName = attr.ConstructorArguments.Count >= 4 ? (string)attr.ConstructorArguments[3].Value : null; string subIdentifier = attr.ConstructorArguments.Count == 5 ? (string)attr.ConstructorArguments[4].Value : string.Empty; if (string.IsNullOrEmpty(subIdentifier)) { subIdentifier = ActionSchema.DefaultSubIdentifier; } var actionTypeQualifiedName = actionTypeDef.FullName + ", " + actionTypeDef.Module.Assembly.FullName; var configTypeQualifiedName = configTypeDef == null ? null : configTypeDef.FullName + ", " + configTypeDef.Module.Assembly.FullName; var configType = new SerializableType(configTypeQualifiedName); var method = new SerializableMethod(typeDefinition.AssemblyQualifiedName(), methodDefinition.Name); var actionMethod = new ActionSchema.Action.Variant { config = configType, call = method }; if (!actions.TryGetValue(identifier, out ActionSchema.Action action)) { action = new ActionSchema.Action { identifier = identifier, displayName = displayName, action = new SerializableType(actionTypeQualifiedName) }; actions[identifier] = action; } Debug.Log(method.Value); if (action.variants.ContainsKey(subIdentifier)) { Debug.LogError($"Duplicate Sub-Identifiers found for identifier '{identifier}': '{subIdentifier}'"); } action.variants[subIdentifier] = actionMethod; }
public async Task Fiber_With_Wait_Is_Serializable() { // arrange IFiberLoop fiber = new Fiber(new FrameFactory(new WaitFactory())); IMethod method = new SerializableMethod(); // act var value = 42; fiber.Call(method.CodeAsync, value); // assert AssertSerializable(ref fiber); var next = await fiber.PollAsync(); Assert.AreEqual(Need.Done, next.Need); }
public async Task Fiber_With_Wait_Is_Serializable() { // arrange using (var container = Build()) { var fiber = container.Resolve <IFiberLoop <C> >(); IMethod method = new SerializableMethod(); // act var value = 42; fiber.Call(method.CodeAsync, value); // assert AssertSerializable(container, ref fiber); var next = await fiber.PollAsync(Context, Token); Assert.AreEqual(Need.Done, next.Need); } }
public void Analyze(AssemblyDefinition assemblyDefinition, ModuleDefinition moduleDefinition, TypeDefinition typeDefinition, MethodDefinition methodDefinition) { var attr = methodDefinition.GetAttribute <FieldOperationAttribute>(); if (attr.ConstructorArguments.Count != 5) { return; } string identifier = (string)attr.ConstructorArguments[0].Value; TypeDefinition configTypeDef = ((TypeReference)attr.ConstructorArguments[1].Value).Resolve(); string displayName = (string)attr.ConstructorArguments[2].Value; string subIdentifier = (string)attr.ConstructorArguments[3].Value; TypeDefinition outputTypeRef = ((TypeReference)attr.ConstructorArguments[4].Value).Resolve(); var outputTypeQualifiedName = outputTypeRef.AssemblyQualifiedName(); var configTypeQualifiedName = configTypeDef?.AssemblyQualifiedName(); var configType = new SerializableType(configTypeQualifiedName); var outputType = new SerializableType(outputTypeQualifiedName); var method = new SerializableMethod(typeDefinition.AssemblyQualifiedName(), methodDefinition.Name); var opCall = new FieldOperationSchema.Operation.Variant { displayName = displayName, configType = configType, method = method, outputType = outputType }; if (!operations.TryGetValue(identifier, out FieldOperationSchema.Operation op)) { op = new FieldOperationSchema.Operation { identifier = identifier }; operations[identifier] = op; } if (op.callVariants.ContainsKey(subIdentifier)) { Debug.LogError($"Duplicate Sub-Identifiers found for identifier '{identifier}': '{subIdentifier}'"); } op.callVariants[subIdentifier] = opCall; }
public override VisualElement CreatePropertyGUI(SerializedProperty property) { var methods = GetMethods(fieldInfo, property); if (methods == null) { methods = new List <SerializableMethod>() { default } } ; var current = new SerializableMethod(property.FindPropertyRelative("container.assemblyQualifiedName").stringValue, property.FindPropertyRelative("name").stringValue); var field = new PopupField <SerializableMethod>(property.displayName, methods, current, (method) => method.IsCreated ? $"{method.container.FullName}::{method.name}" : NO_TYPE, method => string.IsNullOrWhiteSpace(method.container.AssemblyQualifiedName) ? NO_TYPE : method.container.AssemblyQualifiedName.Substring(0, method.container.AssemblyQualifiedName.IndexOf(',')).Replace('.', '/') + $"::{method.name}"); field.RegisterValueChangedCallback(evt => { property.FindPropertyRelative("container.assemblyQualifiedName").stringValue = evt.newValue.container.AssemblyQualifiedName; property.FindPropertyRelative("name").stringValue = evt.newValue.name; property.serializedObject.ApplyModifiedProperties(); }); return(field); }