{"action":"created","issue":{"url":"https://api.github.com/repos/scala/scala/issues/4607","labels_url":"https://api.github.com/repos/scala/scala/issues/4607/labels{/name}","comments_url":"https://api.github.com/repos/scala/scala/issues/4607/comments","events_url":"https://api.github.com/repos/scala/scala/issues/4607/events","html_url":"https://github.com/scala/scala/pull/4607","id":93378958,"number":4607,"title":"Accessibility checks for methods with an InvokeDynamic instruction","user":{"login":"lrytz","id":119636,"avatar_url":"https://avatars.githubusercontent.com/u/119636?v=3","gravatar_id":"","url":"https://api.github.com/users/lrytz","html_url":"https://github.com/lrytz","followers_url":"https://api.github.com/users/lrytz/followers","following_url":"https://api.github.com/users/lrytz/following{/other_user}","gists_url":"https://api.github.com/users/lrytz/gists{/gist_id}","starred_url":"https://api.github.com/users/lrytz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lrytz/subscriptions","organizations_url":"https://api.github.com/users/lrytz/orgs","repos_url":"https://api.github.com/users/lrytz/repos","events_url":"https://api.github.com/users/lrytz/events{/privacy}","received_events_url":"https://api.github.com/users/lrytz/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/scala/scala/milestones/39","html_url":"https://github.com/scala/scala/milestones/2.12.0-M2","labels_url":"https://api.github.com/repos/scala/scala/milestones/39/labels","id":639715,"number":39,"title":"2.12.0-M2","description":"  - [ ] inline methods that have an IndyLambda allocation (#4607)\r\n  - [ ] add a warning when combining `-optimize` with GenBCode (#4598 --> #4602)\r\n  - [ ] stabilize community build (find subset for indylambda work)\r\n  - [ ] enable the new optimizer for building the library and compiler (#4602)\r\n  - [X] go through [issues marked as blocker](https://issues.scala-lang.org/issues/?jql=project%20%3D%20SI%20AND%20status%20%3D%20Open%20AND%20priority%20%3D%20Blocker%20AND%20fixVersion%20%3D%202.12.0-M2)\r\n  - [X] decide what parts of SI-9373 and SI-9374 we should fix (#4599, #4603)\r\n  - [X] put JFunction in library under scala.runtime (SAM target for LMF calls emitted by indylambda) (#4597)\r\n  - [X] minimal nullness analysis for optimizer\r\n  - [X] compile on java 8 (keep testing java6 backend)\r\n  - [X] build modules for 2.12 on Java 8 (only scala-swing needed bump for java 8)\r\n  - [X] closure inlining (#4552 -- to merge forward)\r\n  - [X] enable delambdafy, indylambda & genbcode by default (#4580)\r\n","creator":{"login":"adriaanm","id":91083,"avatar_url":"https://avatars.githubusercontent.com/u/91083?v=3","gravatar_id":"","url":"https://api.github.com/users/adriaanm","html_url":"https://github.com/adriaanm","followers_url":"https://api.github.com/users/adriaanm/followers","following_url":"https://api.github.com/users/adriaanm/following{/other_user}","gists_url":"https://api.github.com/users/adriaanm/gists{/gist_id}","starred_url":"https://api.github.com/users/adriaanm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adriaanm/subscriptions","organizations_url":"https://api.github.com/users/adriaanm/orgs","repos_url":"https://api.github.com/users/adriaanm/repos","events_url":"https://api.github.com/users/adriaanm/events{/privacy}","received_events_url":"https://api.github.com/users/adriaanm/received_events","type":"User","site_admin":false},"open_issues":4,"closed_issues":33,"state":"open","created_at":"2014-04-24T21:42:13Z","updated_at":"2015-07-07T12:16:05Z","due_on":"2015-07-07T22:00:00Z","closed_at":null},"comments":1,"created_at":"2015-07-06T21:15:16Z","updated_at":"2015-07-07T12:51:47Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/scala/scala/pulls/4607","html_url":"https://github.com/scala/scala/pull/4607","diff_url":"https://github.com/scala/scala/pull/4607.diff","patch_url":"https://github.com/scala/scala/pull/4607.patch"},"body":"Implements the necessary tests to check if a method with an\r\nInvokeDynamic instruction can be inlined into a destination class.\r\n\r\nOnly InvokeDynamic instructions with LambdaMetaFactory as bootstrap\r\nmethods can be inlined. The accessibility checks cannot be implemented\r\ngenerically, because it depends on what the bootstrap method is doing.\r\nIn particular, the bootstrap method receives a Lookup object as\r\nargument which can be used to access private methods of the class\r\nwhere the InvokeDynamic method is located.\r\n\r\nA comment in the inliner explains the details."},"comment":{"url":"https://api.github.com/repos/scala/scala/issues/comments/119194505","html_url":"https://github.com/scala/scala/pull/4607#issuecomment-119194505","issue_url":"https://api.github.com/repos/scala/scala/issues/4607","id":119194505,"user":{"login":"lrytz","id":119636,"avatar_url":"https://avatars.githubusercontent.com/u/119636?v=3","gravatar_id":"","url":"https://api.github.com/users/lrytz","html_url":"https://github.com/lrytz","followers_url":"https://api.github.com/users/lrytz/followers","following_url":"https://api.github.com/users/lrytz/following{/other_user}","gists_url":"https://api.github.com/users/lrytz/gists{/gist_id}","starred_url":"https://api.github.com/users/lrytz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lrytz/subscriptions","organizations_url":"https://api.github.com/users/lrytz/orgs","repos_url":"https://api.github.com/users/lrytz/repos","events_url":"https://api.github.com/users/lrytz/events{/privacy}","received_events_url":"https://api.github.com/users/lrytz/received_events","type":"User","site_admin":false},"created_at":"2015-07-07T12:51:47Z","updated_at":"2015-07-07T12:51:47Z","body":"Fixed a number of things:\r\n  - rebased on top of #4602, so we can [revert some partest filters](https://github.com/scala/scala/commit/e9c742e1d27c41ee8646ea20dfb59efbc3d94ef3#diff-f38403c4df9819d1fd49062815b9d46f) that were introduced there\r\n  - made sure that closure invocations are re-written to the body methods in a consistent order, to ensure bytecode stability ([first commit](https://github.com/scala/scala/commit/4e9be26c1d0ea4818b54c1f882a2972f439b6e39))\r\n  - re-factored `isClosureInstantiation` into an extractor, introduced some classes to clean up the code ([third commit](https://github.com/scala/scala/commit/6e273f7cb6a0f6ff12d899676d30aff5d83b3bb1))\r\n  - added a test for inlining of `invokedynamic` instructions across classes\r\n  - left the second commit mostly as-is, to simplify reviewing"}}