public override void Initialize(Config config) { Type[] types = null; try { types = CodeGeneratorUtil.LoadTypesFromCodeGeneratorAssemblies(); } catch (Exception ex) { _configException = ex; } if (_configException == null) { var defaultEnabledDataProviderNames = initPhase <ICodeGeneratorDataProvider>(types, out _availableDataProviderTypes, out _availableDataProviderNames); var defaultEnabledGeneratorNames = initPhase <ICodeGenerator>(types, out _availableGeneratorTypes, out _availableGeneratorNames); var defaultEnabledPostProcessorNames = initPhase <ICodeGenFilePostProcessor>(types, out _availablePostProcessorTypes, out _availablePostProcessorNames); _codeGeneratorConfig = new CodeGeneratorConfig(config, defaultEnabledDataProviderNames, defaultEnabledGeneratorNames, defaultEnabledPostProcessorNames); _contexts = new List <string>(_codeGeneratorConfig.contexts); _contextList = new UnityEditorInternal.ReorderableList(_contexts, typeof(string), true, true, true, true); _contextList.drawHeaderCallback = rect => EditorGUI.LabelField(rect, "Contexts"); _contextList.drawElementCallback = (rect, index, isActive, isFocused) => { rect.width -= 20; _contexts[index] = EditorGUI.TextField(rect, _contexts[index]); }; _contextList.onAddCallback = list => list.list.Add("New Context"); _contextList.onCanRemoveCallback = list => list.count > 1; _contextList.onChangedCallback = list => GUI.changed = true; } }
public override void Run(string[] args) { if (assertPreferences(args)) { printTypes(CodeGeneratorUtil.LoadTypesFromPlugins(loadPreferences(args))); } }
public override void Run(string[] args) { if (assertPreferences()) { var preferences = loadPreferences(); var config = new CodeGeneratorConfig(); config.Configure(preferences); fabl.Debug(config.ToString()); Type[] types = null; Dictionary <string, string> configurables = null; try { types = CodeGeneratorUtil.LoadTypesFromPlugins(preferences); configurables = CodeGeneratorUtil.GetConfigurables( CodeGeneratorUtil.GetUsed <ICodeGeneratorDataProvider>(types, config.dataProviders), CodeGeneratorUtil.GetUsed <ICodeGenerator>(types, config.codeGenerators), CodeGeneratorUtil.GetUsed <ICodeGenFilePostProcessor>(types, config.postProcessors) ); } catch (Exception ex) { printKeyStatus(config.defaultProperties.Keys.ToArray(), preferences); throw ex; } var requiredKeys = config.defaultProperties.Merge(configurables).Keys.ToArray(); printKeyStatus(requiredKeys, preferences); printPluginStatus(types, config); } }
public CodeGeneratorData[] GetData() { if (_types == null) { _types = CodeGeneratorUtil.LoadTypesFromAssemblies(); } var dataFromComponents = _types .Where(type => type.ImplementsInterface <IComponent>()) .Where(type => !type.IsAbstract) .Select(type => createDataForComponent(type)); var dataFromNonComponents = _types .Where(type => !type.ImplementsInterface <IComponent>()) .Where(type => !type.IsGenericType) .Where(type => hasContexts(type)) .SelectMany(type => createDataForNonComponent(type)); var generatedComponentsLookup = dataFromNonComponents.ToLookup(data => data.GetFullTypeName()); return(dataFromComponents .Where(data => !generatedComponentsLookup.Contains(data.GetFullTypeName())) .Concat(dataFromNonComponents) .ToArray()); }
DesperateDevs.CodeGeneration.CodeGenerator.CodeGenerator CodeGeneratorFromPreferences(Preferences preferences) { ICodeGenerationPlugin[] instances = LoadFromPlugins(preferences); CodeGeneratorConfig andConfigure = preferences.CreateAndConfigure <CodeGeneratorConfig>(); IPreProcessor[] enabledInstancesOf1 = CodeGeneratorUtil.GetEnabledInstancesOf <IPreProcessor>(instances, andConfigure.preProcessors); IDataProvider[] enabledInstancesOf2 = CodeGeneratorUtil.GetEnabledInstancesOf <IDataProvider>(instances, andConfigure.dataProviders); ICodeGenerator[] enabledInstancesOf3 = CodeGeneratorUtil.GetEnabledInstancesOf <ICodeGenerator>(instances, andConfigure.codeGenerators); IPostProcessor[] enabledInstancesOf4 = CodeGeneratorUtil.GetEnabledInstancesOf <IPostProcessor>(instances, andConfigure.postProcessors); configure((ICodeGenerationPlugin[])enabledInstancesOf1, preferences); configure((ICodeGenerationPlugin[])enabledInstancesOf2, preferences); configure((ICodeGenerationPlugin[])enabledInstancesOf3, preferences); configure((ICodeGenerationPlugin[])enabledInstancesOf4, preferences); bool trackHooks = true; if (preferences.HasKey("Jenny.TrackHooks")) { trackHooks = preferences["Jenny.TrackHooks"] == "true"; } return(new DesperateDevs.CodeGeneration.CodeGenerator.CodeGenerator(enabledInstancesOf1, enabledInstancesOf2, enabledInstancesOf3, enabledInstancesOf4, trackHooks)); }
public CodeGeneratorData[] GetData() { if (_types == null) { _types = CodeGeneratorUtil.LoadTypesFromAssemblies(); } var entityIndexData = _types .Where(type => !type.IsAbstract) .Where(type => type.ImplementsInterface <IComponent>()) .ToDictionary( type => type, type => type.GetPublicMemberInfos()) .Where(kv => kv.Value.Any(info => info.attributes.Any(attr => attr.attribute is AbstractEntityIndexAttribute))) .Select(kv => createEntityIndexData(kv.Key, kv.Value)); var customEntityIndexData = _types .Where(type => !type.IsAbstract) .Where(type => Attribute.IsDefined(type, typeof(CustomEntityIndexAttribute))) .Select(type => createCustomEntityIndexData(type)); return(entityIndexData .Concat(customEntityIndexData) .ToArray()); }
public override void Run(string[] args) { if (assertPreferences(args)) { var preferences = loadPreferences(args); var config = new CodeGeneratorConfig(); config.Configure(preferences); var cliConfig = new CLIConfig(); cliConfig.Configure(preferences); forceAddKeys(config.defaultProperties, preferences); forceAddKeys(cliConfig.defaultProperties, preferences); Type[] types = null; try { types = CodeGeneratorUtil.LoadTypesFromPlugins(preferences); getConfigurables(types, config); } catch (Exception ex) { throw ex; } var askedRemoveKeys = new HashSet <string>(); var askedAddKeys = new HashSet <string>(); while (fix(askedRemoveKeys, askedAddKeys, types, config, cliConfig, preferences)) { } } }
static string[] initPhase <T>(Assembly assembly, out string[] availableTypes, out string[] availableNames) where T : ICodeGeneratorInterface { var instances = CodeGeneratorUtil .GetOrderedTypes <T>(assembly) .Where(type => !type.IsAbstract) .Select(type => (T)Activator.CreateInstance(type)); if (typeof(T) == typeof(ICodeGenFilePostProcessor)) { instances = instances .OrderBy(instance => ((ICodeGenFilePostProcessor)instance).priority); } else { instances = instances .OrderBy(instance => instance.name); } availableTypes = instances .Select(instance => instance.GetType().FullName) .ToArray(); availableNames = instances .Select(instance => instance.name) .ToArray(); return(instances .Where(instance => instance.isEnabledByDefault) .Select(instance => instance.GetType().FullName) .ToArray()); }
protected override void run() { var config = new CodeGeneratorConfig(); config.Configure(_preferences); var cliConfig = new CLIConfig(); cliConfig.Configure(_preferences); forceAddKeys(config.defaultProperties, _preferences); forceAddKeys(cliConfig.defaultProperties, _preferences); Type[] types = null; try { types = CodeGeneratorUtil.LoadTypesFromPlugins(_preferences); // A test to check if all types can be resolved and instantiated. CodeGeneratorUtil.GetEnabledInstancesOf <ICodeGeneratorDataProvider>(types, config.dataProviders); CodeGeneratorUtil.GetEnabledInstancesOf <ICodeGenerator>(types, config.codeGenerators); CodeGeneratorUtil.GetEnabledInstancesOf <ICodeGenFilePostProcessor>(types, config.postProcessors); } catch (Exception ex) { throw ex; } var askedRemoveKeys = new HashSet <string>(); var askedAddKeys = new HashSet <string>(); while (fix(askedRemoveKeys, askedAddKeys, types, config, cliConfig, _preferences)) { } }
public override void Run(string[] args) { if (assertProperties()) { var properties = loadProperties(); var config = new CodeGeneratorConfig(); config.Configure(properties); Type[] types = null; Dictionary <string, string> configurables = null; try { types = CodeGeneratorUtil.LoadTypesFromPlugins(properties); configurables = CodeGeneratorUtil.GetConfigurables( CodeGeneratorUtil.GetUsed <ICodeGeneratorDataProvider>(types, config.dataProviders), CodeGeneratorUtil.GetUsed <ICodeGenerator>(types, config.codeGenerators), CodeGeneratorUtil.GetUsed <ICodeGenFilePostProcessor>(types, config.postProcessors) ); } catch (Exception ex) { fixKeys(null, config.defaultProperties, properties); throw ex; } fixKeys(configurables, config.defaultProperties, properties); fixConfigurableKeys(configurables, properties); fixPlugins(types, config, properties); } }
static void fixConfigurableKeys(Dictionary <string, string> configurables, Properties properties) { foreach (var kv in CodeGeneratorUtil.GetMissingConfigurables(configurables, properties)) { Helper.AddKey("Add missing key", kv.Key, kv.Value, properties); } }
static void createNewConfig(bool force) { var currentDir = Directory.GetCurrentDirectory(); var path = currentDir + Path.DirectorySeparatorChar + Preferences.configPath; if (!File.Exists(path) || force) { var types = AppDomain.CurrentDomain.GetAllTypes(); var defaultConfig = new CodeGeneratorConfig( new Config(string.Empty), CodeGeneratorUtil.GetOrderedTypeNames <ICodeGeneratorDataProvider>(types).ToArray(), CodeGeneratorUtil.GetOrderedTypeNames <ICodeGenerator>(types).ToArray(), CodeGeneratorUtil.GetOrderedTypeNames <ICodeGenFilePostProcessor>(types).ToArray() ); var config = defaultConfig.ToString(); File.WriteAllText(path, config); _logger.Info("Created " + path); _logger.Debug(config); editConfig(); } else { _logger.Warn(path + " already exists!"); _logger.Info("Use entitas new -f to overwrite the exiting file."); _logger.Info("Use entitas edit to open the exiting file."); } }
protected override void run() { var config = new CodeGeneratorConfig(); config.Configure(_preferences); var cliConfig = new CLIConfig(); cliConfig.Configure(_preferences); fabl.Debug(_preferences.ToString()); Type[] types = null; Dictionary <string, string> defaultProperties = null; try { types = CodeGeneratorUtil.LoadTypesFromPlugins(_preferences); defaultProperties = CodeGeneratorUtil.GetDefaultProperties(types, config); } catch (Exception ex) { printKeyStatus(config.defaultProperties.Keys.ToArray(), cliConfig, _preferences); throw ex; } var requiredKeys = config.defaultProperties .Merge(cliConfig.defaultProperties) .Merge(defaultProperties).Keys.ToArray(); printKeyStatus(requiredKeys, cliConfig, _preferences); printPluginStatus(types, config); printCollisions(config); }
public static void Main(string[] args) { // Configure code generator in Entitas.properties file CodeGeneratorUtil .CodeGeneratorFromConfig("../../Entitas.properties") .Generate(); }
static void printConfigurableKeyStatus(Dictionary <string, string> configurables, Properties properties) { foreach (var kv in CodeGeneratorUtil.GetMissingConfigurables(configurables, properties)) { fabl.Warn("Missing key: " + kv.Key); } }
Dictionary <string, string> GetConfigurables() { return(CodeGeneratorUtil.GetConfigurables( CodeGeneratorUtil.GetUsed <ICodeGeneratorDataProvider>(mTypes, mCodeGeneratorConfig.DataProviders), CodeGeneratorUtil.GetUsed <ICodeGenerator>(mTypes, mCodeGeneratorConfig.CodeGenerators), CodeGeneratorUtil.GetUsed <ICodeGenFilePostProcessor>(mTypes, mCodeGeneratorConfig.PostProcessors) )); }
static Dictionary <string, string> getConfigurables(Type[] types, CodeGeneratorConfig config) { return(CodeGeneratorUtil.GetConfigurables( CodeGeneratorUtil.GetUsed <ICodeGeneratorDataProvider>(types, config.dataProviders), CodeGeneratorUtil.GetUsed <ICodeGenerator>(types, config.codeGenerators), CodeGeneratorUtil.GetUsed <ICodeGenFilePostProcessor>(types, config.postProcessors) )); }
protected override void run() { var codeGenerator = CodeGeneratorUtil.CodeGeneratorFromPreferences(_preferences); codeGenerator.OnProgress += (title, info, progress) => { var p = (int)(progress * 100); fabl.Debug(string.Format("{0}: {1} ({2}%)", title, info, p)); }; codeGenerator.DryRun(); }
void drawConfigurables() { var defaultProperties = CodeGeneratorUtil.GetDefaultProperties(_types, _codeGeneratorConfig); _preferences.AddProperties(defaultProperties, false); foreach (var kv in defaultProperties.OrderBy(kv => kv.Key)) { _preferences[kv.Key] = EditorGUILayout.TextField(kv.Key.ShortTypeName().ToSpacedCamelCase(), _preferences[kv.Key]); } }
protected override void run() { fabl.Debug("Entitas Code Generator version " + EntitasResources.GetVersion()); new Status().Run(_rawArgs); fabl.Debug("Dry Run"); CodeGeneratorUtil .CodeGeneratorFromPreferences(_preferences) .DryRun(); fabl.Info("👨🔬 No problems detected. Happy coding :)"); }
public ActionResult MockAddReturnOrder() { _returnOrderService.Save(new SaveReturnOrderInput() { BillNum = CodeGeneratorUtil.GetInt32UniqueCode().ToString(), GmtCreate = DateTime.Now, Status = (int)ReturnOrderStatus.待审核, GmtModified = DateTime.Now, }); return(Json(Result.Success("创建成功"))); }
static void scanDlls() { if (File.Exists(Preferences.configPath)) { printTypes(CodeGeneratorUtil.LoadTypesFromCodeGeneratorAssemblies()); printTypes(CodeGeneratorUtil.LoadTypesFromAssemblies()); } else { printNoConfig(); } }
public override void Run(string[] args) { if (assertPreferences(args)) { var codeGenerator = CodeGeneratorUtil.CodeGeneratorFromPreferences(loadPreferences(args)); codeGenerator.OnProgress += (title, info, progress) => { var p = (int)(progress * 100); fabl.Debug(string.Format("{0}: {1} ({2}%)", title, info, p)); }; codeGenerator.DryRun(); } }
protected override void run() { var types = CodeGeneratorUtil.LoadTypesFromPlugins(_preferences); var orderedTypes = types .OrderBy(type => type.Assembly.GetName().Name) .ThenBy(type => type.FullName); foreach (var type in orderedTypes) { fabl.Info(type.Assembly.GetName().Name + ": " + type); } }
public static void AddValue(string question, string value, string[] values, Action <string[]> updateAction, Properties properties) { fabl.Info(question + ": '" + value + "' ? (y / n)"); if (GetUserDecision()) { var valueList = values.ToList(); valueList.Add(value); updateAction(CodeGeneratorUtil.GetOrderedNames(valueList.ToArray())); Preferences.SaveProperties(properties); fabl.Info("Added: " + value); } }
static void setTypesAndNames <T>(Type[] types, out string[] availableTypes, out string[] availableNames) where T : ICodeGeneratorInterface { IEnumerable <T> instances = CodeGeneratorUtil.GetOrderedInstancesOf <T>(types); availableTypes = instances .Select(instance => instance.GetType().ToCompilableString()) .ToArray(); availableNames = instances .Select(instance => instance.name) .ToArray(); }
public override void Run(string[] args) { if (base.assertProperties()) { CodeGenerator codeGenerator = CodeGeneratorUtil.CodeGeneratorFromPreferences(Preferences.sharedInstance); codeGenerator.OnProgress += delegate(string title, string info, float progress) { int num = (int)(progress * 100f); fabl.Debug(string.Format("{0}: {1} ({2}%)", title, info, num)); }; codeGenerator.DryRun(); } }
static void generate() { if (File.Exists(Preferences.configPath)) { CodeGeneratorUtil .CodeGeneratorFromConfig(Preferences.configPath) .Generate(); } else { printNoConfig(); } }
public override void Execute(string[] args) { Log.I("QFramework Code Generator version " + EntitasResources.GetVersion()); if (AssertProperties()) { new Status().Execute(args); Log.I("Dry Run"); CodeGeneratorUtil .CodeGeneratorFromProperties() .DryRun(); } }
public override void Run(string[] args) { fabl.Debug("Entitas Code Generator version " + EntitasResources.GetVersion()); if (assertPreferences(args)) { new Status().Run(args); fabl.Debug("Dry Run"); CodeGeneratorUtil .CodeGeneratorFromPreferences(loadPreferences(args)) .DryRun(); fabl.Info("👨🔬 No problems detected. Happy coding :)"); } }