{"action":"created","comment":{"url":"https://api.github.com/repos/typetools/checker-framework/pulls/comments/49411828","id":49411828,"diff_hunk":"@@ -339,106 +339,125 @@ public TransferFunction createFlowTransferFunction(CFAbstractAnalysis<Value, Sto\n     }\n \n     /**\n-     * Create {@link QualifierDefaults} which handles user specified defaults\n-     * @return the QualifierDefaults class\n+     * Create {@link QualifierDefaults} which handles checker specified defaults\n+     * Subclasses should override {@code addCheckedCodeDefaults(QualifierDefaults defs)} or\n+     * {@code addUncheckedCodeDefaults(QualifierDefaults defs)} to add more defaults or\n+     * use different defaults.\n      *\n-     * TODO: should this be split in two methods to allow separate reuse?\n+     * @return the QualifierDefaults class\n      */\n-    protected QualifierDefaults createQualifierDefaults() {\n+    protected final QualifierDefaults createQualifierDefaults() {\n         QualifierDefaults defs = new QualifierDefaults(elements, this);\n-        boolean foundDefaultOtherwise = false;\n-        boolean foundDefaultOtherwiseForUnannotatedCode = false;\n+        addCheckedCodeDefaults(defs);\n+        addUncheckedCodeDefaults(defs);\n+        return defs;\n+    }\n \n-        // TODO: Verify that only one default per location type is present.\n+    /**\n+     * Adds default qualifiers for type-checked code by\n+     * reading  {@code @DefaultFor} and {@code @DefaultQualifierInHierarchy}\n+     * meta-annotations.\n+     * Subclasses may override this method to add defaults that cannot be specified with\n+     * a {@code @DefaultFor} or {@code @DefaultQualifierInHierarchy} meta-annotations.\n+     *\n+     * @param defs QualifierDefault object to which defaults are added\n+     */\n+    protected void addCheckedCodeDefaults(QualifierDefaults defs) {\n+        boolean foundOtherwise = false;\n+        // Add defaults from @DefaultFor and @DefaultQualiferInHierarchy\n         for (Class<? extends Annotation> qual : getSupportedTypeQualifiers()) {\n             DefaultFor defaultFor = qual.getAnnotation(DefaultFor.class);\n             if (defaultFor != null) {\n-                final DefaultLocation [] locations = defaultFor.value();\n-                defs.addCheckedCodeDefaults(AnnotationUtils.fromClass(elements, qual), locations);\n-\n-                foundDefaultOtherwise = foundDefaultOtherwise ||\n-                        Arrays.asList(locations).contains(DefaultLocation.OTHERWISE);\n+                final DefaultLocation[] locations = defaultFor.value();\n+                defs.addCheckedCodeDefaults(AnnotationUtils\n+                                                    .fromClass(elements, qual),\n+                                                   locations);\n+                foundOtherwise = foundOtherwise ||  Arrays.asList(locations).contains(DefaultLocation.OTHERWISE);\n             }\n \n             if (qual.getAnnotation(DefaultQualifierInHierarchy.class) != null) {\n                 if (defaultFor != null) {\n                     // A type qualifier should either have a DefaultFor or\n                     // a DefaultQualifierInHierarchy annotation\n-                    ErrorReporter.errorAbort(\"GenericAnnotatedTypeFactory.createQualifierDefaults: \" +\n-                            \"qualifier has both @DefaultFor and @DefaultQualifierInHierarchy annotations: \" +\n-                            qual.getCanonicalName());\n+                    ErrorReporter\n+                            .errorAbort(\"GenericAnnotatedTypeFactory.createQualifierDefaults: \" +\n+                                                \"qualifier has both @DefaultFor and @DefaultQualifierInHierarchy annotations: \"\n+                                                + qual.getCanonicalName());\n                 } else {\n-                    defs.addCheckedCodeDefault(AnnotationUtils.fromClass(elements, qual),\n-                            DefaultLocation.OTHERWISE);\n-                    foundDefaultOtherwise = true;\n-                }\n-            }\n-\n-            // Add defaults for unannotated code if conservative unannotated flag is passed.\n-            if (// !checker.hasOption(\"unsafeDefaultsForUnannotatedBytecode\")\n-                    // temporarily use unsafe defaults for bytecode, unless option given\n-                    checker.hasOption(\"safeDefaultsForUnannotatedBytecode\") ||\n-                    // This block may need to be split after safeDefaults... is reverted to unsafeDefaults...\n-                    checker.hasOption(\"useSafeDefaultsForUnannotatedSourceCode\")) {\n-                DefaultInUncheckedCodeFor defaultForUnannotated = qual.getAnnotation(DefaultInUncheckedCodeFor.class);\n-\n-                if (defaultForUnannotated != null) {\n-                    final DefaultLocation [] locations = defaultForUnannotated.value();\n-                    defs.addUncheckedCodeDefaults(AnnotationUtils.fromClass(elements, qual), locations);\n-                    // TODO: here and for source code above, should ALL also be handled?\n-                    foundDefaultOtherwiseForUnannotatedCode = foundDefaultOtherwiseForUnannotatedCode ||\n-                            Arrays.asList(locations).contains(DefaultLocation.OTHERWISE);\n-                }\n-\n-                if (qual.getAnnotation(DefaultQualifierInHierarchyInUncheckedCode.class) != null) {\n-                    if (defaultForUnannotated != null) {\n-                        // A type qualifier should either have a DefaultInUncheckedCodeFor or\n-                        // a DefaultQualifierInHierarchyInUncheckedCode annotation.\n-                        ErrorReporter.errorAbort(\"GenericAnnotatedTypeFactory.createQualifierDefaults: \" +\n-                                \"qualifier has both @DefaultInUncheckedCodeFor and @DefaultQualifierInHierarchyInUncheckedCode annotations: \" +\n-                                qual.getCanonicalName());\n-                    } else {\n-                        defs.addUncheckedCodeDefault(AnnotationUtils.fromClass(elements, qual),\n-                                    DefaultLocation.OTHERWISE);\n-                        foundDefaultOtherwiseForUnannotatedCode = true;\n-                    }\n+                    defs.addCheckedCodeDefault(AnnotationUtils\n+                                                       .fromClass(elements,\n+                                                                         qual),\n+                                                      DefaultLocation.OTHERWISE);\n+                    foundOtherwise = true;\n                 }\n             }\n         }\n-\n         // If Unqualified is a supported qualifier, make it the default.\n-        // This is for convenience only. Maybe remove.\n         AnnotationMirror unqualified = AnnotationUtils.fromClass(elements, Unqualified.class);\n-        if (!foundDefaultOtherwise &&\n-                this.isSupportedQualifier(unqualified)) {\n+        if (!foundOtherwise && this.isSupportedQualifier(unqualified)) {\n             defs.addCheckedCodeDefault(unqualified, DefaultLocation.OTHERWISE);\n+            foundOtherwise = true;\n+        }\n+\n+        if(!foundOtherwise) {\n+            ErrorReporter\n+                    .errorAbort(\"GenericAnnotatedTypeFactory.createQualifierDefaults: \"\n+                                        + \"@DefaultQualifierInHierarchy or @DefaultFor(DefaultLocation.OTHERWISE) not found. \"\n+                                        + \"Every checker must specify a default qualifier.\");\n         }\n+    }\n \n-        // Add defaults for unannotated code if conservative unannotated flag is passed and\n-        // no defaults were given.\n-        if ((// !checker.hasOption(\"unsafeDefaultsForUnannotatedBytecode\")\n-                // temporarily use unsafe defaults for bytecode, unless option given\n-                checker.hasOption(\"safeDefaultsForUnannotatedBytecode\") ||\n-                // This block may need to be split after safeDefaults... is reverted to unsafeDefaults...\n-                checker.hasOption(\"useSafeDefaultsForUnannotatedSourceCode\")) &&\n-                !foundDefaultOtherwiseForUnannotatedCode) {\n-            Set<? extends AnnotationMirror> tops = this.qualHierarchy.getTopAnnotations();\n-            for (AnnotationMirror top : tops) {\n-                defs.addUncheckedCodeDefault(top, DefaultLocation.RETURNS);\n-                defs.addUncheckedCodeDefault(top, DefaultLocation.UPPER_BOUNDS);\n+    /**\n+     * Adds default qualifiers for code that is not type-checked by\n+     * reading  {@code @DefaultInUncheckedCodeFor} and {@code @DefaultQualifierInHierarchyInUncheckedCode}\n+     * meta-annotations. Then it applies the standard\n+     * unchecked code defaults, if a default was not specified for a particular location.\n+     * <p>\n+     * Standard unchecked code default are: <br>\n+     * top: {@code DefaultLocation.RETURNS,DefaultLocation.FIELD,DefaultLocation.UPPER_BOUNDS}<br>\n+     * bottom: {@code DefaultLocation.PARAMETERS, DefaultLocation.LOWER_BOUNDS}<br>\n+     * <p>\n+     * If {@code @DefaultQualifierInHierarchyInUncheckedCode} code is not found or a default for {@code DefaultLocation.Otherwise}\n+     * is not used, the defaults for checked code will be applied to locations without a default for unchecked code.\n+     * <p>\n+     * Subclasses may override this method to add defaults that cannot be specified with\n+     * a {@code @DefaultInUncheckedCodeFor} or {@code @DefaultQualifierInHierarchyInUncheckedCode} meta-annotations or to change\n+     * the standard defaults.\n+     *\n+     * @param defs QualifierDefault object to which defaults are added\n+     */\n+    protected void addUncheckedCodeDefaults(QualifierDefaults defs) {\n+        for (Class<? extends Annotation> annotation : getSupportedTypeQualifiers()) {\n+            DefaultInUncheckedCodeFor defaultInUncheckedCodeFor = annotation.getAnnotation(DefaultInUncheckedCodeFor.class);\n+\n+            if (defaultInUncheckedCodeFor != null) {\n+                final DefaultLocation[] locations = defaultInUncheckedCodeFor.value();\n+                defs.addUncheckedCodeDefaults(AnnotationUtils\n+                                                      .fromClass(elements,\n+                                                                        annotation),\n+                                                     locations);\n             }\n-            Set<? extends AnnotationMirror> bottoms = this.qualHierarchy.getBottomAnnotations();\n-            for (AnnotationMirror bot : bottoms) {\n-                defs.addUncheckedCodeDefault(bot, DefaultLocation.PARAMETERS);\n-                defs.addUncheckedCodeDefault(bot, DefaultLocation.LOWER_BOUNDS);\n-                defs.addUncheckedCodeDefault(bot, DefaultLocation.FIELD);\n-                // TODO: this isn't simply DefaultLocation.OTHERWISE, because that would\n-                // also apply to type declarations, which isn't currently working as desired.\n-                // See: https://groups.google.com/d/msg/checker-framework-dev/vk2V6ZFKPLk/v3hENw-e7gsJ\n+\n+            if (annotation.getAnnotation(DefaultQualifierInHierarchyInUncheckedCode.class) != null) {\n+                if (defaultInUncheckedCodeFor != null) {\n+                    // A type qualifier should either have a DefaultInUncheckedCodeFor or\n+                    // a DefaultQualifierInHierarchyInUncheckedCode annotation.\n+                    ErrorReporter\n+                            .errorAbort(\"GenericAnnotatedTypeFactory.createQualifierDefaults: \" +\n+                                                \"qualifier has both @DefaultInUncheckedCodeFor and @DefaultQualifierInHierarchyInUncheckedCode annotations: \"\n+                                                + annotation.getCanonicalName());\n+                } else {\n+                    defs.addUncheckedCodeDefault(AnnotationUtils.fromClass(elements, annotation),\n+                                                      DefaultLocation.OTHERWISE);\n+                }\n             }\n         }\n+        Set<? extends AnnotationMirror> tops = this.qualHierarchy.getTopAnnotations();","path":"framework/src/org/checkerframework/framework/type/GenericAnnotatedTypeFactory.java","position":189,"original_position":190,"commit_id":"b3c8d1a9dc43630ca76b6805d7f3c846874a4abe","original_commit_id":"ac22afb5915e957cf23155819ad1ddc6cb7388a6","user":{"login":"wmdietl","id":6699136,"avatar_url":"https://avatars.githubusercontent.com/u/6699136?v=3","gravatar_id":"","url":"https://api.github.com/users/wmdietl","html_url":"https://github.com/wmdietl","followers_url":"https://api.github.com/users/wmdietl/followers","following_url":"https://api.github.com/users/wmdietl/following{/other_user}","gists_url":"https://api.github.com/users/wmdietl/gists{/gist_id}","starred_url":"https://api.github.com/users/wmdietl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wmdietl/subscriptions","organizations_url":"https://api.github.com/users/wmdietl/orgs","repos_url":"https://api.github.com/users/wmdietl/repos","events_url":"https://api.github.com/users/wmdietl/events{/privacy}","received_events_url":"https://api.github.com/users/wmdietl/received_events","type":"User","site_admin":false},"body":"Ping.","created_at":"2016-01-12T03:18:30Z","updated_at":"2016-01-12T03:18:30Z","html_url":"https://github.com/typetools/checker-framework/pull/552#discussion_r49411828","pull_request_url":"https://api.github.com/repos/typetools/checker-framework/pulls/552","_links":{"self":{"href":"https://api.github.com/repos/typetools/checker-framework/pulls/comments/49411828"},"html":{"href":"https://github.com/typetools/checker-framework/pull/552#discussion_r49411828"},"pull_request":{"href":"https://api.github.com/repos/typetools/checker-framework/pulls/552"}}},"pull_request":{"url":"https://api.github.com/repos/typetools/checker-framework/pulls/552","id":55275927,"html_url":"https://github.com/typetools/checker-framework/pull/552","diff_url":"https://github.com/typetools/checker-framework/pull/552.diff","patch_url":"https://github.com/typetools/checker-framework/pull/552.patch","issue_url":"https://api.github.com/repos/typetools/checker-framework/issues/552","number":552,"state":"open","locked":false,"title":"Unchecked code default changes (2nd pull request)","user":{"login":"smillst","id":13260174,"avatar_url":"https://avatars.githubusercontent.com/u/13260174?v=3","gravatar_id":"","url":"https://api.github.com/users/smillst","html_url":"https://github.com/smillst","followers_url":"https://api.github.com/users/smillst/followers","following_url":"https://api.github.com/users/smillst/following{/other_user}","gists_url":"https://api.github.com/users/smillst/gists{/gist_id}","starred_url":"https://api.github.com/users/smillst/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smillst/subscriptions","organizations_url":"https://api.github.com/users/smillst/orgs","repos_url":"https://api.github.com/users/smillst/repos","events_url":"https://api.github.com/users/smillst/events{/privacy}","received_events_url":"https://api.github.com/users/smillst/received_events","type":"User","site_admin":false},"body":"A continuation of the pull request #549, which I unintentionally merged.  Comments on that pull request are addressed here. ","created_at":"2016-01-06T22:44:16Z","updated_at":"2016-01-12T03:18:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3474c910495db5eff1f2893072bc23086e0fd4ed","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/typetools/checker-framework/pulls/552/commits","review_comments_url":"https://api.github.com/repos/typetools/checker-framework/pulls/552/comments","review_comment_url":"https://api.github.com/repos/typetools/checker-framework/pulls/comments{/number}","comments_url":"https://api.github.com/repos/typetools/checker-framework/issues/552/comments","statuses_url":"https://api.github.com/repos/typetools/checker-framework/statuses/b3c8d1a9dc43630ca76b6805d7f3c846874a4abe","head":{"label":"typetools:unchecked-defaults2","ref":"unchecked-defaults2","sha":"b3c8d1a9dc43630ca76b6805d7f3c846874a4abe","user":{"login":"typetools","id":12883499,"avatar_url":"https://avatars.githubusercontent.com/u/12883499?v=3","gravatar_id":"","url":"https://api.github.com/users/typetools","html_url":"https://github.com/typetools","followers_url":"https://api.github.com/users/typetools/followers","following_url":"https://api.github.com/users/typetools/following{/other_user}","gists_url":"https://api.github.com/users/typetools/gists{/gist_id}","starred_url":"https://api.github.com/users/typetools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/typetools/subscriptions","organizations_url":"https://api.github.com/users/typetools/orgs","repos_url":"https://api.github.com/users/typetools/repos","events_url":"https://api.github.com/users/typetools/events{/privacy}","received_events_url":"https://api.github.com/users/typetools/received_events","type":"Organization","site_admin":false},"repo":{"id":38488726,"name":"checker-framework","full_name":"typetools/checker-framework","owner":{"login":"typetools","id":12883499,"avatar_url":"https://avatars.githubusercontent.com/u/12883499?v=3","gravatar_id":"","url":"https://api.github.com/users/typetools","html_url":"https://github.com/typetools","followers_url":"https://api.github.com/users/typetools/followers","following_url":"https://api.github.com/users/typetools/following{/other_user}","gists_url":"https://api.github.com/users/typetools/gists{/gist_id}","starred_url":"https://api.github.com/users/typetools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/typetools/subscriptions","organizations_url":"https://api.github.com/users/typetools/orgs","repos_url":"https://api.github.com/users/typetools/repos","events_url":"https://api.github.com/users/typetools/events{/privacy}","received_events_url":"https://api.github.com/users/typetools/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/typetools/checker-framework","description":"Pluggable type-checking for Java","fork":false,"url":"https://api.github.com/repos/typetools/checker-framework","forks_url":"https://api.github.com/repos/typetools/checker-framework/forks","keys_url":"https://api.github.com/repos/typetools/checker-framework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/typetools/checker-framework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/typetools/checker-framework/teams","hooks_url":"https://api.github.com/repos/typetools/checker-framework/hooks","issue_events_url":"https://api.github.com/repos/typetools/checker-framework/issues/events{/number}","events_url":"https://api.github.com/repos/typetools/checker-framework/events","assignees_url":"https://api.github.com/repos/typetools/checker-framework/assignees{/user}","branches_url":"https://api.github.com/repos/typetools/checker-framework/branches{/branch}","tags_url":"https://api.github.com/repos/typetools/checker-framework/tags","blobs_url":"https://api.github.com/repos/typetools/checker-framework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/typetools/checker-framework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/typetools/checker-framework/git/refs{/sha}","trees_url":"https://api.github.com/repos/typetools/checker-framework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/typetools/checker-framework/statuses/{sha}","languages_url":"https://api.github.com/repos/typetools/checker-framework/languages","stargazers_url":"https://api.github.com/repos/typetools/checker-framework/stargazers","contributors_url":"https://api.github.com/repos/typetools/checker-framework/contributors","subscribers_url":"https://api.github.com/repos/typetools/checker-framework/subscribers","subscription_url":"https://api.github.com/repos/typetools/checker-framework/subscription","commits_url":"https://api.github.com/repos/typetools/checker-framework/commits{/sha}","git_commits_url":"https://api.github.com/repos/typetools/checker-framework/git/commits{/sha}","comments_url":"https://api.github.com/repos/typetools/checker-framework/comments{/number}","issue_comment_url":"https://api.github.com/repos/typetools/checker-framework/issues/comments{/number}","contents_url":"https://api.github.com/repos/typetools/checker-framework/contents/{+path}","compare_url":"https://api.github.com/repos/typetools/checker-framework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/typetools/checker-framework/merges","archive_url":"https://api.github.com/repos/typetools/checker-framework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/typetools/checker-framework/downloads","issues_url":"https://api.github.com/repos/typetools/checker-framework/issues{/number}","pulls_url":"https://api.github.com/repos/typetools/checker-framework/pulls{/number}","milestones_url":"https://api.github.com/repos/typetools/checker-framework/milestones{/number}","notifications_url":"https://api.github.com/repos/typetools/checker-framework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/typetools/checker-framework/labels{/name}","releases_url":"https://api.github.com/repos/typetools/checker-framework/releases{/id}","created_at":"2015-07-03T11:09:17Z","updated_at":"2016-01-11T16:06:52Z","pushed_at":"2016-01-12T03:08:19Z","git_url":"git://github.com/typetools/checker-framework.git","ssh_url":"git@github.com:typetools/checker-framework.git","clone_url":"https://github.com/typetools/checker-framework.git","svn_url":"https://github.com/typetools/checker-framework","homepage":"http://checkerframework.org/","size":175666,"stargazers_count":73,"watchers_count":73,"language":"Java","has_issues":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":26,"mirror_url":null,"open_issues_count":142,"forks":26,"open_issues":142,"watchers":73,"default_branch":"master"}},"base":{"label":"typetools:master","ref":"master","sha":"405d019f6e044dba3c520ac4abe417c6ebcae709","user":{"login":"typetools","id":12883499,"avatar_url":"https://avatars.githubusercontent.com/u/12883499?v=3","gravatar_id":"","url":"https://api.github.com/users/typetools","html_url":"https://github.com/typetools","followers_url":"https://api.github.com/users/typetools/followers","following_url":"https://api.github.com/users/typetools/following{/other_user}","gists_url":"https://api.github.com/users/typetools/gists{/gist_id}","starred_url":"https://api.github.com/users/typetools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/typetools/subscriptions","organizations_url":"https://api.github.com/users/typetools/orgs","repos_url":"https://api.github.com/users/typetools/repos","events_url":"https://api.github.com/users/typetools/events{/privacy}","received_events_url":"https://api.github.com/users/typetools/received_events","type":"Organization","site_admin":false},"repo":{"id":38488726,"name":"checker-framework","full_name":"typetools/checker-framework","owner":{"login":"typetools","id":12883499,"avatar_url":"https://avatars.githubusercontent.com/u/12883499?v=3","gravatar_id":"","url":"https://api.github.com/users/typetools","html_url":"https://github.com/typetools","followers_url":"https://api.github.com/users/typetools/followers","following_url":"https://api.github.com/users/typetools/following{/other_user}","gists_url":"https://api.github.com/users/typetools/gists{/gist_id}","starred_url":"https://api.github.com/users/typetools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/typetools/subscriptions","organizations_url":"https://api.github.com/users/typetools/orgs","repos_url":"https://api.github.com/users/typetools/repos","events_url":"https://api.github.com/users/typetools/events{/privacy}","received_events_url":"https://api.github.com/users/typetools/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/typetools/checker-framework","description":"Pluggable type-checking for Java","fork":false,"url":"https://api.github.com/repos/typetools/checker-framework","forks_url":"https://api.github.com/repos/typetools/checker-framework/forks","keys_url":"https://api.github.com/repos/typetools/checker-framework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/typetools/checker-framework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/typetools/checker-framework/teams","hooks_url":"https://api.github.com/repos/typetools/checker-framework/hooks","issue_events_url":"https://api.github.com/repos/typetools/checker-framework/issues/events{/number}","events_url":"https://api.github.com/repos/typetools/checker-framework/events","assignees_url":"https://api.github.com/repos/typetools/checker-framework/assignees{/user}","branches_url":"https://api.github.com/repos/typetools/checker-framework/branches{/branch}","tags_url":"https://api.github.com/repos/typetools/checker-framework/tags","blobs_url":"https://api.github.com/repos/typetools/checker-framework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/typetools/checker-framework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/typetools/checker-framework/git/refs{/sha}","trees_url":"https://api.github.com/repos/typetools/checker-framework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/typetools/checker-framework/statuses/{sha}","languages_url":"https://api.github.com/repos/typetools/checker-framework/languages","stargazers_url":"https://api.github.com/repos/typetools/checker-framework/stargazers","contributors_url":"https://api.github.com/repos/typetools/checker-framework/contributors","subscribers_url":"https://api.github.com/repos/typetools/checker-framework/subscribers","subscription_url":"https://api.github.com/repos/typetools/checker-framework/subscription","commits_url":"https://api.github.com/repos/typetools/checker-framework/commits{/sha}","git_commits_url":"https://api.github.com/repos/typetools/checker-framework/git/commits{/sha}","comments_url":"https://api.github.com/repos/typetools/checker-framework/comments{/number}","issue_comment_url":"https://api.github.com/repos/typetools/checker-framework/issues/comments{/number}","contents_url":"https://api.github.com/repos/typetools/checker-framework/contents/{+path}","compare_url":"https://api.github.com/repos/typetools/checker-framework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/typetools/checker-framework/merges","archive_url":"https://api.github.com/repos/typetools/checker-framework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/typetools/checker-framework/downloads","issues_url":"https://api.github.com/repos/typetools/checker-framework/issues{/number}","pulls_url":"https://api.github.com/repos/typetools/checker-framework/pulls{/number}","milestones_url":"https://api.github.com/repos/typetools/checker-framework/milestones{/number}","notifications_url":"https://api.github.com/repos/typetools/checker-framework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/typetools/checker-framework/labels{/name}","releases_url":"https://api.github.com/repos/typetools/checker-framework/releases{/id}","created_at":"2015-07-03T11:09:17Z","updated_at":"2016-01-11T16:06:52Z","pushed_at":"2016-01-12T03:08:19Z","git_url":"git://github.com/typetools/checker-framework.git","ssh_url":"git@github.com:typetools/checker-framework.git","clone_url":"https://github.com/typetools/checker-framework.git","svn_url":"https://github.com/typetools/checker-framework","homepage":"http://checkerframework.org/","size":175666,"stargazers_count":73,"watchers_count":73,"language":"Java","has_issues":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":26,"mirror_url":null,"open_issues_count":142,"forks":26,"open_issues":142,"watchers":73,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/typetools/checker-framework/pulls/552"},"html":{"href":"https://github.com/typetools/checker-framework/pull/552"},"issue":{"href":"https://api.github.com/repos/typetools/checker-framework/issues/552"},"comments":{"href":"https://api.github.com/repos/typetools/checker-framework/issues/552/comments"},"review_comments":{"href":"https://api.github.com/repos/typetools/checker-framework/pulls/552/comments"},"review_comment":{"href":"https://api.github.com/repos/typetools/checker-framework/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/typetools/checker-framework/pulls/552/commits"},"statuses":{"href":"https://api.github.com/repos/typetools/checker-framework/statuses/b3c8d1a9dc43630ca76b6805d7f3c846874a4abe"}}}}