{"action":"created","comment":{"url":"https://api.github.com/repos/symfony/symfony/pulls/comments/92930259","pull_request_review_id":13454122,"id":92930259,"diff_hunk":"@@ -184,7 +184,15 @@ private function parseDefinition(\\DOMElement $service, $file)\n                 } elseif ($childService = $factory->getAttribute('service')) {\n                     $class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);\n                 } else {\n-                    $class = $factory->getAttribute('class');\n+                    $class = $factory->getAttribute('class') ?: $definition->getClass();\n+                }\n+\n+                if (null === $class) {","path":"src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php","position":8,"original_position":8,"commit_id":"949399f97bbd20504e77b26128a3f60e4fb3fdc2","original_commit_id":"9b9c11337925e11bc0a465bcab4b1d4ddb0a8990","user":{"login":"ogizanagi","id":2211145,"avatar_url":"https://avatars.githubusercontent.com/u/2211145?v=3","gravatar_id":"","url":"https://api.github.com/users/ogizanagi","html_url":"https://github.com/ogizanagi","followers_url":"https://api.github.com/users/ogizanagi/followers","following_url":"https://api.github.com/users/ogizanagi/following{/other_user}","gists_url":"https://api.github.com/users/ogizanagi/gists{/gist_id}","starred_url":"https://api.github.com/users/ogizanagi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ogizanagi/subscriptions","organizations_url":"https://api.github.com/users/ogizanagi/orgs","repos_url":"https://api.github.com/users/ogizanagi/repos","events_url":"https://api.github.com/users/ogizanagi/events{/privacy}","received_events_url":"https://api.github.com/users/ogizanagi/received_events","type":"User","site_admin":false},"body":"Right now, I don't see the benefits, nor how this method would be helpful for this PR. BTW, you still miss information about the place from where was loaded the service.\r\nDX indeed always increase complexity, as it requires writing specific code and sometimes prevent doing wrong things ahead. But I think we're going to survive this extra `if` 😅 \r\n\r\nHowever, if you think you have a point about the `Definition::resolve($id)` suggestion, I think it worth a PR in order to show us the benefits. :)","created_at":"2016-12-17T22:35:26Z","updated_at":"2016-12-17T22:35:26Z","html_url":"https://github.com/symfony/symfony/pull/20943#discussion_r92930259","pull_request_url":"https://api.github.com/repos/symfony/symfony/pulls/20943","_links":{"self":{"href":"https://api.github.com/repos/symfony/symfony/pulls/comments/92930259"},"html":{"href":"https://github.com/symfony/symfony/pull/20943#discussion_r92930259"},"pull_request":{"href":"https://api.github.com/repos/symfony/symfony/pulls/20943"}}},"pull_request":{"url":"https://api.github.com/repos/symfony/symfony/pulls/20943","id":98205309,"html_url":"https://github.com/symfony/symfony/pull/20943","diff_url":"https://github.com/symfony/symfony/pull/20943.diff","patch_url":"https://github.com/symfony/symfony/pull/20943.patch","issue_url":"https://api.github.com/repos/symfony/symfony/issues/20943","number":20943,"state":"open","locked":false,"title":"[DependencyInjection] Use current class as default class for factory declarations","user":{"login":"ogizanagi","id":2211145,"avatar_url":"https://avatars.githubusercontent.com/u/2211145?v=3","gravatar_id":"","url":"https://api.github.com/users/ogizanagi","html_url":"https://github.com/ogizanagi","followers_url":"https://api.github.com/users/ogizanagi/followers","following_url":"https://api.github.com/users/ogizanagi/following{/other_user}","gists_url":"https://api.github.com/users/ogizanagi/gists{/gist_id}","starred_url":"https://api.github.com/users/ogizanagi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ogizanagi/subscriptions","organizations_url":"https://api.github.com/users/ogizanagi/orgs","repos_url":"https://api.github.com/users/ogizanagi/repos","events_url":"https://api.github.com/users/ogizanagi/events{/privacy}","received_events_url":"https://api.github.com/users/ogizanagi/received_events","type":"User","site_admin":false},"body":"| Q             | A\r\n| ------------- | ---\r\n| Branch?       | master\r\n| Bug fix?      | no\r\n| New feature?  | yes\r\n| BC breaks?    | no\r\n| Deprecations? | no\r\n| Tests pass?   | yes\r\n| Fixed tickets | #20888\r\n| License       | MIT\r\n| Doc PR        | Should update the notice about the \"class\" attribute on http://symfony.com/doc/current/service_container/factories.html\r\n\r\n#20888 makes sense to me, considering the following sample extracted from the documentation:\r\n\r\n```xml\r\n<service id=\"app.newsletter_manager\" class=\"AppBundle\\Email\\NewsletterManager\">\r\n    <factory class=\"AppBundle\\Email\\NewsletterManager\" method=\"create\" />\r\n</service>\r\n```\r\n\r\nThe class is used as a factory to create itself, thus it can be simplified to:\r\n\r\n```xml\r\n<service id=\"app.newsletter_manager\" class=\"AppBundle\\Email\\NewsletterManager\">\r\n    <factory method=\"create\" />\r\n</service>\r\n```\r\n\r\nHowever, it's not possible to provide the same feature for the YAML format, because it doesn't allow to distinct a function from a method call if the class is not provided explicitly under the `factory` key, whereas the xml format use a dedicated `function` attribute.\r\nWould this inconsistency between those two formats be a no-go for this feature?\r\n\r\nThe doc notices:\r\n> When using a factory to create services, the value chosen for the class option has no effect on the resulting service. The actual class name only depends on the object that is returned by the factory. However, the configured class name may be used by compiler passes and therefore should be set to a sensible value.\r\n\r\nIf this is merged, it should be updated wisely in order to not confuse everyone with this feature when using the xml format.\r\n\r\nUPDATE: The yaml format is now supported when the class is not provided in the factory array:\r\n\r\n```yml\r\nservices:\r\n    my_factory:\r\n        class: Bar\\Baz\r\n        factory: [~, 'create']\r\n```","created_at":"2016-12-15T18:30:36Z","updated_at":"2016-12-17T22:35:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"63f85a892e371a42a62fadd3026503957f374180","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/symfony/symfony/pulls/20943/commits","review_comments_url":"https://api.github.com/repos/symfony/symfony/pulls/20943/comments","review_comment_url":"https://api.github.com/repos/symfony/symfony/pulls/comments{/number}","comments_url":"https://api.github.com/repos/symfony/symfony/issues/20943/comments","statuses_url":"https://api.github.com/repos/symfony/symfony/statuses/949399f97bbd20504e77b26128a3f60e4fb3fdc2","head":{"label":"ogizanagi:feature/di/factory_class_from_def_class","ref":"feature/di/factory_class_from_def_class","sha":"949399f97bbd20504e77b26128a3f60e4fb3fdc2","user":{"login":"ogizanagi","id":2211145,"avatar_url":"https://avatars.githubusercontent.com/u/2211145?v=3","gravatar_id":"","url":"https://api.github.com/users/ogizanagi","html_url":"https://github.com/ogizanagi","followers_url":"https://api.github.com/users/ogizanagi/followers","following_url":"https://api.github.com/users/ogizanagi/following{/other_user}","gists_url":"https://api.github.com/users/ogizanagi/gists{/gist_id}","starred_url":"https://api.github.com/users/ogizanagi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ogizanagi/subscriptions","organizations_url":"https://api.github.com/users/ogizanagi/orgs","repos_url":"https://api.github.com/users/ogizanagi/repos","events_url":"https://api.github.com/users/ogizanagi/events{/privacy}","received_events_url":"https://api.github.com/users/ogizanagi/received_events","type":"User","site_admin":false},"repo":{"id":13498527,"name":"symfony","full_name":"ogizanagi/symfony","owner":{"login":"ogizanagi","id":2211145,"avatar_url":"https://avatars.githubusercontent.com/u/2211145?v=3","gravatar_id":"","url":"https://api.github.com/users/ogizanagi","html_url":"https://github.com/ogizanagi","followers_url":"https://api.github.com/users/ogizanagi/followers","following_url":"https://api.github.com/users/ogizanagi/following{/other_user}","gists_url":"https://api.github.com/users/ogizanagi/gists{/gist_id}","starred_url":"https://api.github.com/users/ogizanagi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ogizanagi/subscriptions","organizations_url":"https://api.github.com/users/ogizanagi/orgs","repos_url":"https://api.github.com/users/ogizanagi/repos","events_url":"https://api.github.com/users/ogizanagi/events{/privacy}","received_events_url":"https://api.github.com/users/ogizanagi/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ogizanagi/symfony","description":"The Symfony PHP framework","fork":true,"url":"https://api.github.com/repos/ogizanagi/symfony","forks_url":"https://api.github.com/repos/ogizanagi/symfony/forks","keys_url":"https://api.github.com/repos/ogizanagi/symfony/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ogizanagi/symfony/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ogizanagi/symfony/teams","hooks_url":"https://api.github.com/repos/ogizanagi/symfony/hooks","issue_events_url":"https://api.github.com/repos/ogizanagi/symfony/issues/events{/number}","events_url":"https://api.github.com/repos/ogizanagi/symfony/events","assignees_url":"https://api.github.com/repos/ogizanagi/symfony/assignees{/user}","branches_url":"https://api.github.com/repos/ogizanagi/symfony/branches{/branch}","tags_url":"https://api.github.com/repos/ogizanagi/symfony/tags","blobs_url":"https://api.github.com/repos/ogizanagi/symfony/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ogizanagi/symfony/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ogizanagi/symfony/git/refs{/sha}","trees_url":"https://api.github.com/repos/ogizanagi/symfony/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ogizanagi/symfony/statuses/{sha}","languages_url":"https://api.github.com/repos/ogizanagi/symfony/languages","stargazers_url":"https://api.github.com/repos/ogizanagi/symfony/stargazers","contributors_url":"https://api.github.com/repos/ogizanagi/symfony/contributors","subscribers_url":"https://api.github.com/repos/ogizanagi/symfony/subscribers","subscription_url":"https://api.github.com/repos/ogizanagi/symfony/subscription","commits_url":"https://api.github.com/repos/ogizanagi/symfony/commits{/sha}","git_commits_url":"https://api.github.com/repos/ogizanagi/symfony/git/commits{/sha}","comments_url":"https://api.github.com/repos/ogizanagi/symfony/comments{/number}","issue_comment_url":"https://api.github.com/repos/ogizanagi/symfony/issues/comments{/number}","contents_url":"https://api.github.com/repos/ogizanagi/symfony/contents/{+path}","compare_url":"https://api.github.com/repos/ogizanagi/symfony/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ogizanagi/symfony/merges","archive_url":"https://api.github.com/repos/ogizanagi/symfony/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ogizanagi/symfony/downloads","issues_url":"https://api.github.com/repos/ogizanagi/symfony/issues{/number}","pulls_url":"https://api.github.com/repos/ogizanagi/symfony/pulls{/number}","milestones_url":"https://api.github.com/repos/ogizanagi/symfony/milestones{/number}","notifications_url":"https://api.github.com/repos/ogizanagi/symfony/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ogizanagi/symfony/labels{/name}","releases_url":"https://api.github.com/repos/ogizanagi/symfony/releases{/id}","deployments_url":"https://api.github.com/repos/ogizanagi/symfony/deployments","created_at":"2013-10-11T12:37:26Z","updated_at":"2016-07-12T20:36:06Z","pushed_at":"2016-12-17T21:53:38Z","git_url":"git://github.com/ogizanagi/symfony.git","ssh_url":"git@github.com:ogizanagi/symfony.git","clone_url":"https://github.com/ogizanagi/symfony.git","svn_url":"https://github.com/ogizanagi/symfony","homepage":"symfony.com","size":78253,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":false,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"symfony:master","ref":"master","sha":"d6141930e84cf23a3bc48417086dac72ce077ef0","user":{"login":"symfony","id":143937,"avatar_url":"https://avatars.githubusercontent.com/u/143937?v=3","gravatar_id":"","url":"https://api.github.com/users/symfony","html_url":"https://github.com/symfony","followers_url":"https://api.github.com/users/symfony/followers","following_url":"https://api.github.com/users/symfony/following{/other_user}","gists_url":"https://api.github.com/users/symfony/gists{/gist_id}","starred_url":"https://api.github.com/users/symfony/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/symfony/subscriptions","organizations_url":"https://api.github.com/users/symfony/orgs","repos_url":"https://api.github.com/users/symfony/repos","events_url":"https://api.github.com/users/symfony/events{/privacy}","received_events_url":"https://api.github.com/users/symfony/received_events","type":"Organization","site_admin":false},"repo":{"id":458058,"name":"symfony","full_name":"symfony/symfony","owner":{"login":"symfony","id":143937,"avatar_url":"https://avatars.githubusercontent.com/u/143937?v=3","gravatar_id":"","url":"https://api.github.com/users/symfony","html_url":"https://github.com/symfony","followers_url":"https://api.github.com/users/symfony/followers","following_url":"https://api.github.com/users/symfony/following{/other_user}","gists_url":"https://api.github.com/users/symfony/gists{/gist_id}","starred_url":"https://api.github.com/users/symfony/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/symfony/subscriptions","organizations_url":"https://api.github.com/users/symfony/orgs","repos_url":"https://api.github.com/users/symfony/repos","events_url":"https://api.github.com/users/symfony/events{/privacy}","received_events_url":"https://api.github.com/users/symfony/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/symfony/symfony","description":"The Symfony PHP framework","fork":false,"url":"https://api.github.com/repos/symfony/symfony","forks_url":"https://api.github.com/repos/symfony/symfony/forks","keys_url":"https://api.github.com/repos/symfony/symfony/keys{/key_id}","collaborators_url":"https://api.github.com/repos/symfony/symfony/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/symfony/symfony/teams","hooks_url":"https://api.github.com/repos/symfony/symfony/hooks","issue_events_url":"https://api.github.com/repos/symfony/symfony/issues/events{/number}","events_url":"https://api.github.com/repos/symfony/symfony/events","assignees_url":"https://api.github.com/repos/symfony/symfony/assignees{/user}","branches_url":"https://api.github.com/repos/symfony/symfony/branches{/branch}","tags_url":"https://api.github.com/repos/symfony/symfony/tags","blobs_url":"https://api.github.com/repos/symfony/symfony/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/symfony/symfony/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/symfony/symfony/git/refs{/sha}","trees_url":"https://api.github.com/repos/symfony/symfony/git/trees{/sha}","statuses_url":"https://api.github.com/repos/symfony/symfony/statuses/{sha}","languages_url":"https://api.github.com/repos/symfony/symfony/languages","stargazers_url":"https://api.github.com/repos/symfony/symfony/stargazers","contributors_url":"https://api.github.com/repos/symfony/symfony/contributors","subscribers_url":"https://api.github.com/repos/symfony/symfony/subscribers","subscription_url":"https://api.github.com/repos/symfony/symfony/subscription","commits_url":"https://api.github.com/repos/symfony/symfony/commits{/sha}","git_commits_url":"https://api.github.com/repos/symfony/symfony/git/commits{/sha}","comments_url":"https://api.github.com/repos/symfony/symfony/comments{/number}","issue_comment_url":"https://api.github.com/repos/symfony/symfony/issues/comments{/number}","contents_url":"https://api.github.com/repos/symfony/symfony/contents/{+path}","compare_url":"https://api.github.com/repos/symfony/symfony/compare/{base}...{head}","merges_url":"https://api.github.com/repos/symfony/symfony/merges","archive_url":"https://api.github.com/repos/symfony/symfony/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/symfony/symfony/downloads","issues_url":"https://api.github.com/repos/symfony/symfony/issues{/number}","pulls_url":"https://api.github.com/repos/symfony/symfony/pulls{/number}","milestones_url":"https://api.github.com/repos/symfony/symfony/milestones{/number}","notifications_url":"https://api.github.com/repos/symfony/symfony/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/symfony/symfony/labels{/name}","releases_url":"https://api.github.com/repos/symfony/symfony/releases{/id}","deployments_url":"https://api.github.com/repos/symfony/symfony/deployments","created_at":"2010-01-04T14:21:21Z","updated_at":"2016-12-17T20:30:20Z","pushed_at":"2016-12-17T21:57:53Z","git_url":"git://github.com/symfony/symfony.git","ssh_url":"git@github.com:symfony/symfony.git","clone_url":"https://github.com/symfony/symfony.git","svn_url":"https://github.com/symfony/symfony","homepage":"symfony.com","size":81444,"stargazers_count":13474,"watchers_count":13474,"language":"PHP","has_issues":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":5230,"mirror_url":null,"open_issues_count":853,"forks":5230,"open_issues":853,"watchers":13474,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/symfony/symfony/pulls/20943"},"html":{"href":"https://github.com/symfony/symfony/pull/20943"},"issue":{"href":"https://api.github.com/repos/symfony/symfony/issues/20943"},"comments":{"href":"https://api.github.com/repos/symfony/symfony/issues/20943/comments"},"review_comments":{"href":"https://api.github.com/repos/symfony/symfony/pulls/20943/comments"},"review_comment":{"href":"https://api.github.com/repos/symfony/symfony/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/symfony/symfony/pulls/20943/commits"},"statuses":{"href":"https://api.github.com/repos/symfony/symfony/statuses/949399f97bbd20504e77b26128a3f60e4fb3fdc2"}}}}
{"actor":{"display_login":"ogizanagi"}}