{"action":"created","issue":{"url":"https://api.github.com/repos/ceylon/ceylon/issues/6099","repository_url":"https://api.github.com/repos/ceylon/ceylon","labels_url":"https://api.github.com/repos/ceylon/ceylon/issues/6099/labels{/name}","comments_url":"https://api.github.com/repos/ceylon/ceylon/issues/6099/comments","events_url":"https://api.github.com/repos/ceylon/ceylon/issues/6099/events","html_url":"https://github.com/ceylon/ceylon/issues/6099","id":139956330,"number":6099,"title":"Possibly relax syntax/typechecker errors for interop and class/function casing","user":{"login":"FroMage","id":179265,"avatar_url":"https://avatars.githubusercontent.com/u/179265?v=3","gravatar_id":"","url":"https://api.github.com/users/FroMage","html_url":"https://github.com/FroMage","followers_url":"https://api.github.com/users/FroMage/followers","following_url":"https://api.github.com/users/FroMage/following{/other_user}","gists_url":"https://api.github.com/users/FroMage/gists{/gist_id}","starred_url":"https://api.github.com/users/FroMage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FroMage/subscriptions","organizations_url":"https://api.github.com/users/FroMage/orgs","repos_url":"https://api.github.com/users/FroMage/repos","events_url":"https://api.github.com/users/FroMage/events{/privacy}","received_events_url":"https://api.github.com/users/FroMage/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/ceylon/ceylon/labels/c-interop","name":"c-interop","color":"02d7e1"},{"url":"https://api.github.com/repos/ceylon/ceylon/labels/m-compiler-java","name":"m-compiler-java","color":"00aa00"},{"url":"https://api.github.com/repos/ceylon/ceylon/labels/m-typechecker","name":"m-typechecker","color":"00aa00"},{"url":"https://api.github.com/repos/ceylon/ceylon/labels/os-android","name":"os-android","color":"207de5"},{"url":"https://api.github.com/repos/ceylon/ceylon/labels/s-confirmed","name":"s-confirmed","color":"eb6420"},{"url":"https://api.github.com/repos/ceylon/ceylon/labels/t-discussion","name":"t-discussion","color":"006b75"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/ceylon/ceylon/milestones/15","html_url":"https://github.com/ceylon/ceylon/milestones/1.2.3","labels_url":"https://api.github.com/repos/ceylon/ceylon/milestones/15/labels","id":1590811,"number":15,"title":"1.2.3","description":"","creator":{"login":"FroMage","id":179265,"avatar_url":"https://avatars.githubusercontent.com/u/179265?v=3","gravatar_id":"","url":"https://api.github.com/users/FroMage","html_url":"https://github.com/FroMage","followers_url":"https://api.github.com/users/FroMage/followers","following_url":"https://api.github.com/users/FroMage/following{/other_user}","gists_url":"https://api.github.com/users/FroMage/gists{/gist_id}","starred_url":"https://api.github.com/users/FroMage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FroMage/subscriptions","organizations_url":"https://api.github.com/users/FroMage/orgs","repos_url":"https://api.github.com/users/FroMage/repos","events_url":"https://api.github.com/users/FroMage/events{/privacy}","received_events_url":"https://api.github.com/users/FroMage/received_events","type":"User","site_admin":false},"open_issues":158,"closed_issues":69,"state":"open","created_at":"2016-02-18T14:05:01Z","updated_at":"2016-04-19T23:19:53Z","due_on":null,"closed_at":null},"comments":12,"created_at":"2016-03-10T17:19:40Z","updated_at":"2016-04-20T08:34:44Z","closed_at":null,"body":"Android is full of member classes that require me to write `R.\\Iid.bar` where `R.id` is a class, and constants (typical of Java this time) like `Snackbar.\\iLENGTH`. \r\n\r\nThe upper/lowercase restriction is great for Ceylon code, but for interop, we should investigate if it's possible to relax this so that `R.id.bar` and `Snackbar.LENGTH` Just Work™.\r\n\r\nThat requires either support from the parser and typechecker, possibly to turn one type of AST into another, or to mark specially one of the AST type so we can recognize it as the other (`Tree.QualifiedTypeExpression` and `Tree.QualifiedMemberExpression`), which will impact the backends and IDEs.\r\n\r\nOr another strategy might be that the model loader changes the casing when loading them if there is no namespace conflict.\r\n\r\nThis issue is mostly about investigating the possible solutions, impact and user expectations. We'll see if we want to implement this afterwards."},"comment":{"url":"https://api.github.com/repos/ceylon/ceylon/issues/comments/212327345","html_url":"https://github.com/ceylon/ceylon/issues/6099#issuecomment-212327345","issue_url":"https://api.github.com/repos/ceylon/ceylon/issues/6099","id":212327345,"user":{"login":"bjansen","id":281528,"avatar_url":"https://avatars.githubusercontent.com/u/281528?v=3","gravatar_id":"","url":"https://api.github.com/users/bjansen","html_url":"https://github.com/bjansen","followers_url":"https://api.github.com/users/bjansen/followers","following_url":"https://api.github.com/users/bjansen/following{/other_user}","gists_url":"https://api.github.com/users/bjansen/gists{/gist_id}","starred_url":"https://api.github.com/users/bjansen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bjansen/subscriptions","organizations_url":"https://api.github.com/users/bjansen/orgs","repos_url":"https://api.github.com/users/bjansen/repos","events_url":"https://api.github.com/users/bjansen/events{/privacy}","received_events_url":"https://api.github.com/users/bjansen/received_events","type":"User","site_admin":false},"created_at":"2016-04-20T08:34:44Z","updated_at":"2016-04-20T08:34:44Z","body":"So basically we have two options, right?\r\n\r\n* Modify the model loader to expose `Integer.MAX_VALUE` as `MAX_VALUE` instead of `\\iMAX_VALUE`, but it will break existing occurrences of `\\iMAX_VALUE`\r\n* Merge `Tree.Qualified[Member|Type]Expression` in a single type, which will allow both `\\iMAX_VALUE` and `MAX_VALUE`, but might affect things like refactorings which rely on the old `Tree.QualifiedMemberExpression` and `Tree.QualifiedTypeExpression`"}}