CINXE.COM

Loading...

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"/> <meta name="application-name" content="JIRA" data-name="jira" data-version="9.12.15"><meta name="ajs-server-scheme" content="https"> <meta name="ajs-server-port" content="443"> <meta name="ajs-server-name" content="bugs.openjdk.org"> <meta name="ajs-behind-proxy" content="null"> <meta name="ajs-base-url" content="https://bugs.openjdk.org"> <meta name="ajs-viewissue-use-history-api" content="false"> <meta name="ajs-jira-base-url" content="https://bugs.openjdk.org"> <meta name="ajs-serverRenderedViewIssue" content="true"> <meta name="ajs-dev-mode" content="false"> <meta name="ajs-context-path" content=""> <meta name="ajs-version-number" content="9.12.15"> <meta name="ajs-build-number" content="9120015"> <meta name="ajs-is-beta" content="false"> <meta name="ajs-is-rc" content="false"> <meta name="ajs-is-snapshot" content="false"> <meta name="ajs-is-milestone" content="false"> <meta name="ajs-remote-user" content=""> <meta name="ajs-remote-user-fullname" content=""> <meta name="ajs-user-locale" content="en_US"> <meta name="ajs-user-locale-group-separator" content=","> <meta name="ajs-app-title" content="Java Bug System"> <meta name="ajs-keyboard-shortcuts-enabled" content="true"> <meta name="ajs-keyboard-accesskey-modifier" content="Alt"> <meta name="ajs-enabled-dark-features" content="[&quot;com.atlassian.jira.agile.darkfeature.editable.detailsview&quot;,&quot;nps.survey.inline.dialog&quot;,&quot;com.atlassian.jira.agile.darkfeature.edit.closed.sprint.enabled&quot;,&quot;jira.plugin.devstatus.phasetwo&quot;,&quot;jira.frother.reporter.field&quot;,&quot;atlassian.rest.xsrf.legacy.enabled&quot;,&quot;jira.issue.status.lozenge&quot;,&quot;com.atlassian.jira.projects.issuenavigator&quot;,&quot;jira.plugin.devstatus.phasetwo.enabled&quot;,&quot;com.atlassian.jira.config.PDL&quot;,&quot;atlassian.aui.raphael.disabled&quot;,&quot;crowd.sync.nested.groups.group.membership.changes.batching.enabled&quot;,&quot;app-switcher.new&quot;,&quot;frother.assignee.field&quot;,&quot;com.atlassian.jira.projects.ProjectCentricNavigation.Switch&quot;,&quot;jira.onboarding.cyoa&quot;,&quot;com.atlassian.jira.agile.darkfeature.kanplan.enabled&quot;,&quot;com.atlassian.jira.projects.sidebar.DEFER_RESOURCES&quot;,&quot;com.atlassian.jira.config.ProjectConfig.MENU&quot;,&quot;com.atlassian.jira.agile.darkfeature.kanplan.epics.and.versions.enabled&quot;,&quot;com.atlassian.jira.agile.darkfeature.sprint.goal.enabled&quot;,&quot;jira.zdu.admin-updates-ui&quot;,&quot;jira.zdu.jmx-monitoring&quot;,&quot;sd.new.settings.sidebar.location.disabled&quot;,&quot;crowd.event.transformer.directory.manager.cache&quot;,&quot;jira.zdu.cluster-upgrade-state&quot;,&quot;com.atlassian.jira.email.templates.readFromJiraHome&quot;,&quot;com.atlassian.jira.agile.darkfeature.splitissue&quot;,&quot;crowd.sync.delete.user.memberships.batching.enabled&quot;,&quot;com.atlassian.jira.config.CoreFeatures.LICENSE_ROLES_ENABLED&quot;,&quot;jira.export.csv.enabled&quot;]"> <meta name="ajs-in-admin-mode" content="false"> <meta name="ajs-is-sysadmin" content="false"> <meta name="ajs-is-admin" content="false"> <meta name="ajs-outgoing-mail-enabled" content="true"> <meta name="ajs-archiving-enabled" content="true"> <meta name="ajs-date-relativize" content="true"> <meta name="ajs-date-time" content="HH:mm"> <meta name="ajs-date-day" content="EEEE HH:mm"> <meta name="ajs-date-dmy" content="yyyy-MM-dd"> <meta name="ajs-date-complete" content="yyyy-MM-dd HH:mm"> <meta name="ajs-use-iso8601" content="true"> <script type="text/javascript">var AJS=AJS||{};AJS.debug=true;</script> <meta id="atlassian-token" name="atlassian-token" content="BI6B-LGJG-J48D-LFXB_2980348c0836fadc570bac7ee3015148f14f6b98_lout"> <link rel="shortcut icon" href="/s/-gdi7pl/9120015/1xlxtdz/_/jira-favicon-hires.png"> <!--[if IE]><![endif]--> <script type="text/javascript"> (function() { var contextPath = ''; function printDeprecatedMsg() { if (console && console.warn) { console.warn('DEPRECATED JS - contextPath global variable has been deprecated since 7.4.0. Use `wrm/context-path` module instead.'); } } Object.defineProperty(window, 'contextPath', { get: function() { printDeprecatedMsg(); return contextPath; }, set: function(value) { printDeprecatedMsg(); contextPath = value; } }); })(); </script> <script data-wrm-key="flush-app-header-early-inline-resources,com.atlassian.plugins.atlassian-plugins-webresource-rest:data-collector-perf-observer,jira.webresources:resource-phase-checkpoint-init" data-wrm-batch-type="context" data-initially-rendered> !function(){"use strict";function t(t){return/^([1-9]\d*)$/.test(t)}var e=[{left:10,width:24},{left:30,width:70},{left:106,width:92},{left:204,width:92},{left:302,width:92},{left:400,width:92},{left:498,width:70},{left:1426,width:170},{left:1616,width:24},{left:1660,width:24},{left:1704,width:24},{left:1748,width:24}],i=window.innerWidth;try{var r=JSON.parse(localStorage.getItem("jira-app-header-skeleton-dimensions"));!function(e){var i=e.headerDimensions,r=e.headerWidth;if(!(Array.isArray(i)&&i.length>0&&t(r)))throw"Invalid data";e.headerDimensions=function(e){e.forEach((function(i,r){if(!t(parseInt(i.width))||!t(parseInt(i.left)))throw"Invalid data";e[r].width=parseInt(e[r].width);e[r].left=parseInt(e[r].left)}));return e}(i);e.headerWidth=parseInt(r)}(r);e=r.headerDimensions;i=r.headerWidth}catch(t){console.error(t)}window.__jiraAppHeaderSkeleton={headerSvg:function(t,e,i,r,d){var n=document.createElement("div"),a=document.createElement("mask");a.setAttribute("id",r);var h=document.createElement("defs");h.appendChild(a);n.appendChild(h);t.forEach((function(d,h){var l=t[h].left;e(l,"8",t[h].width,"24","#556E9E","2",r,a);e(l,"8",t[h].width,"24","#dadada","2",r,n,i)}));d(a);return n.innerHTML}(e,(function(t,e,i,r,d,n,a,h,l){var s=document.createElementNS("http://www.w3.org/2000/svg","rect");s.setAttribute("x",t);s.setAttribute("y",e);s.setAttribute("width",i);s.setAttribute("height",r);s.setAttribute("fill",d);s.setAttribute("rx",n);l&&s.setAttribute("mask",l);h.appendChild(s)}),"url(#other-element)","other-element",(function(t){var e=document.createElementNS("http://www.w3.org/2000/svg","rect");e.setAttribute("width","140");e.setAttribute("height","35");e.setAttribute("fill","hsla(200,0%,10%,.2)");e.setAttribute("id","mask");t.appendChild(e)})),headerWidth:i}}(); window.__resourcePhaseCheckpointResolvers={resolveDeferPhaseCheckpoint:null,resolveInteractionPhaseCheckpoint:null};if(window.performance&&window.performance.mark){window.DeferScripts||(window.DeferScripts={});window.DeferScripts.totalClicks=0;window.DeferScripts.totalKeydowns=0;window.DeferScripts.clickListener=function(){"use strict";window.DeferScripts.totalClicks+=1};window.addEventListener("click",window.DeferScripts.clickListener);window.DeferScripts.keydownListener=function(){"use strict";window.DeferScripts.totalKeydowns+=1};window.addEventListener("keydown",window.DeferScripts.keydownListener)}window.resourcePhaseCheckpoint=Object.freeze({defer:new Promise((function(e){"use strict";window.__resourcePhaseCheckpointResolvers.resolveDeferPhaseCheckpoint=e})),interaction:new Promise((function(e){"use strict";window.__resourcePhaseCheckpointResolvers.resolveInteractionPhaseCheckpoint=e}))});Object.freeze(window.__resourcePhaseCheckpointResolvers); !function(){"use strict";if("PerformanceObserver"in window){const e=[];window.__observedResources=e;const r=e=>"script"===e?"script":"css";new PerformanceObserver((n=>{n.getEntries().filter((({initiatorType:e,name:r})=>{const n="script"===e||((e,r)=>"link"===e&&"css"===new URL(r).pathname.split(".").pop())(e,r),i=new URL(location.href).origin===new URL(r).origin;return n&&i})).forEach((({name:n,transferSize:i,encodedBodySize:s,initiatorType:o})=>{e.push([i,s,n,r(o)])}))})).observe({type:"resource"})}}(); </script> <script> window.WRM=window.WRM||{};window.WRM._unparsedData=window.WRM._unparsedData||{};window.WRM._unparsedErrors=window.WRM._unparsedErrors||{}; WRM._unparsedData["project-key"]="\u0022JDK\u0022"; WRM._unparsedData["project-name"]="\u0022JDK\u0022"; WRM._unparsedData["projectType"]="\u0022software\u0022"; WRM._unparsedData["jira.request.correlation-id"]="\u002291db890543a894\u0022"; WRM._unparsedData["com.atlassian.jira.jira-projects-issue-navigator:project-filters"]="[]"; WRM._unparsedData["com.atlassian.jira.jira-projects-issue-navigator:can-create-issues"]="false"; WRM._unparsedData["com.atlassian.jira.jira-projects-issue-navigator:default-filter-priority"]="[\u0022allopenissues\u0022,\u0022allissues\u0022]"; WRM._unparsedData["project-type"]="\u0022software\u0022"; WRM._unparsedData["com.atlassian.jira.jira-projects-issue-navigator:can-manage-filters"]="false"; WRM._unparsedData["projectKey"]="\u0022JDK\u0022"; WRM._unparsedData["project-id"]="10100"; WRM._unparsedData["com.atlassian.jira.jira-projects-issue-navigator:generic-filters"]="[{\u0022id\u0022:\u0022allissues\u0022,\u0022jql\u0022:\u0022project = \u005C\u0022{0}\u005C\u0022 ORDER BY {1}\u0022,\u0022defaultOrderby\u0022:\u0022created DESC\u0022,\u0022label\u0022:\u0022All issues\u0022,\u0022requiresUser\u0022:false,\u0022supportsInlineIssueCreate\u0022:true,\u0022fields\u0022:[]},{\u0022id\u0022:\u0022allopenissues\u0022,\u0022jql\u0022:\u0022project = \u005C\u0022{0}\u005C\u0022 AND resolution = Unresolved ORDER BY {1}\u0022,\u0022defaultOrderby\u0022:\u0022priority DESC, updated DESC\u0022,\u0022label\u0022:\u0022Open issues\u0022,\u0022requiresUser\u0022:false,\u0022supportsInlineIssueCreate\u0022:true,\u0022fields\u0022:[\u0022resolution\u0022]},{\u0022id\u0022:\u0022doneissues\u0022,\u0022jql\u0022:\u0022project = \u005C\u0022{0}\u005C\u0022 AND statusCategory = Done ORDER BY {1}\u0022,\u0022defaultOrderby\u0022:\u0022updated DESC\u0022,\u0022label\u0022:\u0022Done issues\u0022,\u0022requiresUser\u0022:false,\u0022supportsInlineIssueCreate\u0022:false,\u0022fields\u0022:[\u0022status\u0022]},{\u0022id\u0022:\u0022recentlyviewed\u0022,\u0022jql\u0022:\u0022project = \u005C\u0022{0}\u005C\u0022 AND issuekey in issueHistory() ORDER BY {1}\u0022,\u0022defaultOrderby\u0022:\u0022lastViewed DESC\u0022,\u0022label\u0022:\u0022Viewed recently\u0022,\u0022requiresUser\u0022:false,\u0022supportsInlineIssueCreate\u0022:true,\u0022fields\u0022:[\u0022issuekey\u0022]},{\u0022id\u0022:\u0022addedrecently\u0022,\u0022jql\u0022:\u0022project = \u005C\u0022{0}\u005C\u0022 AND created \u003e= -1w ORDER BY {1}\u0022,\u0022defaultOrderby\u0022:\u0022created DESC\u0022,\u0022label\u0022:\u0022Created recently\u0022,\u0022requiresUser\u0022:false,\u0022supportsInlineIssueCreate\u0022:true,\u0022fields\u0022:[\u0022created\u0022]},{\u0022id\u0022:\u0022resolvedrecently\u0022,\u0022jql\u0022:\u0022project = \u005C\u0022{0}\u005C\u0022 AND resolutiondate \u003e= -1w ORDER BY {1}\u0022,\u0022defaultOrderby\u0022:\u0022updated DESC\u0022,\u0022label\u0022:\u0022Resolved recently\u0022,\u0022requiresUser\u0022:false,\u0022supportsInlineIssueCreate\u0022:false,\u0022fields\u0022:[\u0022resolutiondate\u0022]},{\u0022id\u0022:\u0022updatedrecently\u0022,\u0022jql\u0022:\u0022project = \u005C\u0022{0}\u005C\u0022 AND updated \u003e= -1w ORDER BY {1}\u0022,\u0022defaultOrderby\u0022:\u0022updated DESC\u0022,\u0022label\u0022:\u0022Updated recently\u0022,\u0022requiresUser\u0022:false,\u0022supportsInlineIssueCreate\u0022:true,\u0022fields\u0022:[\u0022updated\u0022]}]"; WRM._unparsedData["projectId"]="10100"; if(window.WRM._dataArrived)window.WRM._dataArrived();</script> <script src="/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-gdi7pl/9120015/1xlxtdz/1.0/_/download/batch/jira.webresources:event-deferrer/jira.webresources:event-deferrer.js" data-wrm-key="jira.webresources:event-deferrer" data-wrm-batch-type="resource" data-initially-rendered></script> <script> window.WRM=window.WRM||{};window.WRM._unparsedData=window.WRM._unparsedData||{};window.WRM._unparsedErrors=window.WRM._unparsedErrors||{}; WRM._unparsedData["com.atlassian.jira.plugins.jira-wiki-editor:wiki-editor-resources.help-data"]="{\u0022showHelp\u0022:true,\u0022editorDocumentationUrl\u0022:[\u0022https://docs.atlassian.com/jira/jcore-docs-0912/Visual+editing\u0022],\u0022editorDocumentationTitle\u0022:[\u0022Show me documentation for the visual editor\u0022]}"; WRM._unparsedData["com.atlassian.jira.jira-projects-issue-navigator:projectKeyPatternDataProvider.projectKeyPattern"]="{\u0022projectkeypattern\u0022:\u0022([A-Z][A-Z0-9]+)\u0022}"; WRM._unparsedData["com.atlassian.plugins.helptips.jira-help-tips:help-tip-manager.JiraHelpTipData"]="{\u0022anonymous\u0022:true}"; WRM._unparsedData["com.atlassian.jira.jira-view-issue-plugin:controller-subtasks.controller.subtasks.parameters"]="{\u0022url\u0022:\u0022/rest/api/2/issue/{issueId}/subtask/move\u0022}"; WRM._unparsedData["com.atlassian.jira.jira-quick-edit-plugin:create-issue-data.data"]="{\u0022configurableSystemFieldIds\u0022:[\u0022description\u0022]}"; WRM._unparsedData["com.atlassian.jira.plugins.jira-dnd-attachment-plugin:dnd-issue-drop-zone.thumbnail-mime-types"]="\u0022image/png,image/vnd.wap.wbmp,image/x-png,image/jpeg,image/bmp,image/gif\u0022"; WRM._unparsedData["com.atlassian.jira.jira-header-plugin:newsletter-signup-tip-init.newsletterSignup"]="{\u0022signupDescription\u0022:\u0022Get updates, inspiration and best practices from the team behind Jira.\u0022,\u0022formUrl\u0022:\u0022https://www.atlassian.com/apis/exact-target/{0}/subscribe?mailingListId=1401671\u0022,\u0022signupTitle\u0022:\u0022Sign up!\u0022,\u0022signupId\u0022:\u0022newsletter-signup-tip\u0022,\u0022showNewsletterTip\u0022:false}"; WRM._unparsedData["jira.core:dateFormatProvider.allFormats"]="{\u0022dateFormats\u0022:{\u0022meridiem\u0022:[\u0022AM\u0022,\u0022PM\u0022],\u0022eras\u0022:[\u0022BC\u0022,\u0022AD\u0022],\u0022months\u0022:[\u0022January\u0022,\u0022February\u0022,\u0022March\u0022,\u0022April\u0022,\u0022May\u0022,\u0022June\u0022,\u0022July\u0022,\u0022August\u0022,\u0022September\u0022,\u0022October\u0022,\u0022November\u0022,\u0022December\u0022],\u0022monthsShort\u0022:[\u0022Jan\u0022,\u0022Feb\u0022,\u0022Mar\u0022,\u0022Apr\u0022,\u0022May\u0022,\u0022Jun\u0022,\u0022Jul\u0022,\u0022Aug\u0022,\u0022Sep\u0022,\u0022Oct\u0022,\u0022Nov\u0022,\u0022Dec\u0022],\u0022weekdaysShort\u0022:[\u0022Sun\u0022,\u0022Mon\u0022,\u0022Tue\u0022,\u0022Wed\u0022,\u0022Thu\u0022,\u0022Fri\u0022,\u0022Sat\u0022],\u0022weekdays\u0022:[\u0022Sunday\u0022,\u0022Monday\u0022,\u0022Tuesday\u0022,\u0022Wednesday\u0022,\u0022Thursday\u0022,\u0022Friday\u0022,\u0022Saturday\u0022]},\u0022lookAndFeelFormats\u0022:{\u0022relativize\u0022:\u0022true\u0022,\u0022time\u0022:\u0022HH:mm\u0022,\u0022day\u0022:\u0022EEEE HH:mm\u0022,\u0022dmy\u0022:\u0022yyyy-MM-dd\u0022,\u0022complete\u0022:\u0022yyyy-MM-dd HH:mm\u0022}}"; WRM._unparsedData["com.atlassian.jira.jira-quick-edit-plugin:license-type.data"]="{\u0022isDcLicense\u0022:true}"; WRM._unparsedData["com.atlassian.jira.plugins.jira-dnd-attachment-plugin:dnd-issue-drop-zone.upload-limit"]="\u002252428800\u0022"; WRM._unparsedData["com.atlassian.jira.plugins.jira-wiki-editor:wiki-editor-thumbnails.thumbnails-allowed"]="true"; WRM._unparsedData["jira.core:user-message-flags-data.adminLockout"]="{}"; WRM._unparsedData["jira.core:default-comment-security-level-data.DefaultCommentSecurityLevelHelpLink"]="{\u0022extraClasses\u0022:\u0022default-comment-level-help\u0022,\u0022title\u0022:\u0022Commenting on an Issue\u0022,\u0022url\u0022:\u0022https://docs.atlassian.com/jira/jcore-docs-0912/Editing+and+collaborating+on+issues#Editingandcollaboratingonissues-restrictacomment\u0022,\u0022isLocal\u0022:false}"; WRM._unparsedData["jira.core:feature-flags-data.feature-flag-data"]="{\u0022enabled-feature-keys\u0022:[\u0022com.atlassian.jira.agile.darkfeature.editable.detailsview\u0022,\u0022nps.survey.inline.dialog\u0022,\u0022com.atlassian.jira.agile.darkfeature.edit.closed.sprint.enabled\u0022,\u0022jira.plugin.devstatus.phasetwo\u0022,\u0022jira.frother.reporter.field\u0022,\u0022atlassian.rest.xsrf.legacy.enabled\u0022,\u0022jira.issue.status.lozenge\u0022,\u0022com.atlassian.jira.projects.issuenavigator\u0022,\u0022jira.plugin.devstatus.phasetwo.enabled\u0022,\u0022com.atlassian.jira.config.PDL\u0022,\u0022atlassian.aui.raphael.disabled\u0022,\u0022crowd.sync.nested.groups.group.membership.changes.batching.enabled\u0022,\u0022app-switcher.new\u0022,\u0022frother.assignee.field\u0022,\u0022com.atlassian.jira.projects.ProjectCentricNavigation.Switch\u0022,\u0022jira.onboarding.cyoa\u0022,\u0022com.atlassian.jira.agile.darkfeature.kanplan.enabled\u0022,\u0022com.atlassian.jira.projects.sidebar.DEFER_RESOURCES\u0022,\u0022com.atlassian.jira.config.ProjectConfig.MENU\u0022,\u0022com.atlassian.jira.agile.darkfeature.kanplan.epics.and.versions.enabled\u0022,\u0022com.atlassian.jira.agile.darkfeature.sprint.goal.enabled\u0022,\u0022jira.zdu.admin-updates-ui\u0022,\u0022jira.zdu.jmx-monitoring\u0022,\u0022sd.new.settings.sidebar.location.disabled\u0022,\u0022crowd.event.transformer.directory.manager.cache\u0022,\u0022jira.zdu.cluster-upgrade-state\u0022,\u0022com.atlassian.jira.email.templates.readFromJiraHome\u0022,\u0022com.atlassian.jira.agile.darkfeature.splitissue\u0022,\u0022crowd.sync.delete.user.memberships.batching.enabled\u0022,\u0022com.atlassian.jira.config.CoreFeatures.LICENSE_ROLES_ENABLED\u0022,\u0022jira.export.csv.enabled\u0022],\u0022feature-flag-states\u0022:{\u0022com.atlassian.jira.use.same.site.none.for.xsrf.token.cookie\u0022:true,\u0022com.atlassian.jira.leaked.all.anonymous.access\u0022:true,\u0022com.atlassian.jira.in.product.diagnostics.extended.logging\u0022:false,\u0022com.atlassian.jira.agile.darkfeature.handle.ug.usernames\u0022:true,\u0022com.atlassian.jira.security.rest.menu.anonymous.access.denied\u0022:true,\u0022com.atlassian.jira.mailHandlerImapMessageQueryLegacy\u0022:false,\u0022com.atlassian.diagnostics.scheduler.monitor\u0022:true,\u0022com.atlassian.jira.webhookEventsAsyncProcessing\u0022:false,\u0022jira.customfields.dual.list.box\u0022:true,\u0022com.atlassian.jira.serAllowShareWithNonMember\u0022:true,\u0022com.atlassian.jira.diagnostics.perflog\u0022:true,\u0022com.atlassian.jira.dbr\u0022:true,\u0022com.atlassian.jira.bc.user.search.MeasuringUserPickerSearchService\u0022:false,\u0022com.atlassian.jira.agile.darkfeature.legacy.epic.picker\u0022:false,\u0022com.atlassian.jira.issuetable.move.links.hidden\u0022:true,\u0022jira.renderer.consider.variable.format\u0022:true,\u0022jira.no.frother.multiuserpicker.field\u0022:false,\u0022com.atlassian.jira.plugin.issuenavigator.jql.autocomplete.eagerlyLoaded\u0022:false,\u0022com.atlassian.jira.user.dbIdBasedKeyGenerationStrategy\u0022:true,\u0022com.atlassian.portfolio.dcBundling\u0022:true,\u0022com.atlassian.jira.rest.enable.new.session.creation.endpoint\u0022:true,\u0022com.atlassian.jira.sharedEntityEditRights\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.sprint.goal\u0022:true,\u0022com.atlassian.jira.thumbnailsDeferredGeneration\u0022:true,\u0022jira.cluster.monitoring.show.offline.nodes\u0022:true,\u0022com.atlassian.jira.projects.ProjectCentricNavigation.ProjectShortcutOrder\u0022:true,\u0022com.atlassian.jira.commentReactions\u0022:true,\u0022data.pipeline.feature.jira.issue.links.export\u0022:true,\u0022com.atlassian.jira.web.action.admin.integrity.checker.task.cleanup\u0022:true,\u0022com.atlassian.jira.custom.csv.escaper\u0022:true,\u0022com.atlassian.jira.fixedCommentDeletionNotifications\u0022:true,\u0022com.atlassian.jira.allThumbnailsDeferred\u0022:false,\u0022com.atlassian.jira.plugin.issuenavigator.filtersUxImprovment\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.kanplan.epics.and.versions\u0022:true,\u0022com.atlassian.jira.TextUtilsWrapper.deserialization\u0022:false,\u0022jira.customfields.cleanup.identification\u0022:true,\u0022data.pipeline.feature.jira.all.exportable.custom.fields\u0022:true,\u0022com.atlassian.jira.in.product.diagnostics.wip\u0022:false,\u0022com.atlassian.jira.defaultValuesForSystemFields\u0022:true,\u0022jira.dc.cleanup.cluser.tasks\u0022:true,\u0022jira.customfields.bulk.delete\u0022:true,\u0022mail.batching.override.core\u0022:true,\u0022com.atlassian.jira.issues.archiving.filters\u0022:false,\u0022jira.users.and.roles.page.in.react\u0022:true,\u0022jira.security.csp.sandbox\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.synced.sprints\u0022:false,\u0022com.atlassian.jira.agile.darkfeature.velocity.chart.ui\u0022:true,\u0022com.atlassian.jira.returnDefaultAvatarsForBrokenAvatars\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.sprint.auto.management\u0022:true,\u0022jira.jql.suggestrecentfields\u0022:false,\u0022com.atlassian.jira.gdpr.rtbf\u0022:true,\u0022com.atlassian.jira.ignoreBrowseUsersPermissionsInUserPickers\u0022:true,\u0022com.atlassian.jira.issue.comments.updateIssueObjectBeforeEventTrigger\u0022:true,\u0022com.atlassian.jira.security.xsrf.session.token\u0022:true,\u0022com.atlassian.jira.rest.search.filter.user.input.preserve\u0022:true,\u0022com.atlassian.jira.security.project.admin.revoke.with.application.access\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.optimistic.transitions\u0022:true,\u0022com.atlassian.jiranomenclature\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.kanplan\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.boards.find.on.board\u0022:true,\u0022com.atlassian.diagnostics.http.monitor\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.future.sprint.dates\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.complete.sprint.in.backlog\u0022:true,\u0022jira.customfields.paginated.ui\u0022:true,\u0022com.atlassian.jira.filtersAndDashboardsShareableWithAllGroupsAndRoles\u0022:true,\u0022com.atlassian.jira.in.product.diagnostics\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.edit.closed.sprint\u0022:true,\u0022jira.create.linked.issue\u0022:true,\u0022jira.customfields.configure.modern.ui\u0022:false,\u0022jira.sal.host.connect.accessor.existing.transaction.will.create.transactions\u0022:true,\u0022com.atlassian.jira.advanced.audit.log\u0022:true,\u0022com.atlassian.jira.security.csv.export.injection.protection\u0022:true,\u0022jira.quick.search\u0022:true,\u0022external.links.new.window\u0022:true,\u0022jira.jql.smartautoselectfirst\u0022:false,\u0022jira.jql.membersof.ignoreGlobalPermissionsForAnonymous\u0022:false,\u0022jira.create.linked.issue.show.all.fields\u0022:true,\u0022data.pipeline.feature.jira.issue.history.export\u0022:true,\u0022jira.webactions.request.method.recognition\u0022:true,\u0022jira.richeditor.bidi.warning\u0022:true,\u0022atlassian.cdn.static.assets\u0022:true,\u0022com.atlassian.jira.lazyload.activity.tabs\u0022:true,\u0022mail.batching\u0022:false,\u0022com.atlassian.jira.safeguards\u0022:true,\u0022com.atlassian.jira.issue.index.db.filter.out.archive.issues\u0022:true,\u0022com.atlassian.jira.xml.deserializerAllowlist\u0022:true,\u0022com.atlassian.jira.privateEntitiesEditable\u0022:true,\u0022com.atlassian.jira.cfoIncludeArchivedIssuesAndAlwaysKeepContext\u0022:true,\u0022jira.priorities.per.project.edit.default\u0022:false,\u0022com.atlassian.jira.projectArchivedIssuesAreMarkedInIssueTable\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.issues.in.epic.details.view\u0022:true,\u0022com.atlassian.jira.attachments.storage.configurable\u0022:false,\u0022com.atlassian.jira.plugin.issuenavigator.anonymousPreventCfData\u0022:false,\u0022jira.priorities.per.project.jsd\u0022:true,\u0022com.atlassian.jira.safeguards.email.notifications\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.rapid.boards.bands\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.flexible.boards\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.sprint.picker.allsprints.suggestion\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.epic.validate.visibility\u0022:true,\u0022data.pipeline.feature.jira.issue.rank.export\u0022:true,\u0022data.pipeline.feature.jira.jsm.approvals.export\u0022:true,\u0022jira.dc.lock.leasing\u0022:true,\u0022com.atlassian.jira.accessibility.personal.settings\u0022:true,\u0022mail.batching.create.section.cf\u0022:true,\u0022com.atlassian.jira.send.email.notifications.to.user.without.application.access\u0022:false,\u0022com.atlassian.mail.server.managers.hostname.verification\u0022:true,\u0022com.atlassian.advancedroadmaps.rebrand\u0022:true,\u0022com.atlassian.diagnostics.monitors\u0022:true,\u0022com.atlassian.jira.upgrade.startup.fix.index\u0022:true,\u0022com.atlassian.jira.cacheResource\u0022:false,\u0022com.atlassian.jira.pin.comments\u0022:true,\u0022jira.redirect.anonymous.404.errors\u0022:true,\u0022com.atlassian.jira.issuetable.draggable\u0022:true,\u0022data.pipeline.feature.jira.jsm.canned.responses.export\u0022:true,\u0022com.atlassian.diagnostics.operating.system.monitor\u0022:false,\u0022com.atlassian.jira.attachments.generate.unique.suffix\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.kanban.hide.old.done.issues\u0022:true,\u0022jira.version.based.node.reindex.service\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.backlog.showmore\u0022:true,\u0022com.atlassian.diagnostics.database.monitor\u0022:true,\u0022com.atlassian.jira.quick.search.mode.settable\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.sprint.plan\u0022:false,\u0022com.atlassian.diagnostics.garbage.collection.monitor\u0022:true,\u0022jira.jql.membersof.ignoreGlobalPermissionsForLoggedUsers\u0022:false,\u0022com.atlassian.jira.safeguards.work.in.progress\u0022:false,\u0022com.atlassian.jira.commentStickyFooter\u0022:true,\u0022com.atlassian.jira.security.LegacyJiraTypeResolver.WARN_ONLY\u0022:false,\u0022data.pipeline.feature.jira.schema.version.2\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.burnupchart\u0022:true,\u0022com.atlassian.jira.issues.archiving.browse\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.velocity.sprint.picker\u0022:false,\u0022jira.instrumentation.laas\u0022:false,\u0022com.atlassian.jira.security.ChartUtils.browse.projects.permission.check\u0022:false,\u0022com.atlassian.jira.security.text.gadget.output.sanitization\u0022:true,\u0022data.pipeline.feature.jira.jsm.kb.stats.events.export\u0022:true,\u0022mail.batching.user.notification\u0022:true,\u0022com.atlassian.diagnostics.jql.monitor\u0022:true,\u0022com.atlassian.portfolio.permission.check.for.permissions\u0022:true,\u0022com.atlassian.jira.agile.darkfeature.dataonpageload\u0022:true,\u0022com.atlassian.jira.issue.watchers.filterUsersWithoutProjectAccess\u0022:true,\u0022jira.webactions.request.method.dependent.xsrf.checks\u0022:true,\u0022data.pipeline.feature.jira.archived.issue.export\u0022:false,\u0022com.atlassian.jira.projects.per.project.permission.query\u0022:true,\u0022com.atlassian.jira.issues.archiving\u0022:true,\u0022jira.priorities.per.project\u0022:true,\u0022index.use.snappy\u0022:true}}"; WRM._unparsedData["jira.core:terminology-data.terminology"]="{\u0022terminologyEntries\u0022:[{\u0022originalName\u0022:\u0022sprint\u0022,\u0022originalNamePlural\u0022:\u0022sprints\u0022,\u0022newName\u0022:\u0022sprint\u0022,\u0022newNamePlural\u0022:\u0022sprints\u0022,\u0022isDefault\u0022:true},{\u0022originalName\u0022:\u0022epic\u0022,\u0022originalNamePlural\u0022:\u0022epics\u0022,\u0022newName\u0022:\u0022epic\u0022,\u0022newNamePlural\u0022:\u0022epics\u0022,\u0022isDefault\u0022:true}],\u0022isTerminologyActive\u0022:false}"; WRM._unparsedData["jira.core:avatar-picker-data.data"]="{}"; WRM._unparsedData["archivingProjectHelpUrl"]="\u0022https://docs.atlassian.com/jira/jadm-docs-0912/Archiving+a+project\u0022"; WRM._unparsedData["archivingIssueHelpUrl"]="\u0022https://docs.atlassian.com/jira/jadm-docs-0912/Archiving+an+issue\u0022"; WRM._unparsedData["com.atlassian.analytics.analytics-client:programmatic-analytics-init.programmatic-analytics-data-provider"]="false"; WRM._unparsedData["com.atlassian.plugins.atlassian-plugins-webresource-plugin:context-path.context-path"]="\u0022\u0022"; WRM._unparsedData["com.atlassian.analytics.analytics-client:policy-update-init.policy-update-data-provider"]="false"; WRM._unparsedData["com.atlassian.jira.jira-header-plugin:dismissedFlags.flags"]="{\u0022dismissed\u0022:[]}"; WRM._unparsedData["com.atlassian.jira.jira-issue-nav-components:issueviewer.features"]="{\u0022rteEnabled\u0022:true}"; WRM._unparsedData["com.atlassian.jira.jira-projects-issue-navigator:server-rendered"]="true"; WRM._unparsedData["com.atlassian.jira.project-templates-plugin:project-templates-plugin-resources.ptAnalyticsData"]="{\u0022instanceCreatedDate\u0022:\u00222012-05-21\u0022}"; if(window.WRM._dataArrived)window.WRM._dataArrived();</script> <link rel="stylesheet" href="/s/9bf3237551cce4ecb0571f8fd65aaf9d-CDN/-gdi7pl/9120015/1xlxtdz/34fff120d02af43fb6c51fd1b21176f3/_/download/contextbatch/css/_super,-flush-app-header-early-inline-resources,-com.atlassian.plugins.atlassian-plugins-webresource-rest:data-collector-perf-observer,-jira.webresources:event-deferrer,-jira.webresources:resource-phase-checkpoint-init/batch.css" data-wrm-key="_super,-flush-app-header-early-inline-resources,-com.atlassian.plugins.atlassian-plugins-webresource-rest:data-collector-perf-observer,-jira.webresources:event-deferrer,-jira.webresources:resource-phase-checkpoint-init" data-wrm-batch-type="context" media="all"> <link rel="stylesheet" href="/s/e3f6ceb1bf7e5c8cdbe80ab18c217cbd-CDN/-gdi7pl/9120015/1xlxtdz/b7f15822df3e996138dc751d8ca17ac8/_/download/contextbatch/css/project.issue.navigator,jira.view.issue,atl.general,jira.global,-_super/batch.css?agile_global_admin_condition=true&amp;jag=true&amp;jira.create.linked.issue=true&amp;richediton=true" data-wrm-key="project.issue.navigator,jira.view.issue,atl.general,jira.global,-_super" data-wrm-batch-type="context" media="all"> <link rel="stylesheet" href="/s/5b17c8c17effa69d027399958e3af7f4-CDN/-gdi7pl/9120015/1xlxtdz/f2867635c778db18cb252358085f10d8/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css" data-wrm-key="jira.global.look-and-feel,-_super" data-wrm-batch-type="context" media="all"> <script src="/s/31b8283e48d75c6dbfbca2fc07f32f9e-CDN/-gdi7pl/9120015/1xlxtdz/34fff120d02af43fb6c51fd1b21176f3/_/download/contextbatch/js/_super,-flush-app-header-early-inline-resources,-com.atlassian.plugins.atlassian-plugins-webresource-rest:data-collector-perf-observer,-jira.webresources:event-deferrer,-jira.webresources:resource-phase-checkpoint-init/batch.js?locale=en-US" data-wrm-key="_super,-flush-app-header-early-inline-resources,-com.atlassian.plugins.atlassian-plugins-webresource-rest:data-collector-perf-observer,-jira.webresources:event-deferrer,-jira.webresources:resource-phase-checkpoint-init" data-wrm-batch-type="context" data-initially-rendered defer></script> <script src="/s/8addd05ddf3eb4f3b42b2d382b07c379-CDN/-gdi7pl/9120015/1xlxtdz/b7f15822df3e996138dc751d8ca17ac8/_/download/contextbatch/js/project.issue.navigator,jira.view.issue,atl.general,jira.global,-_super/batch.js?agile_global_admin_condition=true&amp;jag=true&amp;jira.create.linked.issue=true&amp;locale=en-US&amp;richediton=true" data-wrm-key="project.issue.navigator,jira.view.issue,atl.general,jira.global,-_super" data-wrm-batch-type="context" data-initially-rendered defer></script> <script src="/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-gdi7pl/9120015/1xlxtdz/9362d8d4bbff0c33a282f79cbacda45b/_/download/contextbatch/js/jira.general,-_super/batch.js" data-wrm-key="jira.general,-_super" data-wrm-batch-type="context" data-initially-rendered defer></script> <script src="/s/72499881a7683509ec6fb757115c62f9-CDN/-gdi7pl/9120015/1xlxtdz/8d8225b14c169de0679d3f268887840e/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en-US" data-wrm-key="atl.global,-_super" data-wrm-batch-type="context" data-initially-rendered defer></script> <script src="/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-gdi7pl/9120015/1xlxtdz/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js" data-wrm-key="jira.webresources:calendar-en" data-wrm-batch-type="resource" data-initially-rendered defer></script> <script src="/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-gdi7pl/9120015/1xlxtdz/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js" data-wrm-key="jira.webresources:calendar-localisation-moment" data-wrm-batch-type="resource" data-initially-rendered defer></script> <script type="module">WRM.requireLazily(["wr!com.atlassian.plugins.atlassian-plugins-webresource-rest:data-collector-async"])</script> <title>Loading...</title> <link id="open-search-description-link" rel="search" type="application/opensearchdescription+xml" href="/osd.jsp" title="Loading..."/> </head> <body id="jira" class="aui-layout aui-theme-default"> <div id="page"> <div id="header-skeleton" class="aui-header" style="--aui-appheader-bg-color: #3b5b7b; position: absolute; width: 100%; padding: 0"> <span elementtiming="app-header-skeleton"> </span> <script> performance.mark("app-header-skeleton"); </script> <svg id="jira_app_header_skeleton" class="aui-header-primary" width="100%" height="40" xmlns="http://www.w3.org/2000/svg"> <style> #mask { animation: mask 0.8s forwards linear infinite; } @keyframes mask { from { transform: translateX(0) } to { transform: translateX(100%) } } </style> </svg> <script> const jiraAppHeaderSkeletonSvg = document.querySelector('#jira_app_header_skeleton'); jiraAppHeaderSkeletonSvg.setAttribute('width', __jiraAppHeaderSkeleton.headerWidth); jiraAppHeaderSkeletonSvg.innerHTML += __jiraAppHeaderSkeleton.headerSvg; </script> </div> <script> window.WRM=window.WRM||{};window.WRM._unparsedData=window.WRM._unparsedData||{};window.WRM._unparsedErrors=window.WRM._unparsedErrors||{}; WRM._unparsedData["selected-item-id"]="\u0022com.atlassian.jira.jira-projects-issue-navigator:sidebar-issue-navigator\u0022"; WRM._unparsedData["com.atlassian.jira.jira-issue-nav-components:inline-edit-enabled"]="true"; if(window.WRM._dataArrived)window.WRM._dataArrived();</script> <link rel="stylesheet" href="/s/df58f5846fa8641d8d9f098484dde084-CDN/-gdi7pl/9120015/1xlxtdz/677c0506dd2dcaa8a9bebed33baa321d/_/download/contextbatch/css/com.atlassian.jira.jira-projects-plugin:sidebar-placeholder,-_super,-jira.view.issue/batch.css?jag=true&amp;jira.create.linked.issue=true&amp;richediton=true" data-wrm-key="com.atlassian.jira.jira-projects-plugin:sidebar-placeholder,-_super,-jira.view.issue" data-wrm-batch-type="context" media="all"> <script src="/s/a4311a53228c85b5ca4c2d0fae0f115a-CDN/-gdi7pl/9120015/1xlxtdz/677c0506dd2dcaa8a9bebed33baa321d/_/download/contextbatch/js/com.atlassian.jira.jira-projects-plugin:sidebar-placeholder,-_super,-jira.view.issue/batch.js?jag=true&amp;jira.create.linked.issue=true&amp;locale=en-US&amp;richediton=true" data-wrm-key="com.atlassian.jira.jira-projects-plugin:sidebar-placeholder,-_super,-jira.view.issue" data-wrm-batch-type="context" data-initially-rendered></script> <link rel="stylesheet" href="/s/19381bad3d495d40855d34486ba39cd7-CDN/-gdi7pl/9120015/1xlxtdz/3ece4c304b4891b5055bc3ae5e8d58d5/_/download/contextbatch/css/jira.project.sidebar,-_super,-jira.view.issue,-atl.general,-project.issue.navigator,-com.atlassian.jira.jira-projects-plugin:sidebar-placeholder/batch.css?agile_global_admin_condition=true&amp;jag=true&amp;jira.create.linked.issue=true&amp;richediton=true" data-wrm-key="jira.project.sidebar,-_super,-jira.view.issue,-atl.general,-project.issue.navigator,-com.atlassian.jira.jira-projects-plugin:sidebar-placeholder" data-wrm-batch-type="context" media="all"> <script src="/s/4b73944394d61a4aa03a047d4da17130-CDN/-gdi7pl/9120015/1xlxtdz/3ece4c304b4891b5055bc3ae5e8d58d5/_/download/contextbatch/js/jira.project.sidebar,-_super,-jira.view.issue,-atl.general,-project.issue.navigator,-com.atlassian.jira.jira-projects-plugin:sidebar-placeholder/batch.js?agile_global_admin_condition=true&amp;jag=true&amp;jira.create.linked.issue=true&amp;locale=en-US&amp;richediton=true" data-wrm-key="jira.project.sidebar,-_super,-jira.view.issue,-atl.general,-project.issue.navigator,-com.atlassian.jira.jira-projects-plugin:sidebar-placeholder" data-wrm-batch-type="context" data-initially-rendered defer></script> <script> document.getElementById("header-skeleton").remove(); </script> <header id="header" role="banner"> <div id="browser-warning" class="aui-message aui-message-error closeable"> <p> You are using an unsupported browser or your browser might be in the Compatibility View mode. See <a href='https://docs.atlassian.com/jira/jadm-docs-0912/Supported+Platforms'> Supported Platforms </a> for more information. </p> </div> <a class="aui-skip-link" href="/login.jsp?os_destination=%2Fbrowse%2FJDK-8336353">Log in</a><a class="aui-skip-link" href="#main">Skip to main content</a><a class="aui-skip-link" href="#sidebar">Skip to sidebar</a><nav class="aui-header aui-dropdown2-trigger-group" aria-label="Site"><div class="aui-header-inner"><div class="aui-header-primary"><span id="logo" class="aui-header-logo aui-header-logo-custom"><a href="https://bugs.openjdk.org/secure/MyJiraHome.jspa" aria-label="Go to home page"><img src="/s/-gdi7pl/9120015/1xlxtdz/_/jira-logo-scaled.png" alt="Java Bug System" /></a></span><ul class='aui-nav'><li><a role="button" href="/secure/Dashboard.jspa" class=" aui-nav-link aui-dropdown2-trigger jira-dropdown2-ajax" id="home_link" aria-haspopup="true" aria-controls="home_link-content" title="View and manage your dashboards" accesskey="d" elementtiming="app-header" data-aui-extra-classes>Dashboards</a><div class="aui-dropdown2 aui-style-default" id="home_link-content" data-aui-dropdown2-ajax-key="home_link"></div></li><li><a role="button" href="/secure/BrowseProjects.jspa" class=" aui-nav-link aui-dropdown2-trigger jira-dropdown2-ajax" id="browse_link" aria-haspopup="true" aria-controls="browse_link-content" title="View recent projects and browse a list of projects" accesskey="p" data-aui-extra-classes>Projects</a><div class="aui-dropdown2 aui-style-default" id="browse_link-content" data-aui-dropdown2-ajax-key="browse_link"></div></li><li><a role="button" href="/issues/" class=" aui-nav-link aui-dropdown2-trigger jira-dropdown2-ajax" id="find_link" aria-haspopup="true" aria-controls="find_link-content" title="Search for issues and view recent issues" accesskey="i" data-aui-extra-classes>Issues</a><div class="aui-dropdown2 aui-style-default" id="find_link-content" data-aui-dropdown2-ajax-key="find_link"></div></li><script>performance.mark("app-header");</script> </ul></div><div class="aui-header-secondary"><ul class='aui-nav'> <li id="quicksearch-menu"> <form action="/secure/QuickSearch.jspa" method="get" id="quicksearch" class="aui-quicksearch dont-default-focus ajs-dirty-warning-exempt"> <input id="quickSearchInput" aria-live="polite" role="searchbox" autocomplete="off" class="search" type="text" title="Search" placeholder="Search" name="searchString" accessKey="q" /> <input type="submit" class="hidden" value="Search"> </form> </li> <li id="system-help-menu"> <a class="aui-nav-link aui-dropdown2-trigger aui-dropdown2-trigger-arrowless" id="help_menu" aria-label="Help" aria-haspopup="true" aria-owns="system-help-menu-content" href="https://docs.atlassian.com/jira/jcore-docs-0912/" target="_blank" rel="noopener noreferrer" title="Help" > <span class="aui-icon aui-icon-small aui-iconfont-question-filled">Help</span> </a> <div id="system-help-menu-content" class="aui-dropdown2 aui-style-default"> <div class="aui-dropdown2-section"> <ul id="jira-help" class="aui-list-truncate"> <li> <a id="view_core_help" class="aui-nav-link " title="Go to the online documentation for Jira Core" href="https://docs.atlassian.com/jira/jcore-docs-0912/" target="_blank" >Jira Core help</a> </li> <li> <a id="keyshortscuthelp" class="aui-nav-link " title="Get more information about Jira's Keyboard Shortcuts" href="/secure/ViewKeyboardShortcuts!default.jspa" target="_blank" >Keyboard Shortcuts</a> </li> <li> <a id="view_about" class="aui-nav-link " title="Get more information about Jira" href="/secure/AboutPage.jspa" >About Jira</a> </li> <li> <a id="view_credits" class="aui-nav-link " title="See who did what" href="/secure/credits/AroundTheWorld!default.jspa" target="_blank" >Jira Credits</a> </li> </ul> </div> </div> </li> <li id="user-options"> <a class="aui-nav-link login-link" href="/login.jsp?os_destination=%2Fbrowse%2FJDK-8336353">Log In</a> <div id="user-options-content" class="aui-dropdown2 aui-style-default"> <div class="aui-dropdown2-section"> <ul id="personal" class="aui-list-truncate"> <li> <a id="subComponentWatch" class="" href="/secure/subComponentWatch.jspa">Watched Subcomponents</a> </li> </ul> </div> </div> </li> </ul></div></div><!-- .aui-header-inner--><aui-header-end></aui-header-end></nav><!-- .aui-header --> </header> <div id="content"> <template id="head-content-tmp-0"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="ajs-can-search-users" content="false"> <meta name="ajs-can-edit-watchers" content="false"> <meta name="ajs-default-avatar-url" content="https://bugs.openjdk.org/secure/useravatar?size=xsmall&amp;avatarId=10123"> <meta name="ajs-issue-project-type" content="software"> <meta name="ajs-issue-key" content="JDK-8336353"> <meta name="ajs-server-view-issue-is-editable" content="false"> </template><script> (function(executionIdx) { const template = document.getElementById("head-content-tmp-" + executionIdx); const nodes = document.adoptNode(template.content); // browsers can set 'async=true' flag for script tags, we need to fix that Array.from(nodes.children).filter(node => node.nodeName === 'SCRIPT').forEach(node => node.async = false); document.head.appendChild(nodes); template.remove(); }) (0);</script> <script>document.title = "[JDK-8336353] Revisit AnnotationConstantValueEntry and AnnotationValue.OfConstant - Java Bug System"; document.getElementById("open-search-description-link").setAttribute("title", "[JDK-8336353] Revisit AnnotationConstantValueEntry and AnnotationValue.OfConstant - Java Bug System");</script> <script>document.body.setAttribute("data-version","9.12.15");</script> <section aria-expanded="true" class="aui-sidebar sidebar-placeholder" data-aui-responsive="false"><div class="aui-sidebar-wrapper"><div class="aui-sidebar-body"></div><div class="aui-sidebar-footer"><button class="aui-button aui-button-subtle aui-sidebar-toggle aui-sidebar-footer-tipsy" aria-label="Collapse sidebar ( [ )" ><span class="aui-icon aui-icon-small aui-iconfont-chevron-double-left"></span></button></div></div></section><script id="projects-sidebar-init"> (function() { //In AUI library, 1240px width is used to determine viewport narrow or not. const FORCE_COLLAPSE_WIDTH = 1240; document.body.classList.add('aui-page-sidebar'); // Is Viewport Narrow const isViewportNarrow = () => window.innerWidth < FORCE_COLLAPSE_WIDTH; const isSidebarCollapsed = () => { // WRM data provider - sidebar-collapsed-by-default is set to true for software boards otherwise undefined // hence used CSS class to determine software - backlog, board const isSoftwareBoard = document.body.classList.contains('ghx-rapid-views'); const sidebarState = localStorage.getItem('jira-sidebar-collapsed'); let isCollapsed = (sidebarState === 'true'); if (isSoftwareBoard && sidebarState === null) { isCollapsed = true; } return isCollapsed; } //expanded by default document.body.classList.remove('aui-sidebar-collapsed'); if (isViewportNarrow() || isSidebarCollapsed()) { document.body.classList.add('aui-sidebar-collapsed'); document.querySelector('.sidebar-placeholder').setAttribute('aria-expanded', false); } document.getElementById('projects-sidebar-init').remove(); }()) </script><div class="aui-page-panel" ><div class="aui-page-panel-inner"><div class="issue-navigator"><main id="main" class="content" role="main"><div class="issue-view"><div class="navigation-tools"><div class="pager-container"></div><div class="collapse-container"></div></div><div class="issue-container"><div id="issue-content" class="issue-edit-form"><header id="stalker" class="issue-header js-stalker"><div class="issue-header-content"><div class="aui-page-header" ><div class="aui-page-header-inner"><div class="aui-page-header-image" ><span id="10100" class="aui-avatar aui-avatar-large aui-avatar-project"><span class="aui-avatar-inner"><img id="project-avatar" alt="Uploaded image for project: &#39;JDK&#39;" src="https://bugs.openjdk.org/secure/projectavatar?pid=10100&amp;avatarId=10301" /></span></span></div><div class="aui-page-header-main" ><ol class="aui-nav aui-nav-breadcrumbs"><li><a id="project-name-val" href="/browse/JDK">JDK</a></li><li><a class="issue-link" data-issue-key="JDK-8336353" href="/browse/JDK-8336353" id="key-val" rel="5134219">JDK-8336353</a></li></ol><h2 id="summary-val">Revisit AnnotationConstantValueEntry and AnnotationValue.OfConstant</h2></div><div class="aui-page-header-actions" ><div id="issue-header-pager"></div></div></div></div><div class="command-bar"><div class="ops-cont"><div class="ops-menus aui-toolbar2"><div class="aui-toolbar2-inner"><div class="aui-toolbar2-primary"><div id="opsbar-ops-login-lnk_container" class="aui-buttons pluggable-ops"><a id="ops-login-lnk" role="button"title="Log In"class="aui-button toolbar-trigger" href="/login.jsp?os_destination=%2Fbrowse%2FJDK-8336353"><span class="trigger-label">Log In</span></a></div><div id="opsbar-opsbar-operations" class="aui-buttons pluggable-ops"></div><div id="opsbar-opsbar-transitions" class="aui-buttons pluggable-ops"><a href="#"id="opsbar-transitions_more"aria-owns="opsbar-transitions_more_drop"aria-haspopup="true" role="button"class="aui-button aui-dropdown2-trigger opsbar-transitions__status-category_done" data-aui-alignment-container=".command-bar"title="<span class=&quot;jira-issue-status-tooltip-title&quot;>Closed</span><br><span class=&quot;jira-issue-status-tooltip-desc&quot;>The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.</span>"><span class="dropdown-text">Closed</span></a></div><div id="opsbar-opsbar-admin" class="aui-buttons pluggable-ops"></div><div id="opsbar-opsbar-restore" class="aui-buttons pluggable-ops"></div></div><div class="aui-toolbar2-secondary"><div id="opsbar-jira.issue.tools" class="aui-buttons pluggable-ops"><a href="#"id="viewissue-export"aria-owns="viewissue-export_drop"aria-haspopup="true" role="button"title="Export this issue in another format"class="aui-button aui-dropdown2-trigger" data-aui-alignment-container=".command-bar"><span class="icon icon-default aui-icon aui-icon-small aui-iconfont-export"></span> <span class="dropdown-text">Export</span></a></div></div></div></div><aui-dropdown-menu id="opsbar-transitions_more_drop" ><div class="dropdown-skeleton-wrapper" hidden></div><aui-section hidden><aui-item-link href="#" id="transition-links-lazy" class="issueaction-lazy-loaded" hidden><span class="trigger-label">null</span></aui-item-link></aui-section></aui-dropdown-menu><aui-dropdown-menu id="viewissue-export_drop" ><aui-item-link href="/si/jira.issueviews:issue-xml/JDK-8336353/JDK-8336353.xml" id="jira.issueviews:issue-xml" ><span class="trigger-label">XML</span></aui-item-link><aui-item-link href="/si/jira.issueviews:issue-word/JDK-8336353/JDK-8336353.doc" id="jira.issueviews:issue-word" ><span class="trigger-label">Word</span></aui-item-link><aui-item-link href="/si/jira.issueviews:issue-html/JDK-8336353/JDK-8336353.html" id="jira.issueviews:issue-html" ><span class="trigger-label">Printable</span></aui-item-link></aui-dropdown-menu></div></div></div></header><div class="issue-body-content"><div class="aui-group issue-body"><div class="aui-item issue-main-column"><div id=details-module class="module toggle-wrap "><div id="details-module_heading" class="mod-header"><h3 class="toggle-header" id="details-module-label"><button class="aui-button toggle-title" aria-label="Details" aria-controls="details-module" aria-expanded="true"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><g fill="none" fill-rule="evenodd"><path d="M3.29175 4.793c-.389.392-.389 1.027 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955c.388-.392.388-1.027 0-1.419-.389-.392-1.018-.392-1.406 0l-2.298 2.317-2.307-2.327c-.194-.195-.449-.293-.703-.293-.255 0-.51.098-.703.293z" fill="#344563"/></g></svg><span class="aui-toggle-header-button-label">Details</span></button></h3><ul class="ops"></ul></div><div class="mod-content"> <ul id="issuedetails" class="property-list two-cols"> <li class="item"> <div class="wrap"> <strong class="name" title="Type"> <label for="issuetype">Type:</label> </strong> <span id="type-val" class="value"> <img alt="Icon: CSR" height="16" src="/secure/viewavatar?size=xsmall&amp;avatarId=20601&amp;avatarType=issuetype" title="CSR" width="16" aria-describedby="aui-tooltip" tabindex="0" /> CSR </span> </div> </li> <li class="item item-right"> <div class="wrap"> <strong class="name" title="Resolution">Resolution:</strong> <span id="resolution-val" class="value resolved" > Approved </span> </div> </li> <li class="item new"> <div class="wrap"> <strong class="name" title="Priority"> <label for="priority-field">Priority:</label> </strong> <span id="priority-val" class="value"> <img alt="Icon: P4" height="16" src="/images/jbsImages/p4.png" title="P4 - Minor loss of function, or other problem where easy workaround is present." width="16" aria-describedby="aui-tooltip" tabindex="0" /> P4 </span> </div> </li> <li class="item item-right"> <div class="wrap"> <strong class="name" title="Fix Version/s"> <label for="fixVersions"> Fix Version/s: </label> </strong> <span id="fixfor-val" class="value"> <span class="shorten" id="fixVersions-field"> <a href="/issues/?jql=project+%3D+JDK+AND+fixVersion+%3D+%2224%22" title="24 JDK 24">24</a> </span> </span> </div> </li> <li class="item"> <div class="wrap"> <strong class="name" title="Component/s"> <label for="components">Component/s:</label> </strong> <span id="components-val" class="value"> <span class="shorten" id="components-field"> <a href="/issues/?jql=project+%3D+JDK+AND+component+%3D+core-libs" title="core-libs ">core-libs</a> </span> </span> </div> </li> <li class="item full-width"> <div class="wrap" id="wrap-labels"> <strong class="name" title="Labels"> <label for="labels-textarea">Labels:</label> </strong> <div class="labels-wrap value"> <span class="labels" id="labels-5134219-value">None</span> </div> </div> </li> </ul> <div id="customfieldmodule"> <div class="aui-tabs horizontal-tabs" id="customfield-tabs"> <div id="customfield-panel-1" class=" active-pane"> <ul class="property-list"> <li id="rowForcustomfield_10008" class="item"> <div class="wrap"> <strong title="Subcomponent" class="name"> <label for="customfield_10008">Subcomponent:</label> </strong> <div id="customfield_10008-val" class="value type-oracle-subComponentField" data-fieldtype="oracle-subComponentField" data-fieldtypecompletekey="com.oracle.jira.jira-subcomponent-plugin:oracle-subComponentField"> <span id="subcomponent-subscribers-val" style="cursor: pointer;"> <span > <a href='/issues/?jql=project+in+%28JDK%29+AND+component+in+%28core-libs%29+AND+Subcomponent+in+%28java.lang.classfile%29'>java.lang.classfile</a></span> </span> </span> </div> </div> </li> <li id="rowForcustomfield_11600" class="item"> <div class="wrap"> <strong title="Compatibility Kind" class="name"> <label for="customfield_11600">Compatibility Kind:</label> </strong> <div id="customfield_11600-val" class="value type-multicheckboxes" data-fieldtype="multicheckboxes" data-fieldtypecompletekey="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes"> <div class="shorten" id="customfield_11600-field"> <span>source</span> </div> </div> </div> </li> <li id="rowForcustomfield_11300" class="item"> <div class="wrap"> <strong title="Compatibility Risk" class="name"> <label for="customfield_11300">Compatibility Risk:</label> </strong> <div id="customfield_11300-val" class="value type-select" data-fieldtype="select" data-fieldtypecompletekey="com.atlassian.jira.plugin.system.customfieldtypes:select"> minimal </div> </div> </li> <li id="rowForcustomfield_11301" class="item"> <div class="wrap"> <strong title="Compatibility Risk Description" class="name"> <label for="customfield_11301">Compatibility Risk Description:</label> </strong> <div id="customfield_11301-val" class="value type-textarea" data-fieldtype="textarea" data-fieldtypecompletekey="com.atlassian.jira.plugin.system.customfieldtypes:textarea"> Changes to preview APIs entail the minimal risk. </div> </div> </li> <li id="rowForcustomfield_11601" class="item"> <div class="wrap"> <strong title="Interface Kind" class="name"> <label for="customfield_11601">Interface Kind:</label> </strong> <div id="customfield_11601-val" class="value type-multicheckboxes" data-fieldtype="multicheckboxes" data-fieldtypecompletekey="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes"> <div class="shorten" id="customfield_11601-field"> <span>Java API</span> </div> </div> </div> </li> <li id="rowForcustomfield_10704" class="item"> <div class="wrap"> <strong title="Scope" class="name"> <label for="customfield_10704">Scope:</label> </strong> <div id="customfield_10704-val" class="value type-select" data-fieldtype="select" data-fieldtypecompletekey="com.atlassian.jira.plugin.system.customfieldtypes:select"> SE </div> </div> </li> </ul> </div> </div></div> </div></div><div id=descriptionmodule class="module toggle-wrap "><div id="descriptionmodule_heading" class="mod-header"><h3 class="toggle-header" id="descriptionmodule-label"><button class="aui-button toggle-title" aria-label="Description" aria-controls="descriptionmodule" aria-expanded="true"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><g fill="none" fill-rule="evenodd"><path d="M3.29175 4.793c-.389.392-.389 1.027 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955c.388-.392.388-1.027 0-1.419-.389-.392-1.018-.392-1.406 0l-2.298 2.317-2.307-2.327c-.194-.195-.449-.293-.703-.293-.255 0-.51.098-.703.293z" fill="#344563"/></g></svg><span class="aui-toggle-header-button-label">Description</span></button></h3><ul class="ops"></ul></div><div class="mod-content"><div id="description-val" class="field-ignore-highlight"> <div class="user-content-block"> <h2>Summary</h2> <p>Update specifications in <code class="prettyprint" >AnnotationConstantValueEntry</code> and <code class="prettyprint" >AnnotationValue.OfConstant</code>, and rename <code class="prettyprint" >AnnotationValue.OfInteger</code> and <code class="prettyprint" >OfCharacter</code> to <code class="prettyprint" >AnnotationValue.OfInt</code> and <code class="prettyprint" >AnnotationValue.OfChar</code>.</p> <h2>Problem</h2> <p><code class="prettyprint" >AnnotationConstantValueEntry</code> and <code class="prettyprint" >AnnotationValue.OfConstant</code> are old modeling APIs before <a href="https://github.com/openjdk/jdk-sandbox/commit/bb7e29474ecfcfbd1eb01d237593eb80d062944f" class="external-link" target="_blank" rel="nofollow noopener" >specific types of annotation values are added</a>. Their designs do not account for their presence.</p> <p><code class="prettyprint" >AnnotationValue.OfConstant</code> is bug-prone: for example, <code class="prettyprint" >ConstantDesc constantValue()</code> method returns an <code class="prettyprint" >Integer</code> for char values, which is misleading because users may think that it returns a correct <code class="prettyprint" >Character</code> Object suitable for <code class="prettyprint" >AnnotationValue::of</code> to restore the annotation value, or for <code class="prettyprint" >toString</code> printing. This is already manifest in ClassFile API's <code class="prettyprint" >ClassPrinter</code>.</p> <p><code class="prettyprint" >AnnotationValue.OfInteger</code> and <code class="prettyprint" >OfCharacter</code> have weird naming; their factories are <code class="prettyprint" >ofInt</code> and <code class="prettyprint" >ofChar</code>, tag constants <code class="prettyprint" >AEV_INT</code> and <code class="prettyprint" >AEV_CHAR</code>, value accessors <code class="prettyprint" >intValue</code> and <code class="prettyprint" >charValue</code>.</p> <p><code class="prettyprint" >AnnotationValue</code> as a whole lacks documentation and would benefit from the addition of documentation.</p> <h2>Solution</h2> <p>Update AnnotationValue.OfConstant and AnnotationConstantValueEntry specifications, to emphasize the difference between VM types and the language types (namely subint are represented as int). <code class="prettyprint" >OfConstant</code> additionally has accessors for the VM (as CP entries) vs language types (as live objects), with clarifications on the methods.</p> <p><code class="prettyprint" >ConstantPoolBuilder::annotationConstantValueEntry</code> is removed. It had no usage.</p> <p>The <code class="prettyprint" >AnnotationConstantValueEntry constant()</code> is now specific to each value subtype. Users are supposed to access the entry with pattern matching in switch.</p> <p><code class="prettyprint" >AnnotationValue.OfInteger</code> and <code class="prettyprint" >OfCharacter</code> are renamed to <code class="prettyprint" >OfInt</code> and <code class="prettyprint" >OfChar</code>.</p> <p>Vastly improve the specification for AnnotationValue.</p> <h2>Specification</h2> <pre class="prettyprint" ><code>--- a/src/java.base/share/classes/java/lang/classfile/AnnotationValue.java +++ b/src/java.base/share/classes/java/lang/classfile/AnnotationValue.java @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) -public sealed interface AnnotationValue - permits AnnotationValue.OfAnnotation, AnnotationValue.OfArray, - AnnotationValue.OfConstant, AnnotationValue.OfClass, - AnnotationValue.OfEnum { +public sealed interface AnnotationValue { /** - * Models an annotation-valued element + * Models an annotation-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_ANNOTATION}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfAnnotation extends AnnotationValue permits AnnotationImpl.OfAnnotationImpl { - /** {@return the annotation} */ + /** {@return the annotation value} */ Annotation annotation(); } /** - * Models an array-valued element + * Models an array-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_ARRAY}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfArray extends AnnotationValue permits AnnotationImpl.OfArrayImpl { - /** {@return the values} */ + /** + * {@return the array elements of the array value} + * + * @apiNote + * All array elements derived from Java source code have the same type, + * which must not be an array type. ({@jls 9.6.1}) + */ List&lt;AnnotationValue&gt; values(); } /** - * Models a constant-valued element + * Models a constant-valued element. * * @sealedGraph * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfConstant extends AnnotationValue - permits AnnotationValue.OfString, AnnotationValue.OfDouble, - AnnotationValue.OfFloat, AnnotationValue.OfLong, - AnnotationValue.OfInteger, AnnotationValue.OfShort, - AnnotationValue.OfCharacter, AnnotationValue.OfByte, - AnnotationValue.OfBoolean, AnnotationImpl.OfConstantImpl { - /** {@return the constant} */ - /** {@return the constant} */ - ConstantDesc constantValue(); - } - - /** - * Models a constant-valued element + sealed interface OfConstant + extends AnnotationValue + permits OfString, OfDouble, OfFloat, OfLong, OfInt, OfShort, OfChar, OfByte, + OfBoolean, AnnotationImpl.OfConstantImpl { + /** + * {@return the constant pool entry backing this constant element} + * + * @apiNote + * Different types of constant values may share the same type of entry. + * For example, {@link OfInt} and {@link OfChar} are both + * backed by {@link IntegerEntry}. Use {@link #resolvedValue + * resolvedValue()} for a value of accurate type. + */ AnnotationConstantValueEntry constant(); + + /** + * {@return the resolved live constant value, as an object} The type of + * the returned value may be a wrapper class or {@link String}. + * + * @apiNote + * The returned object, despite being {@link Constable}, may not + * {@linkplain Constable#describeConstable() describe} the right constant + * for encoding the annotation value in a class file. For example, + * {@link Character} returned by {@link OfChar} describes itself as a + * {@link DynamicConstantPoolEntry}, but it is actually backed by + * {@link IntegerEntry} in annotation format. + * Use {@link #constant constant()} for a correct constant pool representation. + */ + Constable resolvedValue(); + } + + /** + * Models a string-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_STRING}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfString extends AnnotationValue.OfConstant + sealed interface OfString extends OfConstant permits AnnotationImpl.OfStringImpl { - /** {@return the constant} */ + /** {@return the backing UTF8 entry} */ + @Override + Utf8Entry constant(); + + /** {@return the constant string value} */ String stringValue(); + + /** + * {@return the resolved string value} + * + * @implSpec + * This method returns the same as {@link #stringValue()}. + */ + @Override + default String resolvedValue() { + return stringValue(); + } } /** - * Models a constant-valued element + * Models a double-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_DOUBLE}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfDouble extends AnnotationValue.OfConstant + sealed interface OfDouble extends OfConstant permits AnnotationImpl.OfDoubleImpl { - /** {@return the constant} */ + /** {@return the backing double entry} */ + @Override + DoubleEntry constant(); + + /** {@return the constant double value} */ double doubleValue(); + + /** + * {@return the resolved double value} + * + * @implSpec + * This method returns the same as {@link #doubleValue()}. + */ + @Override + default Double resolvedValue() { + return doubleValue(); + } } /** - * Models a constant-valued element + * Models a float-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_FLOAT}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfFloat extends AnnotationValue.OfConstant + sealed interface OfFloat extends OfConstant permits AnnotationImpl.OfFloatImpl { - /** {@return the constant} */ + /** {@return the backing float entry} */ + @Override + FloatEntry constant(); + + /** {@return the constant float value} */ float floatValue(); + + /** + * {@return the resolved float value} + * + * @implSpec + * This method returns the same as {@link #floatValue()}. + */ + @Override + default Float resolvedValue() { + return floatValue(); + } } /** - * Models a constant-valued element + * Models a long-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_LONG}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfLong extends AnnotationValue.OfConstant + sealed interface OfLong extends OfConstant permits AnnotationImpl.OfLongImpl { - /** {@return the constant} */ + /** {@return the backing long entry} */ + @Override + LongEntry constant(); + + /** {@return the constant long value} */ long longValue(); + + /** + * {@return the resolved long value} + * + * @implSpec + * This method returns the same as {@link #longValue()}. + */ + @Override + default Long resolvedValue() { + return longValue(); + } } /** - * Models a constant-valued element + * Models an int-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_INT}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfInteger extends AnnotationValue.OfConstant - permits AnnotationImpl.OfIntegerImpl { - /** {@return the constant} */ + sealed interface OfInt extends OfConstant + permits AnnotationImpl.OfIntImpl { + /** {@return the backing integer entry} */ + @Override + IntegerEntry constant(); + + /** {@return the constant int value} */ int intValue(); + + /** + * {@return the resolved int value} + * + * @implSpec + * This method returns the same as {@link #intValue()}. + */ + @Override + default Integer resolvedValue() { + return intValue(); + } } /** - * Models a constant-valued element + * Models a short-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_SHORT}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfShort extends AnnotationValue.OfConstant + sealed interface OfShort extends OfConstant permits AnnotationImpl.OfShortImpl { - /** {@return the constant} */ + /** {@return the backing integer entry} */ + @Override + IntegerEntry constant(); + + /** + * {@return the constant short value} + * @jvms 2.11.1 Types and the Java Virtual Machine + */ short shortValue(); + + /** + * {@return the resolved short value} + * + * @implSpec + * This method returns the same as {@link #shortValue()}. + */ + @Override + default Short resolvedValue() { + return shortValue(); + } } /** - * Models a constant-valued element + * Models a char-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_CHAR}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfCharacter extends AnnotationValue.OfConstant - permits AnnotationImpl.OfCharacterImpl { - /** {@return the constant} */ + sealed interface OfChar extends OfConstant + permits AnnotationImpl.OfCharImpl { + /** {@return the backing integer entry} */ + @Override + IntegerEntry constant(); + + /** + * {@return the constant char value} + * @jvms 2.11.1 Types and the Java Virtual Machine + */ char charValue(); + + /** + * {@return the resolved char value} + * + * @implSpec + * This method returns the same as {@link #charValue()}. + */ + @Override + default Character resolvedValue() { + return charValue(); + } } /** - * Models a constant-valued element + * Models a byte-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_BYTE}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfByte extends AnnotationValue.OfConstant + sealed interface OfByte extends OfConstant permits AnnotationImpl.OfByteImpl { - /** {@return the constant} */ + /** {@return the backing integer entry} */ + @Override + IntegerEntry constant(); + + /** + * {@return the constant byte value} + * @jvms 2.11.1 Types and the Java Virtual Machine + */ byte byteValue(); + + /** + * {@return the resolved byte value} + * + * @implSpec + * This method returns the same as {@link #byteValue()}. + */ + @Override + default Byte resolvedValue() { + return byteValue(); + } } /** - * Models a constant-valued element + * Models a boolean-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_BOOLEAN}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) - sealed interface OfBoolean extends AnnotationValue.OfConstant + sealed interface OfBoolean extends OfConstant permits AnnotationImpl.OfBooleanImpl { - /** {@return the constant} */ + /** {@return the backing integer entry} */ + @Override + IntegerEntry constant(); + + /** + * {@return the constant boolean value} + * @jvms 2.3.4 The &lt;i&gt;boolean&lt;/i&gt; Type + */ boolean booleanValue(); + + /** + * {@return the resolved boolean value} + * + * @implSpec + * This method returns the same as {@link #booleanValue()}. + */ + @Override + default Boolean resolvedValue() { + return booleanValue(); + } } /** - * Models a class-valued element + * Models a class-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_CLASS}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfClass extends AnnotationValue permits AnnotationImpl.OfClassImpl { - /** {@return the class name} */ + /** {@return the class descriptor string} */ Utf8Entry className(); - /** {@return the class symbol} */ + /** {@return the class descriptor} */ default ClassDesc classSymbol() { return ClassDesc.ofDescriptor(className().stringValue()); } } /** - * Models an enum-valued element + * Models an enum-valued element. + * The {@linkplain #tag tag} of this element is {@value ClassFile#AEV_ENUM}. * * @since 22 */ @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfEnum extends AnnotationValue permits AnnotationImpl.OfEnumImpl { - /** {@return the enum class name} */ + /** {@return the enum class descriptor string} */ Utf8Entry className(); - /** {@return the enum class symbol} */ + /** {@return the enum class descriptor} */ default ClassDesc classSymbol() { return ClassDesc.ofDescriptor(className().stringValue()); } @@ -249,7 +432,7 @@ default ClassDesc classSymbol() { /** * {@return an annotation element for a enum-valued element} - * @param className the name of the enum class + * @param className the descriptor string of the enum class * @param constantName the name of the enum constant */ static OfEnum ofEnum(Utf8Entry className, @@ -259,7 +442,7 @@ static OfEnum ofEnum(Utf8Entry className, /** * {@return an annotation element for a enum-valued element} - * @param className the name of the enum class + * @param className the descriptor of the enum class * @param constantName the name of the enum constant */ static OfEnum ofEnum(ClassDesc className, String constantName) { @@ -269,7 +452,7 @@ static OfEnum ofEnum(ClassDesc className, String constantName) { /** * {@return an annotation element for a class-valued element} - * @param className the name of the enum class + * @param className the descriptor string of the class */ static OfClass ofClass(Utf8Entry className) { return new AnnotationImpl.OfClassImpl(className); @@ -277,7 +460,7 @@ static OfClass ofClass(Utf8Entry className) { /** * {@return an annotation element for a class-valued element} - * @param className the name of the enum class + * @param className the descriptor of the class */ static OfClass ofClass(ClassDesc className) { return ofClass(TemporaryConstantPool.INSTANCE.utf8Entry(className.descriptorString())); @@ -287,7 +470,7 @@ static OfClass ofClass(ClassDesc className) { * {@return an annotation element for a string-valued element} * @param value the string */ - static OfConstant ofString(Utf8Entry value) { + static OfString ofString(Utf8Entry value) { return new AnnotationImpl.OfStringImpl(value); } @@ -295,7 +478,7 @@ static OfConstant ofString(Utf8Entry value) { * {@return an annotation element for a string-valued element} * @param value the string */ - static OfConstant ofString(String value) { + static OfString ofString(String value) { return ofString(TemporaryConstantPool.INSTANCE.utf8Entry(value)); } @@ -303,7 +486,7 @@ static OfConstant ofString(String value) { * {@return an annotation element for a double-valued element} * @param value the double value */ - static OfConstant ofDouble(DoubleEntry value) { + static OfDouble ofDouble(DoubleEntry value) { return new AnnotationImpl.OfDoubleImpl(value); } @@ -311,7 +494,7 @@ static OfConstant ofDouble(DoubleEntry value) { * {@return an annotation element for a double-valued element} * @param value the double value */ - static OfConstant ofDouble(double value) { + static OfDouble ofDouble(double value) { return ofDouble(TemporaryConstantPool.INSTANCE.doubleEntry(value)); } @@ -319,7 +502,7 @@ static OfConstant ofDouble(double value) { * {@return an annotation element for a float-valued element} * @param value the float value */ - static OfConstant ofFloat(FloatEntry value) { + static OfFloat ofFloat(FloatEntry value) { return new AnnotationImpl.OfFloatImpl(value); } @@ -327,7 +510,7 @@ static OfConstant ofFloat(FloatEntry value) { * {@return an annotation element for a float-valued element} * @param value the float value */ - static OfConstant ofFloat(float value) { + static OfFloat ofFloat(float value) { return ofFloat(TemporaryConstantPool.INSTANCE.floatEntry(value)); } @@ -335,7 +518,7 @@ static OfConstant ofFloat(float value) { * {@return an annotation element for a long-valued element} * @param value the long value */ - static OfConstant ofLong(LongEntry value) { + static OfLong ofLong(LongEntry value) { return new AnnotationImpl.OfLongImpl(value); } @@ -343,7 +526,7 @@ static OfConstant ofLong(LongEntry value) { * {@return an annotation element for a long-valued element} * @param value the long value */ - static OfConstant ofLong(long value) { + static OfLong ofLong(long value) { return ofLong(TemporaryConstantPool.INSTANCE.longEntry(value)); } @@ -351,15 +534,15 @@ static OfConstant ofLong(long value) { * {@return an annotation element for an int-valued element} * @param value the int value */ - static OfConstant ofInt(IntegerEntry value) { - return new AnnotationImpl.OfIntegerImpl(value); + static OfInt ofInt(IntegerEntry value) { + return new AnnotationImpl.OfIntImpl(value); } /** * {@return an annotation element for an int-valued element} * @param value the int value */ - static OfConstant ofInt(int value) { + static OfInt ofInt(int value) { return ofInt(TemporaryConstantPool.INSTANCE.intEntry(value)); } @@ -367,7 +550,7 @@ static OfConstant ofInt(int value) { * {@return an annotation element for a short-valued element} * @param value the short value */ - static OfConstant ofShort(IntegerEntry value) { + static OfShort ofShort(IntegerEntry value) { return new AnnotationImpl.OfShortImpl(value); } @@ -375,7 +558,7 @@ static OfConstant ofShort(IntegerEntry value) { * {@return an annotation element for a short-valued element} * @param value the short value */ - static OfConstant ofShort(short value) { + static OfShort ofShort(short value) { return ofShort(TemporaryConstantPool.INSTANCE.intEntry(value)); } @@ -383,15 +566,15 @@ static OfConstant ofShort(short value) { * {@return an annotation element for a char-valued element} * @param value the char value */ - static OfConstant ofChar(IntegerEntry value) { - return new AnnotationImpl.OfCharacterImpl(value); + static OfChar ofChar(IntegerEntry value) { + return new AnnotationImpl.OfCharImpl(value); } /** * {@return an annotation element for a char-valued element} * @param value the char value */ - static OfConstant ofChar(char value) { + static OfChar ofChar(char value) { return ofChar(TemporaryConstantPool.INSTANCE.intEntry(value)); } @@ -399,7 +582,7 @@ static OfConstant ofChar(char value) { * {@return an annotation element for a byte-valued element} * @param value the byte value */ - static OfConstant ofByte(IntegerEntry value) { + static OfByte ofByte(IntegerEntry value) { return new AnnotationImpl.OfByteImpl(value); } @@ -407,7 +590,7 @@ static OfConstant ofByte(IntegerEntry value) { * {@return an annotation element for a byte-valued element} * @param value the byte value */ - static OfConstant ofByte(byte value) { + static OfByte ofByte(byte value) { return ofByte(TemporaryConstantPool.INSTANCE.intEntry(value)); } @@ -415,7 +598,7 @@ static OfConstant ofByte(byte value) { * {@return an annotation element for a boolean-valued element} * @param value the boolean value */ - static OfConstant ofBoolean(IntegerEntry value) { + static OfBoolean ofBoolean(IntegerEntry value) { return new AnnotationImpl.OfBooleanImpl(value); } @@ -423,7 +606,7 @@ static OfConstant ofBoolean(IntegerEntry value) { * {@return an annotation element for a boolean-valued element} * @param value the boolean value */ - static OfConstant ofBoolean(boolean value) { + static OfBoolean ofBoolean(boolean value) { int i = value ? 1 : 0; return ofBoolean(TemporaryConstantPool.INSTANCE.intEntry(i)); } @@ -438,7 +621,7 @@ static OfAnnotation ofAnnotation(Annotation value) { /** * {@return an annotation element for an array-valued element} - * @param values the values + * @param values the array elements */ static OfArray ofArray(List&lt;AnnotationValue&gt; values) { return new AnnotationImpl.OfArrayImpl(values); @@ -446,7 +629,7 @@ static OfArray ofArray(List&lt;AnnotationValue&gt; values) { /** * {@return an annotation element for an array-valued element} - * @param values the values + * @param values the array elements */ static OfArray ofArray(AnnotationValue... values) { return ofArray(List.of(values)); --- a/src/java.base/share/classes/java/lang/classfile/constantpool/AnnotationConstantValueEntry.java +++ b/src/java.base/share/classes/java/lang/classfile/constantpool/AnnotationConstantValueEntry.java /** - * A constant pool entry that may be used as an annotation constant, - * which includes the four kinds of primitive constants, and UTF8 constants. + * A constant pool entry that may be used by annotation constant values, + * which includes the four kinds of primitive constants and UTF8 constants. + * These entries are also the only entries that do not refer to other + * constant pool entries. * + * @apiNote + * An annotation constant value entry alone is not sufficient to determine + * the annotation constant; for example, an {@link IntegerEntry} of {@code 1} + * can mean {@code true} in {@link AnnotationValue.OfBoolean} or {@code 1} + * in {@link AnnotationValue.OfInt}. + * + * @see AnnotationValue.OfConstant * @sealedGraph * @since 22 */ @@ -40,7 +50,8 @@ public sealed interface AnnotationConstantValueEntry extends PoolEntry /** * {@return the constant value} The constant value will be an {@link Integer}, - * {@link Long}, {@link Float}, {@link Double}, or {@link String}. + * {@link Long}, {@link Float}, {@link Double} for the primitive constants, + * or {@link String} for UTF8 constants. */ ConstantDesc constantValue(); } --- a/src/java.base/share/classes/java/lang/classfile/constantpool/ConstantPoolBuilder.java +++ b/src/java.base/share/classes/java/lang/classfile/constantpool/ConstantPoolBuilder.java @@ -510,25 +510,6 @@ default LoadableConstantEntry loadableConstantEntry(ConstantDesc c) { throw new IllegalArgumentException("Illegal type: " + (c == null ? null : c.getClass())); } - /** - * {@return An {@link AnnotationConstantValueEntry} describing the provided - * constant} The constant should be an Integer, String, Long, Float, - * Double, ClassDesc (for a Class constant), or MethodTypeDesc (for a MethodType - * constant.) - * - * @param c the constant - */ - default AnnotationConstantValueEntry annotationConstantValueEntry(ConstantDesc c) { - if (c instanceof Integer i) return intEntry(i); - if (c instanceof String s) return utf8Entry(s); - if (c instanceof Long l) return longEntry(l); - if (c instanceof Float f) return floatEntry(f); - if (c instanceof Double d) return doubleEntry(d); - if (c instanceof ClassDesc cd) return utf8Entry(cd); - if (c instanceof MethodTypeDesc mtd) return utf8Entry(mtd); - throw new IllegalArgumentException("Illegal type: " + (c == null ? null : c.getClass())); - } - /** * {@return a {@link BootstrapMethodEntry} describing the provided * bootstrap method and static arguments}</code></pre> </div> </div> </div></div><div id=dnd-metadata class="module toggle-wrap "><div id="dnd-metadata_heading" class="mod-header"><h3 class="toggle-header" id="dnd-metadata-label"><button class="aui-button toggle-title" aria-label="Attachments" aria-controls="dnd-metadata" aria-expanded="true"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><g fill="none" fill-rule="evenodd"><path d="M3.29175 4.793c-.389.392-.389 1.027 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955c.388-.392.388-1.027 0-1.419-.389-.392-1.018-.392-1.406 0l-2.298 2.317-2.307-2.327c-.194-.195-.449-.293-.703-.293-.255 0-.51.098-.703.293z" fill="#344563"/></g></svg><span class="aui-toggle-header-button-label">Attachments</span></button></h3><ul class="ops"></ul></div><div class="mod-content"><div id="dnd-metadata-webpanel" data-can-attach="false" data-project-type="software" data-upload-limit="52428800" data-thumbnails-allowed="true"></div></div></div><div id=linkingmodule class="module toggle-wrap m-link-module"><div id="linkingmodule_heading" class="mod-header"><h3 class="toggle-header" id="linkingmodule-label"><button class="aui-button toggle-title" aria-label="Issue Links" aria-controls="linkingmodule" aria-expanded="true"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><g fill="none" fill-rule="evenodd"><path d="M3.29175 4.793c-.389.392-.389 1.027 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955c.388-.392.388-1.027 0-1.419-.389-.392-1.018-.392-1.406 0l-2.298 2.317-2.307-2.327c-.194-.195-.449-.293-.703-.293-.255 0-.51.098-.703.293z" fill="#344563"/></g></svg><span class="aui-toggle-header-button-label">Issue Links</span></button></h3></div><div class="mod-content"> <div class="links-container" data-default-link-icon="/images/icons/generic_link_16.png"> <dl class="links-list "> <dt title="csr of">csr of</dt> <dd id="internal-5133723_10400" > <div class="link-content"> <p> <img src="/secure/viewavatar?size=xsmall&amp;avatarId=14707&amp;avatarType=issuetype" width="16" height="16" title="Enhancement - null" alt="Enhancement - null" /> <span title="JDK-8335927: Revisit AnnotationConstantValueEntry and AnnotationValue.OfConstant"> <a href="/browse/JDK-8335927" data-issue-key="JDK-8335927" class="issue-link link-title resolution">JDK-8335927</a> <span class="link-summary">Revisit AnnotationConstantValueEntry and AnnotationValue.OfConstant</span> </span> </p> <ul class="link-snapshot"> <li class="priority"> <img src="/images/jbsImages/p4.png" width="16" height="16" title="P4 - Minor loss of function, or other problem where easy workaround is present." alt="P4 - Minor loss of function, or other problem where easy workaround is present." /> </li> <li class="status"> <span class=" jira-issue-status-lozenge aui-lozenge jira-issue-status-lozenge-success jira-issue-status-lozenge-done aui-lozenge-subtle jira-issue-status-lozenge-max-width-short" data-tooltip="&lt;span class=&quot;jira-issue-status-tooltip-title&quot;&gt;Resolved&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;jira-issue-status-tooltip-desc&quot;&gt;A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.&lt;/span&gt;" title="&lt;span class=&quot;jira-issue-status-tooltip-title&quot;&gt;Resolved&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;jira-issue-status-tooltip-desc&quot;&gt;A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.&lt;/span&gt;" tabindex="0">Resolved</span> </li> </ul> </div> </dd> </dl> <dl class="links-list "> <dt title="relates to">relates to</dt> <dd id="internal-5132369_10003" > <div class="link-content"> <p> <img src="/secure/viewavatar?size=xsmall&amp;avatarId=14711&amp;avatarType=issuetype" width="16" height="16" title="JEP - Java Enhancement Proposal" alt="JEP - Java Enhancement Proposal" /> <span title="JDK-8334712: JEP 484: Class-File API"> <a href="/browse/JDK-8334712" data-issue-key="JDK-8334712" class="issue-link link-title">JDK-8334712</a> <span class="link-summary">JEP 484: Class-File API</span> </span> </p> <ul class="link-snapshot"> <li class="priority"> <img src="/images/jbsImages/p2.png" width="16" height="16" title="P2 - Crashes, loss of data, severe memory leak." alt="P2 - Crashes, loss of data, severe memory leak." /> </li> <li class="status"> <span class=" jira-issue-status-lozenge aui-lozenge jira-issue-status-lozenge-inprogress jira-issue-status-lozenge-indeterminate aui-lozenge-subtle jira-issue-status-lozenge-max-width-short" data-tooltip="&lt;span class=&quot;jira-issue-status-tooltip-title&quot;&gt;Completed&lt;/span&gt;" title="&lt;span class=&quot;jira-issue-status-tooltip-title&quot;&gt;Completed&lt;/span&gt;" tabindex="0">Completed</span> </li> </ul> </div> </dd> </dl> </div> </div><ul class="ops m-link-options"></ul></div><div id=activitymodule class="module toggle-wrap "><div id="activitymodule_heading" class="mod-header"><h3 class="toggle-header" id="activitymodule-label"><button class="aui-button toggle-title" aria-label="Activity" aria-controls="activitymodule" aria-expanded="true"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><g fill="none" fill-rule="evenodd"><path d="M3.29175 4.793c-.389.392-.389 1.027 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955c.388-.392.388-1.027 0-1.419-.389-.392-1.018-.392-1.406 0l-2.298 2.317-2.307-2.327c-.194-.195-.449-.293-.703-.293-.255 0-.51.098-.703.293z" fill="#344563"/></g></svg><span class="aui-toggle-header-button-label">Activity</span></button></h3><ul class="ops"></ul></div><div class="mod-content"> <div id="activity-panel-placeholder"></div> </div></div></div><div id="viewissuesidebar" class="aui-item issue-side-column"><div id=peoplemodule class="module toggle-wrap "><div id="peoplemodule_heading" class="mod-header"><h3 class="toggle-header" id="peoplemodule-label"><button class="aui-button toggle-title" aria-label="People" aria-controls="peoplemodule" aria-expanded="true"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><g fill="none" fill-rule="evenodd"><path d="M3.29175 4.793c-.389.392-.389 1.027 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955c.388-.392.388-1.027 0-1.419-.389-.392-1.018-.392-1.406 0l-2.298 2.317-2.307-2.327c-.194-.195-.449-.293-.703-.293-.255 0-.51.098-.703.293z" fill="#344563"/></g></svg><span class="aui-toggle-header-button-label">People</span></button></h3><ul class="ops"></ul></div><div class="mod-content"> <div class="item-details people-details" id="peopledetails"> <dl> <dt title="Assignee"> <label for="assignee-field">Assignee:</label> </dt> <dd> <span id="assignee-val" class="view-issue-field"> <span class="user-hover user-hover-replaced" id="issue_summary_assignee_liach" rel="liach"> <span class="aui-avatar aui-avatar-small"><span class="aui-avatar-inner"><img src="https://bugs.openjdk.org/secure/useravatar?size=small&amp;avatarId=10122" loading="lazy" alt="liach" /></span></span> Chen Liang <button class="aui-button aui-button-text user-hover-trigger" rel="liach" aria-label="Show user information" aria-haspopup="dialog"> <span class="aui-icon aui-icon-small aui-iconfont-info-filled user-hover-trigger-icon"></span> </button> </span> </span> </dd> </dl> <dl> <dt title="Reporter"> <label for="reporter-field">Reporter:</label> </dt> <dd> <span id="reporter-val" class="view-issue-field"> <span class="user-hover user-hover-replaced" id="issue_summary_reporter_liach" rel="liach"> <span class="aui-avatar aui-avatar-small"><span class="aui-avatar-inner"><img src="https://bugs.openjdk.org/secure/useravatar?size=small&amp;avatarId=10122" loading="lazy" alt="liach" /></span></span> Chen Liang <button class="aui-button aui-button-text user-hover-trigger" rel="liach" aria-label="Show user information" aria-haspopup="dialog"> <span class="aui-icon aui-icon-small aui-iconfont-info-filled user-hover-trigger-icon"></span> </button> </span> </span> </dd> </dl> <dl> <dt title="Reviewed By"> <label for="customfield_10802">Reviewed By:</label> </dt> <dd> <span id="customfield_10802-val" data-name="Reviewed By" data-fieldtype="multiuserpicker" data-fieldtypecompletekey="com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker"> <div class="shorten" id="customfield_10802-field"> <span class="tinylink"> <span class="user-hover" rel="asotona" id="multiuser_cf_asotona">Adam Sotona</span></span> </div> </span> </dd> </dl> </div> <div class="item-details"> <dl> <dt title="Votes">Votes:</dt> <dd> <aui-badge id="vote-data" class="">0</aui-badge> <span id="vote-label" title="You have to be logged in to vote for an issue.">Vote for this issue</span> </dd> </dl> <dl> <dt title="Watchers">Watchers:</dt> <dd> <aui-badge id="watcher-data" class="">2</aui-badge> <span id="watch-label" title="You have to be logged in to watch an issue.">Start watching this issue</span> </dd> </dl> </div> </div></div><div id=datesmodule class="module toggle-wrap "><div id="datesmodule_heading" class="mod-header"><h3 class="toggle-header" id="datesmodule-label"><button class="aui-button toggle-title" aria-label="Dates" aria-controls="datesmodule" aria-expanded="true"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><g fill="none" fill-rule="evenodd"><path d="M3.29175 4.793c-.389.392-.389 1.027 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955c.388-.392.388-1.027 0-1.419-.389-.392-1.018-.392-1.406 0l-2.298 2.317-2.307-2.327c-.194-.195-.449-.293-.703-.293-.255 0-.51.098-.703.293z" fill="#344563"/></g></svg><span class="aui-toggle-header-button-label">Dates</span></button></h3><ul class="ops"></ul></div><div class="mod-content"> <div class="item-details"> <dl class="dates"> <dt> Created: </dt> <dd class="date user-tz" title="2024-07-14 15:08" > <span data-name="Created" id="created-val" data-fieldtype="datetime" > <time class="livestamp" datetime="2024-07-14T15:08:38-0700">2024-07-14 15:08</time> </span> </dd> </dl> <dl class="dates"> <dt> Updated: </dt> <dd class="date user-tz" title="2024-08-12 21:22" > <span data-name="Updated" id="updated-val" data-fieldtype="datetime" > <time class="livestamp" datetime="2024-08-12T21:22:27-0700">2024-08-12 21:22</time> </span> </dd> </dl> <dl class="dates"> <dt> Resolved: </dt> <dd class="date user-tz" title="2024-08-12 21:22" > <span data-name="Resolved" id="resolutiondate-val" data-fieldtype="datetime" > <time class="livestamp" datetime="2024-08-12T21:22:27-0700">2024-08-12 21:22</time> </span> </dd> </dl> </div> </div></div></div></div></div></div></div></div></main></div></div></div><div class="issue-navigator-init"></div> </div> <footer id="footer" role="contentinfo"> <section class="footer-body"> <ul class="atlassian-footer"> <li> Atlassian Jira <a class="seo-link" rel="nofollow" href="https://www.atlassian.com/software/jira">Project Management Software</a> </li> <li> <a id="about-link" rel="nofollow" href="/secure/AboutPage.jspa/secure/AboutPage.jspa">About Jira</a> </li> <li> <a id="footer-report-problem-link" rel="nofollow" href="/secure/CreateIssue!default.jspa">Report a problem</a> </li> </ul> <p class="atlassian-footer"> <span class="licensemessage"> </span> </p> <div id="footer-logo"><a rel="nofollow" href="http://www.atlassian.com/">Atlassian</a></div> </section> <fieldset class="hidden parameters"> <input type="hidden" title="loggedInUser" value=""> <input type="hidden" title="ajaxTimeout" value="The call to the Jira server did not complete within the timeout period. We are unsure of the result of this operation."> <input type="hidden" title="JiraVersion" value="9.12.15" /> <input type="hidden" title="ajaxUnauthorised" value="You are not authorized to perform this operation. Please log in."> <input type="hidden" title="baseURL" value="https://bugs.openjdk.org" /> <input type="hidden" title="ajaxCommsError" value="The Jira server could not be contacted. This may be a temporary glitch or the server may be down. "> <input type="hidden" title="ajaxServerError" value="The Jira server was contacted but has returned an error response. We are unsure of the result of this operation."> <input type="hidden" title="ajaxErrorCloseDialog" value="Close this dialog and press refresh in your browser"> <input type="hidden" title="ajaxErrorDialogHeading" value="Communications Breakdown"> <input type="hidden" title="dirtyMessage" value="You have entered new data on this page. If you navigate away from this page without first saving your data, the changes will be lost."> <input type="hidden" title="dirtyDialogMessage" value="You have entered new data in this dialog. If you navigate away from this dialog without first saving your data, the changes will be lost. Click cancel to return to the dialog."> <input type="hidden" title="keyType" value="Type"> <input type="hidden" title="keyThen" value="then"> <input type="hidden" title="dblClickToExpand" value="Double click to expand"> <input type="hidden" title="actions" value="Actions"> <input type="hidden" title="removeItem" value="Remove"> <input type="hidden" title="workflow" value="Workflow"> <input type="hidden" title="labelNew" value="New Label"> <input type="hidden" title="issueActionsHint" value="Begin typing for available operations or press down to see all"> <input type="hidden" title="closelink" value="Close"> <input type="hidden" title="dotOperations" value="Operations"> <input type="hidden" title="dotLoading" value="Loading..."> <input type="hidden" title="frotherSuggestions" value="Suggestions"> <input type="hidden" title="frotherNomatches" value="No Matches"> <input type="hidden" title="multiselectVersionsError" value="{0} is not a valid version."> <input type="hidden" title="multiselectComponentsError" value="{0} is not a valid component."> <input type="hidden" title="multiselectGenericError" value="The value {0} is invalid."> </fieldset> </footer> </div> <script> window.WRM=window.WRM||{};window.WRM._unparsedData=window.WRM._unparsedData||{};window.WRM._unparsedErrors=window.WRM._unparsedErrors||{}; WRM._unparsedData["keyboardShortcutsUrl"]="\u0022/rest/api/1.0/shortcuts/9120015/22c348ccdbb8254dddbf8eedd97b546f/shortcuts?context=issuenavigation&context=issueaction\u0022"; if(window.WRM._dataArrived)window.WRM._dataArrived();</script> <script src="/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-gdi7pl/9120015/1xlxtdz/9c10c8a3d20c751f96a47d5566e02c11/_/download/contextbatch/js/jira.webresources:resource-phase-checkpoint-hit,-_super/batch.js" data-wrm-key="jira.webresources:resource-phase-checkpoint-hit,-_super" data-wrm-batch-type="context" data-initially-rendered defer></script> <form id="jira_request_timing_info" class="dont-default-focus" > <fieldset class="parameters hidden"> <input type="hidden" title="jira.request.start.millis" value="1732499399636" /> <input type="hidden" title="jira.request.server.time" value="1554" /> <input type="hidden" title="jira.request.id" value="109x16571063x5" /> <input type="hidden" title="jira.session.expiry.time" value="-" /> <input type="hidden" title="jira.session.expiry.in.mins" value="-" /> <input id="jiraConcurrentRequests" type="hidden" name="jira.request.concurrent.requests" value="2" /> <input type="hidden" title="db.reads.time.in.ms" value="23" /> <input type="hidden" title="db.conns.time.in.ms" value="42" /> </fieldset> </form> <!-- REQUEST ID : 109x16571063x5 REQUEST TIMESTAMP : [25/Nov/2024:01:49:59 +0000] REQUEST TIME : 1.5540 ASESSIONID : - CONCURRENT REQUESTS : 2 db.reads : OpSnapshot{name='db.reads', invocationCount=19, elapsedTotal=23588279, elapsedMin=681612, elapsedMax=2938581, resultSetSize=0, cpuTotal=0, cpuMin=0, cpuMax=0} db.conns : OpSnapshot{name='db.conns', invocationCount=25, elapsedTotal=42578430, elapsedMin=730094, elapsedMax=6301979, resultSetSize=0, cpuTotal=0, cpuMin=0, cpuMax=0} --> <script type="text/javascript" src="/I2wTZ5lPKOIe_1I8cA/7wr3LtNrX1zXwYam/SVJlcAkB/FBZZcS/xCMkg"></script></body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10