Пример #1
0
 public InjectorCallReplacer(TypeDefinition definition, string methodNameToCall, MethodDefinition methodToRemove, ActivityGetViewMethodImplementor activityGetViewMethodImplementor,
                             BaseModuleWeaver baseModuleWeaver)
 {
     _definition       = definition;
     _methodNameToCall = methodNameToCall;
     _methodToRemove   = methodToRemove;
     _activityGetViewMethodImplementor = activityGetViewMethodImplementor;
     _baseModuleWeaver      = baseModuleWeaver ?? throw new ArgumentNullException(nameof(baseModuleWeaver));
     _methodIsParameterless = !methodToRemove.HasParameters;
 }
Пример #2
0
        public void Execute()
        {
            if (_moduleDefinition.AssemblyReferences.All(x => x.Name != "Polkovnik.DroidInjector"))
            {
                Logger.Info("Skip injecting library due to reference to Polkovnik.DroidInjector not found");
                return;
            }

            _referencesProvider = new ReferencesProvider(_moduleDefinition, _baseModuleWeaver);

            var viewHarvestQuery      = new ViewHarvestQuery();
            var menuItemHarvestQuery  = new MenuItemHarvestQuery();
            var viewEventHarvestQuery = new ViewEventHarvestQuery();

            var queries      = new MemberInfoHarvestQuery[] { viewHarvestQuery, menuItemHarvestQuery, viewEventHarvestQuery };
            var newHarvester = new MemberInfoHarvester(_moduleDefinition, queries);

            newHarvester.Execute();

            foreach (var query in queries)
            {
                Logger.Debug($"QUERY: {query} harvested: {query.QueryResult.Keys.Count}");
            }

            foreach (var type in viewHarvestQuery.QueryResult)
            {
                var viewInjectionImplementor = new ViewInjectionImplementor(type.Key, type.Value, _moduleDefinition, _referencesProvider, _baseModuleWeaver);
                viewInjectionImplementor.Execute();

                var activityGetViewMethodImplementor = new ActivityGetViewMethodImplementor(type.Key, _referencesProvider);

                var injectorCallReplacer = new InjectorCallReplacer(type.Key, Consts.GeneratedMethodNames.InjectViewsGeneratedMethodName,
                                                                    _referencesProvider.ActivityInjectViewsMethodDefinition, activityGetViewMethodImplementor, _baseModuleWeaver);
                injectorCallReplacer.Execute();

                injectorCallReplacer = new InjectorCallReplacer(type.Key, Consts.GeneratedMethodNames.InjectViewsGeneratedMethodName,
                                                                _referencesProvider.InjectViewsMethodReference, activityGetViewMethodImplementor, _baseModuleWeaver);
                injectorCallReplacer.Execute();
            }

            foreach (var type in menuItemHarvestQuery.QueryResult)
            {
                var menuItemInjectionImplementor = new MenuItemInjectionImplementor(type.Key, type.Value, _moduleDefinition, _referencesProvider, _baseModuleWeaver);
                menuItemInjectionImplementor.Execute();

                var activityGetViewMethodImplementor = new ActivityGetViewMethodImplementor(type.Key, _referencesProvider);

                var injectorCallReplacer = new InjectorCallReplacer(type.Key, Consts.GeneratedMethodNames.InjectMenuItemsGeneratedMethodName,
                                                                    _referencesProvider.InjectMenuItemsMethodDefinition, activityGetViewMethodImplementor, _baseModuleWeaver);
                injectorCallReplacer.Execute();
            }

            foreach (var type in viewEventHarvestQuery.QueryResult)
            {
                var methodSubscriptionImplementor = new MethodSubscriptionImplementor(type.Key, type.Value.Cast <MethodDefinition>().ToArray(), _moduleDefinition,
                                                                                      _referencesProvider, _baseModuleWeaver);

                methodSubscriptionImplementor.Execute();

                var activityGetViewMethodImplementor = new ActivityGetViewMethodImplementor(type.Key, _referencesProvider);

                var injectorCallReplacer = new InjectorCallReplacer(type.Key, Consts.GeneratedMethodNames.BindViewEventsGeneratedMethodName,
                                                                    _referencesProvider.ActivityBindViewEventsMethodDefinition,
                                                                    activityGetViewMethodImplementor, _baseModuleWeaver);
                injectorCallReplacer.Execute();

                injectorCallReplacer = new InjectorCallReplacer(type.Key, Consts.GeneratedMethodNames.BindViewEventsGeneratedMethodName,
                                                                _referencesProvider.BindViewEventsMethodDefinition, activityGetViewMethodImplementor, _baseModuleWeaver);
                injectorCallReplacer.Execute();
            }
        }