(function(){
    function explicitlyInjectedController(explicitlyInjectedControllerServiceA, explicitlyInjectedControllerServiceB) {
        // ...
    }
    explicitlyInjectedController.$inject = ['explicitlyInjectedControllerServiceA', 'explicitlyInjectedControllerServiceB'];

    angular.module('myModule', [])
        .run(['moduleRunService', function(moduleRunService) {
            // ...
        }])
        .config(['moduleConfigProvider', function(moduleConfigProvider) {
            // ...
        }])
        .factory('serviceId0', [function() {
            // ...
        }])
        .factory('serviceId1', ['someServiceService1', function(someServiceService1) {
            // ...
        }])
        .factory('serviceId2', ['someServiceService2a', 'someServiceService2b', function(someServiceService2a, someServiceService2b) {
            // ...
        }])
        .factory('serviceId3', function() {
            // ...
        })
        .factory('serviceId4', function(someServiceService4) {
            // ...
        })
        .factory('serviceId5', function(someServiceService5a, someServiceService5b) {
            // ...
        })
        .controller('controllerName', ['someControllerService', function(someControllerService) {
            // ...
        }])
        .directive('directiveName', ['someDirectiveService', function(someDirectiveService) {
            // ...
        }])
        .filter('filterName', ['someFilterService', function(someFilterService) {
            // ...
        }])
        .controller('explicitlyInjectedControllerName', explicitlyInjectedController)
        .component('componentName', {
            controller: ['componentControllerDependency', function(componentControllerDependency) {
                this.user = {name: 'world'};
            }]
        })
        .animation('animationName', ['someAnimationService', function(someAnimationService) {
            // ...
        }])
        .service('serviceId6', function(someServiceService6) {
            // ...
        })
        .decorator('decoratee', function(someDecorateeService) {
            // ...
        })
        .provider('providerId1', function(someProviderIdService1){
            this.$get = function alsoInjected(providerCreatedInjectableFunctinDependency1){
                // ..
            }
        })
        .config(function($provide) {
            $provide.service('serviceId7', function(someConfigServiceService7){})
            $provide.provider('providerId2', function(someProviderService2){
                this.$get = function alsoInjected(providerCreatedInjectableFunctinDependency2){
                    // ..
                }
            })
        })
    ;

    angular.module('myApp', [])
        .directive('myDirective',  function() {
            return {
                link: function linkFunction(scope, element, attrs) { // A scope is injected here, but this is not an injectable function
                    // ...
                },
                controller: function(linkControllerDependency){
                }
            };
        });

    angular.module('myApp', [])
        .config(function($controllerProvider) {
            $controllerProvider.register('controllerThroughProvider', function(controllerThroughProviderDependency){})
        })
        .config(function($filterProvider) {
            $filterProvider.register('filterThroughProvider', function(filterThroughProviderDependency){})
        })
        .config(function($compileProvider) {
            $compileProvider.directive('directiveThroughProvider', function(directiveThroughProviderDependency){})
        })
        .config(function($compileProvider) {
            $compileProvider.component('componentThroughProvider', function(componentThroughProviderDependency){})
        })
        .config(function($animateProvider) {
            $animateProvider.register('animationThroughProvider', function(animationThroughProviderDependency){})
        })
        .animation('animation', function(animationDependency){})
    ;

    // currently unsupported:
    angular.module('myApp', [])
        .factory(unknownString, function(serviceForFactoryWithUnknownName, $filterProvider, $compileProvider) {
            $filterProvider.register('myFilter', function(serviceForFilterProviderFilterInFactoryWithUnknownName){})
            $filterProvider.register('anotherUnknownString', function(serviceForFilterProviderFilterWithUnknownNameInFactoryWithUnknownName){}),
            $compileProvider.directive('myDirective', function(serviceForCompileProviderDirectiveInFactoryWithUnknownName){})
        })
    ;

    angular.module('myApp', [])
        .config(function($routeProvider) {
            $routeProvider
                .when('somePath', {
                    controller: function (routeControllerDependency) {
                    }
                });
        })
    ;

})();
